commit 069999a2d4ae3df11505d5d39651190ef25892ae Author: jwinterm Date: Sun Jul 20 23:12:47 2014 -0500 First commit - implementing single threaded CLI interface diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/simplevanityCLI.py b/simplevanityCLI.py new file mode 100755 index 0000000..5bea07e --- /dev/null +++ b/simplevanityCLI.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +import argparse, os, sys, time +from subprocess import PIPE, Popen +from threading import Thread +from Queue import Queue, Empty + + +parser = argparse.ArgumentParser() +parser.add_argument("-m", "--match-anywhere", help="match anywhere in address", action="store_true") +parser.add_argument("wallet_name", help="file name for wallet binary") +parser.add_argument("wallet_pw", help="desired wallet password") +parser.add_argument("target", help="string to match in address") +args = parser.parse_args() + +ON_POSIX = 'posix' in sys.builtin_module_names + + +def enqueue_output(out, queue): + for line in iter(out.readline, b''): + queue.put(line) + out.close() + + +def createWallet(): + """Method that will loop on itself in a single thread until match""" + p = Popen(["./simplewallet", "--set_log", "0", "--generate-new-wallet", + args.wallet_name, "--password", args.wallet_pw], + stdout=PIPE, + stdin=PIPE, + bufsize=1, + close_fds=ON_POSIX) + + q = Queue() + t = Thread(target=enqueue_output, args=(p.stdout, q)) + t.daemon = True # thread dies with the program + t.start() + + t_start = time.time() + electrum = '' + electrum_coming = False + + while time.time() - t_start < 10: + try: + line = q.get_nowait() + if "new wallet:" in line: + address = line.rstrip().split(': ')[1] + if "view key:" in line: + view_key = line.rstrip().split(': ')[1] + if electrum_coming: + electrum = line.rstrip() + if "PLEASE NOTE:" in line: + electrum_coming = line.rstrip() + except Empty: + pass + else: + pass + if len(electrum) > 2: + break + + p.kill() + + # print "Generated address: {0}".format(address) + if not args.match_anywhere: + print "Target: {0}, Address first chars: {1}".format(args.target, address[2:len(args.target)+2]) + if args.target in address[2:len(args.target)+2]: + print "success1!" + with open('./{0}_info.txt'.format(args.wallet_name), 'w') as f: + f.write("Name:\n{0}\n\nAddress:\n{1}\n\nView key:\n{2}\n\nElectrum seed:\n{3}".format( + args.wallet_name, address, view_key, electrum)) + return 0 + else: + os.remove('./{0}'.format(args.wallet_name)) + os.remove('./{0}.keys'.format(args.wallet_name)) + os.remove('./{0}.address.txt'.format(args.wallet_name)) + os.remove('./simplewallet.log') + return 1 + elif args.match_anywhere: + print "Target: {0}, Address: {1}".format(args.target, address) + if args.target in address: + print "success2!" + with open('./{0}_info.txt'.format(args.wallet_name), 'w') as f: + f.write("Name:\n{0}\n\nAddress:\n{1}\n\nView key:\n{2}\n\nElectrum seed:\n{3}".format( + args.wallet_name, address, view_key, electrum)) + return 0 + else: + os.remove('./{0}'.format(args.wallet_name)) + os.remove('./{0}.keys'.format(args.wallet_name)) + os.remove('./{0}.address.txt'.format(args.wallet_name)) + os.remove('./simplewallet.log') + return 1 + + +if __name__ == "__main__": + if not args.match_anywhere: + print "You're target is {0} characters, expect to need {1} attempts to match at begininning of address".format(len(args.target), 62**len(args.target)) + elif args.match_anywhere: + print "You're target is {0} characters, expect to need {1:.0f} attempts to match anywhere in the address".format(len(args.target), 1.0/((94.0-len(args.target))*(62.0**(94-len(args.target)))/(62.0**94))) + print 'starting' + time.sleep(1) + print '...' + time.sleep(1) + n = 1 + t = time.time() + while True: + print "Attempt #{0}, total time = {1:.2f} seconds".format(n+1, time.time()-t) + out = createWallet() + if out == 0: + break + n += 1 +