Winnow Rescue
Get the coins out of an old Bitcoin wallet and into a taproot account you already have. One job, done carefully, then it keeps nothing.
What it is
Winnow Rescue is a rescue tool, not a wallet. You give it what you have from the old wallet: recovery words, a single private key, a paper key, or an export from another wallet. It works out where that wallet kept its coins, finds them, proves to itself that they exist, and moves all of them in one transaction to an address you already own in a taproot wallet. Then it is finished.
It is not for everyday use and privacy is not its design goal: it asks an indexing server where your coins are, and it tells you plainly what that server learns before it asks. Nothing in it is novel. Every check it makes is a published standard with published test vectors, which is the point for the one program that handles your raw keys.
Who it is for
| You have | Rescue |
|---|---|
| 12 to 24 recovery words, with or without a passphrase | Walks the standard account paths (BIP44, 49, 84 and 86), then the paths well-known wallets used instead, until it has found every account. |
| An Electrum seed | Reads Electrum's own seed format (standard and segwit). Two-factor seeds are out: a service holds one of those keys. |
| A single key: WIF, a mini private key from a physical coin, or a key dump file | Checks the key's own checksum and network, then looks for coins on every address form that key can have. |
| An extended key or account key | Walks the same paths from that key. |
| A descriptor, a wallet policy or a shared vault made elsewhere | Finds the coins and reports them; signs where you hold a key, otherwise prepares the transaction for the device or wallet that can. |
| Lightning channels, other coins, a hardware wallet with no key material | Out of scope. Rescue says so by name rather than guessing. |
Five steps, the same everywhere
- Enter what you have. Words, a key, or a file. A typo is named by position, never silently accepted.
- Confirm the first address. Before anything is looked up, Rescue shows the first address of each path it will search. If one matches your old wallet, the words and the passphrase are right.
- Find the coins. Rescue asks the indexing server you chose, with a live count and a button to search further. Every coin it reports is proved from its own transaction and block, so a server can hide coins from you but cannot invent them.
- Review. Every coin by type and amount, the one destination address, and the exact fee in sats and as a share of the total. Hold to send.
- Done. One transaction, every coin in, one output, nothing left behind. Rescue tells you plainly whether it is done, waiting, or stalled, and what to do next.
What it checks
- Recovery words against the BIP39 wordlist and checksum; a key against its Base58Check checksum and version byte, so a test-network key never reaches a mainnet sweep.
- The destination against its own checksum, bech32m for taproot; a mistyped address is refused, not sent to.
- Each coin against the transaction that created it, the merkle proof that puts it in a block, and the proof of work on that block, all against a chain of headers Rescue has validated itself from the first block.
- The fee, twice: refused above a tenth of the amount, and refused when the rate is far above two independent estimates. Segwit and taproot inputs sign with the amount committed; for older inputs Rescue fetches the previous transaction first, so the fee it shows is the fee you pay.
- Every signature, verified again before anything is broadcast.
What it never does
- It never holds your coins and never makes an address of its own. The destination is always an address you brought from a wallet you already have.
- It never writes your words or key to disk, never puts them in a log, and never sends them anywhere. They live in memory for the session and are erased when it ends.
- It never runs in a web page. A seed phrase in a browser tab is the thing every rule above exists to prevent.
Where it runs
Rescue is a small Rust program with two faces: a command-line tool, which can also sign on a computer that is kept offline, and a desktop window with the same five steps. Both run on macOS, Linux and Windows. The core is a library on its own, so a wallet can build Rescue into its own screens and finish the restore inside the wallet you are already using.
Status
Winnow Rescue is being built in the open and there is nothing to download yet. The source, the test vectors and the fuzzing live at github.com/winnowwallet/winnowrescue. It is made by the people behind Winnow, the taproot wallet for iPhone, and is a separate program: Winnow itself stays small and carries none of this.