tx.sign: cleanups

This commit is contained in:
The MMGen Project 2025-02-15 09:54:19 +00:00
commit 8311763e94
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2

View file

@ -77,35 +77,45 @@ def generate_kals_for_mmgen_addrs(need_keys, infiles, saved_seeds, proto):
skip_chksum = True)
return MMGenList(gen_kals())
def add_keys(tx, src, infiles=None, saved_seeds=None, keyaddr_list=None):
need_keys = [e for e in getattr(tx, src) if e.mmid and not e.have_wif]
def add_keys(src, io_list, infiles=None, saved_seeds=None, keyaddr_list=None):
need_keys = [e for e in io_list if e.mmid and not e.have_wif]
if not need_keys:
return []
desc, src_desc = (
('key-address file', 'From key-address file:') if keyaddr_list else
('seed(s)', 'Generated from seed:'))
cfg._util.qmsg(f'Checking {gc.proj_name} -> {tx.proto.coin} address mappings for {src} (from {desc})')
d = (
MMGenList([keyaddr_list]) if keyaddr_list else
generate_kals_for_mmgen_addrs(need_keys, infiles, saved_seeds, tx.proto))
new_keys = []
for e in need_keys:
for kal in d:
for f in kal.data:
mmid = f'{kal.al_id}:{f.idx}'
if mmid == e.mmid:
if f.addr == e.addr:
e.have_wif = True
if src == 'inputs':
new_keys.append(f)
else:
die(3, fmt(f"""
{gc.proj_name} -> {tx.proto.coin} address mappings differ!
{src_desc:<23} {mmid} -> {f.addr}
{'tx file:':<23} {e.mmid} -> {e.addr}
""").strip())
if new_keys:
proto = need_keys[0].proto
if keyaddr_list:
desc = 'key-address file'
src_desc = 'From key-address file:'
d = MMGenList([keyaddr_list])
else:
desc = 'seed(s)'
src_desc = 'Generated from seed:'
d = generate_kals_for_mmgen_addrs(need_keys, infiles, saved_seeds, proto)
cfg._util.qmsg(f'Checking {gc.proj_name} -> {proto.coin} address mappings for {src} (from {desc})')
def gen_keys():
for e in need_keys:
for kal in d:
for f in kal.data:
if mmid := f'{kal.al_id}:{f.idx}' == e.mmid:
if f.addr == e.addr:
e.have_wif = True
if src == 'inputs':
yield f
else:
die(3, fmt(f"""
{gc.proj_name} -> {proto.coin} address mappings differ!
{src_desc:<23} {mmid} -> {f.addr}
{'tx file:':<23} {e.mmid} -> {e.addr}
""").strip())
if new_keys := list(gen_keys()):
cfg._util.vmsg(f'Added {len(new_keys)} wif key{suf(new_keys)} from {desc}')
return new_keys
def _pop_matching_fns(args, cmplist): # strips found args
@ -169,11 +179,11 @@ async def txsign(cfg_parm, tx, seed_files, kl, kal, tx_num_str='', passwd_file=N
keys += tmp.data
if cfg.mmgen_keys_from_file:
keys += add_keys(tx, 'inputs', keyaddr_list=kal)
add_keys(tx, 'outputs', keyaddr_list=kal)
keys += add_keys('inputs', tx.inputs, keyaddr_list=kal)
add_keys('outputs', tx.outputs, keyaddr_list=kal)
keys += add_keys(tx, 'inputs', seed_files, saved_seeds)
add_keys(tx, 'outputs', seed_files, saved_seeds)
keys += add_keys('inputs', tx.inputs, seed_files, saved_seeds)
add_keys('outputs', tx.outputs, seed_files, saved_seeds)
# this (boolean) attr isn't needed in transaction file
tx.delete_attrs('inputs', 'have_wif')