diff --git a/Dockerfile b/Dockerfile index f1aba7c..e5a8581 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,4 +29,4 @@ VOLUME /coindata COPY ./docker/entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] -CMD ["basicswap-run", "-datadir=/coindata/basicswap"] +CMD ["basicswap-run", "-datadir=/coindata"] diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index a88271c..a5e6c74 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -530,6 +530,7 @@ class BasicSwap(BaseApp): 'connection_type': connection_type, 'bindir': bindir, 'datadir': datadir, + 'rpchost': chain_client_settings.get('rpchost', '127.0.0.1'), 'rpcport': chain_client_settings.get('rpcport', chainparams[coin][self.chain]['rpcport']), 'rpcauth': rpcauth, 'blocks_confirmed': chain_client_settings.get('blocks_confirmed', 6), @@ -543,6 +544,7 @@ class BasicSwap(BaseApp): 'core_version': None, 'explorers': [], 'chain_lookups': chain_client_settings.get('chain_lookups', 'local'), + 'restore_height': chain_client_settings.get('restore_height', 0), } if self.coin_clients[coin]['connection_type'] == 'rpc': diff --git a/basicswap/interface_xmr.py b/basicswap/interface_xmr.py index 27039e3..f1e0c74 100644 --- a/basicswap/interface_xmr.py +++ b/basicswap/interface_xmr.py @@ -55,13 +55,14 @@ class XMRInterface(CoinInterface): def __init__(self, coin_settings, network): super().__init__() - rpc_cb = make_xmr_rpc_func(coin_settings['rpcport']) + rpc_cb = make_xmr_rpc_func(coin_settings['rpcport'], host=coin_settings['rpchost']) rpc_wallet_cb = make_xmr_wallet_rpc_func(coin_settings['walletrpcport'], coin_settings['walletrpcauth']) self.rpc_cb = rpc_cb self.rpc_wallet_cb = rpc_wallet_cb self._network = network self.blocks_confirmed = coin_settings['blocks_confirmed'] + self._restore_height = coin_settings['restore_height'] def setWalletFilename(self, wallet_filename): self._wallet_filename = wallet_filename @@ -74,13 +75,6 @@ class XMRInterface(CoinInterface): except Exception as e: pass - try: - if restore_height is None: - restore_height = self.getChainHeight() - except Exception as e: - logging.warning('Unable to get restore_height, set to zero. Error: {}'.format(str(e))) - restore_height = 0 - Kbv = self.getPubkey(key_view) Kbs = self.getPubkey(key_spend) address_b58 = xmr_util.encode_address(Kbv, Kbs) @@ -90,7 +84,7 @@ class XMRInterface(CoinInterface): 'address': address_b58, 'viewkey': b2h(key_view[::-1]), 'spendkey': b2h(key_spend[::-1]), - 'restore_height': restore_height, + 'restore_height': self._restore_height, } rv = self.rpc_wallet_cb('generate_from_keys', params) logging.info('generate_from_keys %s', dumpj(rv)) diff --git a/basicswap/rpc_xmr.py b/basicswap/rpc_xmr.py index 199b42e..e427daa 100644 --- a/basicswap/rpc_xmr.py +++ b/basicswap/rpc_xmr.py @@ -28,9 +28,9 @@ def callrpc_xmr(rpc_port, auth, method, params=[], path='json_rpc'): return r['result'] -def callrpc_xmr_na(rpc_port, method, params=[], path='json_rpc'): +def callrpc_xmr_na(rpc_port, method, params=[], rpc_host='127.0.0.1', path='json_rpc'): try: - url = 'http://127.0.0.1:{}/{}'.format(rpc_port, path) + url = 'http://{}:{}/{}'.format(rpc_host, rpc_port, path) request_body = { 'method': method, 'params': params, @@ -65,12 +65,14 @@ def callrpc_xmr2(rpc_port, method, params=[]): return r -def make_xmr_rpc_func(port): +def make_xmr_rpc_func(port, host='127.0.0.1'): port = port + host = host def rpc_func(method, params=None, wallet=None): nonlocal port - return callrpc_xmr_na(port, method, params) + nonlocal host + return callrpc_xmr_na(port, method, params, rpc_host=host) return rpc_func diff --git a/bin/basicswap_prepare.py b/bin/basicswap_prepare.py index ae7a6ca..fa37626 100755 --- a/bin/basicswap_prepare.py +++ b/bin/basicswap_prepare.py @@ -56,12 +56,14 @@ if not len(logger.handlers): logger.addHandler(logging.StreamHandler(sys.stdout)) XMR_RPC_HOST = os.getenv('XMR_RPC_HOST', 'localhost') -BASE_XMR_RPC_PORT = os.getenv('BASE_XMR_RPC_PORT', 29798) -BASE_XMR_ZMQ_PORT = os.getenv('BASE_XMR_ZMQ_PORT', 30898) -BASE_XMR_WALLET_PORT = os.getenv('BASE_XMR_WALLET_PORT', 29998) +BASE_XMR_RPC_PORT = int(os.getenv('BASE_XMR_RPC_PORT', 29798)) +BASE_XMR_ZMQ_PORT = int(os.getenv('BASE_XMR_ZMQ_PORT', 30898)) +BASE_XMR_WALLET_PORT = int(os.getenv('BASE_XMR_WALLET_PORT', 29998)) XMR_WALLET_RPC_USER = os.getenv('XMR_WALLET_RPC_USER', 'xmr_wallet_user') XMR_WALLET_RPC_PWD = os.getenv('XMR_WALLET_RPC_PWD', 'xmr_wallet_pwd') +DEFAULT_XMR_RESTORE_HEIGHT = 2245107 + def make_reporthook(): read = 0 # Number of bytes read so far @@ -353,6 +355,9 @@ def printHelp(): logger.info('--disablecoin= Make coin inactive.') logger.info('--preparebinonly Don\'t prepare settings or datadirs.') logger.info('--portoffset=n Raise all ports by n.') + logger.info('--htmlhost= Interface to host on, default:localhost.') + logger.info('--xmrrestoreheight=n Block height to restore Monero wallet from, default:{}.'.format(DEFAULT_XMR_RESTORE_HEIGHT)) + logger.info('\n' + 'Known coins: %s', ', '.join(known_coins.keys())) @@ -386,6 +391,8 @@ def main(): with_coins = {'particl', 'litecoin'} add_coin = '' disable_coin = '' + htmlhost = 'localhost' + xmr_restore_height = DEFAULT_XMR_RESTORE_HEIGHT for v in sys.argv[1:]: if len(v) < 2 or v[0] != '-': @@ -415,7 +422,6 @@ def main(): if name == 'preparebinonly': prepare_bin_only = True continue - if len(s) == 2: if name == 'datadir': data_dir = os.path.expanduser(s[1].strip('"')) @@ -454,6 +460,12 @@ def main(): exitWithError('Unknown coin {}'.format(s[1])) disable_coin = s[1] continue + if name == 'htmlhost': + htmlhost = s[1].strip('"') + continue + if name == 'xmrrestoreheight': + xmr_restore_height = int(s[1]) + continue exitWithError('Unknown argument {}'.format(v)) @@ -525,7 +537,7 @@ def main(): }, 'monero': { 'connection_type': 'rpc' if 'monero' in with_coins else 'none', - 'manage_daemon': True if 'monero' in with_coins else False, + 'manage_daemon': True if ('monero' in with_coins and XMR_RPC_HOST == 'localhost') else False, 'manage_wallet_daemon': True if 'monero' in with_coins else False, 'rpcport': BASE_XMR_RPC_PORT + port_offset, 'zmqport': BASE_XMR_ZMQ_PORT + port_offset, @@ -536,6 +548,7 @@ def main(): 'walletfile': 'swap_wallet', 'datadir': os.path.join(data_dir, 'monero'), 'bindir': os.path.join(bin_dir, 'monero'), + 'restore_height': xmr_restore_height, } } @@ -603,7 +616,7 @@ def main(): 'debug': True, 'zmqhost': 'tcp://127.0.0.1', 'zmqport': 20792 + port_offset, - 'htmlhost': 'localhost', + 'htmlhost': htmlhost, 'htmlport': 12700 + port_offset, 'network_key': '7sW2UEcHXvuqEjkpE5mD584zRaQYs6WXYohue4jLFZPTvMSxwvgs', 'network_pubkey': '035758c4a22d7dd59165db02a56156e790224361eb3191f02197addcb3bde903d2', diff --git a/docker/.env b/docker/.env index 5229854..74e93e3 100644 --- a/docker/.env +++ b/docker/.env @@ -1,2 +1,2 @@ HTML_PORT=127.0.0.1:12700:12700 -COINDATA_PATH=/var/data/basicswap +#COINDATA_PATH=/var/data/basicswap