move MoneroWalletDaemon class to base_proto/monero

This commit is contained in:
The MMGen Project 2022-02-05 13:32:57 +00:00
commit 36e3de8595
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
8 changed files with 97 additions and 72 deletions

View file

View file

@ -0,0 +1,90 @@
#!/usr/bin/env python3
#
# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
# Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
# 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 )

View file

@ -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 = ''

View file

@ -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: {

View file

@ -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

View file

@ -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',

View file

@ -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]

View file

@ -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}:'))