I want to make clear that I've already performed said transactions, so I'm not asking this because I want to do it right now. I'm just curious.

Basically, I've spent a number of very sweaty and nervous days "rearranging" most of my coins so that they will finally end up in an encrypted cold storage wallet.dat, after having spent years fully unencrypted and regularly coming into contact with my main PC. Yes, I know it's insane, but I was not just lazy, but also seriously worried that I'd end up losing access to my coins by forgetting the passphrase. That's why I never did it.

Anyway, I've been forced to pay two Bitcoin transaction fees when sending the coins to myself twice. Although I probably would not have ended doing it if it's complicated/scary, is there some way that I could have just "transferred" the coins by, I don't know, typing some kind of private key dump command in the console of Bitcoin Core and then imported them into the new wallet or something?

Or is the only technical way to move funds between wallets to use the Bitcoin network and thus announce to the world that "somebody sent X BTC"?

3 Answers 3


The network comes to consensus on how much Bitcoin is held at individual addresses. If you want the network and the blockchain to recognize a certain amount of Bitcoin is held at a new address rather than an old one you can't avoid broadcasting a transaction and paying a fee. Of course there are offchain methods of transferring value like Lightning and Liquid between addresses but the Bitcoin blockchain does not know of these transfers.


Bitcoin funds are held in Unspent Transaction Outputs (UTXO). They can be spent by fulfilling the conditions of the associated locking script which generally means being able to sign with a specific private key. Wallets are essentially a key ring for private keys with some convenience functionality for better UX. If you are worried that a wallet may have been compromised, it is necessary that you store the funds in a new UTXO so that they are no longer spendable by the potentially compromised private key. This necessarily involves on-chain transactions as there is no other way to update which private key spends the funds.

If you are exclusively worried about being compromised in the future, you could encrypt your existing wallet and delete all unencrypted copies and thereby forego the on-chain transactions.

If you are seriously stepping up your security procedures, you should probably eat the transaction cost to turn a new leaf and start with a fresh wallet.


Let me define "funds being in a wallet" as "funds (outputs) being able to be spent by anyone who has the private key of the wallet". Unless you sign and broadcast a transaction that will be included in a block, your funds are in your previous wallet.

You could sign low-fee transactions and publish them every two weeks. One day, when there is less congestion, it'll be the part of the blockchain.

Instead of making two transactions from different source wallets, you can dump private key from one of them and import to other to make one larger transaction with lower total fees and a larger quantity of inputs.

Or you could just import the private key. Be aware that then your funds in your new address is secure as min(previous wallet,next wallet).

If someone gave me a private key with funds in it, I would sweep them ASAP. If the private key is mine, I would just import and forget about it.

Transfers without broadcasting transactions are known as off-chain payment protocols. The most famous ones are Lightning and Liquid, and these require an initial on-chain transfer.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.