PSBT Explained: How an Unsigned Bitcoin Transaction Travels Between Wallets

A hardware wallet cannot sign what it cannot see, and an online wallet cannot sign what it does not hold. PSBT is the format that lets the two cooperate: it packages the transaction, the coins being spent and whatever signatures have been collected into one file that can be passed between machines, inspected, combined and finalised without any of them trusting the others.

CoinSoso EditorialPublished Article #00153Updated

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.

Key takeaways

  • BIP-174 defines PSBT as a sequence of key-value maps with the magic bytes 0x70 0x73 0x62 0x74 0xFF, carrying a global map, one map per input and one per output.
  • The format separates six roles — Creator, Updater, Signer, Combiner, Input Finalizer and Transaction Extractor — so different wallets or machines can perform different steps on the same transaction.
  • A signer must use only the UTXOs provided in the PSBT, must verify that a non-witness UTXO's txid matches the unsigned transaction, and may refuse to sign a segwit input without the full previous transaction because of the BIP-143 fee attack.
  • PSBT version 0 carries a fixed unsigned transaction and cannot add inputs or outputs after creation; BIP-370 (PSBT version 2) removes that limitation and requires PSBT_GLOBAL_VERSION to be set to 2.
  • A PSBT is not a signed transaction. It becomes one only after finalisation and extraction, and a file that has not been finalised will be rejected by a node.

The problem PSBT solves

A Bitcoin transaction is signed by whoever controls the coins it spends. That creates an awkward split in practice: the machine that holds the keys is often offline, and the machine that knows the UTXOs, the change address and the fee is often online. Before PSBT, each wallet had its own way of passing an unsigned transaction to a signer, and two wallets from different vendors frequently could not complete the handoff at all.

BIP-174’s motivation is exactly that: unsigned or partially signed transactions were implementation-dependent, which made it hard for people using different wallet software to pass the same transaction around, sign it and combine the signatures. PSBT standardises the container.

The format’s abstract is precise about what it is for: it holds the information necessary for a signer to produce signatures, and it holds the signatures for an input while the input does not have a complete set. The signer can be offline because all necessary information is in the transaction file.

What is actually inside the file

A PSBT is not a transaction with some signatures missing. It is a set of key-value maps, each terminated by a 0x00 byte, prefixed by a magic number:

<psbt>       := <magic> <global-map> <input-map>* <output-map>*
<magic>      := 0x70 0x73 0x62 0x74 0xFF
<global-map> := <keypair>* 0x00
<input-map>  := <keypair>* 0x00
<output-map> := <keypair>* 0x00

The magic bytes spell psbt followed by 0xFF, which is why a base64-encoded PSBT usually begins with cHNidP. The global map carries data that applies to the whole transaction, such as the unsigned transaction itself in version 0, the PSBT version, and extended public keys. Each input map carries what a signer needs for that input: the UTXO being spent, the redeem script or witness script, derivation paths, the sighash type and any partial signatures already collected. Each output map carries the data needed to verify where the coins are going, including the output’s script and derivation paths.

The separation is the point. A signer can be given the whole PSBT and still only use the parts relevant to the inputs it controls; a coordinator can combine two signed PSBTs without needing either signer’s keys.

Six PSBT roles passing one transaction between machines creator unsigned tx updater UTXOs, scripts signer partial sigs combiner merge finalizer scriptSig extractor raw tx offline signer sees only the PSBT online coordinator never sees a key Roles can be combined in one wallet, but the data boundaries stay the same.
The six roles are not six products. They are six permission boundaries, and a single wallet can perform several of them without collapsing the others.

The six roles, and why the boundaries matter

