Add settings for Monero rpc timeouts.
This commit is contained in:
		
							parent
							
								
									f9bc5d46af
								
							
						
					
					
						commit
						1bfb271b87
					
				@ -278,6 +278,8 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
        self.min_sequence_lock_seconds = self.settings.get('min_sequence_lock_seconds', 60 if self.debug else (1 * 60 * 60))
 | 
					        self.min_sequence_lock_seconds = self.settings.get('min_sequence_lock_seconds', 60 if self.debug else (1 * 60 * 60))
 | 
				
			||||||
        self.max_sequence_lock_seconds = self.settings.get('max_sequence_lock_seconds', 96 * 60 * 60)
 | 
					        self.max_sequence_lock_seconds = self.settings.get('max_sequence_lock_seconds', 96 * 60 * 60)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._wallet_update_timeout = self.settings.get('wallet_update_timeout', 10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._restrict_unknown_seed_wallets = self.settings.get('restrict_unknown_seed_wallets', True)
 | 
					        self._restrict_unknown_seed_wallets = self.settings.get('restrict_unknown_seed_wallets', True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._bid_expired_leeway = 5
 | 
					        self._bid_expired_leeway = 5
 | 
				
			||||||
@ -492,6 +494,10 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if self.coin_clients[coin]['connection_type'] == 'rpc':
 | 
					        if self.coin_clients[coin]['connection_type'] == 'rpc':
 | 
				
			||||||
            if coin == Coins.XMR:
 | 
					            if coin == Coins.XMR:
 | 
				
			||||||
 | 
					                self.coin_clients[coin]['rpctimeout'] = chain_client_settings.get('rpctimeout', 60)
 | 
				
			||||||
 | 
					                self.coin_clients[coin]['walletrpctimeout'] = chain_client_settings.get('walletrpctimeout', 120)
 | 
				
			||||||
 | 
					                self.coin_clients[coin]['walletrpctimeoutlong'] = chain_client_settings.get('walletrpctimeoutlong', 600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if chain_client_settings.get('automatically_select_daemon', False):
 | 
					                if chain_client_settings.get('automatically_select_daemon', False):
 | 
				
			||||||
                    self.selectXMRRemoteDaemon(coin)
 | 
					                    self.selectXMRRemoteDaemon(coin)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -513,6 +519,7 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
        coin_settings = self.coin_clients[coin]
 | 
					        coin_settings = self.coin_clients[coin]
 | 
				
			||||||
        rpchost: str = coin_settings['rpchost']
 | 
					        rpchost: str = coin_settings['rpchost']
 | 
				
			||||||
        rpcport: int = coin_settings['rpcport']
 | 
					        rpcport: int = coin_settings['rpcport']
 | 
				
			||||||
 | 
					        timeout: int = coin_settings['rpctimeout']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        proxy_host: str = self.tor_proxy_host if self.use_tor_proxy else None
 | 
					        proxy_host: str = self.tor_proxy_host if self.use_tor_proxy else None
 | 
				
			||||||
        proxy_port: int = self.tor_proxy_port if self.use_tor_proxy else None
 | 
					        proxy_port: int = self.tor_proxy_port if self.use_tor_proxy else None
 | 
				
			||||||
@ -527,7 +534,7 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
            self.log.info(f'Trying last used url {rpchost}:{rpcport}.')
 | 
					            self.log.info(f'Trying last used url {rpchost}:{rpcport}.')
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                rpc2 = make_xmr_rpc2_func(rpcport, daemon_login, rpchost, proxy_host=proxy_host, proxy_port=proxy_port)
 | 
					                rpc2 = make_xmr_rpc2_func(rpcport, daemon_login, rpchost, proxy_host=proxy_host, proxy_port=proxy_port)
 | 
				
			||||||
                test = rpc2('get_height', timeout=20)['height']
 | 
					                test = rpc2('get_height', timeout=timeout)['height']
 | 
				
			||||||
                return True
 | 
					                return True
 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                self.log.warning(f'Failed to set XMR remote daemon to {rpchost}:{rpcport}, {e}')
 | 
					                self.log.warning(f'Failed to set XMR remote daemon to {rpchost}:{rpcport}, {e}')
 | 
				
			||||||
@ -537,7 +544,7 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
            try:
 | 
					            try:
 | 
				
			||||||
                rpchost, rpcport = url.rsplit(':', 1)
 | 
					                rpchost, rpcport = url.rsplit(':', 1)
 | 
				
			||||||
                rpc2 = make_xmr_rpc2_func(rpcport, daemon_login, rpchost, proxy_host=proxy_host, proxy_port=proxy_port)
 | 
					                rpc2 = make_xmr_rpc2_func(rpcport, daemon_login, rpchost, proxy_host=proxy_host, proxy_port=proxy_port)
 | 
				
			||||||
                test = rpc2('get_height', timeout=20)['height']
 | 
					                test = rpc2('get_height', timeout=timeout)['height']
 | 
				
			||||||
                coin_settings['rpchost'] = rpchost
 | 
					                coin_settings['rpchost'] = rpchost
 | 
				
			||||||
                coin_settings['rpcport'] = rpcport
 | 
					                coin_settings['rpcport'] = rpcport
 | 
				
			||||||
                data = {
 | 
					                data = {
 | 
				
			||||||
@ -6622,7 +6629,7 @@ class BasicSwap(BaseApp):
 | 
				
			|||||||
                handle = self.thread_pool.submit(self.updateWalletInfo, c)
 | 
					                handle = self.thread_pool.submit(self.updateWalletInfo, c)
 | 
				
			||||||
                if wait_for_complete:
 | 
					                if wait_for_complete:
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        handle.result(timeout=10)
 | 
					                        handle.result(timeout=self._wallet_update_timeout)
 | 
				
			||||||
                    except Exception as e:
 | 
					                    except Exception as e:
 | 
				
			||||||
                        self.log.error(f'updateWalletInfo {e}')
 | 
					                        self.log.error(f'updateWalletInfo {e}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -110,9 +110,13 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
            elif manage_daemon is False:
 | 
					            elif manage_daemon is False:
 | 
				
			||||||
                self._log.info(f'Connecting to remote {self.coin_name()} daemon at {rpchost}.')
 | 
					                self._log.info(f'Connecting to remote {self.coin_name()} daemon at {rpchost}.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.rpc = make_xmr_rpc_func(coin_settings['rpcport'], daemon_login, host=rpchost, proxy_host=proxy_host, proxy_port=proxy_port)
 | 
					        self._rpctimeout = coin_settings.get('rpctimeout', 60)
 | 
				
			||||||
        self.rpc2 = make_xmr_rpc2_func(coin_settings['rpcport'], daemon_login, host=rpchost, proxy_host=proxy_host, proxy_port=proxy_port)  # non-json endpoint
 | 
					        self._walletrpctimeout = coin_settings.get('walletrpctimeout', 120)
 | 
				
			||||||
        self.rpc_wallet = make_xmr_rpc_func(coin_settings['walletrpcport'], coin_settings['walletrpcauth'], host=coin_settings.get('walletrpchost', '127.0.0.1'))
 | 
					        self._walletrpctimeoutlong = coin_settings.get('walletrpctimeoutlong', 600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.rpc = make_xmr_rpc_func(coin_settings['rpcport'], daemon_login, host=rpchost, proxy_host=proxy_host, proxy_port=proxy_port, default_timeout=self._rpctimeout)
 | 
				
			||||||
 | 
					        self.rpc2 = make_xmr_rpc2_func(coin_settings['rpcport'], daemon_login, host=rpchost, proxy_host=proxy_host, proxy_port=proxy_port, default_timeout=self._rpctimeout)  # non-json endpoint
 | 
				
			||||||
 | 
					        self.rpc_wallet = make_xmr_rpc_func(coin_settings['walletrpcport'], coin_settings['walletrpcauth'], host=coin_settings.get('walletrpchost', '127.0.0.1'), default_timeout=self._walletrpctimeout)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def checkWallets(self) -> int:
 | 
					    def checkWallets(self) -> int:
 | 
				
			||||||
        return 1
 | 
					        return 1
 | 
				
			||||||
@ -176,7 +180,7 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
        return self.rpc_wallet('get_version')['version']
 | 
					        return self.rpc_wallet('get_version')['version']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getBlockchainInfo(self):
 | 
					    def getBlockchainInfo(self):
 | 
				
			||||||
        get_height = self.rpc2('get_height', timeout=30)
 | 
					        get_height = self.rpc2('get_height', timeout=self._rpctimeout)
 | 
				
			||||||
        rv = {
 | 
					        rv = {
 | 
				
			||||||
            'blocks': get_height['height'],
 | 
					            'blocks': get_height['height'],
 | 
				
			||||||
            'verificationprogress': 0.0,
 | 
					            'verificationprogress': 0.0,
 | 
				
			||||||
@ -187,7 +191,7 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
            # get_block_count returns "Internal error" if bootstrap-daemon is active
 | 
					            # get_block_count returns "Internal error" if bootstrap-daemon is active
 | 
				
			||||||
            if get_height['untrusted'] is True:
 | 
					            if get_height['untrusted'] is True:
 | 
				
			||||||
                rv['bootstrapping'] = True
 | 
					                rv['bootstrapping'] = True
 | 
				
			||||||
                get_info = self.rpc2('get_info', timeout=30)
 | 
					                get_info = self.rpc2('get_info', timeout=self._rpctimeout)
 | 
				
			||||||
                if 'height_without_bootstrap' in get_info:
 | 
					                if 'height_without_bootstrap' in get_info:
 | 
				
			||||||
                    rv['blocks'] = get_info['height_without_bootstrap']
 | 
					                    rv['blocks'] = get_info['height_without_bootstrap']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -195,7 +199,7 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
                if rv['known_block_count'] > rv['blocks']:
 | 
					                if rv['known_block_count'] > rv['blocks']:
 | 
				
			||||||
                    rv['verificationprogress'] = rv['blocks'] / rv['known_block_count']
 | 
					                    rv['verificationprogress'] = rv['blocks'] / rv['known_block_count']
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                rv['known_block_count'] = self.rpc('get_block_count', timeout=30)['count']
 | 
					                rv['known_block_count'] = self.rpc('get_block_count', timeout=self._rpctimeout)['count']
 | 
				
			||||||
                rv['verificationprogress'] = rv['blocks'] / rv['known_block_count']
 | 
					                rv['verificationprogress'] = rv['blocks'] / rv['known_block_count']
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            self._log.warning('XMR get_block_count failed with: %s', str(e))
 | 
					            self._log.warning('XMR get_block_count failed with: %s', str(e))
 | 
				
			||||||
@ -204,7 +208,7 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
        return rv
 | 
					        return rv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getChainHeight(self):
 | 
					    def getChainHeight(self):
 | 
				
			||||||
        return self.rpc2('get_height', timeout=30)['height']
 | 
					        return self.rpc2('get_height', timeout=self._rpctimeout)['height']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getWalletInfo(self):
 | 
					    def getWalletInfo(self):
 | 
				
			||||||
        with self._mx_wallet:
 | 
					        with self._mx_wallet:
 | 
				
			||||||
@ -347,7 +351,7 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
                self.createWallet(params)
 | 
					                self.createWallet(params)
 | 
				
			||||||
                self.openWallet(address_b58)
 | 
					                self.openWallet(address_b58)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.rpc_wallet('refresh', timeout=600)
 | 
					            self.rpc_wallet('refresh', timeout=self._walletrpctimeoutlong)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            '''
 | 
					            '''
 | 
				
			||||||
            # Debug
 | 
					            # Debug
 | 
				
			||||||
@ -382,10 +386,10 @@ class XMRInterface(CoinInterface):
 | 
				
			|||||||
    def findTxnByHash(self, txid):
 | 
					    def findTxnByHash(self, txid):
 | 
				
			||||||
        with self._mx_wallet:
 | 
					        with self._mx_wallet:
 | 
				
			||||||
            self.openWallet(self._wallet_filename)
 | 
					            self.openWallet(self._wallet_filename)
 | 
				
			||||||
            self.rpc_wallet('refresh', timeout=600)
 | 
					            self.rpc_wallet('refresh', timeout=self._walletrpctimeoutlong)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                current_height = self.rpc2('get_height', timeout=30)['height']
 | 
					                current_height = self.rpc2('get_height', timeout=self._rpctimeout)['height']
 | 
				
			||||||
                self._log.info('findTxnByHash XMR current_height %d\nhash: %s', current_height, txid)
 | 
					                self._log.info('findTxnByHash XMR current_height %d\nhash: %s', current_height, txid)
 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                self._log.info('rpc failed %s', str(e))
 | 
					                self._log.info('rpc failed %s', str(e))
 | 
				
			||||||
 | 
				
			|||||||
@ -222,33 +222,35 @@ def callrpc_xmr2(rpc_port: int, method: str, params=None, auth=None, rpc_host='1
 | 
				
			|||||||
    return r
 | 
					    return r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def make_xmr_rpc2_func(port, auth, host='127.0.0.1', proxy_host=None, proxy_port=None):
 | 
					def make_xmr_rpc2_func(port, auth, host='127.0.0.1', proxy_host=None, proxy_port=None, default_timeout=120):
 | 
				
			||||||
    port = port
 | 
					    port = port
 | 
				
			||||||
    auth = auth
 | 
					    auth = auth
 | 
				
			||||||
    host = host
 | 
					    host = host
 | 
				
			||||||
    transport = None
 | 
					    transport = None
 | 
				
			||||||
 | 
					    default_timeout = default_timeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if proxy_host:
 | 
					    if proxy_host:
 | 
				
			||||||
        transport = SocksTransport()
 | 
					        transport = SocksTransport()
 | 
				
			||||||
        transport.set_proxy(proxy_host, proxy_port)
 | 
					        transport.set_proxy(proxy_host, proxy_port)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def rpc_func(method, params=None, wallet=None, timeout=120):
 | 
					    def rpc_func(method, params=None, wallet=None, timeout=default_timeout):
 | 
				
			||||||
        nonlocal port, auth, host, transport
 | 
					        nonlocal port, auth, host, transport
 | 
				
			||||||
        return callrpc_xmr2(port, method, params, auth=auth, rpc_host=host, timeout=timeout, transport=transport)
 | 
					        return callrpc_xmr2(port, method, params, auth=auth, rpc_host=host, timeout=timeout, transport=transport)
 | 
				
			||||||
    return rpc_func
 | 
					    return rpc_func
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def make_xmr_rpc_func(port, auth, host='127.0.0.1', proxy_host=None, proxy_port=None):
 | 
					def make_xmr_rpc_func(port, auth, host='127.0.0.1', proxy_host=None, proxy_port=None, default_timeout=120):
 | 
				
			||||||
    port = port
 | 
					    port = port
 | 
				
			||||||
    auth = auth
 | 
					    auth = auth
 | 
				
			||||||
    host = host
 | 
					    host = host
 | 
				
			||||||
    transport = None
 | 
					    transport = None
 | 
				
			||||||
 | 
					    default_timeout = default_timeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if proxy_host:
 | 
					    if proxy_host:
 | 
				
			||||||
        transport = SocksTransport()
 | 
					        transport = SocksTransport()
 | 
				
			||||||
        transport.set_proxy(proxy_host, proxy_port)
 | 
					        transport.set_proxy(proxy_host, proxy_port)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def rpc_func(method, params=None, wallet=None, timeout=120):
 | 
					    def rpc_func(method, params=None, wallet=None, timeout=default_timeout):
 | 
				
			||||||
        nonlocal port, auth, host, transport
 | 
					        nonlocal port, auth, host, transport
 | 
				
			||||||
        return callrpc_xmr(port, method, params, rpc_host=host, auth=auth, timeout=timeout, transport=transport)
 | 
					        return callrpc_xmr(port, method, params, rpc_host=host, auth=auth, timeout=timeout, transport=transport)
 | 
				
			||||||
    return rpc_func
 | 
					    return rpc_func
 | 
				
			||||||
 | 
				
			|||||||
@ -1456,7 +1456,7 @@ def main():
 | 
				
			|||||||
                logger.warning('Not automatically setting --usetorproxy as --notorproxy is set')
 | 
					                logger.warning('Not automatically setting --usetorproxy as --notorproxy is set')
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                use_tor_proxy = True
 | 
					                use_tor_proxy = True
 | 
				
			||||||
                logger.info(f'Automatically setting --usetorproxy')
 | 
					                logger.info('Automatically setting --usetorproxy')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setConnectionParameters(allow_set_tor=False)
 | 
					    setConnectionParameters(allow_set_tor=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1572,6 +1572,9 @@ def main():
 | 
				
			|||||||
            'bindir': os.path.join(bin_dir, 'monero'),
 | 
					            'bindir': os.path.join(bin_dir, 'monero'),
 | 
				
			||||||
            'restore_height': xmr_restore_height,
 | 
					            'restore_height': xmr_restore_height,
 | 
				
			||||||
            'blocks_confirmed': 3,
 | 
					            'blocks_confirmed': 3,
 | 
				
			||||||
 | 
					            'rpctimeout': 60,
 | 
				
			||||||
 | 
					            'walletrpctimeout': 120,
 | 
				
			||||||
 | 
					            'walletrpctimeoutlong': 600,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        'pivx': {
 | 
					        'pivx': {
 | 
				
			||||||
            'connection_type': 'rpc' if 'pivx' in with_coins else 'none',
 | 
					            'connection_type': 'rpc' if 'pivx' in with_coins else 'none',
 | 
				
			||||||
@ -1800,7 +1803,8 @@ def main():
 | 
				
			|||||||
            'max_delay_event': 50,  # Max delay in seconds before reacting to an event
 | 
					            'max_delay_event': 50,  # Max delay in seconds before reacting to an event
 | 
				
			||||||
            'check_progress_seconds': 60,
 | 
					            'check_progress_seconds': 60,
 | 
				
			||||||
            'check_watched_seconds': 60,
 | 
					            'check_watched_seconds': 60,
 | 
				
			||||||
            'check_expired_seconds': 60
 | 
					            'check_expired_seconds': 60,
 | 
				
			||||||
 | 
					            'wallet_update_timeout': 10,  # Seconds to wait for wallet page update
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if wshost != 'none':
 | 
					        if wshost != 'none':
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user