tx.sign: cleanups
This commit is contained in:
parent
67e1688aa1
commit
8311763e94
1 changed files with 40 additions and 30 deletions
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue