Partially signed bitcoin transactions
Also covering BIP174 and PSBT
Partially Signed Bitcoin Transactions (PSBTs) are a data format that allows wallets and other tools to exchange information about a Bitcoin transaction and the signatures necessary to complete it.
A PSBT can be created that identifies a set of UTXOs to spend and a set of outputs to receive that spent value. Then information about each UTXO that’s necessary to generate a signature for it can added, possibly by a separate tool, such as the UTXO’s script or its precise bitcoin value.
The PSBT can then be copied by any means to a program that can sign it. For multisig wallets or cases where different wallets control different inputs, this last step can be repeated multiple times by different programs on different copies of the PSBT. Multiple PSBTs each with one or more necessary signatures can be integrated into a single PSBT later. Finally, that fully signed PSBT can be converted into a complete ready-to-broadcast transaction.
The basic details about PSBTs and a specification for the original version 0 PSBTs are published in BIP174. Version 2 PSBTs are described in BIP370. There are no version 1 PSBTs.
Primary code and documentation
Optech newsletter and website mentions
2024
- BIP353 adds a new standard field to PSBT outputs for DNSSEC proofs
- BIPs 328, 390, and 373 added with specifications for MuSig2 key derivation, descriptors, and PSBTs
- Continued discussion about using PSBTs with silent payments
- Discussion about using PSBTs with silent payments
- BTCPay Server #5852 adds support for scanning BBQr animated QR codes
- Rust Bitcoin #2458 adds support for signing PSBTs that include taproot inputs
- Proposed BIP specifying how to include descriptors in PSBTs
2023
- BBQr encoding scheme announced for encoding PSBTs and other data
- Proposed BIP for MuSig2 fields in PSBTs
- Bitcoin Core #25796 adds a new
descriptorprocesspsbt
RPC for updating a PSBT - Bitcoin Core #25939 allows nodes with txindex enabled to add txs with
utxoupdatepsbt
RPC
2022
- LND #7122 adds support for importing PSBTs from binary files
- Rust Bitcoin #957 adds an API for signing PSBTs
- BIPs #1293 adds BIP372 for including Pay-to-contract tweak fields in a PSBT
- Bitcoin Core #22558 adds support for BIP371’s additional PSBT fields
- LND #6450 adds support for signing PSBTs that spend taproot outputs
- HWI #549 adds support for PSBT version 2
- BIPs #1270 updates the PSBT specification to discourage signature placeholders
- Rust Bitcoin #669 improves partial signature support with discussion about nulldummy vectors
- Rust Bitcoin #681 adds support for BIP371’s additional PSBT fields for taproot
- Bitcoin Core #23718 adds support for displaying hashes and preimages contained in PSBTs
- Bitcoin Core #17034 adds support for version 2 PSBTs and for preserving proprietary fields
2021
- Bitcoin Core #22513 allows walletprocesspsbt to sign without finalizing
- LND #5363 allows PSBTs to be finalized by external software
- MIME type proposed for PSBTs
- BIP174.org simplifies decoding and modifying PSBTs
- BIPs #1139 adds BIP371 specifying new fields for using PSBTs with P2TR spends
- PSBT extensions for taproot
- LND #5291 improves the way it ensures PSBTs use segwit inputs
- BlueWallet v6.1.0 adds support for using PSBTs with watch-only wallets
- C-Lightning #4428 switches an RPC to accepting PSBTs for enhance validation
- BIPs #1059 publishes the draft specification for v2 PSBTs as BIP370
- BIPs #988 updates BIP174 to require output fields be initialized
- BIPs #1055 updatse BIP174 with new versioning information
- LND 0.12.0-beta adds a new
psbt
wallet subcommand for PSBTs
2020
- New PSBT Toolkit software provides GUI for working with PSBTs
- A new backwards-incompatible version of PSBT is proposed
- LND #4389 adds a new
psbt
wallet subcommand for creating & signing PSBTs - Joinmarket 0.7.0 adds support for PSBTs
- BIPs #955 updates BIP174 PSBT to standardize supplying hash preimages
- Bitcoin Core #18654 adds new RPC specifically for RBF fee bumping PSBTs
- BIP174 specification of PSBT updated in response to fee overpayment attack
- LND #4455 makes it safe to batch open channels using PSBTs
- Field Report: Using PSBT at River Financial
- Initial release of Lily Wallet supports PSBTs
- Electrum 4.0.1 replaces their partial transactions format with PSBTs
- C-Lightning #3775 adds RPCs for creating and using PSBTs
- Bitcoin Core #19215 adds additional data to PSBTs for segwit inputs
- Bitcoin Core #18027 adds GUI support for signing & broadcasting PSBTs
- C-Lightning #3738 adds initial support for creating PSBTs
- LND 0.10.0-beta released with support for funding channels using PSBTs
- LND 0.10 presentation: funding channels using PSBTs
- Bitcoin Core #17509 allows saving and loading PSBTs from files
- LND #4079 adds support for funding channels with PSBTs
- Bitcoin Core #17264 includes HD derivation path in PSBTs by default
- CKBunker using PSBTs for an HSM
- Bitcoin Core #17492 allows the wallet GUI to place a PSBT in the clipboard
- Bitcoin Core #16373 allows the bumpfee RPC used for RBF to return a PSBT
2019
- Range of identifiers allocated to proprietary PSBT extensions
- Modifying BIP174 for extensibility
- Update to the utxoupdatepsbt RPC in Bitcoin Core
- PSBT enhancements included in Bitcoin Core 0.18
- Discussion of PSBT extension fields
- Three new Bitcoin Core RPCs for managing PSBTs
2018
- New Bitcoin Core RPCs for initial PSBT support
- Features included in Bitcoin Core 0.17
- PSBT discussion
See also
Previous Topic:
Proof of reserves
Next Topic:
Point Time Locked Contracts (PTLCs)