def main(): dataDir = None chain = 'mainnet' for v in sys.argv[1:]: if len(v) < 2 or v[0] != '-': print('Unknown argument', v) continue s = v.split('=') name = s[0].strip() for i in range(2): if name[0] == '-': name = name[1:] if name == 'v' or name == 'version': printVersion() return 0 if name == 'h' or name == 'help': printHelp() return 0 if name == 'testnet': chain = 'testnet' continue if name == 'regtest': chain = 'regtest' continue if len(s) == 2: if name == 'datadir': dataDir = os.path.expanduser(s[1]) continue print('Unknown argument', v) if dataDir is None: dataDir = os.path.join(os.path.expanduser('~/.particl'), ('' if chain == 'mainnet' else chain), 'stakepool') print('dataDir:', dataDir) if chain != 'mainnet': print('chain:', chain) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) print('Ctrl + c to exit.') if not os.path.exists(dataDir): os.makedirs(dataDir) with open(os.path.join(dataDir, 'stakepool.log'), 'w') as fp: logmt(fp, os.path.basename(sys.argv[0]) + ', version: ' + __version__ + '\n\n') runStakePool(fp, dataDir, chain) print('Done.') return stakePool.fail_code if stakePool is not None else 0
def runStakePool(fp, dataDir, chain): global stakePool settings_path = os.path.join(dataDir, 'stakepool.json') if not os.path.exists(settings_path): raise ValueError('Settings file not found: ' + str(settings_path)) with open(settings_path) as fs: settings = json.load(fs) stakePool = StakePool(fp, dataDir, settings, chain) stakePool.start() threads = [] if 'htmlhost' in settings: logmt( fp, 'Starting server at %s:%d.' % (settings['htmlhost'], settings['htmlport'])) allow_cors = settings[ 'allowcors'] if 'allowcors' in settings else ALLOW_CORS key_salt = settings[ 'management_key_salt'] if 'management_key_salt' in settings else None key_hash = settings[ 'management_key_hash'] if 'management_key_hash' in settings else None tS1 = HttpThread(fp, settings['htmlhost'], settings['htmlport'], allow_cors, stakePool, key_salt, key_hash) threads.append(tS1) tS1.start() try: r = callrpc(stakePool.rpc_port, stakePool.rpc_auth, 'getblockchaininfo') while r['blocks'] - stakePool.blockBuffer > stakePool.poolHeight and stakePool.is_running: stakePool.processBlock(stakePool.poolHeight + 1) except Exception as ex: traceback.print_exc() while stakePool.is_running: time.sleep(0.5) stakePool.checkBlocks() logmt(fp, 'Stopping threads.') for t in threads: t.stop() t.join()