mirror of
https://github.com/bitcoin/bips.git
synced 2024-11-19 09:50:06 +01:00
510 lines
36 KiB
Plaintext
510 lines
36 KiB
Plaintext
<pre>
|
|
BIP: 174
|
|
Layer: Applications
|
|
Title: Partially Signed Bitcoin Transaction Format
|
|
Author: Andrew Chow <achow101@gmail.com>
|
|
Comments-Summary: No comments yet.
|
|
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174
|
|
Status: Draft
|
|
Type: Standards Track
|
|
Created: 2017-07-12
|
|
License: BSD-2-Clause
|
|
</pre>
|
|
|
|
==Introduction==
|
|
|
|
===Abstract===
|
|
|
|
This document proposes a binary transaction format which contains the information
|
|
necessary for a signer to produce signatures for the transaction and holds the
|
|
signatures for an input while the input does not have a complete set of signatures.
|
|
The signer can be offline as all necessary information will be provided in the
|
|
transaction.
|
|
|
|
===Copyright===
|
|
|
|
This BIP is licensed under the 2-clause BSD license.
|
|
|
|
===Motivation===
|
|
|
|
Creating unsigned or partially signed transactions to be passed around to multiple
|
|
signers is currently implementation dependent, making it hard for people who use
|
|
different wallet software from being able to easily do so. One of the goals of this
|
|
document is to create a standard and extensible format that can be used between clients to allow
|
|
people to pass around the same transaction to sign and combine their signatures. The
|
|
format is also designed to be easily extended for future use which is harder to do
|
|
with existing transaction formats.
|
|
|
|
Signing transactions also requires users to have access to the UTXOs being spent. This transaction
|
|
format will allow offline signers such as air-gapped wallets and hardware wallets
|
|
to be able to sign transactions without needing direct access to the UTXO set and without
|
|
risk of being defrauded.
|
|
|
|
==Specification==
|
|
|
|
The Partially Signed Bitcoin Transaction (PSBT) format consists of key-value maps.
|
|
Each key-value pair must have a unique key within its scope; duplicates are not allowed.
|
|
Each map consists of a sequence of records, terminated by a <tt>0x00</tt> byte <ref>'''Why
|
|
is the separator here <tt>0x00</tt> instead of <tt>0xff</tt>?'''
|
|
The separator here is used to distinguish between each chunk of data. A separator of 0x00 would mean that
|
|
the unserializer can read it as a key length of 0, which would never occur with actual keys. It can thus
|
|
be used as a separator and allow for easier unserializer implementation.</ref>. The format
|
|
of a record is as follows:
|
|
|
|
Note: <tt><..></tt> indicates that the data is prefixed by a compact size unsigned integer representing
|
|
the length of that data. <tt>{..}</tt> indicates the raw data itself.
|
|
|
|
<pre>
|
|
<key>|<value>
|
|
</pre>
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Name
|
|
!Type
|
|
!Description
|
|
|-
|
|
| Key Length
|
|
| Compact Size Unsigned Integer
|
|
| Specify how long the key is
|
|
|-
|
|
| Key
|
|
| byte[]
|
|
| The key itself with the first byte being the type of the key-value pair
|
|
|-
|
|
| Value Length
|
|
| Compact Size Unsigned Integer
|
|
| Specify how long the value is
|
|
|-
|
|
| Value
|
|
| byte[]
|
|
| The Value itself
|
|
|}
|
|
|
|
The format of each key-value map is as follows:
|
|
|
|
<pre>
|
|
{key-value pair}|{key-value pair}|...|{0x00}
|
|
</pre>
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Field Size
|
|
!Name
|
|
!Type
|
|
!Value
|
|
!Description
|
|
|-
|
|
| 1+
|
|
| Key-value pairs
|
|
| Array of key-value pairs
|
|
| varies
|
|
| The key-value pairs.
|
|
|-
|
|
| 1
|
|
| separator
|
|
| char
|
|
| <tt>0x00</tt>
|
|
| Must be <tt>0x00</tt>.
|
|
|}
|
|
|
|
The first byte of each key specifies the type of the key-value pair. There are global types,
|
|
per-input types, and per-output types.
|
|
|
|
The currently defined global types are as follows:
|
|
|
|
* Type: Unsigned Transaction <tt>PSBT_GLOBAL_UNSIGNED_TX = 0x00</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x00}</tt>
|
|
** Value: The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses). A PSBT must have a transaction, otherwise it is invalid.
|
|
*** <tt>{transaction}</tt>
|
|
** Note: Every PSBT must have a field with this type.
|
|
|
|
The currently defined per-input types are defined as follows:
|
|
|
|
* Type: Non-Witness UTXO <tt>PSBT_IN_NON_WITNESS_UTXO = 0x00</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
***<tt>{0x00}</tt>
|
|
** Value: The transaction in network serialization format the current input spends from. This should only be present for inputs which spend non-segwit outputs. However, if it is unknown whether an input spends a segwit output, this type should be used.
|
|
*** <tt>{transaction}</tt>
|
|
|
|
* Type: Witness UTXO <tt>PSBT_IN_WITNESS_UTXO = 0x01</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x01}</tt>
|
|
** Value: The entire transaction output in network serialization which the current input spends from. This should only be present for inputs which spend segwit outputs, including P2SH embedded ones.
|
|
*** <tt>{serialized transaction output({output value}|<scriptPubKey>)}</tt>
|
|
|
|
* Type: Partial Signature <tt>PSBT_IN_PARTIAL_SIG = 0x02</tt>
|
|
** Key: The public key which corresponds to this signature.
|
|
*** <tt>{0x02}|{public key}</tt>
|
|
** Value: The signature as would be pushed to the stack from a scriptSig or witness.
|
|
*** <tt>{signature}</tt>
|
|
|
|
* Type: Sighash Type <tt>PSBT_IN_SIGHASH_TYPE = 0x03</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x03}</tt>
|
|
** Value: The 32-bit unsigned integer specifying the sighash type to be used for this input. Signatures for this input must use the sighash type, finalizers must fail to finalize inputs which have signatures that do not match the specified sighash type. Signers who cannot produce signatures with the sighash type must not provide a signature.
|
|
*** <tt>{sighash type}</tt>
|
|
|
|
* Type: Redeem Script <tt>PSBT_IN_REDEEM_SCRIPT = 0x04</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x04}</tt>
|
|
** Value: The redeemScript for this input if it has one.
|
|
*** <tt>{redeemScript}</tt>
|
|
|
|
* Type: Witness Script <tt>PSBT_IN_WITNESS_SCRIPT = 0x05</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x05}</tt>
|
|
** Value: The witnessScript for this input if it has one.
|
|
*** <tt>{witnessScript}</tt>
|
|
|
|
* Type: BIP 32 Derivation Path <tt>PSBT_IN_BIP32_DERIVATION = 0x06</tt>
|
|
** Key: The public key
|
|
*** <tt>{0x06}|{public key}</tt>
|
|
** Value: The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. Public keys are those that will be needed to sign this input.
|
|
*** <tt>{master key fingerprint}|{32-bit int}|...|{32-bit int}</tt>
|
|
|
|
* Type: Finalized scriptSig <tt>PSBT_IN_FINAL_SCRIPTSIG = 0x07</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x07}</tt>
|
|
** Value: The Finalized scriptSig contains a fully constructed scriptSig with signatures and any other scripts necessary for the input to pass validation.
|
|
*** <tt>{scriptSig}</tt>
|
|
|
|
* Type: Finalized scriptWitness <tt>PSBT_IN_FINAL_SCRIPTWITNESS = 0x08</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x08}</tt>
|
|
** Value: The Finalized scriptWitness contains a fully constructed scriptWitness with signatures and any other scripts necessary for the input to pass validation.
|
|
*** <tt>{scriptWitness}</tt>
|
|
|
|
The currently defined per-output <ref>'''Why do we need per-output data?''' Per-output data allows signers
|
|
to verify that the outputs are going to the intended recipient. The output data can also be use by signers to
|
|
determine which outputs are change outputs and verify that the change is returning to the correct place.</ref> types are defined as follows:
|
|
|
|
* Type: Redeem Script <tt>PSBT_OUT_REDEEM_SCRIPT = 0x00</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x00}</tt>
|
|
** Value: The redeemScript for this output if it has one.
|
|
*** <tt>{redeemScript}</tt>
|
|
|
|
* Type: Witness Script <tt>PSBT_OUT_WITNESS_SCRIPT = 0x01</tt>
|
|
** Key: None. The key must only contain the 1 byte type.
|
|
*** <tt>{0x01}</tt>
|
|
** Value: The witnessScript for this output if it has one.
|
|
*** <tt>{witnessScript}</tt>
|
|
|
|
* Type: BIP 32 Derivation Path <tt>PSBT_OUT_BIP32_DERIVATION = 0x02</tt>
|
|
** Key: The public key
|
|
*** <tt>{0x02}|{public key}</tt>
|
|
** Value: The master key fingerprint concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. This must omit the index of the master key. Public keys are those needed to spend this output.
|
|
*** <tt>{master key fingerprint}|{32-bit int}|...|{32-bit int}</tt>
|
|
|
|
The transaction format is specified as follows:
|
|
|
|
|
|
<pre>
|
|
{0x70736274}|{0xff}|{global key-value map}|{input key-value map}|...|{input key-value map}|{output key-value map}|...|{output key-value map}|
|
|
</pre>
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Field Size
|
|
!Name
|
|
!Type
|
|
!Value
|
|
!Description
|
|
|-
|
|
| 4
|
|
| Magic Bytes
|
|
| int32_t
|
|
| <tt>0x70736274</tt>
|
|
| Magic bytes which are ASCII for psbt. <ref>'''Why use 4 bytes for psbt?''' The
|
|
transaction format needed to start with a 5 byte header which uniquely identifies
|
|
it. The first bytes were chosen to be the ASCII for psbt because that stands for
|
|
Partially Signed Bitcoin Transaction. </ref> This integer should be serialized
|
|
in most significant byte order.
|
|
|-
|
|
| 1
|
|
| separator
|
|
| char
|
|
| <tt>0xff</tt>
|
|
| Must be <tt>0xff</tt> <ref>'''Why Use a separator after the magic bytes?''' The separator
|
|
is part of the 5 byte header for PSBT. This byte is a separator of <tt>0xff</tt> because
|
|
this will cause any non-PSBT unserializer to fail to properly unserialize the PSBT
|
|
as a normal transaction. Likewise, since the 5 byte header is fixed, no transaction
|
|
in the non-PSBT format will be able to be unserialized by a PSBT unserializer.</ref>
|
|
|-
|
|
| 1+
|
|
| Global data
|
|
| Key-value Map
|
|
| varies
|
|
| The key-value pairs for all global data.
|
|
|-
|
|
| 1+
|
|
| Inputs
|
|
| Array of key-value maps
|
|
| varies
|
|
| The key-value pairs for each input as described above. Every input in the unsigned transaction must have a corresponding input map.
|
|
|-
|
|
| 1+
|
|
| Outputs
|
|
| Array of key-value maps
|
|
| varies
|
|
| The key-value pairs for each output as described above. Every output in the unsigned transaction must have a corresponding output map.
|
|
|}
|
|
|
|
Each block of data between separators can be viewed as a scope, and all separators
|
|
are required<ref>'''Why are all separators required?''' The separators are required
|
|
so that the unserializer knows which input it is unserializing data for.</ref>.
|
|
Types can be skipped when they are unnecessary. For example, if an input is a witness
|
|
input, then it should not have a Non-Witness UTXO key-value pair.
|
|
|
|
If the signer encounters key-value pairs that it does not understand, it must
|
|
pass those key-value pairs through when re-serializing the transaction.
|
|
|
|
===Handling Duplicated Keys===
|
|
|
|
Keys within each scope should never be duplicated; all keys in the format are unique. PSBTs containing duplicate keys are invalid. However implementors
|
|
will still need to handle events where keys are duplicated when combining transactions with duplicated fields. In this event, the software may choose
|
|
whichever value it wishes.
|
|
|
|
==Responsibilities==
|
|
|
|
Using the transaction format involves many different responsibilities. These responsibilities can be handled by a single entity, but each responsibility is specialized in what it should be capable of doing.
|
|
|
|
===Creator===
|
|
|
|
The Creator must be capable of accepting either a network serialized transaction, or a PSBT.
|
|
The Creator can either produce a new PSBT, or update the provided PSBT.
|
|
For any scriptSigs which are non-final, the Creator will provide an empty scriptSig and input fields with information from the scriptSig, if any.
|
|
If possible, the Creator should also look for any required redeemScripts and witnesScripts and add those to the global data section of the PSBT.
|
|
The Creator should also provide any related UTXOs that it knows about.
|
|
|
|
===Signer===
|
|
|
|
The Signer must only accept a PSBT.
|
|
The Signer must only use the UTXOs provided in the PSBT to produce signatures for inputs.
|
|
The Signer should not need require any additional data sources, as all necessary information is provided in the PSBT format.
|
|
Any signatures created by the Signer must be added as a "Partial Signature" key-value pair for the respective input it relates to.
|
|
|
|
The Signer can additionally compute the addresses and values being sent, and the transaction fee, optionally showing this data to the user as a confirmation of intent and the consequences of signing the PSBT.
|
|
|
|
===Combiner===
|
|
|
|
The Combiner can accept 1 or many PSBTs.
|
|
The Combiner must merge them into one PSBT (if possible), or fail.
|
|
The resulting PSBT must contains all of the key-value pairs from each of the PSBTs.
|
|
The Combined must remove any duplicate key-value pairs, in accordance with the specification.
|
|
|
|
===Finalizer===
|
|
|
|
The Finalizer must only accept a PSBT.
|
|
The Finalizer transforms a PSBT into a network serialized transaction.
|
|
|
|
For any inputs which are not complete, the Finalizer will emplace an empty scriptSig in the network serialized transaction.
|
|
For any input which has a complete set of signatures, the Finalizer must attempt to build the complete scriptSig and encode it into the network serialized transaction.
|
|
|
|
==Extensibility==
|
|
|
|
The Partially Signed Transaction format can be extended in the future by adding
|
|
new types for key-value pairs. Backwards compatibilty will still be maintained as those new
|
|
types will be ignored and passed-through by signers which do not know about them.
|
|
|
|
Additional key-value maps with different types for the key-value pairs can be added on to
|
|
the end of the format. The number of each map that follows must be specified in the globals
|
|
section so that parsers will know when to use different definitions of the data types.
|
|
|
|
==Compatibility==
|
|
|
|
This transaction format is designed so that it is unable to be properly unserialized
|
|
by normal transaction unserializers. Likewise, a normal transaction will not be
|
|
able to be unserialized by an unserializer for the PSBT format.
|
|
|
|
==Examples==
|
|
|
|
===Manual CoinJoin Workflow===
|
|
|
|
<img src="bip-0174/coinjoin-workflow.png" align="middle"></img>
|
|
|
|
===2-of-3 Multisig Workflow===
|
|
|
|
<img src="bip-0174/multisig-workflow.png" align="middle"></img>
|
|
|
|
==Test Vectors==
|
|
|
|
The following test vectors are done with keys derived from the following master private key. Keypaths and individual private keys will be specified when necessary
|
|
|
|
<pre>
|
|
tprv8ZgxMBicQKsPdHrvvmuEXXZ7f5EheFqshqVmtPjeLLMjqwrWbSeuGDcgJU1icTHtLjYiGewa5zcMScbGSRR8AqB8A5wvB3XRdNYBDMhXpBS
|
|
</pre>
|
|
|
|
The following are invalid PSBTs:
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Test Case
|
|
!Explanation
|
|
|-
|
|
| <pre>0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300</pre>
|
|
| Network transaction, not PSBT format
|
|
|-
|
|
| <pre>70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab300000000</pre>
|
|
| PSBT missing null terminator
|
|
|-
|
|
| <pre>70736274ff0100fd0a010200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be4000000006a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa88292feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac0000000015013545e6e33b832c47050f24d3eeb93c9c03948bc716001485d13537f2e265405a34dbafa9e3dda01fb823080001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc7870104010200</pre>
|
|
| PSBT with one P2PKH input and one P2SH-P2WPKH input with only the first input signed, finalized, and skipped. Input index is specified but total input count is not given.
|
|
|-
|
|
| <pre>70736274ff0100fd0a010200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be4000000006a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa88292feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac0000000015013545e6e33b832c47050f24d3eeb93c9c03948bc716001485d13537f2e265405a34dbafa9e3dda01fb82308010401010001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc78700</pre>
|
|
| PSBT with one P2PKH input and one P2SH-P2WPKH input with only the first input signed, finalized, and skipped. Total input count is given but second input does not have its index.
|
|
|}
|
|
|
|
The following are valid PSBTs:
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Test Case
|
|
!Explanation
|
|
|-
|
|
| <pre>70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000000</pre>
|
|
| PSBT with one P2PKH input which has a non-final scriptSig.
|
|
|-
|
|
| <pre>70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab3000000000103040100000000</pre>
|
|
| PSBT with one P2PKH input which has a non-final scriptSig and has a sighash type specified.
|
|
|-
|
|
| <pre>70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac0000000015013545e6e33b832c47050f24d3eeb93c9c03948bc716001485d13537f2e265405a34dbafa9e3dda01fb82308000100df0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e13000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc78700</pre>
|
|
| PSBT with one P2PKH input and one P2SH-P2WPKH input both with non-final scriptSigs. P2SH-P2WPKH input's redeemScript is available.
|
|
|-
|
|
| <pre>70736274ff0100fd0a010200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be4000000006a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa88292feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac0000000015013545e6e33b832c47050f24d3eeb93c9c03948bc716001485d13537f2e265405a34dbafa9e3dda01fb82308000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc78700</pre>
|
|
| PSBT with one P2PKH input and one P2SH-P2WPKH input with only the first input signed and finalized.
|
|
|-
|
|
| <pre>70736274ff0100fd0a010200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be4000000006a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa88292feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac0000000015013545e6e33b832c47050f24d3eeb93c9c03948bc716001485d13537f2e265405a34dbafa9e3dda01fb82308010401010001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc7870104010100</pre>
|
|
| PSBT with one P2PKH input and one P2SH-P2WPKH input with only the first input signed, finalized, and skipped. Input indexes are used.
|
|
|-
|
|
| <pre>70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000015016345200f68d189e1adc0df1c4d16ea8f14c0dbeb220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d56812102771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d568147522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220303b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220303de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba67000000800000008005000080000100fd51010200000002f1d8d4b1acab9217bcbd0a09e37876efd79cf753baa2b2362e7d429c0deafbf5000000006a47304402202f29ddfff387626cf43fcae483456fb9d12d7f50fb10b39c245bab238d960d6502200f32fa3197dc6aa1fc870e33d8c590378862ce0b9bf6be865d5aac0a7390ae3a012102ead596687ca806043edc3de116cdf29d5e9257c196cd055cf698c8d02bf24e99fefffffff1d8d4b1acab9217bcbd0a09e37876efd79cf753baa2b2362e7d429c0deafbf5010000006b483045022100dc3bc94086fd7d48102a8290c737e27841bc1ce587fd4d9efe96a37d88c03a6502206dea717b8225b4ae9e1624bfc02927edac222ee094bf009996d9d0305d7645f501210394f62be9df19952c5587768aeb7698061ad2c4a25c894f47d8c162b4d7213d05feffffff01955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87fb2e1300220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a0100</pre>
|
|
| PSBT with one P2SH-P2WSH input of a 2-of-2 multisig, redeemScript, witnessScript, and keypaths are available. Contains one signature.
|
|
|}
|
|
|
|
A creator with only the following:
|
|
|
|
* Redeem Scripts:
|
|
** <tt>522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352ae</tt>
|
|
** <tt>0020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df</tt>
|
|
* Witness Scripts:
|
|
** <tt>522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae</tt>
|
|
* UTXOs
|
|
** TXID: <tt>0a4381c05136c0cb44886a5df7c26f1930bcc2c12e00ec60e027c4378d7d8c2e</tt>, Index: <tt>1</tt>
|
|
*** scriptPubKey: <tt>a914203736c3c06053896d7041ce8f5bae3df76cc49187</tt>
|
|
*** value: 0.50000000
|
|
** TXID: <tt>2c4df245d00b491bdf24965adbbccdaa7f62ccac933d3e9377f336c60c4ea096</tt>, Index: <tt>0</tt>
|
|
*** scriptPubKey: <tt>a914f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d587</tt>
|
|
*** value: 2.00000000
|
|
|
|
given this unsigned transaction:
|
|
<pre>02000000022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a0100000000ffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000000ffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d8700000000</pre>
|
|
must create this PSBT:
|
|
<pre>70736274ff01007c02000000022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a0100000000ffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000000ffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d87000000001501203736c3c06053896d7041ce8f5bae3df76cc49147522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352ae1501f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d5220020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df2102a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df47522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae000100fdff0002000000018b2dd2f735d0a9338af96402a8a91e4841cd3fed882362e7329fb04f1ff65325000000006a473044022077bedfea9910c9ba4e00dec941dace974f8b47349992c5d4312c1cf5796cce5502206164e6bfff7ac11590064ca571583709337c8a38973db2e70f4e9d93b3bcce1d0121032d64447459784e37cb2dda366c697adbbdc8aae2ad6db74ed2dade39d75882fafeffffff0382b42a04000000001976a914da533648fd339d5797790e6bb1667d9e86fdfb6888ac80f0fa020000000017a914203736c3c06053896d7041ce8f5bae3df76cc4918700b4c4040000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d879e2f13000001012000c2eb0b0000000017a914f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d58700</pre>
|
|
|
|
Given the above PSBT, a signer with the following keys:
|
|
* <tt>cQxozhqme9dcDbxT97uDu1P32Cnywc5nAMhPtQwyWhVgQnP43WGH</tt>
|
|
* <tt>cP3ArXq5BpHE94R4buJ5uma4pyKvaWXUd5Bpsy3hS2zA69X9KMnM</tt>
|
|
must create this PSBT:
|
|
<pre>70736274ff01007c02000000022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a0100000000ffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000000ffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d87000000001501203736c3c06053896d7041ce8f5bae3df76cc49147522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352ae1501f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d5220020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df2102a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df47522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae000100fdff0002000000018b2dd2f735d0a9338af96402a8a91e4841cd3fed882362e7329fb04f1ff65325000000006a473044022077bedfea9910c9ba4e00dec941dace974f8b47349992c5d4312c1cf5796cce5502206164e6bfff7ac11590064ca571583709337c8a38973db2e70f4e9d93b3bcce1d0121032d64447459784e37cb2dda366c697adbbdc8aae2ad6db74ed2dade39d75882fafeffffff0382b42a04000000001976a914da533648fd339d5797790e6bb1667d9e86fdfb6888ac80f0fa020000000017a914203736c3c06053896d7041ce8f5bae3df76cc4918700b4c4040000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d879e2f1300220203c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977347304402202a690a7a8d5763839df48285dea09f8ca69accd0227db9b735858eb87512a35b02204d294da3240bb1b069b728ddd5ce77dab61a9edf8db996268775a79a62817286010001012000c2eb0b0000000017a914f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d587220202e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87483045022100f75f171e172383026972f8ed9986dba1db1f4fd12c9530b27d216b0b9fea60ac02206b288ffdeb2c6aa5e6c24aea4294e91c384249b04b29977dff7d5d53d8db71520100</pre>
|
|
|
|
Given the above blank PSBT, a signer with the following keys:
|
|
* <tt>cUL8UxFiJjnLkkZwmmXDxmaNRQfEMDP44eZnSaiYR3KUJNv82chM</tt>
|
|
* <tt>cNQm3eSF9rQnpoUB8xThUVDfaeRVEckPK11rGB6LjweFdhwcCS4A</tt>
|
|
must create this PSBT:
|
|
<pre>70736274ff01007c02000000022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a0100000000ffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000000ffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d87000000001501203736c3c06053896d7041ce8f5bae3df76cc49147522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352ae1501f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d5220020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df2102a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df47522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae000100fdff0002000000018b2dd2f735d0a9338af96402a8a91e4841cd3fed882362e7329fb04f1ff65325000000006a473044022077bedfea9910c9ba4e00dec941dace974f8b47349992c5d4312c1cf5796cce5502206164e6bfff7ac11590064ca571583709337c8a38973db2e70f4e9d93b3bcce1d0121032d64447459784e37cb2dda366c697adbbdc8aae2ad6db74ed2dade39d75882fafeffffff0382b42a04000000001976a914da533648fd339d5797790e6bb1667d9e86fdfb6888ac80f0fa020000000017a914203736c3c06053896d7041ce8f5bae3df76cc4918700b4c4040000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d879e2f1300220203c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c047304402204a33aa884465a7d909000c366afb90c9256b66575f0c7e5f12446a16d8cc1a4d02203fa9fc43d50168f000b280be6b3db916cf9e483de8e6d9eac948b0d08f7601df010001012000c2eb0b0000000017a914f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d58722020258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e483045022100cdac5ee547b60f79feec111d0e082c3350b30a087c130d5e734e0199b3f8c14702205deddd38d8f7ddb19931059f46b2de0c8548fe79f8c8aea34c5e653ea0136b950100</pre>
|
|
|
|
Given both of the above PSBTs, a combiner must create this PSBT:
|
|
<pre>70736274ff01007c02000000022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a0100000000ffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000000ffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d87000000001501203736c3c06053896d7041ce8f5bae3df76cc49147522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352ae1501f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d5220020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df2102a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590df47522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae000100fdff0002000000018b2dd2f735d0a9338af96402a8a91e4841cd3fed882362e7329fb04f1ff65325000000006a473044022077bedfea9910c9ba4e00dec941dace974f8b47349992c5d4312c1cf5796cce5502206164e6bfff7ac11590064ca571583709337c8a38973db2e70f4e9d93b3bcce1d0121032d64447459784e37cb2dda366c697adbbdc8aae2ad6db74ed2dade39d75882fafeffffff0382b42a04000000001976a914da533648fd339d5797790e6bb1667d9e86fdfb6888ac80f0fa020000000017a914203736c3c06053896d7041ce8f5bae3df76cc4918700b4c4040000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d879e2f1300220203c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977347304402202a690a7a8d5763839df48285dea09f8ca69accd0227db9b735858eb87512a35b02204d294da3240bb1b069b728ddd5ce77dab61a9edf8db996268775a79a6281728601220203c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c047304402204a33aa884465a7d909000c366afb90c9256b66575f0c7e5f12446a16d8cc1a4d02203fa9fc43d50168f000b280be6b3db916cf9e483de8e6d9eac948b0d08f7601df010001012000c2eb0b0000000017a914f3ba8a120d960ae07d1dbe6f0c37fb4c926d76d58722020258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e483045022100cdac5ee547b60f79feec111d0e082c3350b30a087c130d5e734e0199b3f8c14702205deddd38d8f7ddb19931059f46b2de0c8548fe79f8c8aea34c5e653ea0136b9501220202e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87483045022100f75f171e172383026972f8ed9986dba1db1f4fd12c9530b27d216b0b9fea60ac02206b288ffdeb2c6aa5e6c24aea4294e91c384249b04b29977dff7d5d53d8db71520100</pre>
|
|
|
|
Given the above PSBT, a finalizer must create this complete Bitcoin transaction:
|
|
<pre>020000000001022e8c7d8d37c427e060ec002ec1c2bc30196fc2f75d6a8844cbc03651c081430a01000000d90047304402204a33aa884465a7d909000c366afb90c9256b66575f0c7e5f12446a16d8cc1a4d02203fa9fc43d50168f000b280be6b3db916cf9e483de8e6d9eac948b0d08f7601df0147304402202a690a7a8d5763839df48285dea09f8ca69accd0227db9b735858eb87512a35b02204d294da3240bb1b069b728ddd5ce77dab61a9edf8db996268775a79a628172860147522103c8727ce35f1c93eb0be21406ee9a923c89219fe9c9e8504c8314a6a22d1295c02103c74dc710c407d7db6e041ee212d985cd2826d93f806ed44912b9a1da691c977352aeffffffff96a04e0cc636f377933e3d93accc627faacdbcdb5a9624df1b490bd045f24d2c0000000023220020a8f44467bf171d51499153e01c0bd6291109fc38bd21b3c3224c9dc6b57590dfffffffff01e02be50e0000000017a914b53bb0dc1db8c8d803e3e39f784d42e4737ffa0d87000400483045022100f75f171e172383026972f8ed9986dba1db1f4fd12c9530b27d216b0b9fea60ac02206b288ffdeb2c6aa5e6c24aea4294e91c384249b04b29977dff7d5d53d8db715201483045022100cdac5ee547b60f79feec111d0e082c3350b30a087c130d5e734e0199b3f8c14702205deddd38d8f7ddb19931059f46b2de0c8548fe79f8c8aea34c5e653ea0136b950147522102e80dec31d167865c1685e9d7a9291e66a4ea22c65cfee324289a1667ccda3b87210258cbbc3cb295a8bebac233aadc7773978804993798be5390ab444f6dd4c5327e52ae00000000</pre>
|
|
|
|
==Rationale==
|
|
|
|
<references/>
|
|
|
|
==Reference implementation==
|
|
|
|
The reference implementation of the PSBT format is available at https://github.com/achow101/bitcoin/tree/psbt.
|
|
|
|
==Acknowledgements==
|
|
|
|
Special thanks to Pieter Wuille for suggesting that such a transaction format should be made
|
|
and for coming up with the name and abbreviation of PSBT.
|
|
|
|
Thanks to Pieter Wuille, Gregory Maxwell, Jonathan Underwood, and Daniel Cousens for additional comments
|
|
and suggestions for improving this proposal.
|
|
|
|
==Appendix A: Data types and their specifications==
|
|
|
|
Any data types, their associated scope and BIP number must be defined here
|
|
|
|
{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
|
|
!Scope
|
|
!Type values
|
|
!Name
|
|
!BIP Number
|
|
|-
|
|
| Global
|
|
| 0
|
|
| PSBT_GLOBAL_UNSIGNED_TX
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 0
|
|
| PSBT_IN_NON_WITNESS_UTXO
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 1
|
|
| PSBT_IN_WITNESS_UTXO
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 2
|
|
| PSBT_IN_PARTIAL_SIG
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 3
|
|
| PSBT_IN_SIGHASH_TYPE
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 4
|
|
| PSBT_IN_REDEEM_SCRIPT
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 5
|
|
| PSBT_IN_WITNESS_SCRIPT
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 6
|
|
| PSBT_IN_BIP32_DERIVATION
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 7
|
|
| PSBT_IN_FINAL_SCRIPTSIG
|
|
| BIP 174
|
|
|-
|
|
| Input
|
|
| 8
|
|
| PSBT_IN_FINAL_SCRIPTWITNESS
|
|
| BIP 174
|
|
|-
|
|
| Output
|
|
| 0
|
|
| PSBT_OUT_REDEEM_SCRIPT
|
|
| BIP 174
|
|
|-
|
|
| Output
|
|
| 1
|
|
| PSBT_OUT_WITNESS_SCRIPT
|
|
| BIP 174
|
|
|-
|
|
| Output
|
|
| 2
|
|
| PSBT_OUT_BIP32_DERIVATION
|
|
| BIP 174
|
|
|}
|