Why PSBT is Ideal for Offline Signing
PSBT (Partially Signed Bitcoin Transaction) is ideal for offline signing because it completely separates the steps of "transaction construction" and "signing." The cold device only needs to process a transaction data package containing no private keys. After signing, it sends the signed transaction back to the hot device for broadcasting, ensuring the private key never touches the network.
PSBT Solves Two Core Offline Signing Challenges
The two biggest risks of offline signing are: the cold device cannot see the full transaction details (e.g., it doesn't know how much is being sent or to whom), and the hot device could tamper with the signed transaction data before broadcasting.
PSBT is a standardized format (BIP-174) that carries complete transaction metadata. Each input includes UTXO details, amount, public key, and derivation path, etc. After receiving the PSBT, the cold device doesn't need to connect to the internet to check balances or addresses—all information is packaged in this data package, allowing it to independently verify the legitimacy of each input and output. Once signing is complete, the PSBT structure locks the signed parts, so the hot device cannot modify the signed content before broadcasting—it can only extract and broadcast.
Offline Signing Steps
Prerequisites:
An internet-connected device (hot end, used to check balances and initiate transactions)
A cold device (cold end, such as an air-gapped wallet or hardware wallet, where the private key is stored and never connected to the internet)
Data transfer between the two devices is done via QR codes or micro-SD cards, not via USB, Bluetooth, Wi-Fi, or any potentially compromised communication method.
Step 1: Create PSBT on the Hot End
Open a Bitcoin wallet that supports PSBT (e.g., Electrum, Bitcoin Core, Sparrow). Enter the recipient address and amount, select "Create PSBT" or "Export partially signed transaction." The wallet will generate an unsigned PSBT file or Base64 string. The hot end does not have the private key and cannot complete the signing.
What defines completion: The PSBT file/string has been exported and is ready to be transferred to the cold device.
Step 2: Transfer to the Cold Device via Offline Channel
Use the hot end to generate a QR code, or save the PSBT file onto a micro-SD card, and physically transfer it to the cold device. Do not transmit via Bluetooth, Wi-Fi, or USB—all wireless and wired connections can be subject to side-channel attacks.
What defines completion: The cold device has successfully read the PSBT content and can see the transaction amount, addresses, and UTXO details for each input.
Step 3: Verify and Sign on the Cold Device
The cold device parses the PSBT and verifies that the UTXO amounts for each input match the expected transaction. Once confirmed, use the private key inside the cold device to sign the transaction. After signing, export the signed PSBT (still containing partial or complete signature information).
What defines completion: The signed PSBT has been exported, ready to be transferred back to the hot end.
Step 4: Transfer Back to Hot End and Broadcast
Transfer the signed PSBT back to the hot end via QR code or micro-SD card. The hot end imports the PSBT, verifies that all required signatures have been collected, then extracts the complete transaction and broadcasts it to the Bitcoin network.
What defines completion: The transaction shows "Confirmed" on a block explorer (usually requires 1-6 block confirmations, about 10-60 minutes, depending on network congestion).
Common Failure Causes
Failure 1: Incomplete UTXO Information in PSBT
If the hot end did not provide full UTXO details for each input when creating the PSBT (e.g., missing witness_utxo), the cold device cannot verify the amount and will either refuse to sign or produce an invalid transaction. Solution: Ensure the wallet creating the PSBT exports complete UTXO information.
Failure 2: Cold Device Fails to Parse PSBT
Different wallets implement PSBT to varying degrees. If the cold device displays "Unable to parse" or "Unknown global field," the PSBT may contain extension fields not supported by that device. Try recreating the PSBT with a wallet that supports the BIP-174 standard.
Failure 3: Incorrect Signing Order (Multi-Signature Scenarios)
Multi-signature transactions require a specific signing order. If signers use combinations like SIGHASH_SINGLE|ANYONECANPAY, they must be combined in a specific order, otherwise the transaction will be rejected by the network.
Risk Reminders
Physical Channel Security: QR codes and micro-SD cards are physical transfers, but they must still be protected from interception or substitution. If a signed PSBT is tampered with, broadcasting it could lead to asset loss.
Insufficient Verification: The cold device must display the full transaction amount and recipient address. If you don't carefully verify, you might sign a transaction sending funds to an attacker's address.
PSBT File Leakage: An unsigned PSBT contains no private keys; if leaked, the worst that can happen is someone sees you plan to transact—funds won't be stolen. However, a signed PSBT contains complete signature data; if leaked, anyone can extract and broadcast it, effectively exposing your transaction prematurely.
How to Confirm Signing is Complete
After importing the signed PSBT, the wallet will show "Transaction Completed" or "Ready to Broadcast" status. If some inputs are unsigned, it will indicate "Insufficient Signatures." Ensure all inputs show a green checkmark in the signature status bar, then click broadcast.
Next Step: Delete the signed PSBT file from the hot end to prevent misuse. Keep a backup of the cold device's private key (e.g., a metal mnemonic plate). Do not relax the physical security requirements for the cold device just because you've completed an offline signing.
