def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) try: bitcoind.start() except Exception: bitcoind.stop() raise info = bitcoind.rpc.getnetworkinfo() if info['version'] < 160000: bitcoind.rpc.stop() raise ValueError("bitcoind is too old. At least version 16000 (v0.16.0)" " is needed, current version is {}".format(info['version'])) info = bitcoind.rpc.getblockchaininfo() # Make sure we have some spendable funds if info['blocks'] < 101: bitcoind.generate_block(101 - info['blocks']) elif bitcoind.rpc.getwalletinfo()['balance'] < 1: logging.debug("Insufficient balance, generating 1 block") bitcoind.generate_block(1) yield bitcoind try: bitcoind.rpc.stop() except Exception: bitcoind.proc.kill() bitcoind.proc.wait()
def __init__(self, bitcoin_dir, proxyport=0): BitcoinD.__init__(self, bitcoin_dir, rpcport=None) self.app = Flask("BitcoindProxy") self.app.add_url_rule("/", "API entrypoint", self.proxy, methods=['POST']) self.proxyport = proxyport self.mocks = {}
def start(self): d = PathInfoDispatcher({'/': self.app}) self.server = Server(('0.0.0.0', self.proxyport), d) self.proxy_thread = threading.Thread(target=self.server.start) self.proxy_thread.daemon = True self.proxy_thread.start() BitcoinD.start(self) # Now that bitcoind is running on the real rpcport, let's tell all # future callers to talk to the proxyport. We use the bind_addr as a # signal that the port is bound and accepting connections. while self.server.bind_addr[1] == 0: pass self.proxiedport = self.rpcport self.rpcport = self.server.bind_addr[1] logging.debug( "bitcoind reverse proxy listening on {}, forwarding to {}".format( self.rpcport, self.proxiedport))
def bitcoind(): btc = BitcoinD(bitcoin_dir=os.path.join(TEST_DIR, "bitcoind"), rpcport=28332) btc.start() info = btc.rpc.getinfo() # Make sure we have segwit and some funds if info['blocks'] < 432: logging.debug("SegWit not active, generating some more blocks") btc.rpc.generate(432 - info['blocks']) elif info['balance'] < 1: logging.debug("Insufficient balance, generating 1 block") btc.rpc.generate(1) yield btc try: btc.rpc.stop() except: btc.proc.kill() btc.proc.wait()
def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) bitcoind.startup() yield bitcoind bitcoind.cleanup()
def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) try: bitcoind.start() except Exception: bitcoind.stop() raise info = bitcoind.rpc.getnetworkinfo() if info['version'] < 2160000: bitcoind.rpc.stop() raise ValueError( "groestlcoind is too old. At least version 2160000 (v2.16.0)" " is needed, current version is {}".format(info['version'])) # Make sure we have some spendable funds bitcoind.generate_block(122) start_time = time.time() # 120 sec timeout local_timeout = 120 while (bitcoind.rpc.getblockchaininfo()['blocks'] < 121) and time.time() < start_time + local_timeout: bitcoind.generate_block(1) if bitcoind.rpc.getwalletinfo()['balance'] < 1: logging.debug("Insufficient balance") raise ValueError("groestlcoind error no funds from generate blocks") yield bitcoind try: bitcoind.rpc.stop() except Exception: bitcoind.proc.kill() bitcoind.proc.wait()
def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) bitcoind.startup() bitcoind.rpc.createwallet("revaultd-tests", False, False, "", True) while bitcoind.rpc.getbalance() < 50: bitcoind.rpc.generatetoaddress(1, bitcoind.rpc.getnewaddress()) yield bitcoind bitcoind.cleanup()
def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) bitcoind.startup() bitcoind.rpc.createwallet(bitcoind.rpc.wallet_name, False, False, "", True) while bitcoind.rpc.getbalance() < 50: bitcoind.rpc.generatetoaddress(1, bitcoind.rpc.getnewaddress()) while bitcoind.rpc.getblockcount() <= 1: time.sleep(0.1) yield bitcoind bitcoind.cleanup()
def stop(self): BitcoinD.stop(self) self.server.stop() self.proxy_thread.join()
def bitcoind(directory): bitcoind = BitcoinD(bitcoin_dir=directory) try: bitcoind.start() except Exception: bitcoind.stop() raise info = bitcoind.rpc.getnetworkinfo() if info['version'] < 160000: bitcoind.rpc.stop() raise ValueError("bitcoind is too old. At least version 16000 (v0.16.0)" " is needed, current version is {}".format(info['version'])) info = bitcoind.rpc.getblockchaininfo() # Make sure we have some spendable funds if info['blocks'] < 101: bitcoind.generate_block(101 - info['blocks']) elif bitcoind.rpc.getwalletinfo()['balance'] < 1: logging.debug("Insufficient balance, generating 1 block") bitcoind.generate_block(1) yield bitcoind try: bitcoind.stop() except Exception: bitcoind.proc.kill() bitcoind.proc.wait()