seedrecover.py tests a seed candidate, it needs something to compare the derived addresses against. Normally you provide a known receiving address or master public key. If you have neither, you can use an address database — a compact on-disk lookup table built from blockchain data that lets the tool check any generated address against every address that has ever appeared on-chain.
There is no real performance penalty for using an address database. The seed search runs at roughly the same speed whether it is comparing against one address or 600 million. The main cost is the one-time effort of downloading the blockchain and building the database.
Pre-made address databases
Pre-built address databases for several chains are available for download: cryptoguide.tips/btcrecover-addressdbs Download the file, unzip it, then pass the full path toseedrecover.py:
Database size and the --dblength parameter
The database is a fixed-size hash table. You must choose its maximum capacity before creation using --dblength, expressed as a power of 2.
--dblength 30reserves space for 2^30 (~1 billion) addresses and creates an ~8 GB file. This is the default.- If the blockchain contains more addresses than the database can hold, the creation script will crash. Increase
--dblengthby 1 and retry. - File size depends on the maximum capacity, not the number of addresses actually stored. For smaller chains, use a smaller
--dblengthto avoid wasting disk space.
Recommended parameters by chain (as of January 2021)
| Coin | Blockchain size | AddressDB size | Recommended --dblength |
|---|---|---|---|
| Bitcoin | 561 GB | 16 GB | 31 |
| Bitcoin Cash | 155 GB | 4 GB | 29 |
| Litecoin | 133 GB | 4 GB | 29 |
| Vertcoin | 5 GB | 32 MB | 22 |
| Monacoin | 2.5 GB | 32 MB | 22 |
| Ethereum | N/A (BigQuery, ~250M addresses) | 4 GB | 29 |
| Dogecoin | N/A (BigQuery, ~60M addresses) | 1 GB | 27 |
If you have plenty of disk space and don’t want to think about sizing, leave
--dblength at the default. The resulting 8 GB file works for Bitcoin and all smaller chains.Creating an address database from blockchain data
Direct blockchain parsing is supported for:- Bitcoin
- Bitcoin Cash
- Litecoin
- Vertcoin
- Monacoin
Ensure sufficient disk space and RAM
You need space for the full blockchain plus RAM equal to roughly double the final AddressDB size. For Bitcoin this means 16+ GB of RAM. Smaller chains require significantly less.You must use a 64-bit Python installation.
Install and sync a full-node client
Install the full-node client for your chosen chain and let it fully sync:
- Bitcoin: Bitcoin Core
- Bitcoin Cash: Bitcoin ABC
- Litecoin: Litecoin Core
- Vertcoin: Vertcoin Core
- Monacoin: Monacoin Core
-dbcache option (e.g. -dbcache 4000 for 4 GB) to speed up the initial sync.Close the full-node client
Once fully synced, shut down the full-node software before running the database creation script.
Run create-address-db.py
Double-click The script reads blockchain data from the default install location. For an alternative blockchain or install path, use The output file
create-address-db.py (rename to .command on macOS first), or run it from the terminal:--datadir:addresses.db is saved in the same directory. This step takes roughly one hour for Bitcoin and uses about 4 GB of RAM and disk space.Limiting by date range
To create a database covering only a specific time window, use--blocks-startdate and --blocks-enddate (format: YYYY-MM-DD). This reduces RAM and disk space requirements and is useful if you know roughly when your wallet was active:
Skipping early block files
To skip block files you know are before your date window, use--first-block-file:
Creating an address database from an address list
For chains where direct blockchain parsing is not supported (Ethereum, Dogecoin, etc.), you can build the database from a plain-text list of addresses. This is also useful when you have blockchain data from Google BigQuery or Blockchair database dumps.--multifileinputlist:
--update:
Address list sources
Google BigQuery — Useful SQL queries for extracting all addresses are available for Bitcoin, Ethereum, Dogecoin, Bitcoin Cash, and Litecoin in the BTCRecover documentation. Note that BigQuery data is updated every 1–2 months; check the “Last Modified” timestamp for the dataset you use. Blockchair database dumps — Blockchair distributes.tsv.gz files at blockchair.com/dumps. These compressed files can be passed directly to --inputlist without decompressing. Note that Blockchair lists only include addresses with a current balance, which differs from the BigQuery approach (which includes all addresses that ever had a balance). This can cause issues with address generation limits.
Ethereum-ETL — For EVM-compatible chains with a Geth or Parity node, use ethereum-etl to export transaction data, then process it with utilities/addrListsFromETLTransactions.py to produce address lists. This approach requires several TB of disk space for the node and ETL output.
Verifying an address database
Usecheck-address-db.py to confirm that a database contains specific addresses:
--checkaddresslist:
Using a test database
The repository includes small test databases covering 24 hours of addresses for each supported chain. These are useful for verifying your setup:1 substituted for the first word):
Related pages
Seed recovery overview
What you need to start a seed recovery
Derivation paths and altcoins
Choose the right wallet type and path for your coin