Esempio n. 1
0
def setup(on_startup):
    '''Setup mining service internal environment.
    You should not need to change this. If you
    want to use another Worker manager or Share manager,
    you should set proper reference to Interfaces class
    *before* you call setup() in the launcher script.'''

    from stratum import settings
    from interfaces import Interfaces

    # Let's wait until share manager and worker manager boot up
    (yield Interfaces.share_manager.on_load)
    (yield Interfaces.worker_manager.on_load)

    from lib.block_updater import BlockUpdater
    from lib.template_registry import TemplateRegistry
    from lib.bitcoin_rpc import BitcoinRPC
    from lib.block_template import BlockTemplate
    from lib.coinbaser import SimpleCoinbaser

    bitcoin_rpc = BitcoinRPC(settings.NOVACOIN_TRUSTED_HOST,
                             settings.NOVACOIN_TRUSTED_PORT,
                             settings.NOVACOIN_TRUSTED_USER,
                             settings.NOVACOIN_TRUSTED_PASSWORD)

    import stratum.logger
    log = stratum.logger.get_logger('mining')

    log.info('Waiting for novacoin RPC...')

    while True:
        try:
            result = (yield bitcoin_rpc.getblocktemplate())
            if isinstance(result, dict):
                log.info('Response from novacoin RPC OK')
                break
        except:
            time.sleep(1)

    coinbaser = SimpleCoinbaser(bitcoin_rpc, settings.CENTRAL_WALLET)
    (yield coinbaser.on_load)

    registry = TemplateRegistry(BlockTemplate,
                                coinbaser,
                                bitcoin_rpc,
                                settings.INSTANCE_ID,
                                MiningSubscription.on_template,
                                Interfaces.share_manager.on_network_block)

    # Template registry is the main interface between Stratum service
    # and pool core logic
    Interfaces.set_template_registry(registry)

    # Set up polling mechanism for detecting new block on the network
    # This is just failsafe solution when -blocknotify
    # mechanism is not working properly
    BlockUpdater(registry, bitcoin_rpc)

    log.info("MINING SERVICE IS READY")
    on_startup.callback(True)
Esempio n. 2
0
def setup(on_startup):
    '''Setup mining service internal environment.
    You should not need to change this. If you
    want to use another Worker manager or Share manager,
    you should set proper reference to Interfaces class
    *before* you call setup() in the launcher script.'''

    from stratum import settings

    # Get logging online as soon as possible
    import stratum.logger
    log = stratum.logger.get_logger('mining')

    from interfaces import Interfaces
    # Let's wait until share manager and worker manager boot up
    (yield Interfaces.share_manager.on_load)
    (yield Interfaces.worker_manager.on_load)

    from lib.block_updater import BlockUpdater
    from lib.template_registry import TemplateRegistry
    from lib.bitcoin_rpc import BitcoinRPC
    from lib.block_template import BlockTemplate
    from lib.coinbaser import SimpleCoinbaser

    bitcoin_rpc = BitcoinRPC(settings.BITCOIN_TRUSTED_HOST,
                             settings.BITCOIN_TRUSTED_PORT,
                             settings.BITCOIN_TRUSTED_USER,
                             settings.BITCOIN_TRUSTED_PASSWORD)

    # Check bitcoind
    # 	Check we can connect (sleep)
    # Check the results:
    #	- getblocktemplate is avalible	(Die if not)
    #	- we are not still downloading the blockchain	(Sleep)
    log.info("Connecting to bitcoind...")
    while True:
        try:
            result = (yield bitcoin_rpc.getblocktemplate())
            if isinstance(result, dict):
                if result['version'] == 2:
                    break
        except Exception, e:
            if isinstance(e[2], str):
                if isinstance(json.loads(e[2])['error']['message'], str):
                    error = json.loads(e[2])['error']['message']
                    if error == "Method not found":
                        log.error(
                            "Bitcoind does not support getblocktemplate!!! (time to upgrade.)"
                        )
                        reactor.stop()
                    elif error == "Bitcoin is downloading blocks...":
                        log.error(
                            "Bitcoind downloading blockchain... will check back in 30 sec"
                        )
                        time.sleep(29)
                    else:
                        log.error("Bitcoind Error: %s", error)
        time.sleep(1)  # If we didn't get a result or the connect failed
