Lesson learned the hard way: I lost a small value of bitcoins due to foolishly backing up private keys to a file which was uploaded to a cloud server. My wallet used to be bitcoin core.

Right now my keys are in electrum with an air gapped laptop wallet and a watching wallet.

I'd prefer to use bitcoin core because having my own blockchain is preferable.

I know you can use bitkey, but as a Windows user, but it seems too complex.

I'm considering the following solution, and would welcome comments.

Currently, I still run bitcoin core with an empty wallet, on my desktop PC connected to the internet. The blockchain is on a separate SSD disk and I run the empty wallet to keep the blockchain up to date.

I would then keep a core wallet holding the keys to my coins, on the air gapped laptop. When I want to send or receive bitcoins I would move the SSD to the laptop. The SSD would use a SATA to USB connector, so it would be an easy plug in. As soon as I'd done the send or receive I would move the SSD back to the internet PC.

I assume that the blockchain on the SSD would resynch the send and receive transactions.

I could use Electrum Personal Server, but this means running other stuff which I don't understand. Armory is another option, but I'd prefer to stick with core.

Is my approach feasible? Secure? Overkill?


If I understand you correctly, Im not sure your system will work, because your air-gapped laptop is never connected to the internet, the transaction wont get broadcast. You can try it, I may be wrong.

I have done a similar process using rawtransactions, where you prepare the rawtransaction on an online computer, using an explorer API (https://chainz.cryptoid.info/api.dws is one that I found works) you get the tx input and vin, create the rawtransaction and save the hex output to a small USB (smaller the better). Then on your airgapped machine use signrawtransaction to sign it, then transfer that hex output back to the online machine and sendrawtransaction.

I automated that process in Python, you can see how it works in more detail on my github https://github.com/Scalextrix/coinofflinewallet

It worked with QR codes as well for a fully airgapped solution, but I had a lot of trouble with the Python webcam/QRcode libraries and ended up not bothering. My code is not extensively tested, its really an example, you should validate it fully before use.

  • I think I might try it. – Sal P Mar 21 '20 at 22:38
  • It seems to me no different to disabling the network connection and then reconnecting, which you can do from the bottom right of the GUI client. Any transactions sent to the local blockchain should be synchronised when the SSD is moved back to online computer. – Sal P Mar 21 '20 at 22:46

The approach does work.

From the offline setup I sent myself a small amount of BTC.

When the SSD was returned to the online computer, it caught up. The sent coins have been sent and subsequently received.

Apart from the potential inconvenience of moving the disk containing the blockchain between the 2 computers, it's very simple, and it works.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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