Post
Topic
Board Bitcoin Discussion
Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it
by
Denevron
on 30/03/2025, 11:46:29 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


Code:
Number of mutation options for 68 bit of 30: 17876288714431443296
Number of mutation options for 68 bit of 31: 21912870037044995008
Number of mutation options for 68 bit of 32: 25336755980333275478
Number of mutation options for 68 bit of 33: 27640097433090845976
Number of mutation options for 68 bit of 34: 28453041475240576740
Number of mutation options for 68 bit of 35: 27640097433090845976
Number of mutation options for 68 bit of 36: 25336755980333275478
Number of mutation options for 68 bit of 37: 21912870037044995008
Number of mutation options for 68 bit of 38: 17876288714431443296
Number of mutation options for 68 bit of 39: 13750991318793417920
Number of mutation options for 68 bit of 40: 9969468706125227992
Number of mutation options for 68 bit of 41: 6808417652963570336
Number of mutation options for 68 bit of 42: 4376839919762295216


Bit flipping (mutation) helps to find a solution faster, since there are fewer options than in the general range, and if you split it into 20 people, say from 30 to 50 (change one bit option for each), then you can find it even faster, even on the CPU! But for some reason you don’t want to add my idea to Cyclone  Grin