Skip to main content
Partially Signed Bitcoin Transactions (PSBT) is an interchange format for Bitcoin transactions that are not fully signed yet, together with relevant metadata to help entities work towards signing it. PSBT was introduced in BIP 174 and has been supported in Bitcoin Core since version 0.17.

What is PSBT?

PSBT simplifies workflows where multiple parties need to cooperate to produce a transaction. Common use cases include:
  • Hardware wallets
  • Multi-signature setups
  • Offline signing
  • CoinJoin transactions

PSBT Workflow

The PSBT process involves several distinct roles:
1

Creator

Proposes a transaction by constructing a PSBT with specific inputs and outputs, but no additional metadata.
2

Updater

Adds information about the UTXOs being spent and scripts/public keys involved:
3

Signer

Inspects the transaction and produces partial signatures for inputs they control:
4

Combiner (if needed)

Merges metadata from different PSBTs for the same transaction:
5

Finalizer

Converts partial signatures into final scriptSig and scriptWitness:
6

Extractor

Produces a valid network-format Bitcoin transaction:The finalizepsbt command outputs the final transaction hex if all inputs are signed.

Bitcoin Core PSBT RPCs

Creating PSBTs

createpsbt - Create a PSBT from inputs and outputs:
walletcreatefundedpsbt - Create and fund a PSBT automatically:
This command acts as Creator and Updater, adding inputs, change, and metadata. converttopsbt - Convert unsigned raw transaction to PSBT:

Processing PSBTs

walletprocesspsbt - Add UTXO/key/script data and sign:
descriptorprocesspsbt - Sign using specific descriptors:
utxoupdatepsbt - Add UTXO information from the UTXO set:
utxoupdatepsbt only works for SegWit inputs where UTXO data is available.

Analyzing PSBTs

decodepsbt - Display PSBT in human-readable JSON format:
analyzepsbt - Examine current status and next steps:
Returns information about:
  • Missing signatures
  • Next required role
  • Estimated fee and weight
  • Input status

Combining PSBTs

combinepsbt - Merge multiple versions of the same PSBT:
Use this when multiple signers independently sign the same PSBT. joinpsbts - Concatenate inputs and outputs from multiple PSBTs:
joinpsbts is for CoinJoin-style transactions where PSBTs have different inputs/outputs. For multi-signature workflows, use combinepsbt instead.

Finalizing PSBTs

finalizepsbt - Finalize and extract the transaction:
Returns:
  • hex - Final transaction hex (if complete)
  • complete - Boolean indicating if all inputs are signed

Complete PSBT Example

Here’s a full workflow creating and signing a PSBT:
1

Create and fund PSBT

2

Analyze the PSBT

3

Sign with wallet

4

Finalize and broadcast

PSBT for Offline Signing

PSBTs are essential for offline signing workflows:
  1. Online wallet creates unsigned PSBT
  2. Transfer PSBT to offline wallet (via USB, QR code, etc.)
  3. Offline wallet signs the PSBT
  4. Transfer signed PSBT back to online wallet
  5. Online wallet broadcasts the transaction
See the Offline Signing guide for detailed instructions.

Security Considerations

Always verify PSBT contents before signing:
  • Check all output addresses
  • Verify amounts and fees
  • Ensure inputs belong to your wallet
  • Use decodepsbt and analyzepsbt to inspect details

Advanced Features

Custom Signing

Sign only specific inputs:
The last parameter specifies which input to sign.

Sighash Types

Specify different signature hash types:
Available sighash types:
  • ALL (default)
  • NONE
  • SINGLE
  • ALL|ANYONECANPAY

Next Steps

Multi-signature

Use PSBTs for multi-signature transactions

Offline Signing

Sign transactions on an air-gapped machine