Esempio n. 3
0
def setup(on_startup):
    '''Setup mining service internal environment.
    You should not need to change this. If you
    want to use another Worker manager or Share manager,
    you should set proper reference to Interfaces class
    *before* you call setup() in the launcher script.'''

    from stratum import settings

    # Get logging online as soon as possible
    import stratum.logger
    log = stratum.logger.get_logger('mining')

    from interfaces import Interfaces    
    # Let's wait until share manager and worker manager boot up
    (yield Interfaces.share_manager.on_load)
    (yield Interfaces.worker_manager.on_load)
    
    from lib.block_updater import BlockUpdater
    from lib.template_registry import TemplateRegistry
    from lib.bitcoin_rpc import BitcoinRPC
    from lib.block_template import BlockTemplate
    from lib.coinbaser import SimpleCoinbaser
    
    bitcoin_rpc = BitcoinRPC(settings.BITCOIN_TRUSTED_HOST,
                             settings.BITCOIN_TRUSTED_PORT,
                             settings.BITCOIN_TRUSTED_USER,
                             settings.BITCOIN_TRUSTED_PASSWORD)
    
    # Check bitcoind
    # 	Check we can connect (sleep)
    # Check the results:
    #	- getblocktemplate is avalible	(Die if not)
    #	- we are not still downloading the blockchain	(Sleep)
    log.info("Connecting to bitcoind...")
    while True:
	try:
	    result = (yield bitcoin_rpc.getblocktemplate())
	    if isinstance(result, dict):
		if result['version'] == 2:
		    break
	except Exception, e:
	    if isinstance(e[2], str):
		if isinstance(json.loads(e[2])['error']['message'],str):
		    error = json.loads(e[2])['error']['message']
		    if error == "Method not found":
			log.error("Bitcoind does not support getblocktemplate!!! (time to upgrade.)")
			reactor.stop()
		    elif error == "Bitcoin is downloading blocks...":
			log.error("Bitcoind downloading blockchain... will check back in 30 sec")
			time.sleep(29)
		    else:
			log.error("Bitcoind Error: %s", error)
	time.sleep(1)		# If we didn't get a result or the connect failed
Esempio n. 4
0
def setup(on_startup):
    '''Setup mining service internal environment.
    You should not need to change this. If you
    want to use another Worker manager or Share manager,
    you should set proper reference to Interfaces class
    *before* you call setup() in the launcher script.'''

    from stratum import settings
    from interfaces import Interfaces

    # Let's wait until share manager and worker manager boot up
    (yield Interfaces.share_manager.on_load)
    (yield Interfaces.worker_manager.on_load)

    from lib.block_updater import BlockUpdater
    from lib.template_registry import TemplateRegistry
    from lib.bitcoin_rpc import BitcoinRPC
    from lib.block_template import BlockTemplate
    from lib.coinbaser import SimpleCoinbaser

    bitcoin_rpc = BitcoinRPC(settings.BITCOIN_TRUSTED_HOST,
                             settings.BITCOIN_TRUSTED_PORT,
                             settings.BITCOIN_TRUSTED_USER,
                             settings.BITCOIN_TRUSTED_PASSWORD)

    import stratum.logger
    log = stratum.logger.get_logger('mining')

    log.info('Waiting for bitcoin RPC...')

    while True:
        try:
            result = (yield bitcoin_rpc.getblocktemplate())
            if isinstance(result, dict):
                log.info('Response from bitcoin RPC OK')
                break
        except Exception, e:
            log.info(str(e))
            time.sleep(1)
Esempio n. 5
0
def setup(on_startup):
    '''Setup mining service internal environment.
    You should not need to change this. If you
    want to use another Worker manager or Share manager,
    you should set proper reference to Interfaces class
    *before* you call setup() in the launcher script.'''

    import lib.settings as settings

    # Get logging online as soon as possible
    import lib.logger
    log = lib.logger.get_logger('mining')

    from interfaces import Interfaces

    from lib.block_updater import BlockUpdater
    from lib.template_registry import TemplateRegistry
    from lib.bitcoin_rpc import BitcoinRPC
    from lib.block_template import BlockTemplate
    from lib.coinbaser import SimpleCoinbaser

    bitcoin_rpc = BitcoinRPC(settings.DAEMON_TRUSTED_HOST,
                             settings.DAEMON_TRUSTED_PORT,
                             settings.DAEMON_TRUSTED_USER,
                             settings.DAEMON_TRUSTED_PASSWORD)

    log.info("Connecting to RPC...")

    while True:
        try:
            log.info('Waiting for RPC...')
            result = (yield bitcoin_rpc.getblocktemplate())
            if isinstance(result, dict):
                break
        except:
            time.sleep(1)

    log.info('Connected to RPC - Ready to GO!')

    # Start the coinbaser
    coinbaser = SimpleCoinbaser(bitcoin_rpc, getattr(settings,
                                                     'CENTRAL_WALLET'))
    (yield coinbaser.on_load)

    registry = TemplateRegistry(BlockTemplate, coinbaser, bitcoin_rpc,
                                getattr(settings, 'INSTANCE_ID'),
                                MiningSubscription.on_template,
                                Interfaces.share_manager.on_network_block)

    # Template registry is the main interface between Stratum service
    # and pool core logic
    Interfaces.set_template_registry(registry)

    # Set up polling mechanism for detecting new block on the network
    # This is just failsafe solution when -blocknotify
    # mechanism is not working properly
    BlockUpdater(registry, bitcoin_rpc)

    prune_thr = threading.Thread(target=WorkLogPruner,
                                 args=(Interfaces.worker_manager.job_log, ))
    prune_thr.daemon = True
    prune_thr.start()

    log.info("MINING SERVICE IS READY")
    on_startup.callback(True)