Bitcoin puzzle transaction
- load
- getCollection("b1000")
- puzzles
- 256 · 83 solved · 77 unsolved · 96 swept
- prize recorded
- 1008.52911 BTC
- still unsolved
- 903.015076 BTC
- known material
- 184 public keys · 83 private keys
The puzzle
One transaction in January 2015 funded 254 addresses. Puzzles 1 and 2 were already there, funded in 2013 and 2014. The author later said what the keys were: puzzle n has a private key somewhere in [2^(n-1), 2^n - 1]. The low ones fell in hours. Puzzle 1 is key 1. The high ones are out of reach for anyone without a very specific budget. The middle is where the scanning community lives. The prizes were raised in 2017 and again in 2023, so b1000/71 holds 7.1 BTC today for a key of 71 bits.
An open record declares its width with bits(n). A solved one carries it as the second argument of hex(key, n). Either way keyRange() turns it into the two bigint bounds. The width marks a search space and nothing else, so it's absent on every other collection.
const puzzle = b1000.require(71);
puzzle.keyRange(); // [2n ** 70n, 2n ** 71n - 1n]
puzzle.hasPubkey(); // false by design: no public key, so nothing beats scanning the range
Solved, swept, unsolved
A solved puzzle has its key on the record as hex(…, n).wif(…). The data gate derives the address from it on every test run. The highest published key is 135 bits, solved in July 2026 for 13.5 BTC.
swept is the other large group. Once a puzzle's public key became known, through an earlier spend or a reveal, its address could be attacked with Pollard's kangaroo instead of brute force. And people did. Those records carry the sweep transaction and, where the sweeper published it, the key. The status is written down because the transaction list alone can't tell a sweep from a solve.
b1000.solved().length; // 83
b1000.unsolved().length; // 77
(await selectPuzzles({ collection: "b1000", status: Status.Swept })).length; // 96
The record
export const b1000Puzzle1 = bitcoinPuzzle({
id: "b1000/1",
address: p2pkh("1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH", "751e76e8199196d454941c45d1b3a323f1433bd6"),
sourceUrl: "https://bitcointalk.org/index.php?topic=5218972",
startedAt: "2013-01-09 11:59:15",
status: Status.Solved,
pubkey: compressed("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
key: hex("0000000000000000000000000000000000000000000000000000000000000001", 1).wif(
"KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn",
),
prize: 0.001,
solvedAt: "2013-01-10 02:54:44",
solveTime: 53729,
preGenesis: true,
transactions: [
funding("9223…808e", "2013-01-09 11:59:15", 0.03),
claim("3da9…4277", "2013-01-10 02:54:44", 0.03),
],
});
preGenesis: true marks puzzles 1 and 2, funded in 2013 and 2014 before the January 2015 transaction. That's why puzzle 1 moves 0.03 BTC in its transactions while the recorded prize is the 0.001 the series assigns it. The collection is a NumericCollection. b1000.get(71), b1000.get("71") and b1000.get("b1000/71") all land on the same record.
Every puzzle
One page each: the record, the transactions and the live balance.
b1000.all()256 puzzles
83 solved 77 unsolved 96 swept
every cell is a page, hover for the prize · the key icon marks a published private key
Overview
Ten collections on five chains. Each page says what the puzzle was and what the records carry. The facts strip is read off the library when the page builds.
RushWallet contest
Thirty brainwallets from a 2014 contest. Twenty-eight cracked with their passphrases on the record. No prizes recorded. The contest paid outside the addresses.