Post
Topic
Board Bitcoin Discussion
Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it
by
nomachine
on 30/03/2025, 11:14:02 UTC
How were they able to figure out that this happened? They deliberately  things so that they don’t find the right range. I have been here for a long time, but I am only answering now.


Code:
HISTORY = [
    (1, 1), (2, 3), (3, 7), (4, 8), (5, 21), (6, 49), (7, 76), (8, 224), (9, 467), (10, 514),
    (11, 1155), (12, 2683), (13, 5216), (14, 10544), (15, 26867), (16, 51510),
    (17, 95823), (18, 198669), (19, 357535), (20, 863317), (21, 1811764),
    (22, 3007503), (23, 5598802), (24, 14428676), (25, 33185509),
    (26, 54538862), (27, 111949941), (28, 227634408), (29, 400708894),
    (30, 1033162084), (31, 2102388551), (32, 3093472814), (33, 7137437912),
    (34, 14133072157), (35, 20112871792), (36, 42387769980), (37, 100251560595),
    (38, 146971536592), (39, 323724968937), (40, 1003651412950),
    (41, 1458252205147), (42, 2895374552463), (43, 7409811047825),
    (44, 15404761757071), (45, 19996463086597), (46, 51408670348612),
    (47, 119666659114170), (48, 191206974700443), (49, 409118905032525),
    (50, 611140496167764), (51, 2058769515153876), (52, 4216495639600700),
    (53, 6763683971478124), (54, 9974455244496707), (55, 30045390491869460),
    (56, 44218742292676575), (57, 138245758910846492), (58, 199976667976342049),
    (59, 525070384258266191), (60, 1135041350219496382), (61, 1425787542618654982),
    (62, 3908372542507822062), (63, 8993229949524469768),
    (64, 17799667357578236628), (65, 30568377312064202855), (66, 46346217550346335726),
    (67, 132656943602386256302)
]

# The constant in hex: 0x80000000000000000 (2^67)
CONST = 147573952589676412928

for puzzle, key in HISTORY:
    hex_key = hex(key)
    # Multiply key by 1.004 (as in your earlier example)
    multiplied = key * 1.004
    # Check if multiplied value is near a multiple of CONST
    ratio = multiplied / CONST
    print(f"Puzzle {puzzle}:")
    print(f"  Private Key (dec): {key}")
    print(f"  Private Key (hex): {hex_key}")
    print(f"  Multiplied by 1.004: {multiplied:.2f}")
    print(f"  Ratio to CONST (0x800...): {ratio:.10f}")
    print("-" * 50)

The private keys in hex do not directly align with 0x80000000000000000 (no obvious masking or shifting).


--------------------------------------------------
Puzzle 63:
  Private Key (dec): 8993229949524469768
  Private Key (hex): 0x7cce5efdaccf6808
  Multiplied by 1.004: 9029202869322567680.00
  Ratio to CONST (0x800...): 0.0611842585
--------------------------------------------------
Puzzle 64:
  Private Key (dec): 17799667357578236628
  Private Key (hex): 0xf7051f27b09112d4
  Multiplied by 1.004: 17870866027008548864.00
  Ratio to CONST (0x800...): 0.1210976986
--------------------------------------------------
Puzzle 65:
  Private Key (dec): 30568377312064202855
  Private Key (hex): 0x1a838b13505b26867
  Multiplied by 1.004: 30690650821312462848.00
  Ratio to CONST (0x800...): 0.2079679393
--------------------------------------------------
Puzzle 66:
  Private Key (dec): 46346217550346335726
  Private Key (hex): 0x2832ed74f2b5e35ee
  Multiplied by 1.004: 46531602420547723264.00
  Ratio to CONST (0x800...): 0.3153104027
--------------------------------------------------
Puzzle 67:
  Private Key (dec): 132656943602386256302
  Private Key (hex): 0x730fc235c1942c1ae
  Multiplied by 1.004: 133187571376795795456.00
  Ratio to CONST (0x800...): 0.9025140890
--------------------------------------------------

The keys are randomly generated (or pseudo-randomly derived from an unknown seed).

--------

Code:
import math

# Historical data: (puzzle_number, private_key_in_decimal)
HISTORY = [
    (1, 1), (2, 3), (3, 7), (4, 8), (5, 21), (6, 49), (7, 76), (8, 224), (9, 467), (10, 514),
    (11, 1155), (12, 2683), (13, 5216), (14, 10544), (15, 26867), (16, 51510),
    (17, 95823), (18, 198669), (19, 357535), (20, 863317), (21, 1811764),
    (22, 3007503), (23, 5598802), (24, 14428676), (25, 33185509),
    (26, 54538862), (27, 111949941), (28, 227634408), (29, 400708894),
    (30, 1033162084), (31, 2102388551), (32, 3093472814), (33, 7137437912),
    (34, 14133072157), (35, 20112871792), (36, 42387769980), (37, 100251560595),
    (38, 146971536592), (39, 323724968937), (40, 1003651412950),
    (41, 1458252205147), (42, 2895374552463), (43, 7409811047825),
    (44, 15404761757071), (45, 19996463086597), (46, 51408670348612),
    (47, 119666659114170), (48, 191206974700443), (49, 409118905032525),
    (50, 611140496167764), (51, 2058769515153876), (52, 4216495639600700),
    (53, 6763683971478124), (54, 9974455244496707), (55, 30045390491869460),
    (56, 44218742292676575), (57, 138245758910846492), (58, 199976667976342049),
    (59, 525070384258266191), (60, 1135041350219496382), (61, 1425787542618654982),
    (62, 3908372542507822062), (63, 8993229949524469768),
    (64, 17799667357578236628), (65, 30568377312064202855), (66, 46346217550346335726),
    (67, 132656943602386256302)
]

# Calculate exact bit flips between consecutive puzzles
EXACT_FLIPS = []
for i in range(1, len(HISTORY)):
    prev_num, prev_key = HISTORY[i-1]
    curr_num, curr_key = HISTORY[i]
    flips = bin(prev_key ^ curr_key).count('1')
    EXACT_FLIPS.append((prev_num, curr_num, flips))
    print(f"Puzzle {prev_num}→{curr_num}: {flips} bit flips")

print("\nFull flip count table:")
print("Start → End | Bit Flips")
print("-----------------------")
for entry in EXACT_FLIPS:
    print(f"{entry[0]:3} → {entry[1]:3} | {entry[2]:3}")

Puzzle 49→50: 29 bit flips
Puzzle 50→51: 25 bit flips
Puzzle 51→52: 27 bit flips
Puzzle 52→53: 26 bit flips
Puzzle 53→54: 30 bit flips
Puzzle 54→55: 31 bit flips
Puzzle 55→56: 31 bit flips
Puzzle 56→57: 33 bit flips
Puzzle 57→58: 28 bit flips
Puzzle 58→59: 30 bit flips
Puzzle 59→60: 31 bit flips
Puzzle 60→61: 25 bit flips
Puzzle 61→62: 35 bit flips
Puzzle 62→63: 34 bit flips
Puzzle 63→64: 34 bit flips
Puzzle 64→65: 37 bit flips
Puzzle 65→66: 35 bit flips
Puzzle 66→67: 31 bit flips

But bit flips between consecutive private keys are very interesting.  Grin