BIP-174 defines the roles precisely, and the definitions are the best description of what a PSBT workflow is supposed to guarantee.

  • Creator creates the PSBT, places the unsigned transaction in it, and creates empty input and output fields.
  • Updater adds information it has access to: the UTXO for an input, redeem scripts, witness scripts and BIP-32 derivation paths.
  • Signer accepts only a PSBT, uses only the UTXOs provided in it, verifies the data before signing, and adds only partial signatures. If it cannot sign, it must not add a partial signature.
  • Combiner merges signatures and other data from multiple PSBTs for the same transaction.
  • Input Finalizer constructs the final scriptSig or scriptWitness for each input once the required signatures are present.
  • Transaction Extractor assembles the network-serialised transaction from the finalised PSBT.

A wallet can perform several roles at once — a software wallet is commonly Creator, Updater, Combiner, Finalizer and Extractor, while a hardware wallet is the Signer — but the roles exist because the trust assumptions differ. The signer is the only role that touches a private key. The coordinator is the only role that needs to know about all the inputs. The extractor is the only role that produces something a node will accept.

The checks a signer is required to make

The most security-relevant part of BIP-174 is not the encoding; it is the list of things a signer must verify before producing a signature.

For a non-witness input, the signer must verify that the txid of the non-witness UTXO matches the txid specified in the unsigned transaction. For a witness input, it must verify that the witness script, if provided, matches the hash specified in the UTXO or the redeem script, and that the redeem script, if provided, matches the hash in the UTXO.

The BIP then adds a note that explains a failure mode most users have never heard of: the BIP-143 sighash algorithm has a known issue where an attacker could trick a user into sending Bitcoin to fees if they can convince the user to sign a malicious transaction multiple times, because the amounts in PSBT_IN_WITNESS_UTXO of other segwit inputs can be modified without affecting the signature for a particular input. The mitigation many wallets adopt is to require the full previous transaction, so the amounts of the other inputs cannot be tampered with.

That is why a hardware wallet sometimes asks for more than the PSBT. It is not being difficult; it is closing the gap that the format itself documents.

Version 0 and version 2

BIP-174 defines version 0. Its global unsigned transaction is fixed, which means inputs and outputs cannot be added after the PSBT is created. For a simple send, that is fine. For a CoinJoin, where participants add inputs over time, or for a fee-bump workflow, it is a limitation.

BIP-370 defines PSBT version 2. It moves the transaction data into per-input and per-output fields, requires PSBT_GLOBAL_VERSION to be present and set to 2, and requires PSBT_GLOBAL_UNSIGNED_TX to be excluded. The result is a PSBT whose inputs and outputs can be added after creation. Both versions are marked Deployed in the BIP repository, and a wallet that supports only version 0 will reject a version 2 file rather than silently misread it.

The practical consequence is compatibility, not security. A PSBT carries its version, and the roles have to agree on it. If a coordinator builds version 2 and a signer only understands version 0, the failure is at the signer, before any signature exists.

Reading a PSBT before signing

The format makes a transaction inspectable, but inspection is not automatic. A signer that displays only an address and an amount is using the PSBT’s data to render a summary, not to prove that the summary is complete.

Three habits close most of the gap:

  1. Check the fee, not just the outputs. The difference between inputs and outputs is the fee. A PSBT with a correct-looking output and an enormous fee is still a valid PSBT.
  2. Check the change output. A change address that the wallet does not recognise is the signature of a compromised coordinator. The derivation path in the output map is what lets the signer verify it.
  3. Check the network and the script type. A mainnet transaction signed for a testnet wallet, or a script type the signer did not expect, should stop the flow rather than produce a signature the coordinator may not be able to use.

These are the same questions a hardware wallet asks when it shows a transaction, and they are the reason clear signing versus blind signing matters more in a PSBT workflow than in a single-wallet one: the machine that signs is not the machine that built the transaction, so the display is the only place the two can disagree visibly.

Where PSBT fits in a wallet setup

PSBT is the transport that makes a watch-only setup possible. The online wallet holds the xpub and the UTXO set, builds the transaction and finalises it; the offline device holds the key and signs. Neither needs the other’s secret, and the file can move by USB, SD card, QR code or a network message.

