From f62a4ce5a994fff2c1762771c248fb2c65b8d240 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 25 Mar 2023 11:49:40 +0000 Subject: [PATCH] proto.xmr: disable version check for restricted (public) nodes --- mmgen/data/version | 2 +- mmgen/proto/xmr/daemon.py | 7 ++++++- mmgen/proto/xmr/rpc.py | 23 ++++++++++++++--------- test/test_py_d/ts_xmrwallet.py | 21 +++++++++++++++------ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/mmgen/data/version b/mmgen/data/version index 97179a09..19046775 100644 --- a/mmgen/data/version +++ b/mmgen/data/version @@ -1 +1 @@ -13.3.dev38 +13.3.dev39 diff --git a/mmgen/proto/xmr/daemon.py b/mmgen/proto/xmr/daemon.py index 2b704361..2877726f 100755 --- a/mmgen/proto/xmr/daemon.py +++ b/mmgen/proto/xmr/daemon.py @@ -72,7 +72,12 @@ class monero_daemon(CoinDaemon): @property def stop_cmd(self): - return ['kill','-Wf',self.pid] if self.platform == 'win' else [self.exec_fn] + self.shared_args + ['exit'] + if self.platform == 'win': + return ['kill','-Wf',self.pid] + elif '--restricted-rpc' in self.start_cmd or '--public-node' in self.start_cmd: + return ['kill',self.pid] + else: + return [self.exec_fn] + self.shared_args + ['exit'] class MoneroWalletDaemon(RPCDaemon): diff --git a/mmgen/proto/xmr/rpc.py b/mmgen/proto/xmr/rpc.py index 6ed74166..09a10a6a 100755 --- a/mmgen/proto/xmr/rpc.py +++ b/mmgen/proto/xmr/rpc.py @@ -59,15 +59,20 @@ class MoneroRPCClient(RPCClient): if test_connection: # https://github.com/monero-project/monero src/rpc/rpc_version_str.cpp - self.daemon_version_str = self.call_raw('getinfo')['version'] - self.daemon_version = sum( - int(m) * (1000 ** n) for n,m in - enumerate(reversed(re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',self.daemon_version_str).groups())) - ) - if self.daemon and self.daemon_version > self.daemon.coind_version: - self.handle_unsupported_daemon_version( - proto.name, - ignore_daemon_version or proto.ignore_daemon_version or g.ignore_daemon_version ) + ver_str = self.call_raw('getinfo')['version'] + if ver_str: + self.daemon_version_str = ver_str + self.daemon_version = sum( + int(m) * (1000 ** n) for n,m in + enumerate(reversed(re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',ver_str).groups())) + ) + if self.daemon and self.daemon_version > self.daemon.coind_version: + self.handle_unsupported_daemon_version( + proto.name, + ignore_daemon_version or proto.ignore_daemon_version or g.ignore_daemon_version ) + else: # restricted (public) node: + self.daemon_version_str = None + self.daemon_version = None def call(self,method,*params,**kwargs): assert params == (), f'{type(self).__name__}.call() accepts keyword arguments only' diff --git a/test/test_py_d/ts_xmrwallet.py b/test/test_py_d/ts_xmrwallet.py index 15adbe18..9cc7b852 100755 --- a/test/test_py_d/ts_xmrwallet.py +++ b/test/test_py_d/ts_xmrwallet.py @@ -208,11 +208,13 @@ class TestSuiteXMRWallet(TestSuiteBase): 'md_rpc', 'wd', 'wd_rpc', + 'add_coind_args', ]) - for user,sid,shift,kal_range in ( # kal_range must be None, a single digit, or a single hyphenated range - ('miner', '98831F3A', 130, '1-2'), - ('bob', '1378FC64', 140, None), - ('alice', 'FE3C6545', 150, '1-4'), + # kal_range must be None, a single digit, or a single hyphenated range + for user,sid,shift,kal_range,add_coind_args in ( + ('miner', '98831F3A', 130, '1-2', []), + ('bob', '1378FC64', 140, None, ['--restricted-rpc']), + ('alice', 'FE3C6545', 150, '1-4', []), ): udir = os.path.join('test',f'tmp{n}',user) datadir = os.path.join(self.datadir_base,user) @@ -256,6 +258,7 @@ class TestSuiteXMRWallet(TestSuiteBase): md_rpc = md_rpc, wd = wd, wd_rpc = wd_rpc, + add_coind_args = add_coind_args, ) def init_daemon_args(self): @@ -263,7 +266,10 @@ class TestSuiteXMRWallet(TestSuiteBase): for u in self.users: other_ports = [self.users[u2].md.p2p_port for u2 in self.users if u2 != u] node_args = [f'--add-exclusive-node=127.0.0.1:{p}' for p in other_ports] - self.users[u].md.usr_coind_args = common_args + node_args + self.users[u].md.usr_coind_args = ( + common_args + + node_args + + self.users[u].add_coind_args ) # cmd_group methods @@ -707,7 +713,10 @@ class TestSuiteXMRWallet(TestSuiteBase): def stop_daemons(self): for v in self.users.values(): - async_run(v.md_rpc.stop_daemon()) + if '--restricted-rpc' in v.md.start_cmd: + v.md.stop() + else: + async_run(v.md_rpc.stop_daemon()) def stop_miner_wallet_daemon(self): async_run(self.users['miner'].wd_rpc.stop_daemon())