Code cleanups
This commit is contained in:
parent
3302ac774f
commit
afa3fe609a
7 changed files with 93 additions and 83 deletions
|
|
@ -163,13 +163,7 @@ if invoked_as == "addrgen":
|
|||
else:
|
||||
if not 'no_addresses' in opts: opts['print_secret'] = True
|
||||
|
||||
# Repeat on incorrect pw entry
|
||||
silent = False
|
||||
while True:
|
||||
seed = get_seed(infile,opts,silent=silent)
|
||||
silent = True
|
||||
if seed: break
|
||||
|
||||
seed = get_seed_retry(infile,opts)
|
||||
seed_id = make_chksum_8(seed)
|
||||
addr_data = generate_addrs(seed, addr_list, opts)
|
||||
addr_data_str = format_addr_data(addr_data, seed_id, opts)
|
||||
|
|
|
|||
75
mmgen-txsign
75
mmgen-txsign
|
|
@ -74,25 +74,20 @@ short_opts = "hd:efik:qb:ms"
|
|||
long_opts = "help","outdir=","echo_passphrase","force_wallet_dat","info",\
|
||||
"keys_from_file=","quiet","from_brain=","from_mnemonic","from_seed"
|
||||
|
||||
opts,cmd_args = process_opts(sys.argv,help_data,short_opts,long_opts)
|
||||
opts,infiles = process_opts(sys.argv,help_data,short_opts,long_opts)
|
||||
|
||||
# Exits on invalid input
|
||||
check_opts(opts, ('outdir','from_brain'))
|
||||
if 'keys_from_file' in opts: check_infile(opts['keys_from_file'])
|
||||
|
||||
if debug:
|
||||
print "Processed options: %s" % repr(opts)
|
||||
print "Cmd args: %s" % repr(cmd_args)
|
||||
|
||||
if len(cmd_args) > 0:
|
||||
for i in cmd_args: check_infile(i)
|
||||
else: usage(help_data)
|
||||
if not infiles: usage(help_data)
|
||||
for i in infiles: check_infile(i)
|
||||
|
||||
# Begin execution
|
||||
|
||||
c = connect_to_bitcoind()
|
||||
|
||||
tx_file = cmd_args.pop(0)
|
||||
tx_file = infiles.pop(0)
|
||||
tx_data = get_lines_from_file(tx_file,"transaction data")
|
||||
|
||||
metadata,tx_hex,sig_data,inputs_data = parse_tx_data(tx_data,tx_file)
|
||||
|
|
@ -120,60 +115,50 @@ for i in inputs_data:
|
|||
if mmgen_addrs and not 'force_wallet_dat' in opts:
|
||||
# Check that all the seed IDs are the same:
|
||||
seed_ids = list(set([i['account'][:8] for i in mmgen_addrs]))
|
||||
ext_data = (
|
||||
(wallet_ext, {}),
|
||||
(mn_ext, {"from_mnemonic":True}),
|
||||
(seed_ext, {"from_seed": True}),
|
||||
(brain_ext, opts)
|
||||
)
|
||||
while seed_ids:
|
||||
infile = False
|
||||
if cmd_args:
|
||||
infile = cmd_args.pop()
|
||||
if infiles:
|
||||
infile = infiles.pop()
|
||||
ext = infile.split(".")[-1]
|
||||
found = False
|
||||
for e,o in (
|
||||
(wallet_ext, {}),
|
||||
(mn_ext, {"from_mnemonic":True}),
|
||||
(seed_ext, {"from_seed": True}),
|
||||
(brain_ext, {})
|
||||
):
|
||||
for e,o in ext_data:
|
||||
if e == ext:
|
||||
found = True
|
||||
if e == brain_ext:
|
||||
if "from_brain" in opts: o = opts
|
||||
else:
|
||||
msg("'--from-brain' option must be specified for brainwallet file")
|
||||
if "from_brain" not in opts:
|
||||
msg(
|
||||
"'--from-brain' option must be specified for brainwallet file")
|
||||
sys.exit(2)
|
||||
silent = False
|
||||
while True:
|
||||
seed = get_seed(infile,o,silent=silent)
|
||||
silent = True
|
||||
if seed: break
|
||||
|
||||
if not found:
|
||||
msg("%s: invalid file extension" % ext)
|
||||
seed = get_seed_retry(infile,o); break
|
||||
else:
|
||||
msg("Invalid file extension: '.%s'\nValid extensions: '.%s'" %
|
||||
(ext,"' '.".join([i[0] for i in ext_data])))
|
||||
sys.exit(2)
|
||||
|
||||
elif "from_brain" in opts or "from_mnemonic" in opts or "from_seed" in opts:
|
||||
msg("Need data for seed ID %s" % seed_ids[0])
|
||||
silent = False
|
||||
while True:
|
||||
seed = get_seed("",opts,silent=silent)
|
||||
silent = True
|
||||
if seed: break
|
||||
seed = get_seed_retry("",opts)
|
||||
else:
|
||||
msg("One of '-b', '-m' or '-s' must be specified for seed IDs: %s" %
|
||||
" ".join(seed_ids))
|
||||
b,p,v = ("A seed","","is") if len(seed_ids) == 1 else ("Seed","s","are")
|
||||
msg("ERROR: %s source%s %s required for the following seed ID%s: %s" %
|
||||
(b,p,v,p," ".join(seed_ids)))
|
||||
sys.exit(2)
|
||||
|
||||
seed_id = make_chksum_8(seed)
|
||||
if seed_id in seed_ids:
|
||||
seed_ids.remove(seed_id)
|
||||
seed_id_addrs = []
|
||||
for i in mmgen_addrs:
|
||||
if i['account'][:8] == seed_id:
|
||||
seed_id_addrs.append(int(i['account'].split()[0][9:]))
|
||||
seed_id_addrs = [
|
||||
int(i['account'].split()[0][9:]) for i in mmgen_addrs
|
||||
if i['account'][:8] == seed_id]
|
||||
|
||||
from mmgen.addr import generate_addrs
|
||||
o = {'no_addresses': True, 'gen_what': "keys"}
|
||||
keys += [i['wif'] for i in generate_addrs(seed, seed_id_addrs, o)]
|
||||
from mmgen.addr import generate_keys
|
||||
keys += [i['wif'] for i in generate_keys(seed, seed_id_addrs)]
|
||||
else:
|
||||
msg("Supplied seed ID (%s) is incorrect" % seed_id)
|
||||
msg("Seed source produced an invalid seed ID (%s)" % seed_id)
|
||||
if infile:
|
||||
msg("Invalid input file: %s" % infile)
|
||||
sys.exit(2)
|
||||
|
|
|
|||
|
|
@ -151,12 +151,9 @@ if debug: display_user_random_data(usr_keys,key_timings)
|
|||
usr_rand_data = sha256(usr_keys).digest() + \
|
||||
sha256("".join(key_timings)).digest()
|
||||
|
||||
if 'from_mnemonic' in opts or 'from_brain' in opts or 'from_seed' in opts:
|
||||
silent = False
|
||||
while True:
|
||||
seed = get_seed(infile,opts,silent=silent)
|
||||
silent = True
|
||||
if seed: break
|
||||
for i in 'from_mnemonic','from_brain','from_seed':
|
||||
if i in opts:
|
||||
seed = get_seed_retry(infile,opts); break
|
||||
else:
|
||||
# Truncate random data for smaller seed lengths
|
||||
seed = os_rand_data[0] + usr_rand_data
|
||||
|
|
|
|||
|
|
@ -116,6 +116,10 @@ def generate_addrs(seed, addrnums, opts):
|
|||
|
||||
return out
|
||||
|
||||
def generate_keys(seed, addrnums):
|
||||
o = {'no_addresses': True, 'gen_what': "keys"}
|
||||
return generate_addrs(seed, addrnums, o)
|
||||
|
||||
|
||||
def format_addr_data(addrlist, seed_chksum, opts):
|
||||
"""
|
||||
|
|
|
|||
59
mmgen/tx.py
59
mmgen/tx.py
|
|
@ -162,9 +162,9 @@ def sort_and_view(unspent):
|
|||
def s_age(a,b): return cmp(b.confirmations,a.confirmations)
|
||||
def s_mmgen(a,b): return cmp(a.account,b.account)
|
||||
|
||||
fs = " %-4s %-11s %-2s %-34s %13s %-s"
|
||||
fs_hdr = " %-4s %-11s %-4s %-35s %-9s %-s"
|
||||
sort,group,mmaddr,reverse = "",False,False,False
|
||||
fs = " %-4s %-11s %-2s %-34s %-13s %-s"
|
||||
sort,group,show_mmaddr,reverse = "",False,False,False
|
||||
total = trim_exponent(sum([i.amount for i in unspent]))
|
||||
|
||||
from copy import deepcopy
|
||||
msg("")
|
||||
|
|
@ -179,32 +179,35 @@ def sort_and_view(unspent):
|
|||
elif sort == "txid" and a.txid == b.txid:
|
||||
out[n+1].skip = "t"
|
||||
|
||||
output = []
|
||||
output.append("UNSPENT OUTPUTS (sort order: %s%s%s)" % (
|
||||
output = ["UNSPENT OUTPUTS (sort order: %s%s%s) Total BTC: %s" % (
|
||||
"reverse " if reverse else "",
|
||||
sort if sort else "None",
|
||||
" (grouped)" if group and (sort == "address" or sort == "txid") else ""
|
||||
))
|
||||
output.append(fs_hdr % ("Num","TX id","Vout","Address","Amount",
|
||||
" (grouped)" if group and (sort == "address" or sort == "txid") else "",
|
||||
total
|
||||
)]
|
||||
output.append(fs % ("Num","TX id Vout","","Address","Amount (BTC)",
|
||||
"Age (days)"))
|
||||
|
||||
for n,i in enumerate(out):
|
||||
for i in out:
|
||||
amt = str(trim_exponent(i.amount))
|
||||
fill = 8 - len(amt.split(".")[-1]) if "." in amt else 9
|
||||
lfill = 3 - len(amt.split(".")[0]) if "." in amt else 3 - len(amt)
|
||||
i.amt = " "*lfill + amt
|
||||
i.days = int(i.confirmations * mins_per_block / (60*24))
|
||||
|
||||
for n,i in enumerate(out):
|
||||
if i.skip == "d":
|
||||
addr = " |" + "-"*32
|
||||
else:
|
||||
if mmaddr:
|
||||
if i.account and verify_mmgen_label(i.account):
|
||||
if show_mmaddr:
|
||||
if verify_mmgen_label(i.account):
|
||||
addr = "%s.. %s" % (i.address[:4],i.account)
|
||||
else:
|
||||
addr = i.address
|
||||
else:
|
||||
addr = i.address
|
||||
txid = " |---" if i.skip == "t" else i.txid[:8]+"..."
|
||||
days = int(i.confirmations * mins_per_block / (60*24))
|
||||
|
||||
output.append(fs % (str(n+1)+")", txid,i.vout,addr,amt+(" "*fill),days))
|
||||
output.append(fs % (str(n+1)+")",txid,i.vout,addr,i.amt,i.days))
|
||||
|
||||
while True:
|
||||
reply = get_char("\n".join(output) +
|
||||
|
|
@ -216,21 +219,33 @@ View options: [g]roup, show [m]mgen addr
|
|||
elif reply == 't': unspent.sort(s_txid); sort = "txid"; break
|
||||
elif reply == 'd': unspent.sort(s_addr); sort = "address"; break
|
||||
elif reply == 'A': unspent.sort(s_age); sort = "age"; break
|
||||
elif reply == 'M': unspent.sort(s_mmgen); mmaddr,sort=True,"mmgen"; break
|
||||
elif reply == 'M': unspent.sort(s_mmgen); show_mmaddr,sort=True,"mmgen"; break
|
||||
elif reply == 'r':
|
||||
reverse = False if reverse else True
|
||||
unspent.reverse()
|
||||
break
|
||||
elif reply == 'g': group = False if group else True; break
|
||||
elif reply == 'm': mmaddr = False if mmaddr else True; break
|
||||
elif reply == 'm': show_mmaddr = False if show_mmaddr else True; break
|
||||
elif reply == 'p':
|
||||
outfile = "listunspent.out"
|
||||
o = "Date: {} UTC\n\n{}\n\nTotal BTC: {}\n".format(
|
||||
make_timestr(),
|
||||
"\n".join(output),
|
||||
trim_exponent(sum([i.amount for i in unspent]))
|
||||
pfs = " %-4s %-67s %-34s %-12s %-13s %-10s %s"
|
||||
pout = [pfs % ("Num","TX id,Vout","Address","MMgen ID",
|
||||
"Amount (BTC)","Age (days)", "Comment")]
|
||||
|
||||
for n,i in enumerate(out):
|
||||
if verify_mmgen_label(i.account):
|
||||
s = i.account.split(None,1)
|
||||
mmid,cmt = s[0],(s[1] if len(s) == 2 else "")
|
||||
else:
|
||||
mmid,cmt = "",i.account
|
||||
os = pfs % (str(n+1)+")", str(i.txid)+","+str(i.vout),
|
||||
i.address,mmid,i.amt,i.days,cmt)
|
||||
pout.append(os.rstrip())
|
||||
|
||||
outdata = "Unspent outputs ({} UTC)\n\n{}\n\nTotal BTC: {}\n".format(
|
||||
make_timestr(), "\n".join(pout), total
|
||||
)
|
||||
write_to_file(outfile, o)
|
||||
outfile = "listunspent.out"
|
||||
write_to_file(outfile, outdata)
|
||||
msg("\nData written to '%s'" % outfile)
|
||||
sys.exit(1)
|
||||
elif reply == 'q': break
|
||||
|
|
|
|||
|
|
@ -593,7 +593,10 @@ def _check_mmseed_format(words):
|
|||
|
||||
valid = False
|
||||
what = "%s data" % seed_ext
|
||||
chklen = len(words[0])
|
||||
try:
|
||||
chklen = len(words[0])
|
||||
except:
|
||||
return False
|
||||
|
||||
if len(words) < 3 or len(words) > 12:
|
||||
msg("Invalid data length (%s) in %s" % (len(words),what))
|
||||
|
|
@ -840,6 +843,14 @@ def get_seed(infile,opts,silent=False):
|
|||
|
||||
return seed
|
||||
|
||||
# Repeat if data entry is incorrect
|
||||
def get_seed_retry(infile,opts):
|
||||
silent = False
|
||||
while True:
|
||||
seed = get_seed(infile,opts,silent=silent)
|
||||
silent = True
|
||||
if seed: return seed
|
||||
|
||||
|
||||
def remove_blanks_comments(lines):
|
||||
import re
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
CMD='rm -r /usr/local/bin/mmgen-* /usr/local/lib/python2.7/dist-packages/mmgen*'
|
||||
|
||||
set -x
|
||||
sudo rm -r /usr/local/bin/mmgen-* /usr/local/lib/python2.7/dist-packages/mmgen*
|
||||
|
||||
if [ "$EUID" = 0 ]; then $CMD; else sudo $CMD; fi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue