Bitcoin PSBT Key-Type Reference (BIP-174, BIP-370, BIP-371)
Every hardware wallet, multisig coordinator and air-gapped signer speaks PSBT — but the format itself is just three key-value maps, and this page is those maps in full. All 58 registered PSBT key types with their type bytes, v0-vs-v2 inclusion rules and value contents, straight from BIP-174, BIP-370 and BIP-371. For the prose walkthrough of how a PSBT flows between signer roles, see our PSBT guide; for the wallet language PSBTs carry keys for, the output descriptors reference.
Quick answer
A PSBT (partially signed Bitcoin transaction) is a key-value map in three sections — global, per-input, per-output — that wallets, coordinators and signing devices pass around until the transaction is complete. This reference lists all 58 key types in the official registry: name, type byte, scope, the v0 (BIP-174) vs v2 (BIP-370) inclusion rule, and what the value holds — BIP-371 taproot fields included. Notable quirk: PSBT version 1 does not exist; it was deliberately skipped. Every row is spec-verified — including the MuSig2 (BIP-373), silent-payments (BIP-375/376, Draft), proof-of-reserves (BIP-127), BIP-322 message and BIP-353 DNSSEC fields, transcribed from their raw BIP texts.
The v0-vs-v2 rule that trips people up most: in v2 the global unsigned transaction (0x00) goes away — replaced by explicit fields (previous txid, output index, amounts, scripts) that make incremental construction possible. A PSBT reader must check PSBT_GLOBAL_VERSION first. Free CSV/JSON under CC BY 4.0; registry as of 2026-07-26.
Download CSV Download JSON REST API →
Global map 12
| Key type | Hex | Versions | Value | BIP |
|---|---|---|---|---|
PSBT_GLOBAL_UNSIGNED_TX | 0x00 | v0 (required; MUST be excluded in v2) | The transaction in (pre-segwit) network serialization with empty scriptSigs and witnesses. | 174 |
PSBT_GLOBAL_XPUB | 0x01 | both | Keydata is a 78-byte BIP-32 xpub; value is the 4-byte master fingerprint plus the 32-bit LE derivation path indexes for keys used in this transaction. | 174 |
PSBT_GLOBAL_TX_VERSION | 0x02 | v2 (required; excluded in v0) | 32-bit LE signed integer: version number of the transaction being created (not the PSBT version). | 370 |
PSBT_GLOBAL_FALLBACK_LOCKTIME | 0x03 | v2 only (excluded in v0) | 32-bit LE unsigned locktime to use if no input specifies a required locktime. | 370 |
PSBT_GLOBAL_INPUT_COUNT | 0x04 | v2 (required; excluded in v0) | Compact size uint: number of inputs in this PSBT. | 370 |
PSBT_GLOBAL_OUTPUT_COUNT | 0x05 | v2 (required; excluded in v0) | Compact size uint: number of outputs in this PSBT. | 370 |
PSBT_GLOBAL_TX_MODIFIABLE | 0x06 | v2 only (excluded in v0) | 8-bit bitfield: bit 0 = inputs modifiable, bit 1 = outputs modifiable, bit 2 = has SIGHASH_SINGLE signature whose input/output pairing must be preserved. | 370 |
PSBT_GLOBAL_SP_ECDH_SHARE | 0x07 | v2 only (excluded in v0) | Keydata is the 33-byte scan key; value is a 33-byte ECDH share computed as a*B_scan, where a is the sum of all private keys of all eligible inputs and B_scan is the recipient's scan key. | 375 |
PSBT_GLOBAL_SP_DLEQ | 0x08 | v2 only (excluded in v0) | Keydata is the 33-byte scan key the proof covers; value is a 64-byte BIP-374 DLEQ proof computed for the matching ECDH share. | 375 |
PSBT_GLOBAL_GENERIC_SIGNED_MESSAGE | 0x09 | both | No keydata; value is the UTF-8 encoded message to be signed — coordinates BIP-322 multisig message signing through PSBT. | 322 |
PSBT_GLOBAL_VERSION | 0xFB | both (required and set to 2 in v2; 0 if omitted — version 1 was deliberately skipped) | 32-bit LE unsigned PSBT version number. | 174 |
PSBT_GLOBAL_PROPRIETARY | 0xFC | both | Keydata: compact-size identifier length, identifier, compact-size subtype, subkeydata; value: any data defined by the proprietary user. | 174 |
Per-input map 33
| Key type | Hex | Versions | Value | BIP |
|---|---|---|---|---|
PSBT_IN_NON_WITNESS_UTXO | 0x00 | both | Full previous transaction in network serialization; should be present for non-segwit spends, may coexist with WITNESS_UTXO. | 174 |
PSBT_IN_WITNESS_UTXO | 0x01 | both | The spent transaction output (64-bit LE amount + scriptPubKey) for segwit spends, including P2SH-embedded ones. | 174 |
PSBT_IN_PARTIAL_SIG | 0x02 | both | Keydata is the pubkey; value is a valid ECDSA signature as it would be pushed to the stack. | 174 |
PSBT_IN_SIGHASH_TYPE | 0x03 | both | 32-bit LE uint sighash type this input's signatures must use; finalizers must reject mismatching signatures. | 174 |
PSBT_IN_REDEEM_SCRIPT | 0x04 | both | The redeemScript for this input if it has one. | 174 |
PSBT_IN_WITNESS_SCRIPT | 0x05 | both | The witnessScript for this input if it has one. | 174 |
PSBT_IN_BIP32_DERIVATION | 0x06 | both | Keydata is a pubkey needed to sign this input; value is master fingerprint + 32-bit LE path indexes. | 174 |
PSBT_IN_FINAL_SCRIPTSIG | 0x07 | both | Fully constructed scriptSig with signatures and scripts needed for validation. | 174 |
PSBT_IN_FINAL_SCRIPTWITNESS | 0x08 | both | Fully constructed scriptWitness with signatures and scripts needed for validation. | 174 |
PSBT_IN_POR_COMMITMENT | 0x09 | v0-era (BIP-174 input map; no v2 rule stated) | Value is the UTF-8 proof-of-reserves commitment message. Wallets MUST check the prevout txid equals the SHA-256 of the prefixed commitment message, assume input value 0, and SHOULD display the message before signing. | 127 |
PSBT_IN_RIPEMD160 | 0x0a | both | Keydata is the 20-byte hash; value is the preimage hashing to it under RIPEMD160. | 174 |
PSBT_IN_SHA256 | 0x0b | both | Keydata is the 32-byte hash; value is the preimage hashing to it under SHA256. | 174 |
PSBT_IN_HASH160 | 0x0c | both | Keydata is the 20-byte hash; value is the preimage under SHA256 then RIPEMD160. | 174 |
PSBT_IN_HASH256 | 0x0d | both | Keydata is the 32-byte hash; value is the preimage under double-SHA256. | 174 |
PSBT_IN_PREVIOUS_TXID | 0x0e | v2 (required; excluded in v0) | 32-byte txid (standard byte order, not display order) of the transaction whose output is being spent. | 370 |
PSBT_IN_OUTPUT_INDEX | 0x0f | v2 (required; excluded in v0) | 32-bit LE index of the output being spent in the PSBT_IN_PREVIOUS_TXID transaction. | 370 |
PSBT_IN_SEQUENCE | 0x10 | v2 only (excluded in v0) | 32-bit LE sequence number; assumed final (0xffffffff) if omitted. | 370 |
PSBT_IN_REQUIRED_TIME_LOCKTIME | 0x11 | v2 only (excluded in v0) | 32-bit LE uint >= 500000000: minimum Unix timestamp this input requires as the transaction locktime. | 370 |
PSBT_IN_REQUIRED_HEIGHT_LOCKTIME | 0x12 | v2 only (excluded in v0) | 32-bit LE uint > 0 and < 500000000: minimum block height this input requires as the transaction locktime. | 370 |
PSBT_IN_TAP_KEY_SIG | 0x13 | both | 64 or 65 byte Schnorr signature for key-path spending a taproot output (no keydata). | 371 |
PSBT_IN_TAP_SCRIPT_SIG | 0x14 | both | Keydata is x-only pubkey + 32-byte leaf hash; value is the 64/65-byte Schnorr signature for that pubkey-and-leaf combination. | 371 |
PSBT_IN_TAP_LEAF_SCRIPT | 0x15 | both | Keydata is the BIP-341 control block (merkle path); value is the leaf script followed by its single-byte leaf version. | 371 |
PSBT_IN_TAP_BIP32_DERIVATION | 0x16 | both | Keydata is a 32-byte x-only pubkey; value is a compact-size count of leaf hashes, the leaf hashes, then fingerprint + 32-bit LE path (internal key uses count 0). | 371 |
PSBT_IN_TAP_INTERNAL_KEY | 0x17 | both | The x-only pubkey used as the taproot internal key of the spent output. | 371 |
PSBT_IN_TAP_MERKLE_ROOT | 0x18 | both | The 32-byte taproot merkle root hash. | 371 |
PSBT_IN_MUSIG2_PARTICIPANT_PUBKEYS | 0x1a | both | Keydata is the 33-byte compressed MuSig2 aggregate public key from KeyAgg; value is the list of participants' compressed public keys in the order required for aggregation (sorted order if sorting was done). | 373 |
PSBT_IN_MUSIG2_PUB_NONCE | 0x1b | both | Keydata is the participant's 33-byte compressed pubkey + the 33-byte aggregate pubkey + the BIP-341 tapleaf hash of the leaf script to sign (omitted for the internal/output key); value is the 66-byte public nonce from NonceGen. | 373 |
PSBT_IN_MUSIG2_PARTIAL_SIG | 0x1c | both | Keydata is the participant's 33-byte compressed pubkey + the 33-byte aggregate pubkey + the BIP-341 tapleaf hash signed (omitted for the internal/output key); value is the 32-byte partial signature from the Sign algorithm. | 373 |
PSBT_IN_SP_ECDH_SHARE | 0x1d | v2 only (excluded in v0) | Keydata is the 33-byte scan key; value is a 33-byte ECDH share computed as a*B_scan from this input's prevout private key. | 375 |
PSBT_IN_SP_DLEQ | 0x1e | v2 only (excluded in v0) | Keydata is the 33-byte scan key the proof covers; value is a 64-byte BIP-374 DLEQ proof for the matching input ECDH share. | 375 |
PSBT_IN_SP_SPEND_BIP32_DERIVATION | 0x1f | v2 only (excluded in v0) | Keydata is the 33-byte spend public key; value is the 4-byte master fingerprint plus the spend key's 32-bit LE derivation path. Updaters SHOULD add it when spending a silent-payment output; Finalizers remove it after the final scriptwitness. | 376 |
PSBT_IN_SP_TWEAK | 0x20 | v2 only (excluded in v0) | No keydata; value is the 32-byte BIP-352 spending tweak (shared-secret hash, optionally plus the label hash). The Updater MUST add it when an input spends a silent-payment output; Finalizers remove it after the final scriptwitness. | 376 |
PSBT_IN_PROPRIETARY | 0xFC | both | Proprietary use: identifier + subtype keydata, arbitrary value data. | 174 |
Per-output map 13
| Key type | Hex | Versions | Value | BIP |
|---|---|---|---|---|
PSBT_OUT_REDEEM_SCRIPT | 0x00 | both | The redeemScript for this output if it has one. | 174 |
PSBT_OUT_WITNESS_SCRIPT | 0x01 | both | The witnessScript for this output if it has one. | 174 |
PSBT_OUT_BIP32_DERIVATION | 0x02 | both | Keydata is a pubkey needed to spend this output; value is master fingerprint + 32-bit LE path indexes. | 174 |
PSBT_OUT_AMOUNT | 0x03 | v2 (required; excluded in v0) | 64-bit signed LE integer: the output amount in satoshis. | 370 |
PSBT_OUT_SCRIPT | 0x04 | v2 (required; excluded in v0) | The output script (scriptPubKey). | 370 |
PSBT_OUT_TAP_INTERNAL_KEY | 0x05 | both | The x-only pubkey used as the taproot internal key of this output. | 371 |
PSBT_OUT_TAP_TREE | 0x06 | both | Tuples of (8-bit depth, 8-bit leaf version, compact-size script length, script) in depth-first order, reconstructing the whole taproot tree. | 371 |
PSBT_OUT_TAP_BIP32_DERIVATION | 0x07 | both | Keydata is a 32-byte x-only pubkey involved in this output; value is leaf-hash count, leaf hashes, then fingerprint + 32-bit LE path. | 371 |
PSBT_OUT_MUSIG2_PARTICIPANT_PUBKEYS | 0x08 | both | Keydata is the 33-byte compressed MuSig2 aggregate public key from KeyAgg; value is the list of participants' compressed public keys in the order required for aggregation (sorted order if sorting was done). | 373 |
PSBT_OUT_SP_V0_INFO | 0x09 | v2 only (excluded in v0) | No keydata; value is a zero version byte, then the 33-byte scan key, then the 33-byte spend key of the silent-payment address. If PSBT_OUT_SCRIPT is absent this field must be present — it represents the address whose script is not yet computed. | 375 |
PSBT_OUT_SP_V0_LABEL | 0x0a | v2 only (excluded in v0) | No keydata; value is a 32-bit LE unsigned label used to compute the spend key of the silent-payment address to verify change. | 375 |
PSBT_OUT_DNSSEC_PROOF | 0x35 | both | No keydata; value is a 1-byte-length-prefixed BIP-353 human-readable name (without the bitcoin prefix symbol) followed by an RFC 9102 DNSSEC AuthenticationChain proving the BIP-353 DNS TXT record. | 353 |
PSBT_OUT_PROPRIETARY | 0xFC | both | Proprietary use: identifier + subtype keydata, arbitrary value data. | 174 |
Source: the raw texts of BIP-174 (Deployed), BIP-370 (Deployed) and BIP-371 (Deployed) + the official type registry (bitcoin/bips, fetched 2026-07-26). Pairs with the output descriptors reference and the wallet recovery matrix.
Related products, repair, and setup paths
- how D-Central diagnoses ASIC repairs
- ASIC troubleshooting library
- ASIC manuals and repair guides
- replacement hashboards
- ASIC control boards
- ASIC power supplies
- S19 family replacement hashboard
- C52 replacement control board
- APW12 S19 power supply
- immersion cooling hub
- home immersion cooling guide
- ASIC miners for immersion planning
- ASIC cooling parts
- airflow shroud before immersion
- compare miner specs in the database
- ASIC repair support
Last reviewed July 26, 2026.
