XMR: support regtest for cmdtest.py

This commit is contained in:
The MMGen Project 2026-10-19 09:06:13 +00:00
commit 153a815b5b
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
7 changed files with 29 additions and 25 deletions

View file

@ -493,8 +493,7 @@ class Config(Lockable):
self.coin = self.coin.upper()
self.token = self.token.upper() if self.token else None
if self.test_user or self.regtest:
if self.coin != 'XMR':
self.network = 'regtest'
self.network = 'regtest'
if not self.test_suite: # could be set in environment
self._use_cfg_file = False
else:

View file

@ -281,6 +281,7 @@ class CoinDaemon(Daemon):
testnet_dir = 'testnet'
rpc_user = None
rpc_password = None
disable_regtest_p2p = True
_cd = namedtuple('coins_data', ['daemon_ids'])
coins = {
@ -429,7 +430,8 @@ class CoinDaemon(Daemon):
(self.dfl_rpc_port + self.port_shift))
self.p2p_port = (
None if self.dfl_p2p_port is None or self.network == 'regtest' else
None if self.dfl_p2p_port is None
or (self.network == 'regtest' and self.disable_regtest_p2p) else
(self.dfl_p2p_port + self.port_shift))
fn_stem = f'{self.id}-{self.network}-daemon-{self.bind_port}'

View file