The same transport is what makes multisig practical. Each signer returns a partially signed PSBT, the combiner merges them, and the finaliser produces a transaction with the required number of signatures. The threshold rules themselves are a property of the script, not of the PSBT; our guide to multisig thresholds and signer custody covers who can move funds once the script is satisfied.

The derivation paths inside the PSBT connect it to the wallet’s key hierarchy. Why one seed can produce different addresses on different wallets is covered in wallet derivation paths, and what a hardware device does and does not protect against is covered in what a hardware wallet does and does not protect against.

Risk note. The format, role definitions, signer checks and version rules in this article were read from BIP-174 and BIP-370 on 2026-11-02. PSBT implementations vary in which optional fields they include and which checks they enforce; the specification states the minimum, not the whole of what a good signer should display. Nothing here is investment advice.

Sources

How this was researched. Wallet guides describe how key management works in general. Where an article describes a specific product's behaviour, its sources are listed below.

Primary sources for the factual claims on this page. A date appears only where a human has actually read the source; where it is missing, the check is still outstanding.

  1. BIP-174 — Partially Signed Bitcoin Transaction Format (magic bytes, maps, roles, signer checks, BIP-143 fee attack note)(read 2026-11-02)
  2. BIP-370 — PSBT Version 2 (mutable inputs and outputs, PSBT_GLOBAL_VERSION = 2)(read 2026-11-02)

Frequently asked questions

What does PSBT stand for?

Partially Signed Bitcoin Transaction. The name is literal: the format holds a Bitcoin transaction that may have none, some or all of its required signatures, plus the data a signer needs to produce the missing ones.

Is a PSBT the same as a raw Bitcoin transaction?

No. A raw transaction is the serialised bytes a node accepts. A PSBT is a container of key-value maps that includes the unsigned transaction and the metadata around it. The final transaction is produced from a PSBT by the Input Finalizer and Transaction Extractor roles, and only then can it be broadcast.

Why does my hardware wallet ask for the previous transaction as well as the PSBT?

BIP-174 requires a signer to verify that the txid of a non-witness UTXO matches the txid in the unsigned transaction. It also notes that the BIP-143 sighash algorithm has a known issue where the amounts of other segwit inputs can be altered without invalidating the signature for a particular input, which is why many wallets require the full previous transaction to prevent a fee attack.

What is the difference between PSBT version 0 and version 2?

Version 0, defined in BIP-174, contains a fixed global unsigned transaction and cannot have inputs or outputs added after creation. BIP-370 defines version 2, which moves transaction data into per-input and per-output fields and sets PSBT_GLOBAL_VERSION to 2, allowing inputs and outputs to be added after the PSBT is created — a requirement for workflows such as CoinJoin and fee bumping.

Can I broadcast a PSBT directly?

Not a partially signed one. A node expects a fully signed transaction. The PSBT must go through finalisation, which produces the final scriptSig or scriptWitness for each input, and extraction, which assembles the network-serialised transaction. A wallet that offers to broadcast a PSBT is doing both steps for you.

Does a PSBT reveal my keys?

No. It contains public data — the unsigned transaction, UTXOs, scripts, derivation paths and signatures — not private keys. It does reveal which UTXOs belong to the wallet and, depending on the fields included, the derivation paths and master fingerprint, which is why a PSBT should be handled as sensitive transaction data rather than as a public file.

Where to go next

Independent research. Each card shows the platform’s invite code, and its Create Account button is a referral link that may earn us a commission at no extra cost to you. Whether an account can be opened is decided by the platform at sign-up.

Binance

One of the largest global exchanges by traded volume, with a very broad product range.

20% Trading Fee Rebate

Use invite code con888 when signing up to enjoy trading fee benefits.

Download Android App

Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.

Do not install an APK from an unknown source, or one that has been modified or cannot be checked.

Read review →

OKX

A large global exchange offering spot, derivatives and a self-custody wallet.

20% Trading Fee Rebate

Enter invite code con888 when signing up to check available trading fee benefits.

Download Android App

Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.

Do not install an APK from an unknown source, or one that has been modified or cannot be checked.

Read review →