Recipes
Task-based how-tos. Recipes under Goals, By what you have and By chain are the repo's own; every tested example in them is run by CI. Tasks combine those commands with SwapChan.
Tasks
- Find forgotten money across chains (blocktools + SwapChan)
You have an old seed phrase or wallet file. blocktools turns it into public addresses offline; SwapChan's find_money then looks for funds on those…
- Use a chain without its wallet app (example: older coins like Feathercoin, Peercoin, Qtum)
You don't need a chain's own wallet app: one example is an older coin whose wallet no longer runs, or has no build for your machine. blocktools can…
- Simulate and verify before you sign
Two layers: SwapChan simulates an EVM transaction online; blocktools decodes and checks any transaction offline against what you expect.
Goals
- Decode a transaction before you sign or broadcast it
tx-decode shows what a transaction actually does. It is offline, holds no keys, and works on signed and unsigned transactions.
- Find which derivation path a wallet used
Everything below runs inside the sealed container through sealed-run (the agent sees addresses and paths only) or, for a human at the terminal, via…
- Contract data (EVM): selectors, calldata, logs, returndata, reverts, deploy addresses
Tiny offline stdin→stdout filters: sig-hash, abi-decode, abi-encode, create-address. No network client, no project, no config, no built-in chain list…
- Check whether anything is left (balance only, nothing signed)
recipes/recover.sh FILE - --goal balance runs the right reader, keeps public addresses only, and asks the chain: Esplora for btc/ltc/doge, JSON-RPC for…
- Move everything to a new address (sweep)
recipes/recover.sh in/WALLET DEST [--chain btc|ltc|doge] [--password-file secrets/pw] [--fee-rate N]
- Verify before signing, and sign on an offline machine
The online machine has addresses only. The offline machine has the keys.
- Offline recovery guide (seed phrase or private key → addresses)
This page replaces hand-written recovery scripts (for example SwapChan's embedded JS/Python snippets): every step that touches a seed or key runs…
By what you have
- Armory .wallet
classify reports armory_wallet. Password in secrets/armory.pw (first line; empty for an unencrypted wallet). armory-read prints one uncompressed wif…
- A brainwallet phrase (pre-BIP39 "passphrase -> key")
Before seed words (2011-2015) people typed any sentence into brainwallet.org or bitaddress.org's *Brain Wallet* tab and got a key: the private key is…
- Electrum (seed phrase or wallet file)
Electrum seeds are not BIP39: the version is hashed into the words. seed-to-master tries both, and derive picks Electrum's paths (m/{change}/{i}…
- Ethereum keystore JSON (UTC--... file, MyEtherWallet, Geth)
Password in secrets/keystore.pw. Test vector: the Web3 Secret Storage spec's scrypt example (password testpassword).
- MultiBit Classic .key export
Password in secrets/multibit.pw. Test file: the btcrecover MultiBit fixture.
- A raw private key (hex, WIF, base58, base64)
key-to-addresses tries every encoding that gives 32 bytes and prints addresses on every chain, compressed and uncompressed. Test vector: private key 1…
- A BIP39 seed phrase (12–24 words), possibly with typos
Put the phrase in in/seed.txt. The agent-safe commands below run in the sealed image through ./blocktools run, which prints public data only (addresses…
- "I don't know what this is"
Start with classify. It names the type and prints a fingerprint (first/last 4 hex of a SHA-256) for secrets, and echoes only public items (addresses,…
- Bitcoin Core wallet.dat (and old-coin clients built on Bitcoin Core)
Works for legacy Berkeley DB wallets and SQLite descriptor wallets. The passphrase goes in secrets/wallet.pw (first line; leave it empty if the wallet…
- A BIP32 master private key (xprv)
A one-line xprv… (for example exported from a wallet's "show master private key"). The test input is the BIP84 spec mnemonic's root key (abandon ×11…
- An xpub/ypub/zpub or a bare address (watch-only)
An extended *public* key or an address can't sign anything. You can still list the addresses and check balances.
By chain
- Algorand
Addresses and keys only, from Algorand's own 25-word mnemonic (Pera / algosdk format; the last word is a checksum). It is not a BIP39 seed, so derive…
- Bitcoin
Fully built: addresses (p2pkh, p2sh-p2wpkh, p2wpkh, p2tr), UTXO fetch (Esplora), PSBT sweep, decode, verify, sign behind a typed code, and broadcast…
- BitConnect (BCC), an old coin as a worked example
BitConnect (BCC, collapsed January 2018) is here as a demo of an old wallet.dat from a coin blocktools did not know. The row bcc is unverified: its…
- Cardano
Addresses and keys only. A Shelley-era wallet phrase (Yoroi, Eternl, Lace, Daedalus Shelley; 12/15/24 BIP39 words) goes to key-to-addresses --chain…
- Cosmos Hub
Addresses and keys only. Path m/44'/118'/0'/0/{i} (secp256k1, Keplr/cosmjs default); the recovery preset also tries m/44'/118'/{i}'/0/0 and…
- Ethereum (and EVM chains via --chain-id)
Built: addresses, keystore-open, EIP-1559 and legacy transactions, ETH sweep, ERC-20 transfer with a gas top-up, decode/verify with the chain id, sign…
- Groestlcoin
--chain grs. Same pipeline as Bitcoin, with three differences that the tools handle: base58 addresses and WIF use a Groestl-512 double-hash checksum…
- Litecoin and Dogecoin
Same pipeline as Bitcoin with --chain ltc / --chain doge. Sweep is built (UTXO PSBT). Dogecoin has no segwit, so its inputs carry the full previous…
- Old coins (Peercoin, Namecoin, Feathercoin, Novacoin, Clams, BlackCoin, ReddCoin, ...)
blocktools encodes addresses and WIF for every row in derive --list-chains (each row is checked against an outside key-1 vector from…
- Polkadot
Addresses and keys only. The BIP39 mnemonic goes straight to key-to-addresses --chain dot (Substrate does not use the BIP39 seed: the key comes from…
- Qtum
Qtum uses Bitcoin's key format with its own version bytes (Q..., M..., qc1...) and coin type 2301. Its P2PKH transactions are Bitcoin-legacy: 5 mainnet…
- Solana
Addresses only. Phantom/Solflare path m/44'/501'/{i}'/0' (SLIP-10 ed25519); derive --curve ed25519 also tries the other common layouts.
- Stellar
Addresses and keys only. SEP-0005 path m/44'/148'/{i}' (SLIP-10 ed25519, all hardened); the recovery preset also tries m/44'/148'/{account}'/{i}' and…
- TON
Addresses and keys only. A TON wallet's 24-word phrase uses the BIP39 word list but its own checksum and key derivation (it is NOT a BIP39 mnemonic):…
- Tron
Addresses only (T..., base58check of 0x41 + keccak address). TronLink paths are a derive preset.
- Zcash transparent (t1…)
--chain zec. Transparent only (shielded: see zcash-shielded.md). Builds v5 (NU5, ZIP-244) transactions. Sighashes are checked against the ZIP-243/244…
- Monero
Built: 25-word English seed → spend/view keys → standard address (checked against the monero-python vector); a view-only scan request; host tool…
- XRP Ledger: family seed / key -> address -> sweep Payment
Input types: - A family seed: s... (secp256k1) or sEd... (ed25519). classify calls it xrp_seed. - A BIP39 mnemonic. derive --chain xrp uses…
- Zcash shielded (Sapling) from a BIP39 mnemonic
Status: address + viewing key only. Verified against ZIP-32 Sapling vectors (hard derivation, key components). Not cross-checked against a wallet app's…