Overview
The offline signing workflow uses Partially Signed Bitcoin Transactions (PSBTs) to transfer transaction data between the online and offline environments:Prerequisites
- Two devices with Bitcoin Core installed
- USB drive or other air-gapped data transfer method
jqfor JSON processing (optional)
This tutorial uses signet for demonstration. For mainnet, omit the
-signet flag from all commands.Setup: Create the Offline Wallet
1
Create encrypted wallet on offline device
On your offline machine, create a wallet with a strong passphrase:
2
Export public descriptors
Export the wallet’s public key descriptors to a file:This creates a JSON file containing public key information only (no private keys).
3
Transfer descriptors to online device
Copy
descriptors.json to a USB drive and physically transfer it to your online device.Setup: Create the Watch-Only Wallet
1
Create blank watch-only wallet
On your online machine, create a wallet that can’t hold private keys:
2
Import descriptors from offline wallet
Import the public descriptors from the offline wallet:You should see multiple
"success": true responses.3
Verify wallet setup
Both wallets now generate identical addresses:The watch-only wallet can track transactions but cannot sign them.
Receiving Bitcoin
Generate a receiving address using either wallet (they produce the same addresses):Spending Bitcoin (Complete Workflow)
1
Create unsigned PSBT on online wallet
Create a funded but unsigned PSBT:This creates a transaction sending 0.009 BTC to the specified address.
2
Transfer PSBT to offline device
Copy
funded_psbt.txt to your USB drive and physically move it to the offline machine.3
Analyze PSBT on offline device
Before signing, verify the transaction details:Check:
- Output addresses are correct
- Amounts match your intention
- Fee is reasonable
4
Unlock wallet with passphrase
Unlock the offline wallet temporarily (60 seconds):
5
Sign the PSBT
Sign the transaction with your private keys:The wallet automatically locks again after 60 seconds.
6
Transfer signed PSBT back to online device
Copy
signed_psbt.txt to USB drive and move to online machine.7
Broadcast the transaction
On the online machine, broadcast the signed transaction:This returns the transaction ID (txid).
8
Verify broadcast
Confirm the transaction was broadcast:
Checking Balance
View balance using the watch-only wallet:trusted- Confirmed balance (spendable)untrusted_pending- Unconfirmed incomingimmature- Coinbase transactions still maturing
Alternative: Using walletcreatefundedpsbt
For more control, usewalletcreatefundedpsbt instead of send:
[] allows automatic coin selection.
Security Best Practices
Backup and Recovery
What to Backup
- Offline wallet seed phrase (if using HD wallet)
- Wallet passphrase (store separately from seed!)
- wallet.dat file from offline wallet (encrypted)
- Descriptors (for recreating watch-only wallet)
Recovery Process
If you need to recover:-
Restore offline wallet:
- Export descriptors from restored wallet
- Recreate watch-only wallet on new online device
- Import descriptors as shown in setup section
Advanced: Multisig with Offline Signing
Combine offline signing with multisig for maximum security:Troubleshooting
”Insufficient funds” on Watch-Only Wallet
Ensure transactions have confirmations:“Wallet is locked” When Signing
Unlock wallet with passphrase:“Private keys are disabled”
You’re trying to sign with the watch-only wallet. Always sign on the offline device.PSBT Decode Error
Ensure PSBT string is complete and not corrupted during transfer. Check file size and compare checksums.Alternative Offline Methods
QR Code Transfer
For small transactions, use QR codes:- Generate PSBT on online device
- Display as QR code
- Scan with offline device camera
- Sign and encode as QR
- Scan QR back to online device
Hardware Wallets
Hardware wallets provide similar security with better UX:- Purpose-built secure element
- Screen for verification
- Direct USB/Bluetooth signing
- Support for multiple cryptocurrencies
Next Steps
PSBT Deep Dive
Learn more about PSBT internals and advanced usage
Multisig
Combine offline signing with multi-signature security