- Go 1.21+
curlandgunzip(standard on macOS/Linux)
The address list is sourced from loyce.club — a regularly updated dataset of all known funded Bitcoin addresses (~50 million entries).
make fetchThis downloads Bitcoin_addresses_LATEST.txt.gz from http://addresses.loyce.club/Bitcoin_addresses_LATEST.txt.gz, decompresses it, and saves it as Bitcoin_addresses_LATEST.txt in the project root. The file is large (~1 GB uncompressed); loading it into the Bloom filter and map at startup takes a few seconds.
Grab the latest release for your platform from GitHub Releases.
make buildThe binary is written to bin/btc-heist.
./bin/btc-heistBy default it uses all available CPU cores and checks 50 derived addresses per mnemonic. Progress is printed every 5 seconds:
[5s] 42301 keys/s total: 211505 matched: 0
-c int number of CPU cores to use (default: all cores)
-f string file containing BTC addresses (default: Bitcoin_addresses_LATEST.txt)
-n uint addresses to check per mnemonic (default: 50)
-o string output file for found keys (default: found_keys.txt)
Matches are appended to found_keys.txt. BIP39 wallet matches are written as:
mnemonic=<words> address=<address>
Raw private key matches are written as:
wif=<WIF-encoded-key> address=<address>