From 36e3de859550adf8c2d0d43914698a879b67b5dc Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 5 Feb 2022 13:32:57 +0000 Subject: [PATCH] move MoneroWalletDaemon class to `base_proto/monero` --- mmgen/base_proto/monero/__init__.py | 0 mmgen/base_proto/monero/daemon.py | 90 +++++++++++++++++++++++++++++ mmgen/daemon.py | 69 ---------------------- mmgen/xmrwallet.py | 2 +- setup.cfg | 1 + test/overlay/__init__.py | 1 + test/test_py_d/ts_xmrwallet.py | 3 +- test/unit_tests_d/ut_rpc.py | 3 +- 8 files changed, 97 insertions(+), 72 deletions(-) create mode 100755 mmgen/base_proto/monero/__init__.py create mode 100755 mmgen/base_proto/monero/daemon.py diff --git a/mmgen/base_proto/monero/__init__.py b/mmgen/base_proto/monero/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/mmgen/base_proto/monero/daemon.py b/mmgen/base_proto/monero/daemon.py new file mode 100755 index 00000000..0c1c29a1 --- /dev/null +++ b/mmgen/base_proto/monero/daemon.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen +# https://gitlab.com/mmgen/mmgen + +""" +base_proto.monero.daemon: Monero daemon classes +""" + +import os + +from ...globalvars import g +from ...opts import opt +from ...util import list_gen +from ...daemon import CoinDaemon,RPCDaemon,_nw + +class MoneroWalletDaemon(RPCDaemon): + + master_daemon = 'monero_daemon' + rpc_type = 'Monero wallet' + exec_fn = 'monero-wallet-rpc' + coin = 'XMR' + new_console_mswin = True + rpc_ports = _nw(13131, 13141, None) # testnet is non-standard + + def __init__(self, proto, wallet_dir, + test_suite = False, + host = None, + user = None, + passwd = None, + daemon_addr = None, + proxy = None, + port_shift = None, + datadir = None ): + + self.proto = proto + self.test_suite = test_suite + + super().__init__() + + self.network = proto.network + self.wallet_dir = wallet_dir + self.rpc_port = getattr(self.rpc_ports,self.network) + (11 if test_suite else 0) + if port_shift: + self.rpc_port += port_shift + + id_str = f'{self.exec_fn}-{self.bind_port}' + self.datadir = os.path.join((datadir or self.exec_fn),('','test_suite')[test_suite]) + self.pidfile = os.path.join(self.datadir,id_str+'.pid') + self.logfile = os.path.join(self.datadir,id_str+'.log') + + self.proxy = proxy + self.daemon_addr = daemon_addr + self.daemon_port = None if daemon_addr else CoinDaemon(proto=proto,test_suite=test_suite).rpc_port + + self.host = host or opt.wallet_rpc_host or g.monero_wallet_rpc_host + self.user = user or opt.wallet_rpc_user or g.monero_wallet_rpc_user + self.passwd = passwd or opt.wallet_rpc_password or g.monero_wallet_rpc_password + + assert self.host + assert self.user + if not self.passwd: + from ...util import die + die(1, + 'You must set your Monero wallet RPC password.\n' + + 'This can be done on the command line with the --wallet-rpc-password option\n' + + "(insecure, not recommended), or by setting 'monero_wallet_rpc_password' in\n" + + "the MMGen config file." ) + + self.daemon_args = list_gen( + ['--untrusted-daemon'], + [f'--rpc-bind-port={self.rpc_port}'], + ['--wallet-dir='+self.wallet_dir], + ['--log-file='+self.logfile], + [f'--rpc-login={self.user}:{self.passwd}'], + [f'--daemon-address={self.daemon_addr}', self.daemon_addr], + [f'--daemon-port={self.daemon_port}', not self.daemon_addr], + [f'--proxy={self.proxy}', self.proxy], + [f'--pidfile={self.pidfile}', self.platform == 'linux'], + ['--detach', not (self.opt.no_daemonize or self.platform=='win')], + ['--stagenet', self.network == 'testnet'], + ) + + from ...rpc import MoneroWalletRPCClient + self.rpc = MoneroWalletRPCClient( daemon=self, test_connection=False ) diff --git a/mmgen/daemon.py b/mmgen/daemon.py index 4ce63d05..4da24ca6 100755 --- a/mmgen/daemon.py +++ b/mmgen/daemon.py @@ -246,75 +246,6 @@ class RPCDaemon(Daemon): def start_cmd(self): return ([self.exec_fn] + self.daemon_args + self.usr_daemon_args) -class MoneroWalletDaemon(RPCDaemon): - - master_daemon = 'monero_daemon' - rpc_type = 'Monero wallet' - exec_fn = 'monero-wallet-rpc' - coin = 'XMR' - new_console_mswin = True - rpc_ports = _nw(13131, 13141, None) # testnet is non-standard - - def __init__(self, proto, wallet_dir, - test_suite = False, - host = None, - user = None, - passwd = None, - daemon_addr = None, - proxy = None, - port_shift = None, - datadir = None ): - - self.proto = proto - self.test_suite = test_suite - - super().__init__() - - self.network = proto.network - self.wallet_dir = wallet_dir - self.rpc_port = getattr(self.rpc_ports,self.network) + (11 if test_suite else 0) - if port_shift: - self.rpc_port += port_shift - - id_str = f'{self.exec_fn}-{self.bind_port}' - self.datadir = os.path.join((datadir or self.exec_fn),('','test_suite')[test_suite]) - self.pidfile = os.path.join(self.datadir,id_str+'.pid') - self.logfile = os.path.join(self.datadir,id_str+'.log') - - self.proxy = proxy - self.daemon_addr = daemon_addr - self.daemon_port = None if daemon_addr else CoinDaemon(proto=proto,test_suite=test_suite).rpc_port - - self.host = host or opt.wallet_rpc_host or g.monero_wallet_rpc_host - self.user = user or opt.wallet_rpc_user or g.monero_wallet_rpc_user - self.passwd = passwd or opt.wallet_rpc_password or g.monero_wallet_rpc_password - - assert self.host - assert self.user - if not self.passwd: - die(1, - 'You must set your Monero wallet RPC password.\n' + - 'This can be done on the command line with the --wallet-rpc-password option\n' + - "(insecure, not recommended), or by setting 'monero_wallet_rpc_password' in\n" + - "the MMGen config file." ) - - self.daemon_args = list_gen( - ['--untrusted-daemon'], - [f'--rpc-bind-port={self.rpc_port}'], - ['--wallet-dir='+self.wallet_dir], - ['--log-file='+self.logfile], - [f'--rpc-login={self.user}:{self.passwd}'], - [f'--daemon-address={self.daemon_addr}', self.daemon_addr], - [f'--daemon-port={self.daemon_port}', not self.daemon_addr], - [f'--proxy={self.proxy}', self.proxy], - [f'--pidfile={self.pidfile}', self.platform == 'linux'], - ['--detach', not (self.opt.no_daemonize or self.platform=='win')], - ['--stagenet', self.network == 'testnet'], - ) - - from .rpc import MoneroWalletRPCClient - self.rpc = MoneroWalletRPCClient( daemon=self, test_connection=False ) - class CoinDaemon(Daemon): networks = ('mainnet','testnet','regtest') cfg_file_hdr = '' diff --git a/mmgen/xmrwallet.py b/mmgen/xmrwallet.py index cc066eb7..ba4372fb 100755 --- a/mmgen/xmrwallet.py +++ b/mmgen/xmrwallet.py @@ -31,7 +31,7 @@ from .proto.common import b58a from .addr import CoinAddr,AddrIdx from .addrlist import KeyAddrList,AddrIdxList from .rpc import MoneroRPCClientRaw,MoneroWalletRPCClient,json_encoder -from .daemon import MoneroWalletDaemon +from .base_proto.monero.daemon import MoneroWalletDaemon xmrwallet_uarg_info = ( lambda e,hp: { diff --git a/setup.cfg b/setup.cfg index d9595bff..49dd6dbd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,6 +49,7 @@ packages = mmgen.base_proto.ethereum.rlp mmgen.base_proto.ethereum.rlp.sedes mmgen.base_proto.ethereum.tx + mmgen.base_proto.monero mmgen.proto mmgen.share mmgen.tool diff --git a/test/overlay/__init__.py b/test/overlay/__init__.py index 36088026..9ea92087 100644 --- a/test/overlay/__init__.py +++ b/test/overlay/__init__.py @@ -45,6 +45,7 @@ def overlay_setup(repo_root): 'mmgen.base_proto.ethereum.rlp', 'mmgen.base_proto.ethereum.rlp.sedes', 'mmgen.base_proto.ethereum.tx', + 'mmgen.base_proto.monero', 'mmgen.data', 'mmgen.proto', 'mmgen.share', diff --git a/test/test_py_d/ts_xmrwallet.py b/test/test_py_d/ts_xmrwallet.py index 2b319ff4..2eb39a46 100755 --- a/test/test_py_d/ts_xmrwallet.py +++ b/test/test_py_d/ts_xmrwallet.py @@ -183,7 +183,8 @@ class TestSuiteXMRWallet(TestSuiteBase): atexit.register(kill_proxy) def init_users(self): - from mmgen.daemon import CoinDaemon,MoneroWalletDaemon + from mmgen.daemon import CoinDaemon + from mmgen.base_proto.monero.daemon import MoneroWalletDaemon from mmgen.rpc import MoneroRPCClient,MoneroRPCClientRaw,MoneroWalletRPCClient self.users = {} n = self.tmpdir_nums[0] diff --git a/test/unit_tests_d/ut_rpc.py b/test/unit_tests_d/ut_rpc.py index 3fe0fbd2..a1c6eca4 100755 --- a/test/unit_tests_d/ut_rpc.py +++ b/test/unit_tests_d/ut_rpc.py @@ -7,7 +7,8 @@ from mmgen.common import * from mmgen.protocol import init_proto from mmgen.rpc import rpc_init,MoneroWalletRPCClient -from mmgen.daemon import CoinDaemon,MoneroWalletDaemon +from mmgen.daemon import CoinDaemon +from mmgen.base_proto.monero.daemon import MoneroWalletDaemon def cfg_file_auth_test(proto,d): qmsg(cyan(f'\n Testing authentication with credentials from {d.cfg_file}:'))