autosign,xmrwallet: minor fixes and cleanups

This commit is contained in:
The MMGen Project 2023-04-20 17:07:34 +00:00
commit 853d4ee29e
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
4 changed files with 34 additions and 21 deletions

View file

@ -37,13 +37,19 @@ class Signable:
@property
def unsigned(self):
if not hasattr(self,'_unsigned'):
return self._unprocessed( '_unsigned', self.rawext, self.sigext )
def _unprocessed(self,attrname,rawext,sigext):
if not hasattr(self,attrname):
dirlist = tuple(os.scandir(self.dir))
names = tuple(f.name for f in dirlist)
self._unsigned = tuple(f for f in dirlist
if f.name.endswith('.'+self.rawext)
and f.name[:-len(self.rawext)]+self.sigext not in names)
return self._unsigned
setattr(
self,
attrname,
tuple(f for f in dirlist
if f.name.endswith('.' + rawext)
and f.name[:-len(rawext)] + sigext not in names) )
return getattr(self,attrname)
def print_bad_list(self,bad_files):
msg('\n{a}\n{b}'.format(
@ -186,7 +192,10 @@ class Autosign:
cfg.outdir = self.tx_dir
cfg.passwd_file = self.keyfile
if 'coin' in cfg._uopts and not any(k in cfg._uopts for k in ('help','longhelp')):
if any(k in cfg._uopts for k in ('help','longhelp')):
return
if 'coin' in cfg._uopts:
die(1,'--coin option not supported with this command. Use --coins instead')
self.coins = cfg.coins.upper().split(',') if cfg.coins else []
@ -260,7 +269,7 @@ class Autosign:
def do_umount(self):
if os.path.ismount(self.mountpoint):
run( ['sync'], check=True )
msg(f'Unmounting {self.mountpoint}')
msg(f'Unmounting {self.mountpoint!r}')
run( ['umount',self.mountpoint], check=True )
def decrypt_wallets(self):

View file

@ -238,12 +238,11 @@ if len(cmd_args) < 2:
op = cmd_args.pop(0)
infile = cmd_args.pop(0)
wallets = spec = None
if op not in MoneroWalletOps.ops:
die(1,f'{op!r}: unrecognized operation')
wallets = spec = ''
if op == 'relay':
if len(cmd_args) != 0:
cfg._opts.usage()
@ -268,5 +267,8 @@ try:
m.post_main()
except KeyboardInterrupt:
ymsg('\nUser interrupt')
finally:
try:
async_run(m.stop_wallet_daemon())
except Exception as e:
ymsg(f'Unable to stop wallet daemon: {type(e).__name__}: {e}')

View file

@ -127,13 +127,14 @@ class MoneroMMGenFile:
@property
def full_chksum(self):
return self.make_chksum(self.full_chksum_fields)
return self.make_chksum(self.full_chksum_fields) if self.full_chksum_fields else None
def check_checksums(self,d_wrap):
for k in ('base_chksum','full_chksum'):
a = getattr(self,k)
b = d_wrap[k]
assert a == b, f'{k} mismatch: {a} != {b}'
if a is not None:
b = d_wrap[k]
assert a == b, f'{k} mismatch: {a} != {b}'
def make_wrapped_data(self,in_data):
return json.dumps(
@ -144,6 +145,7 @@ class MoneroMMGenFile:
}
},
cls = json_encoder,
indent = 4,
)
def extract_data_from_file(self,cfg,fn):
@ -155,7 +157,6 @@ class MoneroMMGenTX:
data_label = 'MoneroMMGenTX'
base_chksum_fields = ('op','create_time','network','seed_id','source','dest','amount')
full_chksum_fields = ('op','create_time','network','seed_id','source','dest','amount','fee','blob')
xmrwallet_tx_data = namedtuple('xmrwallet_tx_data',[
'op',
'create_time',
@ -171,6 +172,7 @@ class MoneroMMGenTX:
'blob',
'metadata',
])
full_chksum_fields = set(xmrwallet_tx_data._fields) - {'metadata'}
def __init__(self):
self.name = type(self).__name__
@ -277,11 +279,12 @@ class MoneroMMGenTX:
)
class NewSigned(New):
desc = 'signed transaction data'
desc = 'signed transaction'
ext = 'sigtx'
signed = True
class Completed(Base):
desc = 'transaction'
def __init__(self,cfg,fn):

View file

@ -493,8 +493,8 @@ class TestSuiteXMRWallet(TestSuiteBase):
amt = XMRAmt(strip_ansi_escapes(t.expect_getend('Amount: ')).replace('XMR','').strip())
dtype = 'signed'
t.expect(f'Save {dtype} transaction data? (y/N): ','y')
t.written_to_file(f'{dtype.capitalize()} transaction data')
t.expect(f'Save {dtype} transaction? (y/N): ','y')
t.written_to_file(f'{dtype.capitalize()} transaction')
if not no_relay:
t.expect(f'Relay {op} transaction? (y/N): ','y')
@ -544,20 +544,19 @@ class TestSuiteXMRWallet(TestSuiteBase):
def transfer_to_miner_create2(self):
return self.transfer_to_miner_create('0.0012')
def relay_tx(self,relay_opt=None,add_desc=None):
def relay_tx(self,relay_opt,add_desc=None):
user = 'alice'
data = self.users[user]
fn = get_file_with_ext(data.udir,'sigtx')
add_desc = (', ' + add_desc) if add_desc else ''
t = self.spawn(
'mmgen-xmrwallet',
self.extra_opts
+ ([relay_opt] if relay_opt else [])
+ [ 'relay', fn ],
+ [ relay_opt, 'relay', get_file_with_ext(data.udir,'sigtx') ],
extra_desc = f'(relaying TX, {capfirst(user)}{add_desc})' )
t.expect('Relay transaction? ','y')
t.read()
t.ok()
return t
async def transfer_to_miner_send1(self):
self.relay_tx(f'--tx-relay-daemon={self.tx_relay_daemon_proxy_parm}',add_desc='via proxy')