mirror of
https://github.com/jwinterm/SimpleVanity.git
synced 2026-10-17 05:51:25 +02:00
First commit - implementing single threaded CLI interface
This commit is contained in:
Executable
+110
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user