@ -18,17 +18,18 @@ from ...daemon import CoinDaemon, RPCDaemon, _nw, _dd
class monero_daemon(CoinDaemon):
daemon_data = _dd('Monero', 18005001, '0.18.5.1-release')
networks = ('mainnet', 'testnet')
networks = ('mainnet', 'testnet', 'regtest')
exec_fn = 'monerod'
testnet_dir = 'stagenet'
new_console_mswin = True
rpc_ports = _nw(18081, 38081, None) # testnet is stagenet
rpc_ports = _nw(18081, 28081, 38081) # testnet is stagenet
cfg_file = 'bitmonero.conf'
datadirs = {
'linux': [gc.home_dir, '.bitmonero'],
'darwin': [gc.home_dir, '.bitmonero'],
'win32': ['/', 'c', 'ProgramData', 'bitmonero']}
use_pidfile = gc.platform == 'linux'
disable_regtest_p2p = False
@property
def dfl_p2p_port(self):
@ -51,7 +52,8 @@ class monero_daemon(CoinDaemon):
['--no-zmq'],
[f'--p2p-bind-port={self.p2p_port}', self.p2p_port],
[f'--rpc-bind-port={self.rpc_port}'],
['--stagenet', self.network == 'testnet'])
['--stagenet', self.network == 'testnet'],
['--p2p-bind-ip=127.0.0.1', '--fixed-difficulty=1', '--regtest', self.network == 'regtest'])
self.coind_args = list_gen(
['--hide-my-port'],
@ -77,8 +79,8 @@ class MoneroWalletDaemon(RPCDaemon):
exec_fn = 'monero-wallet-rpc'
coin = 'XMR'
new_console_mswin = True
networks = ('mainnet', 'testnet')
rpc_ports = _nw(13131, 13141, None) # testnet is non-standard
networks = ('mainnet', 'testnet', 'regtest')
rpc_ports = _nw(13131, 13141, 13151) # testnet is non-standard
use_pidfile = gc.platform == 'linux'
_reset_ok = ('debug', 'wait', 'pids', 'force_kill')

View file

@ -24,7 +24,7 @@ class MoneroViewKey(HexStr):
class mainnet(CoinProtocol.RPC, CoinProtocol.DummyWIF, CoinProtocol.Base):
mod_clsname = 'Monero'
network_names = _nw('mainnet', 'stagenet', None)
network_names = _nw('mainnet', 'stagenet', 'regtest')
base_proto = 'Monero'
base_proto_coin = 'XMR'
base_coin = 'XMR'
@ -89,3 +89,6 @@ class mainnet(CoinProtocol.RPC, CoinProtocol.DummyWIF, CoinProtocol.Base):
class testnet(mainnet): # use stagenet for testnet
# testnet is {'35', '3f', '36'}
addr_ver_info = {'18': 'monero', '24': 'monero_sub', '19': 'monero_integrated'}
class regtest(mainnet):
pass

View file

@ -616,7 +616,7 @@ class CmdTestAutosignThreaded(CmdTestAutosignBase):
(opts or self.opts)
+ add_opts
# ensure that changes to online cfg file don’t affect autosign:
+ [f'--data-dir={autosign_data_dir}']
+ [f'--data-dir={autosign_data_dir}', '--regtest=1']
+ ['--full-summary', 'wait'],
direct_exec = True,
no_passthru_opts = True,

View file

@ -118,7 +118,7 @@ class CmdTestXMRAutosign(CmdTestXMRWallet, CmdTestAutosignThreaded):
self.burn_addr = make_burn_addr(cfg)
self.autosign_opts = ['--autosign'] # mmgen-xmrwallet opts
self.autosign_setup_opts = [f'--xmrwallets={self.users[self.user].kal_range}']
self.autosign_setup_opts = ['--regtest=1', f'--xmrwallets={self.users[self.user].kal_range}']
def create_tmp_wallets(self):
self.spawn(msg_only=True)
@ -511,7 +511,7 @@ class CmdTestXMRCompat(CmdTestXMRAutosign):
"""
menu_prompt = 'efresh balances:\b'
listaddresses_menu_prompt = 'efresh bals:\b'
extra_daemons = ['ltc']
extra_daemons = ['ltc_rt']
cmd_group = (
('autosign_setup', 'autosign setup with user’s seed'),
@ -592,10 +592,11 @@ class CmdTestXMRCompat(CmdTestXMRAutosign):
data = self.users[self.user]
self.user_dump_file = os.path.join(
data.wd.wallet_dir,
f'{data.sid}-2-MoneroWatchOnlyWallet.dump')
f'{data.sid}-2-MoneroWatchOnlyWallet.regtest.dump')
self.user_daemon_opts = [
f'--monero-daemon=localhost:{data.md.rpc_port}',
'--monero-wallet-rpc-password=abc']
'--monero-wallet-rpc-password=abc',
'--regtest=1']
self.user_opts = [f'--{self.user}', '--coin=xmr'] + self.user_daemon_opts
def addrimport_user(self):

View file

@ -120,8 +120,8 @@ class CmdTestXMRWallet(CmdTestBase):
return
from mmgen.protocol import init_proto
self.proto = init_proto(cfg, 'XMR', network='mainnet')
self.extra_opts = ['--wallet-rpc-password=abc']
self.proto = init_proto(cfg, 'XMR', network='regtest')
self.extra_opts = ['--regtest=1', '--wallet-rpc-password=abc']
self.init_users()
self.init_daemon_args()
@ -217,6 +217,7 @@ class CmdTestXMRWallet(CmdTestBase):
daemon = wd,
test_connection = False)
network_suf = '.regtest'
kafile_suf, fn_stem = (
('.vkeys', 'MoneroWatchOnlyWallet') if autosign else
('.akeys', 'MoneroWallet'))
@ -229,9 +230,9 @@ class CmdTestXMRWallet(CmdTestBase):
udir = udir,
twdir = wd.wallet_dir,
kal_range = kal_range,
kafile = str(udir / f'{sid}-XMR-M[{kal_range}]{kafile_suf}'),
walletfile_fs = str(wd.wallet_dir / f'{sid}-{{}}-{fn_stem}'),
addrfile_fs = str(wd.wallet_dir / f'{sid}-{{}}-{fn_stem}.address.txt'),
kafile = str(udir / f'{sid}-XMR-M[{kal_range}]{network_suf}{kafile_suf}'),
walletfile_fs = str(wd.wallet_dir / f'{sid}-{{}}-{fn_stem}{network_suf}'),
addrfile_fs = str(wd.wallet_dir / f'{sid}-{{}}-{fn_stem}{network_suf}.address.txt'),
md = md,
md_rpc = md_rpc,
wd = wd,
@ -239,14 +240,10 @@ class CmdTestXMRWallet(CmdTestBase):
add_coind_args = add_coind_args)
def init_daemon_args(self):
common_args = ['--p2p-bind-ip=127.0.0.1', '--fixed-difficulty=1', '--regtest'] # --rpc-ssl-allow-any-cert
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 if p]
self.users[u].md.usr_coind_args = (
common_args
+ node_args
+ self.users[u].add_coind_args)
self.users[u].md.usr_coind_args = node_args + self.users[u].add_coind_args
# cmd_group methods
@ -264,7 +261,7 @@ class CmdTestXMRWallet(CmdTestBase):
run(['mkdir', '-p', str(data.udir)])
t = self.spawn(
'mmgen-keygen',
['--quiet', '--accept-defaults', '--coin=xmr', f'--outdir={data.udir}']
['--quiet', '--accept-defaults', '--coin=xmr', '--regtest=1', f'--outdir={data.udir}']
+ add_opts
+ [data.mmwords, data.kal_range],
extra_desc = f'({capfirst(user)})')