From 91ffa6cb6c165fa26ae5e1d2881cb1c9792dd094 Mon Sep 17 00:00:00 2001 From: chris-belcher Date: Mon, 23 Apr 2018 20:39:45 +0100 Subject: [PATCH] Add support for core's multiwallet feature --- jmclient/jmclient/configure.py | 19 +++++++++---------- jmclient/jmclient/jsonrpc.py | 9 ++++++--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/jmclient/jmclient/configure.py b/jmclient/jmclient/configure.py index 516a8a9..fefb317 100644 --- a/jmclient/jmclient/configure.py +++ b/jmclient/jmclient/configure.py @@ -117,6 +117,7 @@ rpc_host = localhost rpc_port = 8332 rpc_user = bitcoin rpc_password = password +rpc_wallet_file = [MESSAGING] host = irc.cyberguerrilla.org, agora.anarplex.net @@ -395,19 +396,17 @@ def get_blockchain_interface_instance(_config): source = _config.get("BLOCKCHAIN", "blockchain_source") network = get_network() testnet = network == 'testnet' - if source == 'bitcoin-rpc': #pragma: no cover - #This cannot be tested without mainnet or testnet blockchain (not regtest) + if source in ('bitcoin-rpc', 'regtest'): rpc_host = _config.get("BLOCKCHAIN", "rpc_host") rpc_port = _config.get("BLOCKCHAIN", "rpc_port") rpc_user, rpc_password = get_bitcoin_rpc_credentials(_config) - rpc = JsonRpc(rpc_host, rpc_port, rpc_user, rpc_password) - bc_interface = BitcoinCoreInterface(rpc, network) - elif source == 'regtest': - rpc_host = _config.get("BLOCKCHAIN", "rpc_host") - rpc_port = _config.get("BLOCKCHAIN", "rpc_port") - rpc_user, rpc_password = get_bitcoin_rpc_credentials(_config) - rpc = JsonRpc(rpc_host, rpc_port, rpc_user, rpc_password) - bc_interface = RegtestBitcoinCoreInterface(rpc) + rpc_wallet_file = _config.get("BLOCKCHAIN", "rpc_wallet_file") + rpc = JsonRpc(rpc_host, rpc_port, rpc_user, rpc_password, + rpc_wallet_file) + if source == 'bitcoin-rpc': #pragma: no cover + bc_interface = BitcoinCoreInterface(rpc, network) + else: + bc_interface = RegtestBitcoinCoreInterface(rpc) elif source == 'electrum': bc_interface = ElectrumWalletInterface(testnet) elif source == 'electrum-server': diff --git a/jmclient/jmclient/jsonrpc.py b/jmclient/jmclient/jsonrpc.py index 9575a4e..f504be9 100644 --- a/jmclient/jmclient/jsonrpc.py +++ b/jmclient/jmclient/jsonrpc.py @@ -51,12 +51,15 @@ class JsonRpc(object): to connect to Bitcoin. """ - def __init__(self, host, port, user, password): + def __init__(self, host, port, user, password, wallet_file=""): self.host = host self.port = port self.conn = httplib.HTTPConnection(self.host, self.port) self.authstr = "%s:%s" % (user, password) - + if len(wallet_file) > 0: + self.url = "/wallet/" + wallet_file + else: + self.url = "" self.queryId = 1 def queryHTTP(self, obj): @@ -76,7 +79,7 @@ class JsonRpc(object): while True: try: - self.conn.request("POST", "", body, headers) + self.conn.request("POST", self.url, body, headers) response = self.conn.getresponse() if response.status == 401: