Browse Source

tx.sign: cleanups

The MMGen Project 3 weeks ago
parent
commit
8311763e94
1 changed files with 40 additions and 30 deletions
  1. 40 30
      mmgen/tx/sign.py

+ 40 - 30
mmgen/tx/sign.py

@@ -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')