Send a test transaction first
Before you move the balance, move five dollars along exactly the same route and watch it arrive. It is the cheapest way to find out that something in the chain is wrong.
A bitcoin transaction is final. There is no chargeback, no support desk that can reverse it, and no version of this where money sent to the wrong address comes back. A test send is how you find out whether the whole path works while a mistake still costs a few dollars instead of everything.
The method is unglamorous. Before moving the balance from your hot wallet to cold storage, send a token amount along exactly the same route, and watch it arrive at the other end. Twenty minutes, most of it waiting.
A laptop showing a wallet's send screen beside a hardware wallet displaying the same receive address, with a finger tracing the characters in the middle of the string.
Image to come
What the test proves, and what it does not
Worth being precise about this, because it is easy to run the test, watch it succeed, and draw a bigger conclusion than you earned.
- The address you copied is the address the coins actually reached.
- Your cold wallet knows about those coins — the right account, the right address type, the right derivation. That is a different claim from the address merely existing.
- The route works end to end: your sending wallet built it, the network accepted it, the fee was enough, it confirmed.
- You have now done it once, so the transfer that matters is a repeat rather than a first attempt.
And the things it says nothing about:
- It does not prove you can spend from cold storage. Receiving needs only a public address. Spending needs the device, the PIN, and a signature — none of which were exercised here.
- It does not prove your backup works. That is a separate drill with a separate failure mode. See testing your recovery.
- It does not prove the next address is right. The proof attaches to this destination, on this day, from this wallet. Change any of those and you are testing something new.
Before you start
- The cold wallet already set up, with its recovery words written down and stored.
- The hot wallet holding the coins, with enough to cover the test amount plus fees.
- A way to see the cold wallet's balance — the wallet software paired to your signing device, or a watch-only wallet.
- A current fee estimate. How fees work covers reading one.
1Decide what a few dollars means today
The amount you send is not the cost of the test. It is your money going to your own wallet — you keep it. What the test costs is the fee to send it, and later the fee to spend it again.
That second fee is the one that decides how small you can sensibly go. Everything you receive arrives as a UTXO, an individual chunk your wallet must one day spend, and the fee to spend a chunk depends on its size in bytes rather than its value. Send too little and you create an output that costs more to move than it is worth — economically dust, even when it sits well above the protocol's own dust threshold.
So: enough that spending it later during a busy mempool would still leave most of it intact. A few dollars is a reasonable floor when fees are calm, and worth raising when they are not. The upper bound is the amount you would genuinely shrug at losing, because that is the whole point of the exercise.
2Get a receive address, and verify it on the device
Generate a fresh, unused receive address in the wallet software paired to your cold storage. Then display that same address on the signing device's own screen and compare the two.
This is the step, not a formality around it. Malware that quietly substitutes an address in the clipboard or on screen is a well-documented, actively used attack, and the device screen is the only display in the chain that is not attached to the internet. If the two disagree, the computer is lying and you have just caught it.
- Compare the whole string, not the first four and last four characters — lookalike addresses are generated to match at both ends.
- Use QR transfer rather than copy and paste where both ends support it.
- Never accept an address that arrived by message, email, or screenshot. Derive it yourself, on the device.
- If your cold wallet has no screen of its own, you have no independent display to check against — be correspondingly more careful about the machine you are deriving it on.
3Send it
Back in the hot wallet, enter the address, the amount, and a fee rate. Check the address once more on the sending side before you approve — this is the last screen where a substitution can still be caught.
Do not pick the cheapest possible fee. You are buying information, and a test that sits unconfirmed for three days has not told you anything yet. Choose a rate that clears in the next block or two, note the transaction id, and leave it alone.
4Watch it land
The transaction goes to the mempool first, unconfirmed, and then into a block. One confirmation is plenty for a test of this size.
Where you watch it from matters more than people expect. Pasting your own address into a public block explorer tells a third party, alongside your IP address, exactly which address you are interested in — which is a fair summary of the thing you were trying not to publish. Your own wallet is the better window, and your own node is better still.
5Check the cold wallet, not the explorer
The result you are looking for is your cold wallet displaying the coins. An explorer showing the address funded is a weaker claim: it says the address received money, not that the wallet you intend to rely on can see it.
If the explorer shows the funds and your wallet shows zero, the test has just done its job. Something in the setup — the account, the address type, the derivation path, the watch-only export — does not match, and you have found out for the price of the test rather than the price of the balance. Work through the troubleshooting list at the foot of this page before sending anything else.
6Then send the rest
Use a fresh receive address for the real transfer rather than the one you just tested. Address reuse links the two payments together publicly for no benefit, and the proof you just built belongs to the wallet, not to that one address. Verify the new address on the device screen as well — that check is per-address, every time.
One transaction for the whole balance is cheaper to spend later than several small ones; several give you separate chunks you can move independently. Neither is wrong, and coin control covers the trade-off if it matters to you.
The step most people skip
Once the real transfer has settled, sign one small spend back out of cold storage to your hot wallet. It costs a single fee and it closes the gap this whole page leaves open: the device, the PIN, the signing flow, and — if you are working air-gapped — the business of carrying a PSBT out and the signature back.
A wallet you have only ever sent money to is a wallet you have never actually used.
Do it now, while the amount is small and nothing depends on the answer. Then run the recovery drill, which is the last thing standing between a working setup and one you have genuinely checked.
When to run it again
- A new device, or a new wallet on an existing one.
- A wallet restored from backup, or rebuilt on different software.
- A change of address type or account — the addresses change, so the proof does not carry over.
- A new destination of any kind, including one belonging to somebody else.
- Before any transfer large enough that you would want to have checked.
When it does not arrive
Nothing here is an emergency, and none of it is fixed by handing your recovery words to somebody offering to help.
- Still unconfirmed after several hours. The fee was too low for current conditions. Stuck transactions covers bumping it or waiting it out.
- Confirmed on-chain, invisible in your wallet. Usually the wallet is watching a different account or script type, or has not scanned far enough ahead to see the address. Check the derivation path and force a rescan.
- Watch-only wallet showing nothing. Confirm it is synced and pointed at a working server before concluding anything about the transaction.
- Nothing at that address at all. Look up the transaction id and read the output address. If it is not the one you verified, the address was substituted somewhere between the two screens — stop, and treat the sending machine as compromised.
- Sent to the wrong address. There is no recovery. This is the outcome the test exists to make survivable, and the reason it was five dollars.
If you take one thing from this page
The test is not a ritual for the nervous — it is the only point in the process where being wrong is cheap. Spend the fee, wait the ten minutes, and let a mistake cost five dollars instead of the balance.