Post
Topic
Board Bitcoin Discussion
Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it
by
dastic
on 05/03/2025, 07:38:31 UTC
useless_shenanigans part 2:

Code:
import hashlib
import time
import sympy
import ecdsa
import base58
import random

# Given constants
var_hash160dec = 1282931445580409769159733555522242769745473092945
min_range = 242965459430942930354
max_range = 276313659744993920795
addr = '1MVDYgVaSN6iKKEsbzRUAYFrYJadLYZvvZ'

def match(pk):
    pub_key = ecdsa.SigningKey.from_string(
        pk.to_bytes(32, 'big'), curve=ecdsa.SECP256k1
    ).verifying_key.to_string('compressed')

    return h160 == hashlib.new(
        'ripemd160', hashlib.sha256(pub_key).digest()).digest()

def gen_subproducts(factors, seen: set, idx=0, prod=1):
    if idx == len(factors):
        if prod > 1 and prod not in seen:
            seen.add(prod)
            if match(prod):
                print(f'Key found: {hex(prod)}')
                with open("foundkey.txt", "w") as f:
                    f.write(f"Private key: {hex(prod)}")
                exit()
        return

    factor, exp = factors[idx]
    for i in range(exp + 1):
        if gen_subproducts(factors, seen, idx + 1, prod * (factor ** i)):
            return True

def generate_n():
    rand_divisor = random.randint(min_range, max_range)
    return (var_hash160dec // rand_divisor) * rand_divisor

# Decode target H160
h160 = base58.b58decode_check(addr)[1:]
print(f'Target H160: {h160.hex():>040s}')

while True:
    n = generate_n()
    print(f'Trying n = {n}')
   
    factors = list(sympy.factorint(n).items())
    seen = set()
   
    if gen_subproducts(factors, seen):
        break





Why you chose this range?

min_range = 242965459430942930354
max_range = 276313659744993920795