various fixes and cleanups

This commit is contained in:
The MMGen Project 2026-10-20 17:38:48 +00:00
commit 29c5ea22db
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
6 changed files with 47 additions and 43 deletions

View file

@ -175,9 +175,6 @@ async def main():
locktime = int(cfg.locktime or 0),
do_info = cfg.info)
if tx1.is_compat:
return
if tx1.is_swap and tx1.is_refreq: # memoless first pass
if cfg.no_refreq_tx:
Msg(f'MEMO: {tx1.reference_memo}')
@ -186,7 +183,7 @@ async def main():
tx2 = NewTX(cfg=rune_cfg, proto=rune_cfg._proto, target='tx', refreq_src=tx1)
tx3 = await tx2.create(args=('deposit,0', f'data:{tx1.reference_memo}'))
write_to_file(tx3, asi)
else:
elif not tx1.is_compat:
write_to_file(tx2, asi)
async_run(cfg, main)

View file

@ -98,13 +98,13 @@ class NewSwap(BaseSwapMethods, New):
from ..amt import is_coin_amt
arg = get_arg()
# arg 2: amt
# arg 2: optional amt
if is_coin_amt(self.proto, arg):
UniAmt(arg) # throw exception on decimal overflow
args.send_amt = self.proto.coin_amt(arg)
arg = get_arg()
# arg 3: chg_spec (change address spec)
# arg 3: optional chg_spec (change address spec, requires amt)
if args.send_amt and not (
self.proto.is_vm or
arg in sa.recv): # is change arg
@ -118,7 +118,7 @@ class NewSwap(BaseSwapMethods, New):
self.swap_recv_asset_spec = sp.SwapAsset(arg, 'recv').name # used by ‘recv_asset’ property
self.recv_proto = init_swap_proto(self.cfg, self.recv_asset)
# arg 5: recv_spec (receive address spec)
# arg 5: optional recv_spec (receive address spec)
if args_in:
if self.refnum:
die(1, 'destination address must be omitted with --refnum')
@ -214,12 +214,10 @@ class NewSwap(BaseSwapMethods, New):
str(self.update_memo(self.memoless_memo, qd.trade_limit)))
return None
ret = (
[f'vault,{args.send_amt}'] if args.send_amt and self.proto.is_vm else
[f'vault,{args.send_amt}', chg_output.mmid] if args.send_amt else
['vault'])
return tuple(ret if self.is_memoless else (ret + [f'data:{memo}']))
return tuple((
[f'vault,{args.send_amt}', chg_output.mmid] if chg_output else
[f'vault,{args.send_amt}'] if args.send_amt else
['vault']) + ([] if self.is_memoless else [f'data:{memo}']))
async def display_quote_loop(self, qd, *, deduct_est_fee=False):
from ..term import get_char

View file

@ -169,37 +169,18 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtest):
def alice_txcreate4(self):
return self._user_txcreate('alice', chg_addr='L:4', need_rbf=True)
def _alice_txsend_abort(self, err=False, send_resp='y', expect_str=None, shred_expect_str=[]):
self.insert_device_online()
t = self.spawn(
'mmgen-txsend',
['--quiet', '--abort'],
no_passthru_opts = ['coin'],
exit_val = 2 if err else 1 if send_resp == 'n' else None)
if err:
t.expect(expect_str)
else:
t.expect('(y/N): ', send_resp)
if expect_str:
t.expect(expect_str)
for pat in shred_expect_str:
t.expect(pat, regex=True)
t.read()
self.remove_device_online()
return t
def alice_txsend_abort1(self):
return self._alice_txsend_abort(shred_expect_str=['Shredding .*arawtx'])
return self._txsend_abort(shred_expect_str=['Shredding .*arawtx'])
def alice_txsend_abort2(self):
return self._alice_txsend_abort(err=True, expect_str='No unsent transactions')
return self._txsend_abort(err=True, expect_str='No unsent transactions')
def alice_txsend_abort3(self):
return self._alice_txsend_abort(send_resp='n', expect_str='Exiting at user request')
return self._txsend_abort(send_resp='n', expect_str='Exiting at user request')
def alice_txsend_abort4(self):
self._wait_signed('transaction')
return self._alice_txsend_abort(shred_expect_str=[r'Shredding .*arawtx', r'Shredding .*asigtx'])
return self._txsend_abort(shred_expect_str=[r'Shredding .*arawtx', r'Shredding .*asigtx'])
alice_txsend_abort5 = alice_txsend_abort2
@ -381,7 +362,7 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtest):
def alice_txbump_abort1(self):
if not self.proto.cap('rbf'):
return 'skip'
return self._alice_txsend_abort(shred_expect_str=['Shredding .*arawtx'])
return self._txsend_abort(shred_expect_str=['Shredding .*arawtx'])
def alice_txbump5(self):
sid = self._user_sid('alice')

View file

@ -610,6 +610,25 @@ class CmdTestAutosignThreaded(CmdTestAutosignBase):
self.remove_device_online()
return t
def _txsend_abort(self, err=False, send_resp='y', expect_str=None, shred_expect_str=[]):
self.insert_device_online()
t = self.spawn(
'mmgen-txsend',
['--quiet', '--abort'],
no_passthru_opts = ['coin'],
exit_val = 2 if err else 1 if send_resp == 'n' else None)
if err:
t.expect(expect_str)
else:
t.expect('(y/N): ', send_resp)
if expect_str:
t.expect(expect_str)
for pat in shred_expect_str:
t.expect(pat, regex=True)
t.read()
self.remove_device_online()
return t
def _wait_loop_start(self, opts=[], add_opts=[]):
t = self.spawn(
'mmgen-autosign',

View file

@ -28,8 +28,14 @@ prices = {
'ETH': 2304,
'MM1': 0.998,
'RUNE': 1.4}
gas_rate_units = {'ETH': 'gwei', 'BTC': 'satsperbyte'}
recommended_gas_rate = {'ETH': '1', 'BTC': '6'}
gas_rate_units = {
'BTC': 'satsperbyte',
'ETH': 'gwei'}
recommended_gas_rate = {
'BTC': '6',
'ETH': '1'}
data_template_from_rune = {
'outbound_delay_blocks': 0,
@ -123,12 +129,12 @@ def make_inbound_addr(cfg, proto, mmtype):
return '0x' + eth_inbound_addr # non-checksummed as per ninerealms thornode
else:
from mmgen.tool.coin import tool_cmd
n = int(time.time()) // (60 * 60 * 24) # increments once every 24 hrs
n = int(time.time()) // (60 * 60 * 24) + int('beadcafe' * 8, 16) # increments once every 24 hrs
return tool_cmd(
cfg = cfg,
cmdname = 'pubhash2addr',
cmdname = 'privhex2addr',
proto = proto,
mmtype = mmtype).pubhash2addr(f'{n:040x}')
mmtype = mmtype).privhex2addr(f'{n:064x}')
class ThornodeSwapServer(ThornodeServer):
port = 18900

View file

@ -879,7 +879,10 @@ class CmdTestSwap(
refreq_swaptxsend = rune_txsend_refreq
def remote_get_refnum(self):
t = self._rune_remote('get_refnum', (self.refreq_txid,), color=False)
return self._remote_get_refnum(self.refreq_txid)
def _remote_get_refnum(self, txid):
t = self._rune_remote('get_refnum', (txid,), color=False)
self.write_to_tmpfile('memo_info.json', t.read().strip())
return t