I DO IT FOR FUN!!!111
#!/usr/bin/env python3
from multiprocessing import Pool
import datetime
import ecdsa
import hashlib
import os
import random
import sys
import time
import secp256k1 as ice
def log(t):
d = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f'{d} {t}', flush=True, end='')
l=open('log.txt','a')
l.write(f'{d} {str(t)}')
l.flush()
l.close()
def go(pvk):
h=ice.privatekey_to_h160(0, True, pvk) # type = 0 [p2pkh], 1 [p2sh], 2 [bech32] ; compressed?
if h==target_hash:
print()
log(f'Found pvk: {hex(pvk)[2:]} | WIF: {ice.btc_pvk_to_wif(pvk, False)}\a\n')
print('\a', end='', file=sys.stderr)
range_start = 0x80000000000000000
range_end = 0xfffffffffffffffff
r = 262144
target_hash = bytes.fromhex('e0b8a2baee1b77fc703455f39d51477451fc8cfc')
th = 24
cnt=10000
# seed=0
def main():
try:
os.system('cls||clear')
print("Puzzle 68 random scanner")
print("Scanning random addresses in an infinite loop. Press Ctrl+C to stop.\n")
keys_checked = 0
start_time = time.time()
# random.seed(seed)
while True:
rnd = random.randint(range_start, range_end+1)
rng = range(rnd, rnd+r)
with Pool(processes=th) as p:
for result in p.imap(go, rng):
keys_checked += 1
if keys_checked % cnt == 0:
elapsed = time.time() - start_time
rate = keys_checked / elapsed
print(f"\rKeys checked: {keys_checked:,} | Rate: {rate:.2f} keys/sec | Range: {hex(rnd)[2:]}-{hex(rnd+r)[2:]}", end="", flush=True)
except KeyboardInterrupt:
print("\n\nScanning stopped by user.")
print(f"Total keys checked: {keys_checked:,}")
if __name__ == "__main__":
main()
~43200 keys/sec @ 24 threads with 9950X
#!/usr/bin/env python3
import datetime
import os
import random
import sys
import time
from multiprocessing import Pool
import secp256k1 as ice
# Configurazioni
RANGE_START = 0x80000000000000000
RANGE_END = 0xfffffffffffffffff
RANGE_SIZE = 262144
TARGET_HASH = bytes.fromhex('e0b8a2baee1b77fc703455f39d51477451fc8cfc')
NUM_PROCESSES = 24
PROGRESS_COUNT = 10000
CHUNK_SIZE = 1024
def log(message):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
formatted = f"{timestamp} {message}"
print(formatted, flush=True, end='')
with open('log.txt', 'a') as logfile:
logfile.write(formatted)
logfile.flush()
def check_key(pvk):
h = ice.privatekey_to_h160(0, True, pvk)
if h == TARGET_HASH:
message = f"Found pvk: {hex(pvk)[2:]} | WIF: {ice.btc_pvk_to_wif(pvk, False)}\a\n"
print()
log(message)
print('\a', end='', file=sys.stderr)
return 1
def main():
os.system('cls||clear')
print("Puzzle 68 random scanner")
print("Scanning random addresses in an infinite loop. Press Ctrl+C to stop.\n")
keys_checked = 0
start_time = time.time()
try:
with Pool(processes=NUM_PROCESSES) as pool:
while True:
start_range = random.randint(RANGE_START, RANGE_END - RANGE_SIZE)
end_range = start_range + RANGE_SIZE
current_range_str = f"{hex(start_range)[2:]}-{hex(end_range)[2:]}"
for _ in pool.imap_unordered(check_key, range(start_range, end_range), chunksize=CHUNK_SIZE):
keys_checked += 1
if keys_checked % PROGRESS_COUNT == 0:
elapsed = time.time() - start_time
rate = keys_checked / elapsed if elapsed > 0 else 0
print(f"\rKeys checked: {keys_checked:,} | Rate: {rate:.2f} keys/sec | Range: {current_range_str}", end="", flush=True)
except KeyboardInterrupt:
print("\n\nScanning stopped by user.")
print(f"Total keys checked: {keys_checked:,}")
if __name__ == "__main__":
main()
a little better, just for fun ;-)