From b9d44935cb2c69ec6601f6f59c5b3496f0bbff64 Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 19 Apr 2022 17:19:35 -0400 Subject: [PATCH 01/39] Add transaction terminology bip --- bip-tx-terminology.mediawiki | 287 +++++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 bip-tx-terminology.mediawiki diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki new file mode 100644 index 0000000000..db92125b24 --- /dev/null +++ b/bip-tx-terminology.mediawiki @@ -0,0 +1,287 @@ +
+  BIP: 
+  Title: 
+  Author: Mark Erhardt 
+  Comments-Summary: No comments yet
+  Comments-URI: 
+  Status: Draft
+  Type: Informational
+  Created: 2022-01-13
+  License: BSD-3-Clause
+  Post-History: 
+
+ +== Introduction== + +===Abstract=== + +This document describes terminology for referring to scripts, transaction parts, and serialization artifacts in the context of transactions. + +===Copyright=== + +This document is licensed under the 3-clause BSD license. + +===Motivation=== + +In the past years, we have seen many discussions about leveraging Taproot to facilitate new spending conditions. +We noticed that terminology to refer to the components of transactions and functions that scripts fulfill in transactions includes a broad spectrum of alternative jargon. +In this document, we describe a set of terms that can be used to refer to transaction components by their function or their context. +The terms are not entirely consistent in themselves since there are many terms that are already firmly established. +Instead of striving for consistency, we try to relate terms to each other, explore the origins of terms, and fill in blanks. + +===Objects and their Serialization=== + +We treat the objects of the Bitcoin Protocol (e.g. Transactions, Blocks) as distinct from their serialization. +We distinguish concrete properties of transactions such as fields and scripts (labeled [TC] for Transaction Component) from artifacts of the transaction serialization (labeled [SA] for Serialization Artifact). +We also introduce some concepts and ideas that are useful to describe aspects of transcations (labeled [AT] for Abstract Term). +For example, version and locktime are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented. +Likewise, the _input script_ is a transaction field, but the length indicator of the input script a serialization artifact. + +===Definition of Terms=== + +; Annex +: [TC] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]). + +; Amount +: [TC] The count of satoshis assigned to an output. + +; Bare Output Script +: [AT] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. + +; Condition Script +: [AT] Collective term for scripts that are not forwarding scripts and encode a set of conditions that could be fulfilled to spend a UTXO. A scriptPubkey can either contain directly a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). + +; Control Block +: [TC] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. + +; Flag +: [SA] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see BIP144). + +; Forwarding Script +: [AT] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. + +; Input Counter +: [SA] The length of the transaction input list. + +; Input Index +: [AT] The position of an input in a transaction's Input List. + +; Input Script +: [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field may be better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. + +; Leaf Script +: [TC] A Condition Script used for spending P2TR outputs via the script path. + +; Leaf Version +: [TC] The version of Script used in a leaf script. At time of writing, only _Tapscript_ is defined. + +; Locktime +: [TC] Part of the Transaction Header. The locktime specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The locktime can also indicate relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four byte nLockTime integer field. + +; Marker +: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see BIP144). (Note: Since the serialization of a non-segwit transaction would have the input counter at the marker's position, a whole segwit transaction will always appear invalid to non-segwit nodes since the input counter must be greater than zero.) + +; Outpoint +: [TC] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. + +; Output Counter +: [SA] The length of the transaction output list. + +; Output Index +: [TC] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. + +; Output Script +: [TC] originally called `scriptPubKey`. The part of a transaction output that will contain either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published, since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. + +; P2SH Program +: [AT] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. + +; Redeem Script +: [AT] The Condition Script used for spending P2SH outputs. Note that the Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. + +; Script Arguments +: [AT] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys + +; Script Tree +: [AT] The Merkle tree composed from the collection of Leaf Scripts committed to by a P2TR output + +; scriptPubKey +: See _Output Script_ + +; scriptSig +: See _Input Script_ + +; Sequence +: [TC] The sequence number appearing in each transaction input. Serialized as the four byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. + +; Signature +: [TC] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default `SIGHASH_ALL` is used the sighash flag may be omitted for Schnorr signatures. + +; Sighash Flag +: [TC] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. + +; Taproot Branch +: [TC] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree. + +; Taproot Internal Key +: [TC] (aka Inner Key). The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. + +; Taproot Output Key +: [TC] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root. + +; Tapscript +: [AT] The variant of the Script language used in P2TR Leaf Scripts (see BIP342). + +; Transaction Header +: [AT] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), length of Transaction Input List, length of Transaction Output List, Locktime + +; Transaction Input +: [TC] aka Input. An element of the input list of the transaction. Must include an outpoint, an input script, and a sequence. The input script can have various content, corresponding to the UTXO that is being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. + +; Transaction Input List +: [AT] The enumeration of all Transaction Inputs of a transaction. + +; Transaction Output +: [TC] Creates a UTXO by specifying an amount and an output script. + +; Transaction Output List +: [AT] The enumeration of all Transaction Outputs of a transaction + +; txid +: [TC] Part of an Outpoint that identifies the transaction that created a UTXO. Result of hashing a transaction without its witness structure. + +; Version +: [TC] Part of the transaction header that specifies the transaction version. Serializes as the four byte nVersion integer field. + +; Witness Item +: [TC] An element of a witness stack. Witness Items are: Witness Script (P2WSH only), Script Arguments, Leaf Script (P2TR scriptpath only), Control Block (P2TR scriptpath only), Annex (P2TR only). BIP341 also refers to Witness Items as “Witness Elements” or “Witness Stack Elements”. + +; Witness Program +: [AT] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. + +; Witness Structure +: [TC] The part of the serialized transaction that contains the witness stacks for each input. + +; Witness Script +: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs. + +; Witness Stack +: [TC] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. + +; Witness Version +: [TC] The version of the witness program in native segwit outputs. + +; wtxid +: [AT] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. + +===Usage in context of UTXO creation and spending=== + +{| class="wikitable" +! Output Type !! Output Script !! ScriptPubKey content !! Input Script !! Witness Stack +|- +| Bare (e.g. P2PK) || Condition Script || Various (e.g. OP_CHECKSIG) || Various (e.g. ) || rowspan="2" | [ ] +|- +| P2SH || rowspan="3" | P2SH Program || rowspan="3" | OP_HASH160 OP_EQUAL || Script Arguments, Redeem Script +|- +| P2SH-P2WPKH || rowspan="2" | Witness Program || [, ] +|- +| P2SH-P2WSH || […Script Arguments, Witness Script] +|- +| P2WPKH || rowspan="4" | Witness Program || OP_0 || rowspan="4" | NULL || [, ] +|- +| P2WSH || OP_0 || […Script Arguments, Witness Script] +|- +| P2TR KP || rowspan="2" | OP_1 || [] +|- +| P2TR SP || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] +|} + +===Anatomy of a serialized transaction=== + +In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction's serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. + +TODO: Only present every byte sequence once instead of at every level? +* Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 +** First part of '''Transaction Header''' 020000000001[…02…01…ffd30a00]: (remainder is split across Transaction) +*** '''Transaction Version''' 02000000: integer field, here indicating version 2 +*** '''Marker''' 00: serialization artifact indicating extended serialization +*** '''Flag''' 01: serialization artifact indicating presence of a Witness Structure +** '''Transaction Input List''' 027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047 fae4cbf960d783586cb5e430b3b700e70100000000feffffff +*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header +*** First '''Input''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff +**** '''Outpoint''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e700000000 +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent UTXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b +**** '''Input Script''' 00 +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable +*** Second '''Input''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff +**** '''Outpoint''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e701000000 +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b +***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b +**** '''Input Script''' 00 +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable +** '''Transaction Output List''' 01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 +*** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header +*** First '''Output''' b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 +**** '''Value''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output +**** '''Output Script (scriptPubKey)''' 160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 +***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes +***** '''Witness Version''' 00: indicates a native segwit v0 output +***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte Witness Program +***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 Witness Program indicates a P2WPKH output) +** '''Witness Structure''' 0140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b +*** First '''Witness Stack''' 0140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) +**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. +**** First '''Witness Item''' 40134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1180c +***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature +***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. +*** Second '''Witness Stack''' 03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The Witness data corresponding to the second input. +**** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. +**** First '''Witness Item''' 407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca +***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature +***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script +**** '''Second Witness Item''' 2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac +***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes +***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend +**** Third '''Witness Item''' 41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b +***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script +***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script +***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent +***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. +** '''Transaction Header (cont)''' [020000000001…02…01…]ffd30a00: A collective term to refer to the meta information of a transaction, split across the transaction. +*** '''Locktime''' ffd30a00: the 4-byte locktime field, little endian for 709631 + +==Rationale== + +; Amount vs Value +: Amount underscores that we are referring to a count of satoshis rather than subjective value. As Bitcoin transactions (and code altogether) are littered with “values”, we prefer “amount” as being less ambiguous. + +; Witness +: Ambiguous, use Witness Stack to refer to the witness data of a single Transaction Input, use Witness Structure when talking about all witness data of a transaction. + +; Bare Output Scripts +: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the Output Script. + +; Flag +: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. + +; P2SH Program +: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs. + +; Witness Item vs Witness Element +: BIP341 refers to parts of the witness stack as "witness elements" and "witness stack elements", but BIP144 speaks of "item count". We prefer Witness Item to refer to parts of a Witness Stack. + +; Witness Section vs Witness Structure +: While Witness Section and Witness Structure both are used, we prefer the use of Witness Structure as introduced in BIP144. + +; Witness Stack +: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some Witness Items that appear in Witness Stacks are not added to the stack, such as Control Blocks. We prefer Witness Stack as it is well-established. + +; Output Script vs Locking Script +: The scriptPubKey is also sometimes referred to as "locking script". However, we aim to emphasize the position of the field in the transaction, as it can either take the function of a condition or forwarding script. We therefore prefer the name that references the location in the transaction rather than a function that it not always has. + +==Acknowledgements== + +Thanks to Pieter Wuille for the discussions that led to this proposal, Otto Allmendinger and Matthew Zipkin for feedback on this proposal. From 4f2eb731071970c2c8e236d3c7da98440bf1f2c1 Mon Sep 17 00:00:00 2001 From: Murch Date: Wed, 22 Mar 2023 11:58:10 -0400 Subject: [PATCH 02/39] Mention every byte sequence only once in disection --- bip-tx-terminology.mediawiki | 41 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index db92125b24..f8fe497118 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -200,57 +200,56 @@ Likewise, the _input script_ is a transaction field, but the length indicator of In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction's serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. -TODO: Only present every byte sequence once instead of at every level? * Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 -** First part of '''Transaction Header''' 020000000001[…02…01…ffd30a00]: (remainder is split across Transaction) +** First part of '''Transaction Header''' *** '''Transaction Version''' 02000000: integer field, here indicating version 2 *** '''Marker''' 00: serialization artifact indicating extended serialization *** '''Flag''' 01: serialization artifact indicating presence of a Witness Structure -** '''Transaction Input List''' 027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047 fae4cbf960d783586cb5e430b3b700e70100000000feffffff +** '''Transaction Input List''' *** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header -*** First '''Input''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff -**** '''Outpoint''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e700000000 +*** First '''Input''' +**** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent UTXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. ***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b -**** '''Input Script''' 00 +**** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable -*** Second '''Input''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff -**** '''Outpoint''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e701000000 +*** Second '''Input''' +**** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b ***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b -**** '''Input Script''' 00 +**** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable -** '''Transaction Output List''' 01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 +** '''Transaction Output List''' *** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header -*** First '''Output''' b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 -**** '''Value''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output -**** '''Output Script (scriptPubKey)''' 160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa9 +*** First '''Output''' +**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output +**** '''Output Script (scriptPubKey)''' ***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes ***** '''Witness Version''' 00: indicates a native segwit v0 output ***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte Witness Program ***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 Witness Program indicates a P2WPKH output) -** '''Witness Structure''' 0140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b -*** First '''Witness Stack''' 0140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) +** '''Witness Structure''' +*** First '''Witness Stack''': The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) **** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. -**** First '''Witness Item''' 40134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1180c +**** First '''Witness Item''' ***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature ***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. -*** Second '''Witness Stack''' 03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The Witness data corresponding to the second input. +*** Second '''Witness Stack''': The Witness data corresponding to the second input. **** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. -**** First '''Witness Item''' 407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca +**** First '''Witness Item''' ***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature ***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script -**** '''Second Witness Item''' 2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac +**** '''Second Witness Item''' ***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes ***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend -**** Third '''Witness Item''' 41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b +**** Third '''Witness Item''' ***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script ***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script ***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent ***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. -** '''Transaction Header (cont)''' [020000000001…02…01…]ffd30a00: A collective term to refer to the meta information of a transaction, split across the transaction. +** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. *** '''Locktime''' ffd30a00: the 4-byte locktime field, little endian for 709631 ==Rationale== From 0bfcd1749f64d0d1f38c0a217129daa54aa87eb4 Mon Sep 17 00:00:00 2001 From: Murch Date: Fri, 31 Mar 2023 17:08:06 -0400 Subject: [PATCH 03/39] Address feedback from Satsie and Larry --- bip-tx-terminology.mediawiki | 39 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index f8fe497118..2097c022e6 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -26,16 +26,17 @@ This document is licensed under the 3-clause BSD license. In the past years, we have seen many discussions about leveraging Taproot to facilitate new spending conditions. We noticed that terminology to refer to the components of transactions and functions that scripts fulfill in transactions includes a broad spectrum of alternative jargon. In this document, we describe a set of terms that can be used to refer to transaction components by their function or their context. -The terms are not entirely consistent in themselves since there are many terms that are already firmly established. -Instead of striving for consistency, we try to relate terms to each other, explore the origins of terms, and fill in blanks. +The terms are not entirely consistent in themselves since many are already firmly established. +Instead of striving for consistency, we try to relate terms to each other, explore the origins of terms, and fill in the blanks. ===Objects and their Serialization=== -We treat the objects of the Bitcoin Protocol (e.g. Transactions, Blocks) as distinct from their serialization. -We distinguish concrete properties of transactions such as fields and scripts (labeled [TC] for Transaction Component) from artifacts of the transaction serialization (labeled [SA] for Serialization Artifact). -We also introduce some concepts and ideas that are useful to describe aspects of transcations (labeled [AT] for Abstract Term). -For example, version and locktime are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented. -Likewise, the _input script_ is a transaction field, but the length indicator of the input script a serialization artifact. +We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. +We distinguish concrete properties of transactions such as fields and scripts (labeled [TC] for Transaction Component) from serialization artifacts (labeled [SA]). +For example, version and locktime are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. +Likewise, the _input script_ is a transaction component, but the length indicator of the input script is a serialization artifact. + +We also introduce some concepts and ideas that are useful to describe aspects of transactions (labeled [AT] for Abstract Term). ===Definition of Terms=== @@ -49,7 +50,7 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : [AT] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [AT] Collective term for scripts that are not forwarding scripts and encode a set of conditions that could be fulfilled to spend a UTXO. A scriptPubkey can either contain directly a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [AT] Umbrella term for a script that is not a forwarding script, and encode one or more conditions that could be fulfilled to spend a UTXO. A scriptPubkey can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). ; Control Block : [TC] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. @@ -67,19 +68,19 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : [AT] The position of an input in a transaction's Input List. ; Input Script -: [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field may be better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. +: [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script : [TC] A Condition Script used for spending P2TR outputs via the script path. ; Leaf Version -: [TC] The version of Script used in a leaf script. At time of writing, only _Tapscript_ is defined. +: [TC] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. ; Locktime -: [TC] Part of the Transaction Header. The locktime specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The locktime can also indicate relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four byte nLockTime integer field. +: [TC] Part of the Transaction Header. Locktime specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The locktime can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nLockTime integer field. ; Marker -: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see BIP144). (Note: Since the serialization of a non-segwit transaction would have the input counter at the marker's position, a whole segwit transaction will always appear invalid to non-segwit nodes since the input counter must be greater than zero.) +: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) ; Outpoint : [TC] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. @@ -91,7 +92,7 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : [TC] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. ; Output Script -: [TC] originally called `scriptPubKey`. The part of a transaction output that will contain either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published, since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +: [TC] originally called `scriptPubKey`. The part of a transaction output that contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. ; P2SH Program : [AT] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. @@ -112,7 +113,7 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : See _Input Script_ ; Sequence -: [TC] The sequence number appearing in each transaction input. Serialized as the four byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. +: [TC] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. ; Signature : [TC] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default `SIGHASH_ALL` is used the sighash flag may be omitted for Schnorr signatures. @@ -151,7 +152,7 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : [TC] Part of an Outpoint that identifies the transaction that created a UTXO. Result of hashing a transaction without its witness structure. ; Version -: [TC] Part of the transaction header that specifies the transaction version. Serializes as the four byte nVersion integer field. +: [TC] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. ; Witness Item : [TC] An element of a witness stack. Witness Items are: Witness Script (P2WSH only), Script Arguments, Leaf Script (P2TR scriptpath only), Control Block (P2TR scriptpath only), Annex (P2TR only). BIP341 also refers to Witness Items as “Witness Elements” or “Witness Stack Elements”. @@ -160,7 +161,7 @@ Likewise, the _input script_ is a transaction field, but the length indicator of : [AT] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. ; Witness Structure -: [TC] The part of the serialized transaction that contains the witness stacks for each input. +: [AT] The part of the serialized transaction that contains the witness stacks for each input. ; Witness Script : [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs. @@ -235,7 +236,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list **** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. **** First '''Witness Item''' ***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature -***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. +***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. *** Second '''Witness Stack''': The Witness data corresponding to the second input. **** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. **** First '''Witness Item''' @@ -279,8 +280,8 @@ In this section we dissect a serialized transaction. Each sub-level in the list : While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some Witness Items that appear in Witness Stacks are not added to the stack, such as Control Blocks. We prefer Witness Stack as it is well-established. ; Output Script vs Locking Script -: The scriptPubKey is also sometimes referred to as "locking script". However, we aim to emphasize the position of the field in the transaction, as it can either take the function of a condition or forwarding script. We therefore prefer the name that references the location in the transaction rather than a function that it not always has. +: The scriptPubKey is also sometimes referred to as a "locking script". However, we aim to emphasize the position of the field in the transaction, as it can either take the function of a condition or forwarding script. We therefore prefer a name that references the location in the transaction rather than a function it does not always have. ==Acknowledgements== -Thanks to Pieter Wuille for the discussions that led to this proposal, Otto Allmendinger and Matthew Zipkin for feedback on this proposal. +Thanks to Pieter Wuille for the discussions that led to this proposal, as well as to Otto Allmendinger, Matthew Zipkin, Larry Ruane, and Stacie Waleyko for feedback on this proposal. From 8693b64130f173ed8c6ec35d05a193c3799d92bf Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 4 Apr 2023 17:28:23 -0400 Subject: [PATCH 04/39] Address remaining feedback from Stacie and Larry --- bip-tx-terminology.mediawiki | 77 +++++++++++++++++---------------- bip-tx-terminology/scripts.png | Bin 0 -> 83650 bytes 2 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 bip-tx-terminology/scripts.png diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 2097c022e6..9b1c0c4376 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -23,70 +23,70 @@ This document is licensed under the 3-clause BSD license. ===Motivation=== -In the past years, we have seen many discussions about leveraging Taproot to facilitate new spending conditions. -We noticed that terminology to refer to the components of transactions and functions that scripts fulfill in transactions includes a broad spectrum of alternative jargon. +In the past decade, in many discussions about building transactions, leveraging new output types, and explaining the inner workings of inputs, we noticed that terminology to refer to the components of transactions and functions that scripts fulfill in transactions includes a broad spectrum of competing jargon. In this document, we describe a set of terms that can be used to refer to transaction components by their function or their context. The terms are not entirely consistent in themselves since many are already firmly established. Instead of striving for consistency, we try to relate terms to each other, explore the origins of terms, and fill in the blanks. +The hope is that this terminology could be used in technical writing about Bitcoin as well as future BIPs. ===Objects and their Serialization=== We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. We distinguish concrete properties of transactions such as fields and scripts (labeled [TC] for Transaction Component) from serialization artifacts (labeled [SA]). -For example, version and locktime are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. +For example, version and lock time are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. Likewise, the _input script_ is a transaction component, but the length indicator of the input script is a serialization artifact. -We also introduce some concepts and ideas that are useful to describe aspects of transactions (labeled [AT] for Abstract Term). +We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [AT] for Abstract Term). ===Definition of Terms=== ; Annex -: [TC] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]). +: [TC] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) ; Amount -: [TC] The count of satoshis assigned to an output. +: [TC] The count of satoshis assigned to an output ; Bare Output Script -: [AT] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. +: [TC] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [AT] Umbrella term for a script that is not a forwarding script, and encode one or more conditions that could be fulfilled to spend a UTXO. A scriptPubkey can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [AT] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). ; Control Block : [TC] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. ; Flag -: [SA] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see BIP144). +: [SA] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; Forwarding Script -: [AT] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. +: [AT] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeemscript must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeemscript must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. ; Input Counter -: [SA] The length of the transaction input list. +: [SA] The length of the transaction input list, aka `txin_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) ; Input Index -: [AT] The position of an input in a transaction's Input List. +: [AT] The position of an input in a transaction's Input List ; Input Script : [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script -: [TC] A Condition Script used for spending P2TR outputs via the script path. +: [TC] A Condition Script used for spending P2TR outputs via the script path ; Leaf Version : [TC] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. -; Locktime -: [TC] Part of the Transaction Header. Locktime specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The locktime can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nLockTime integer field. +; Lock Time +: [TC] Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. ; Marker -: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) +: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) ; Outpoint : [TC] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. ; Output Counter -: [SA] The length of the transaction output list. +: [SA] The length of the transaction output list, aka `txout_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) ; Output Index : [TC] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. @@ -98,7 +98,7 @@ We also introduce some concepts and ideas that are useful to describe aspects of : [AT] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. ; Redeem Script -: [AT] The Condition Script used for spending P2SH outputs. Note that the Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. +: [TC] The Condition Script used for spending P2SH outputs. Note that the Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. ; Script Arguments : [AT] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys @@ -122,28 +122,28 @@ We also introduce some concepts and ideas that are useful to describe aspects of : [TC] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. ; Taproot Branch -: [TC] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree. +: [TC] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree ; Taproot Internal Key : [TC] (aka Inner Key). The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. ; Taproot Output Key -: [TC] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root. +: [TC] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root ; Tapscript -: [AT] The variant of the Script language used in P2TR Leaf Scripts (see BIP342). +: [AT] The variant of the Script language used in P2TR Leaf Scripts (see BIP342) ; Transaction Header -: [AT] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), length of Transaction Input List, length of Transaction Output List, Locktime +: [AT] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time ; Transaction Input : [TC] aka Input. An element of the input list of the transaction. Must include an outpoint, an input script, and a sequence. The input script can have various content, corresponding to the UTXO that is being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. ; Transaction Input List -: [AT] The enumeration of all Transaction Inputs of a transaction. +: [AT] The enumeration of all Transaction Inputs of a transaction ; Transaction Output -: [TC] Creates a UTXO by specifying an amount and an output script. +: [TC] Creates a UTXO by specifying an amount and an output script ; Transaction Output List : [AT] The enumeration of all Transaction Outputs of a transaction @@ -161,16 +161,16 @@ We also introduce some concepts and ideas that are useful to describe aspects of : [AT] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. ; Witness Structure -: [AT] The part of the serialized transaction that contains the witness stacks for each input. +: [AT] The part of the serialized transaction that contains the witness stacks for each input ; Witness Script -: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs. +: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs ; Witness Stack : [TC] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. ; Witness Version -: [TC] The version of the witness program in native segwit outputs. +: [TC] The version of the witness program in native segwit outputs ; wtxid : [AT] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. @@ -178,9 +178,9 @@ We also introduce some concepts and ideas that are useful to describe aspects of ===Usage in context of UTXO creation and spending=== {| class="wikitable" -! Output Type !! Output Script !! ScriptPubKey content !! Input Script !! Witness Stack +! Output Type !! Output Script !! Output Script content !! Input Script !! Witness Stack |- -| Bare (e.g. P2PK) || Condition Script || Various (e.g. OP_CHECKSIG) || Various (e.g. ) || rowspan="2" | [ ] +| Bare (e.g. P2PK) || Bare Output Script || Various (e.g. OP_CHECKSIG) || Various (e.g. ) || rowspan="2" | [ ] |- | P2SH || rowspan="3" | P2SH Program || rowspan="3" | OP_HASH160 OP_EQUAL || Script Arguments, Redeem Script |- @@ -214,14 +214,14 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable *** Second '''Input''' **** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b ***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses locktime but is not replaceable +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable ** '''Transaction Output List''' *** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header *** First '''Output''' @@ -251,7 +251,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent ***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. ** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. -*** '''Locktime''' ffd30a00: the 4-byte locktime field, little endian for 709631 +*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little endian for 709631 ==Rationale== @@ -259,22 +259,25 @@ In this section we dissect a serialized transaction. Each sub-level in the list : Amount underscores that we are referring to a count of satoshis rather than subjective value. As Bitcoin transactions (and code altogether) are littered with “values”, we prefer “amount” as being less ambiguous. ; Witness -: Ambiguous, use Witness Stack to refer to the witness data of a single Transaction Input, use Witness Structure when talking about all witness data of a transaction. +: Ambiguous, use Witness Stack to refer to the witness data of a single Transaction Input, use Witness Structure when talking about all witness data of a transaction + +; Forwarding vs Condition Scripts +: We find that we generally distinguish two types of functions in “scripts”. The Condition Scripts encode the actual spending conditions, while Forwarding Scripts just commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] ; Bare Output Scripts -: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the Output Script. +: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the Output Script ; Flag -: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. +: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag” ; P2SH Program -: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs. +: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs ; Witness Item vs Witness Element : BIP341 refers to parts of the witness stack as "witness elements" and "witness stack elements", but BIP144 speaks of "item count". We prefer Witness Item to refer to parts of a Witness Stack. ; Witness Section vs Witness Structure -: While Witness Section and Witness Structure both are used, we prefer the use of Witness Structure as introduced in BIP144. +: While Witness Section and Witness Structure both are used, we prefer the use of Witness Structure as introduced in BIP144 ; Witness Stack : While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some Witness Items that appear in Witness Stacks are not added to the stack, such as Control Blocks. We prefer Witness Stack as it is well-established. diff --git a/bip-tx-terminology/scripts.png b/bip-tx-terminology/scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..1a464ee3a5d70713598d60d9e67b60221f41053e GIT binary patch literal 83650 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≶eG zr&rjo@e~bfxIcK7n;nuNp(vHl_qf6#h3!Dusk#&0HIs}8-ONOWn#%NB#p~G>bFxWg zh(4Pp-&~qEx66!mNgj$aMq1aIBo{1JnDAOblTo>0h2w+mJWEzr#;?kr$tpz6@h`w) zVwYFu%AUpl9Id1oR@)ji|Bau2_jT8!lFklCznC~ja~iH;Pm$xC$tUpfmT$DdX71epCQ% zdr*D!WCkfn9>}m!6NJ6y?ecGT*@r_=u3gZDS>2_ntUEj;&RbsDs*B@1R_ zAzaw#%gE;k&%9N(5c2Edmvf+&R&d+e^-iXv#DkxV> z^xe<+XV5GD^>-G!!n`s#Lxwfj6)!w4??1}bGiM2|py>S#V?c2dihwQV%tbluEZ)L9 z3ED?M%YH&~gKONacHoz{ucSOQGFTzSS@@&<*%b#G<+TJbs_)D(=Al)$s2k_YW@cqS zyym|w7ILDW4@T#yfm{d&V%s0Zva1_}`QhTSD-Tpxr+D}bE1w6bL33nQVoWz&l> zmjS_1Q-)@Vt+`cP0{fF!M-0SYK5JJ9BAAAXA#1Ya5^cuT>0;B7sVFSARp$NQ_H8s+ z*qHdKbL&Uf5M++vLLJGp$ zZx;`>Rv?hiSF^gis_}*KcTi3&TR7h{$$h1IdcLl0w%7G}dcyc3p2#UNgvK z_9fbCyL9#<0Gg==gx&-s=^Kb$ly5iEF7tv&u6ZhFBe2CZj)i)XpNUwZ_aPg!jBc+r zhB3F8g#ls+9oO8%uKpdlKAmmwZbKa%1Q5t%JYNynvgoSB=2*g zDP<#8pA03hdr9`<@h^`}Ic1fbO{C|Bo((d3Mb!2JOI}Zp&mWjAoM=*#z8h=ByJqHS z@yd>=J~8d#q93UM|MA7&_4{vmuupv0xMw~|Hz)6Dir&DR0KSCTUg)Xh9}S8JVSWux zMXG7{Jwg$l7O^9(Jg&`#OIIOFeuCDif{9%asVRB4$9R;TBYh&}U|HOKyV5Sn@6O#Q zK)d&iJe9p$`#?r=3!;Rnq1^=no>cSY7!(jpjR^tuJ1my1U+Z zb8nj*Zq%4?Ad8w0Jao(gYbepwCU?d)qs@LcrJ;I|i2-N9VG9V0pF0j?>ulPg|nY93SVVPX4}x5;bx$?QE@S zO*!)2V?5!_u4||+Z_%>0bB<>0+O+!i4x*fZBGaub_HKRlx|vt|YEu72_p}hNnxnJN zup)-?a>RQ3b}dV>9t-(^*nGJYnR#1TH=6gF+ma`BSML|>hd{#XTSHK0hneqm1-c9a zj89#vXVMj=s6BUb;~Oj{mCC%(5Z;1Z$MUn#E*g`WcKnab{da!a?+2fiGc{x1S1B=5 z-sL0HG1I!e<^_>kU+%z>=g3~1-fY57>U1vFp~kj$IlrvH1i29fefEn)o1&a<#bkUd zHfIlQOHDv1?r!H@R{5nT~6$WyC%OO1XUGIX6+lq=z%L0PHxR{RdX>?moP zww~$aQ12Ov$>K=h^$eDaF0qA#i`{TEFls;u;XZY}#u5P3yha^`Q^WKt%&YD9{*;9O z>cc&wCK*8@I)JM~mhi>Zaa0kZTWwcSB!w~TOD6+hhJhk#JPh&_=CC*6YUdA&+-ClS zQ`pJ^9=luaO-e^CBC( z2PZSotfeXQB?XBksMKCLM^sp1sgkrUrDR!^94r5fqgY~Wa)3DHhYeYYt+K-J{k~pY zC||y41Rhj@p?GCvtT*BW1a5JB2O<~Fgo!^riH;;bBa`k+T;&~In+za0tA z(s+Z{#AzPp?PfDYMyaW>D>~2e&2Yp?CYrKqgv{bt(8UD}pGFTkUgkler*}3>6Y&)m znv|4MM`%H{j^Jc;sRTl_3DJ?qT}D>?;X~U7*36?3U8*EfVeA8Ms7-=C?(YaKdt`_f z;JNU(9shnWWeQlZ^eqRqZn;Pp5Jc`@Le#c(LStXKtcYm;h`C*9h&p8M)#38N;(bNf zVy1^XYBf$>V%wS0jyVreiV*TV#bChX2Hp+DXQ1WfX#PsR>}djK66j(-G^E4u>`&SQ z8BC(7q+z<)?_GYo+l6OL`?1$s1~L?*$lMNePRB+i{^Tj|33DdJrWJIt>H#bEssFy3 zL!Hur1IEH{dYbnJ02M&YD<5>FTEWy59b97&#@N__P=o3lU!Bi-GyM;t?WVp)@N39D zY2*<3bWCZ4dS+rJ+JLjui1m{!)?q9~#O`uE5HwvSvp50%4v@ zscYd{0ATG>bgQv`ne{aN2{gEtYr&F^=(zWnlxB4Fxfj>_OcLW6G&HqX%P`q=F?(nB zGe}7X3u<=2tItvNTuamjiW8Oh6Yv=O&4oGC;yOGXhP-YMxq^=yeLg7eA*3|>^zJdj zI2N5hcn8>6vJKS}J789%p{KWBT0zSPEu@PT+DiYqoS>d{lqrZtgMG4N${_T%P5rm$9f~*ZDa!agDu1BGi4h;s*54)XN*i&K7=yj)k=- zf_a9KIr3vzUnFtgN=CXrs=X^oP}aHQho8&2rW3I10}RBv&IPH9(+XIIq5n0HoN`?p zB|LVHPtR&GpISCidyABvNk|X=F^h;xIs5+YSEJ|ZUorUOpah`0qUoIlD{kruh#3Un zK8rQDEZJSJr|jhKY)Dz^jgZ|WpDO1GR!_|Dth=$T7NA#_GxIpZ$`i12^5743&&-*B zx{>RJnM;B|Rw1{GH%db>MR@!X%i_G#!yVy0_x`GH(5~Q;cKvjkez}=7I!+;evNSw( zk*{j$WCz}1dL$g5EpEhBm~Ygs-Fq{ZG^te1#mV&J6$D_|`Dy{UZD9b`Ll>M?o-*(; z$-@E1kX!a7Wm#p1Z7r=`D?jkgL+VEVSyv#aNCVPno{{mv2tNJibbQCHC{(b*E$5yd zl78`_Xa9)YyYZovVCk?-iQ`YIbca#rO%sf=C|fzA6>=ie>mR6nPWMhUZAyAu^hLY` zUr%VXt@;=_cD}-_np~Cbzi*ogGnI61EUi3=f0EEBA9i%jw63V67|)2v&ZrXn|7b+r(;-!XD9)Ses?9lgq8Ha%i;QSuK)CDxLb)~ z-?VUUPHaB>%^;Bx5YcIQLJ5qzl}U)o$S|%x?2J@eG#7*&wqU=!u{g%xHNuv5zuls%Qv%XdYZeb`ol9`>z_e(IdpS8Ip^qtkwD<^ooEk)bT)i*W^-#3pZ3D?+)~$D>aXp=d(qi z9ut=`{%8Gf-Tqgv`@JV}=e=hP_mWNPv(05w!pr9d7&US(YV(LQLf!?H!skdg3*d^| zEYp=}usu#XNYXmGZGS-qflZTNNw@X&A^(mjd7h3HNjz!EeNx>|<K4?Xy?6m8JW!wTK5yExD=+PN(R3155j2qDMD;_Faa)6NT_LS!usT(m?ZmmLzdF7Ky+#nF$;5z5z;@$0<<^jvFL zE($_=rV1n+?D~g3L0_YG6%#!nh^}7TNuFFkz63Ruj$OfN0j8Huu5ywTrV_u+7O60v8`d6P6}SA6H+dPvv%U-O4P zcxm5NB(~B5w<4RRelIj>UyE{M3V@T&?6-Sh(K9<`iVDptMnK%AMSC0NE4?g+tArD{ zxTKO=9=XxY7F$*jOt+4F=?M47lmV6`C-Wq68W(1b7fz_?G%KONwab|&R}>%NJ<^=6 zMOf&NoG9dg=L#A7ry$(@LtzvI{vRt+E}e=mjU^l*=}iOf6d`v zvJN^erTI1!9i^0GeboGm3LRRF(9dKygUOaNuJm3LOt?wF3faQBH*}%{WvgeP!}`W5 zD<22a2Bb$`6VBTVR?}!$$;I1&irY=2mwGv!BV-{@P=cmigri3R2+3uAeRd%kG;_J= zk~IqW;ucS63-+HL-jcn3f1dm?{$fKX}Hy8cu{&_(Q54p^x>SohOul+=Y=k~23%j% zHbg!1*(we8HtnC&@fU-(=M}9eE@)p$0fEOS+It{Romfw}t%uoXL*1WR)MYWLri!fT zj5wa>IFMAS>wTXlDv=n{YU|=6_uWlz>F3mViZ?`x`jJz-5Y^w7Nh|hQK+gr6I(h`a z`E>+7SV>Wid*gX;zmP9zZ&{G|&=I~7_lmlHhTh}d`wAMIUQ{>slhTR0w-DhU z@KYErCi(JTaQE%;{^JE17QSfzf)EXPxnl6qVH+}Vo$N+zs|?vB|oDzh^M zDHW&Gtx)4;jkQLx^7gGOaCVtZpU*}A&nMfp6U`)%BhPw1D>2T;;gUXOELb1f?o`;d zwVW$y^@y%#0Y6>5hyUG60JBTZ1MCf+82U*jZo%5KGZHpKsV^aIrf+g_CA^-rQ+kCK zjK_KdTiu)yCudRV2@+|<$!J;5_KE9Cg&$Oe$hcHKR3t)jbu*M;M%jIG(O-P=v?1ah zz9=O24(S%bOSe;$!`rua0JrAbc~mOxU&%e&^>J0|#vorfaCkIk&~!60meo|^2VJE; zx_Xe(inX{bxO9%+aInEHz$yab^7z~>n)Ql;Du@rLkrSw|5hA`%aeM;r9!Dcic zWvxhUtI{XWdYiYKbntG%Y+_=rikXHx>26#1j>%K(XHYrHRTcWAxaIL16>93cLNA1| zSvf@9I+L6o%m17SL(6l&4?f489z!m()~d5IkRkkU6jvCf{pKl%AI7b9lcPle5`h z(D1w{itypa;O6<~No&F!il5vh`!m22E>5M1EQGs7!$7MfWVd9(rS-LQ#};`O>ogSL z@CKopTqJu?aPn+kwj5SE<&}tXt}7+%FlQH!#x3uOt-?<$ZUDp$*elV@i!ki)AfdSR zweCCNZ$Zp{M$h&eM_)7TS47dGItJ&Ca!7T(&2#bNea#;ht`S~A>*e~CmJOx`i@6ZN+Q!Ahk91}3NU7G5NAtkfD_4c_2Q$^u^K2g2=A==aL zO;UQ2++!Q)dmR~=t!EhZ?JX`o;!xBCxhq0s;o8+9hYJin`p{=kzVgHwhrt6r9pE}M zZjV;*5-H&VE_Dzpv7vZ%p-TtCh3n>G-*Z&Jg%voZIWamVshzhWvR6#IVIN-1*hhQ@ z0nxdwD>z|P?=52JCA@X~=0E4*aLtRtc74|^iN2ct#pBGWGdUJLJ7cA-KGp%O_Y5No z`Db0GYJHRlS*c1>-ya(?!!d8Bycn0JGL=qR{Or-cb`BZV*OrMWjQlw#(u9q6TF|Xb zr#GfvL<6;?Xqz#?HQK7<_K273Xy%77eC&+Af&{!J@XD}EW52$BzFW4ZHR83MeK7A< z)7;=ow~9w9;}NW;*3RB+OfcKZhl#+87orDPWJ{xD{w5pJVvnUh-rCmaQQ z#_N$XvrNe$WCROQQZ88|1!Ys_g%NI{9}}*udhLrpL|kf)+dsyMIXlJsa9V@F zgz`pmG~HUi)`3Cwke$|aJkJq>2bhoR4AtM3yhdDnsnj)}$GL~TC*n>D%!Z!j-QO@M zbj;_Xesv4ckX5`!O!DylE<3`ie0Q)kf?%WaI)W?42mpd%~tYM|efFBp!R$zWBRqJP#ZbkrtbOBO@f+T?ye(B3i$!@WZDD@d^y`*U+B`jNiOagF zYdEj>yfzms@%*NZd1ueflJoUPN2)ZCsa#T4#_{A6b* zI`ZW7do59j2yQJfRFB1ZxZ+A#1p;0R+aHar7KAloFm$Of01RmEw;`zGh58h`eA>Ug zFJWq8-M7Imv+Q)ut2*yLAEfVqw;uX`GxRwVtF%m*$_uOX6|i5zSjoi#xpxcrnW~@( z#Ur_Lz8$6kE&ZsO+D z@ZhU3eEVCQBD-4N%o?5A@;dOVy!_TCbWeI{2TAE$mx8~wnS4NngKXgUtxJt>ZPs1- zK19TjLCZ+%;)$y&b-ZK##KrKOnW(HF^iAJbS2=PVtoW|u)EXd~NzE+9@AwZxvu~pB zD#UAb8P&%jjjAu-=~f#Qvws-I=pBA7p|AD)e~ieqwQu7R@s05)w=eYk3u7H1XJMWm zd#p^WTjSV{mke34QdM;0E;7iiAO!7z^TU<)I%F__CUja5L57X$f@V)ZNxA2o~# zH8Fv9mz{75Wh|^netc+pX#2HRN3Di$0xK?*FFb_NKmO=4uZXEPP;e>1zS@1=if;n_ zLja@^fQs>u|5BY12z4Up+yjArkd#XlWiQg+SoapN8&_S^$EcX%!Bv5KcRNK%of|y+ z)bT{e7lW99h$%TPXM(MPUArA7OPNxz7f%mMR;`6%1c)e`^r*Ngs%2l&Y-QpDMT358 z4`PCiCAg|-VcN32{hAh=ir!(jn&gwbF!E-2{z&oUi}EOMRhOd5`Xt!QL2vGmLB|`F zF~*Bm%Dznnt)JV|aTWi6&dc9ld1^$LLa=F>f*Q=7Vf-E_AFwQPA6Ns%-`BZPi;NVC ziZv@IET^c0GOTyK8bC>cOj(3<6>ciKJxuh(q;xaVeQNU7ykRXD2 z`#4qW@|Q(gk;~In>l=FpM}0;?)OvOhWw%(a1JoWI;UTbb{ zejw!`#ebARugTlc@)`YN6r*>Az3-oH3p4%s*`=CsV;?K!>!+`N!rhn*je4_M$J-ZS z-NVojSW;7)QJJp;biv(RU2|Ht#X1&dl5&R~W;~bzBHAPlzR7&t8iS{cfIzrC4l#WZ z!z-ku?`bHm)`T9dKf!qCJ>>!Rjn&iF{QAXqKOHSS zH8vHUy>2zBi8Uka&w)uwj`Q$V1171?h+3AgvE;s}{2XsZm|4lj@4{pcGz9#=A`5?? zbN{NC$xT8G&Hi{-db%)9guqwZtv<<6h~+AKR{;^K?KJhQ*=Ujf35($|81FSLxMxJGAv+w4WQNTJN=pMgC~w5vUL z9^(*|K$jp;o0>g4i<1I8pM06DVbQ9$7iAN9b1n}$OAA3Cfp0agNOFqKNOZGvpLIv- zi2Da4PDIN~iwke}ewnK$2EyX*B2ULIHz8FIyfLi3ES7kZ7l>H?Rz5kb!#_a+I1Z?l z3^+I&aUg;8n`_5xo2&*xyC{3JjZ_hcS0X^F`H+E_5uLwLdwmfBq|Vr1JFPg=G;VdB zd`*;Q+PdB9hAuQl7~Qz@Z2pS(vW6zPrNT*O!>Msi4o(J%G z6PmUJgjYykWGM2~lC*)}z|u~pa!03wcK9vA(VJVxXG^*2*A%C$y^*=J`mx3*{=x%a zgwTIy!u&6A`asfM8>xn-fm(KL^ z?Onvyc)B#XN93&93;$Hp-8b#>(+Z-n_1#c-)=-M=Xi5+*Zp5Qi($Ox?EciZxhqC># z4UIM1TAXRPBKq{*m;L{yFWl(0i5|b+jED@zOJf&IOqP&4`4t)%R?j3(c@u-ySa`+~-t8)hn zb46E@blPn)Xrbp_IX8(!OSV+PP!W)j#N`h?KuiRC2&Cb}N`S`*xXgKY~WhbCo2kZIvP0+dL-~RePTz5wh5{q7Y z_1c@`fU^p=ojg;!ZiI0i+flEIfIhv(|rK;{@v4}=B3T8ci@MoDd|=h5?b z^QuzsR*)0WQ8Y}EnenJ_BjL*wb*2T(NC_^*@YdR3r;C}=Pi*0U)5y2@d&M$}hlT1- zyE=aUt*5`Z`2wO(B}S!W$kuU&7EG1}rO$$Bt+5~bB@jHO1xU?Exsf9D?yajtNpeaap9!L z`Rb47(Pd%r6LooCc(M25xO%|sFF5%9@u$QSvuEx~U;LUJKmz~~{qKR9{x(HsZ%R!m zYW@mz`{K8(q1>%WZ;Gqcb>_{%*!lD}F#HLN+8$8j%_-!;cqA(H#Ags& zBP#k<4&sA7{t|_#Epi0Vob@6y8RD5xbJ4_w1cCbvJY$!zi!MtF>2d8c;>8X?<(>;` z>QPGW73K?bsj}|VkkQ)C`1*uFwdbI@o4>!FKfgOIX?-@l^=*eI9}XyHa*kBN<_|hw z*r>zo$~4=XhbS^$(78(U_9ZT({Wh*F#=_J1#%=&%5noKWEDE(GR9u4e`{E5X49J@*W3R;^rG;S6LwN#c)p9Iq7( zA5g#XjzCe5?>y-16oUYy;ZQ1?Ik#T7;WUTZS&Bqzdd^j(JL0))`5JUQ3B&q^L+7`< zz37-NYG0UtHtV{jnGhG+K?g(7)rVH$w^zOBf!=rPD~U&B##8$nCq~OL8+U&GR(4|d z3qzkg%%_-Pn2ywMw^!?CzDYn)nW-@ErF*U|CMmLkbZk$+a}Xym1b^|_r2*G7yT!P& zZe!PVt86&}bpki5mabEEXC=zMqL7l}H1(tFH%3WAZ3m~o6whcD?> z-ya(NMv^r{4W%$_hx%YvesD8IThJqTdw<=g<&pI9XyOC9ZQTHfx8U3F{`J+KRgB{r zo&c)35w8=x2gUTag#~uTQs#aw2LQdVw!J^~eG-$e9Ds#(xzg;mD@DI9Z`GI?*uN=8up`w6E4tesgo|<_yFgVEi;dR6qeSw5hKjYW%);$D?$01m5um)9mXcMLI9t`aX8Snm zM-9K7^pY)OD@u0P(`AL$Wn=#Xa>_paPYdQjH(UO@%k=9)Efn|6$jSV&P=~mbbbK;) z!bHK;u+Wtye-*HAO zkb7EKtYF(mB)MMy(m-X3Xdhsg{<=`vogDPOEY#f}Fl)VCor9Cj3CNC-$>iuw-|})~ z#AlG+8Bp&}U#5jIN}p>H06tEdJ#Y8>{kfA$@}q-g?|GTWZS9hmT?Rj}Zyb`YXhmn_G9dhNa!J~;Qc!fat$J`44L)RL3We1i3YbfLEV%<>K=;ZGQN(V&djYLPMJ_u~!*4*bG$5IO@sJx`H*rQj=Ppj04=pR5eM3;c% zZ2pw)KRj&y`xW^aWag7@v17H&gJzSQmiY|YJDfH#wVmX?>UZz3>BZ!%Kt!K1>NU$! z_s5Ts+dv&0>XA<03p4M5{TH;y`|2N>|Fa+1@UYS9+V@5sGkILV`S94I*&pLNPl=fa z?9+oLE*m#5p9{#~8`vImxzccT*8_FA-xlA0Z5fsV(Est(SsN4wnPyyE;NzF99~x&* zb4yqqkDeuGwO;|7>{^Jh%`;n`l^VHSJsXu&o@qA)PD>nZNV^m*674!P5~29{B2>yC)&6>xLf zMsg!#tpWO*h!*wXw24HNSHZWgVsIkWe_O5uUA^;nJL3_p;uR@?(S#+JzK# zlIN*SWXl4i5eV=AOK@==8VfPet9J2epbUM%joGxL*lNRyGT0K4^G1f98u?;6v3fJH z(BPSs_hd`h49cFgb;P>dV#XoMSO=-GTLEIEx5-8w$y<2|)6f^6)5zm@btZwuu!-Fy zCkLN&5_Ce<(%t5RF_&sX;!d`HG!g46eXt&(7SPefFXGK;fz;!>!YBK-z=Rt(98GU9 ztS88QA|Nc~V&%T$&pP9_5&8zRvd#O{#F7W~#C2qaf_sf#N4Hc7Ff-CwM7kJH=$h>7 zy^#S&a{L8XJGmViXLQj=-Cy`^2pi7nJhx{B*(pfo$8)&y7%!$OwYQ!Fq+ln~B#0cFjLZIeczxQ)0jhGp9$2j(A zqX|M8T#e8pWS|9zOV|D7j6WeeuZYCuaC-HnB!(HAp_io3#v)oPEeI5+nyw6*#Z<46 z{>2$BQd(laM+u@0(LXaS6d9#J5kfI?R1uM+1O$q>Z|2ogJ$;JAE}mfv_NGBSD_zQS zqc^>oNMSD1@p_k)^JgF4+x_)zaBif+;0|Vd#i$b7xDx|iQ~}jKi|kkKM$qWXLxw`; zqJ_p(byju-azXM!edE^!G7yxchYGW!7UeqAKi+!U6L;S1#aZaAM_>kpTga(kmSAG{ z9`xgxug(ARAKNd|y!)Fp|HZepgGKO{6bzB_x_aiOh5AGLWB;%N{OS+`{w5jN0j!b? zh6-n~-u{$`g{{E1-5=`enqO8;d~=BP0}iq1zjcTyeC78X{R*|%!Bo>W zcgi*;eQOXRuIN31-zaEkuUee<8zhbA)Zym|5UYXK<91V8r}fnG&| z9{uW@eqS}~MP?C|6)|E%&GD|5>JaWQEc0;6Z0G$*Zf#3iOD{Us(DULdCj(#z=xzP5 zRowO3qo}RBosz?Kq2NwuU2w0500I8)YdG1i)Nf^7@Vmn{*p*+(P0R0m145tXv}$qK zIaqbAp?OnwY<>-NqR?7ibB9_O(D`V#{IAc+hZplZwX$*xW3{dcInJVzwBKf8A&4do zu&a?(Yi(AT*9u&?@663^i&%Bf?1=ZE0+1S`TdLb3r$n<>DdzbVdq}x?IEn$ga$PBCnQNz7 z!z)Cjn%~IJ*}79|@Y8UR+)7r?y}fB)r&G20x{4D9m1KddwYp2q@@~{_7k&p*3=GOM z|6~^Lt+2LeC>~vE(~mlwlG2SXPNMYAIkV!zN;R5<#I0q0YnJNs0~JrqLX+(eh2M;` ztWE^&P1|P?^0B!7Bsgx+OeJ45W0ES^gB?3{OvG^N>8(2=Z+91L1{TjWU@+#{H%5_J zK$4?*9`*xD08P7G{p>4IATEW>>aeFjlgaIt;NBgfBONN@|3Fu81)mbq`_Q_5wm{_D z-HXfz3-KZ?Acd1(8{|arWW>drv^kK|V_$T(EBM&e-kZ?NdC?p~*}~hHW#wHOARuOz`8i(tCH!92n2>Htc>M8-v3ZeM^C7puZZp0Nk!Q;Fr-mUcXf$3sWq?g zx%IRc6Uh(Z{}|Wck$4cbnRsa={1gj7tW_Hr08)P7{%Kj22EAFaewFmRyRb~e-QyV) z1~N!^-fL%hHiYsPr2PxeAX}DjG2!`u03B{N=MwLbIc1`yajK2ZsA=zBfj>2|x>he8 z$ObpdTjdRo!WPfN>kI}-Sr`@XuWMt3)Eb90v(LF*g9Oo*Ot~lAVAx&L* z%2dqGFK{b~iq}WP%9qTENAx3Zqp3%wXDm_+TV4&$cctshQ#pbM*8BI~w@-!rnUSdygQ3yRR;0zqlN#+>~j0(-ip`SreF1M1% zI{Ibi3W|n3DcD~DU3I3z9jI*yqd{~0+pEG0sVleT^*Xv8n^H4~v^G`|Daner&36db zEq{X9`#x!nvhn@6XNt)T3e3b;#I)#0w@vZJ=I5J}k_VF3_)idp;tzXW&U^Uca`Cpj zdPzC#hWxGec*Tbi5pitiWr0IotZbAqVSKpSAUbeDp}{X7Y3gJ|U(@dE^F3o@(5}di zguo@5wuG@q{rR*o^{7W52MJ)_y|nu=o`U1*U^+EllIwl4!L)5b!^w*S!>?ZOgUEgOu3`CMO=zC-!SUT_>QTr(i^c=4g+np?Or1nQ}Sz%I63e(EW^n)s%W->RX+x2 z7vJls+mpmc>ud6MkFkv4;|MXr*K=~{!?U_hWJL;A!Id`I5xpqz1d@-VkTr3<)1&0Z z^qlw)S*#+;GdM_ya^iAsZ7p{;E4cXL4~n^q zD>-r26|UtkyiR^I^NL#RP28(yl%R+uHtzsQ0LOv4ZNrZuawuJi;Gnql(#T>SY$EBs z-*{$t)b)w_#aCca#8H@Mh1|{Oo!q(Fi?A7)#wbQizHxt)TI2`%%$_I>YSu`sMVwOx zcuazsFa-0$&K^=KO2oB$1|_)skVEHk^VCD$>IpyUlgDN5)(e$~&}CL6#XGzX9uC`W z!WAZ5KcC6yUTi)bovY=Ms(fx}A!_Tc5@niIp;XX|%3xH(;9_};{qLUF;G20QOvA%g zV&NEl7wMREYS|F8GPB^-g0-GsNKvVRHcnn3v_So-xig_=OC()7LSBiX6=DJr3hl;X zDfqJ;f!-Rr-L$i>=1W!Wwqq=U^`%Qc6ml2!X5~EB$!5OEH=ADkNeAZP%#qoryBUKN z?vKV%KB%eAozSbRs+w+^9rO=$*84a|rub^RB)=H228z!QL|1D3+-@JlEu0Vb_ z03LgVsL@{SazydpSvb?rgjlp|$Lf|eYIgWbA4Two2v312)&bZ{+)l)#c${%l|*-zB{g|tX(%Vj$_wB1QbL^P>|518xXM2tB{1y z83m++hTi8>K{`VTNC`*_DI`b<5JDMIK!SikLJ0&!dJ9FmfOj+MlyBzz?)lw&&$%am z=yoUW@~*Ys^|t4E(;$ya2#_{ZKXVe{<7Zb?8szL_-Z~uW!N=9G<1l`Rd3VWIm#D0M z!25*^Zh)_EEC55BTXFZb(U7VcKCMIZ?@gIG{5V|wUt;afEv3}UHKXee;rjil!i?SY z2Rpxl?p5t=nQ&{dS<5N>w2-+4T6!KzuZ#-yX1Uo^wnzWf%S{HnT<}z4%93Gqz?a(5 zFERK=G!TQg+Ka)53XD_pngVbHegyewFfc;n^%%Px637Pa!z)4d<+>;8j;u1uXZgay(Q^_X>8`-HfR6*h5Qc+ia0nbcn3rTNzjqVYF&y&b4%9WRaUi77eMTQ|` zl5;m{D4m`zh;XbFkiR-J#qW%VxwCy)nB7XPg~40ZeFT2m!+tZZPoNiE>%4)~!5DZf zx4demOZ7Dc;kT|3-5eaQOQI;pcG$`l7ge1`)FTb>GrHdqQV+n(kfH0L<87B1b*hVD zg`FN}3C_BuRA)Xfj)9*ReeHuFob7SyD_1e;qk(iw^vtFZRm?rNm=NuK&7~b$s=8*$ zd4{=eJzL(5bi1W2pQJ;3oz3OejxnDJSM@o&?#}9bmxt(bDBr0r)!#>&w$N2jHL|gJ z(^LfWN{g-PH^?mhmYPM_0chH@hlWMXg1WCo7WDA77GQOBG`qmv8t6C8Vs3r!u=DLr zRy9ffkE{pEx3^-MaoqG9JYKD?ZhVlG5(P?zKipEtcgga>G+5M~ShviNaLvyn>a+&S z@n7rI{x+A8A;{qqutURj$_06(s#%Z5#s#u&NCT8Lcv1sfjeBOhqy7^}EhC#}_7iA8 z3FqAgm(S{M1sX``hV9B%L-3ZF3{kFF&mlY&Wl{08<6ObJ@?LRm&#wE;-tJYEGhiPr zIzGpwp_ziOLTEmx&>Wr|&w8}BX-5o6dfV$aFXCyBNfBZUWFNRXEeIIG&l}(4%3dA` zgIPbCAdMEXV=;MMiUJSulQPUiaeMTcW1^uDJ4>OJIk*91FxvH=VtV#G_jr9enZZmi zNhh)F9`5W9e~3wNHW|67AF4PGSBvEuI^rvYtlHvmD{qyPlN&O1A^kE`lnBjFUjM#S z9&(Y{)Wl2eK4ZCAx%A@Vq+-HKOR<=rMZn-K z!};9c9(vtnwX4Dcm}E-Ip7k9Q{PMZG@2k%4Ah*Q9j?TDi~g!D)58UKc9jcal`$hjn8b+=GX=#qU{D z38SAt5*C=e>bL#mA)>j$0KavMv*Y`eYg$8YiI8&>BxnGICzMOw`taj6aRi>=21~D4 z$MWqbCbLrlxQ!JgV`D69tzvR17L|_;jy!JOXG1XE^s-;O+BaF-vlUJTrXap)PT<0~ zFI+922%VD0$5wFz925T1gOCg(piFyOFNM;o;4r+CaD_p?ZQ5<-qIB0L13O?}i1S2i zYaZjf)OQz5=3@J-!kYrBeH{+1-k|Nb=T4@d9C{bK9=NaT5QX>#-EQ@CxG&CHRbp;L za5~sxDD0uKDt5m2pvx3T=d0)4iW=}r(XuuQ=b5JY4gEpCT=jx3p5R*r-oaK@N?3x& z2WjU3Gw5;KyFPTsxkdO${gabD`opk|txurgmHbL*cSy)5(E1LM?^f~qQsUB9xG>_P z)!SKJ?9&8WKFgloYW1eMRd$EA8I&mb94X~a*R~)d6NA$(O{9%fq5~hqW(tj|4L)8+ zhFR|@T@qXwACa6kC`yPcFnQHGw~$~>czh4QbU>s(Kn($IDu)a`*kX$qx*PqJNwV}@ z_PTI&bbul3XEEIEagUvzWNC3(lr1xOr^cl9d#CxBuwNQa;c+i!u=pN~AKqT3yC$zz z2HrO(Jvd9=xu$R$*W>=)TkM!^W^4zL6M;{uH+_K8I3-UyMn7`3T=$u)JoIhx)gq>T zzPrNYnfcM!N!7$-{1PeH+-^k!e8qyYXl{Q>?97&f=>6iLM4?vr)eX@`4$l34yZ3;# z!2#J03LOu{c{g^&C$%YKrxJ)bJnm6;7*X9df{3h*Oopq$-K8_Si=y!^t0@tA`SlE& z_Y{q-lxC=hjz;rI!34xn-)dHjz|uPcdddW7d5ZTx*JY%seY>>L=CF#2(|~^eBnKRN zMoqTndAA`v_kCQ}8KF?0S5&DI%c_@^BS*AjN?q8w1NPLd2;TH!Ge@SPo4OfRfD{Hk z&7=m3@V;g?J6vuKBo1;QLibze6+SgUOi$v+c5}ggcIoO_mozjO$d9Cag?kXzsN_eN zm>v_*KB1p~b6bDUCGABL%@%*Ftk=T>kVGQ6`~J()cz4ZVc_z>Q_qSO6d2! zN}n-Eo>nPl?s)S*tnP5=TJN6~z2mLqzolm9I-rj(@Ijnz52$=_i*H@ND_FKytp+;n zV#OV+RXE9a>L?L4=XvLmJtukyS5ei#R_{REh^May-^dw_dSA`Vnp-pIpoewBgR`RTxlhbZ=S+BCJN1ly_j*#F z)3OIFD+lfnYc`V6F03L zS>r1}tGgw(O>&&U<|eGn7vc~)J$N!DvX8c?mwhe2e@3{d#3qL$4nJtm3~D z=hD|pHUi@7V6U8(88&ao{9w7c>aBqp60{a4NN}A#dy2R{o^U^-y9Circx+8-5)^dd z;EkZGsX5=_d=vIu!@x}+Y*j!1jTINn&C^Z(729g|9c7S7DCv!~%oaB4dc#d3Tg@wy z;>}Di_f%-TGq(sk<)_(p92v#xM+l5ozHpzj+ekt=Lj=4`c9cVKRU<~_(ON{L(#KX* zgAYb4#kMxZqm-ckdPmiNoOjs6SI$stXbxj*p7F!$sloA=58^xZyycFiJghdcE>|aw z-p|M)WGRRxy5{+y&W*i`hI;jn9KTbWF&CZ7$Gy(IbBGId6C!SbtC&(4!A%k6CQC{w~1U&zD=<^ zMtwV%hHK&r-FOc9AE>tYnCL!d9c;{XHxK>9;b11>Dy!!f-M7j;^GR1l7B~X)ELdEY zn57&xdAetk-zh7x-eNapx4t5ANxxVu1wuYNbJf||=_#3un~`_-#`BE9CMwHM1ieXn zm*B%-l(J;SD*Ag4i*}qoGyXF1Ri)&0GKdVW-qPBxdaEdCY=(6EJD~lNlAW<=Z9G6HuG;`WF}5%ZqhP zhX=6~kiT&qW}9wqHTH5R9}Ur1A|%h1+D-Xuep z^fts#l`nlB)_t!D*P1>FF)O9(l_2t77?5cs_F*(foMuU}#{r?+lkoLGb|hmRjGs{| z7&b)Y*@dmllqtrxpfPi#iCp}ekW?64{bv8PrO^yID}&zEWhRG;8gW8(D^_}uAX zbQ#QrX!fACG}TDcJ+IPo;-QFA9E4wp$CC#s#QW58$*Ojf70q_3OrAbHMo{!m;yaIRwe^3d~B)VgucKfI_Af_e*(eQ=7Eq9KBfWVSLme7&guW? zSZ_H))~Lu!FLcgg{<1CzsVGz+^D%sL?R|3}v}oo-EoYBO8Tw|x3hJHC_VIC@@-Tyw zU;{}ay~zy%LcGz9ux#7Hbn!d1v!%BL1ySYO1A`2;5P^{UwU>B=1K8;;&!(_!li4U0 z*(3`8ewlnXbFsL=M*Y`g0Lpyyp~ny+R8@iIJ)+{$I0;4CV(;LH_FP?W$+Ers!-ZH?W`^Y)RAfd7!^cO}Cf+=3omV>&t&+AWD* zlP}?|nl;?7Ydhq|Q~A;oBzqh5Uy%XYhhDB%@H8uu`GC}I8+sP1!0D4UCpQ~js8f8S z^QbUb_5=O)H2vY3OC~lVLu0n^0dchu_=C3yRfcO|-XO#xx8fB8*R2?r)}?e;Vm9AZ zJg~X~)!Y+ZfpD6VQz6th(1b1RyltmXV^<%_yHNu$P3pM~C4K7-hr){iF z&zvb8+oQ{&TY~*#zW>FZu@*fkT=@!MQ|WFo)HW}I+x?=9r#CDv8okD*y{l?)#aU27 zpi9M%m8^D`a8oHu@^uw`kV%Nse4Cx5X?pbINv@eFd{sxGQrY8@XX8SCn<_Od7Ylvm z_D<<8<)3`+qBk{4rsLb-mZYmAaH(XV#WF+D*U&7no8aZi=bNV~b#eP-KedDdVQ;$P z&h_9ijl>fdK(xWI%~O+<-W==h`FII#i4*7Nzjo-zU=!r*tJFNV`?&gpY3hR}7ON}; z!-2*;E6qF!9&nrXsShgQny>*Iji#m;6Nzr~mEm$aykP||90LDuE^;%X6>Uni_ z+1(Vh15#cdLR&aCo4jbmxt_Ct9N*t7egWZOpE5iA9lbc*TxBfKzfhEmUw{JTJ5&oT z@O8ggTC6`PaV^m)5=Ue)%$yTYk~wMAiM!x=8GC2|X`XdCDuZEk0EoLk+NmY+5PGsJ z6&FriHlfnr3aGevrtRaC35A>{TIIvuKOK#~;elJFN1w~eDKqJ|z)RjQF!VvVzE3%Z zF2aN7<|S72*uXZQo6M+0OTs-|c>}M%fCrGOi|i$EByl zjbq4XD|iF*xwpLXs|Kcj)YORSw^Y0gKsU(k$Xp+V@Kp_V-HG^0lr^5z#RZc~oK@u4 zbWisR$EWde+DG#5E@d3X17zE*<#BP3N-IMs&BBY7KFW1Ttb&eSRza7F9jU+;JA*yo z4GM>=7EuopF}W3u{zW-Com)aIsBCFvwX=)Z>(?TA!{l;&tX2M|A}84KjG@A4wNBhU z1KY*p&5%;6lI605%uD6RZJVcJi+Wag8D4=Ni;Q(R7_RvsJpsFQPk{0@z~)zYY`h?9 zG_-6vd|t}0<`Oe2cbN5y-i*(yHOM(!DOH&d-P;-Cp?t3}&EKOCt7SKF@>P+UJi@^R z?K8L7^1;kdae2f8IB$BAHc>mT^;btbs&znp$3Eo-NaV#e+8|Ol}(}x%V zvMnCN=;Zd@EWS#bHtQLAXSuE}ykN~`SWeW%>Ae^3yBPIW>sUPuoJRTZU^r@FH?oVC zWo2tuSbxI{Yae_``N+&=ckJuY0A;@2w$8${589Qu8MG5TijO?QDfD$$Q4pX2TO>;hVvU^$K9~O7)|I zZ$ggvjOw}0&5r#+KqA+ipSBlWMi5^2%8JSe9ObrVdjR44HXz5xamanGEsF zYELZPtk>=hJ8>D|v}!2C4EVTTr~8F6lusP25tX^{m_;lYen+s3KwqY|Q=BnHc@>TO zgI~DJWT2~2ktL$bc-*^6~7yTw434; zlLg*QD9E3Io`73Fe)-@Nz?3S(oam~oJ>mDv#d7n!!DLgumdzEtE6zn6!*xx5i!e(Wtz4+kb9dSwHL9Y`+ygupu3P^^$--YZK zt{FpdUXddLyFOY>{IEB6JnIcjcK~-WJy8={EAn)A(pk!=P0hx;97{lrkg5NAKpU4` zHNQJV^Rq*>c!tsXm?W5+A$Bs8lzUmDV;qS!+J7uBQG8gi}$U zIb&G7qDgF@$BS<25W3|vieRvoo3yaBmHC9XxnMz51g@5br!S@+Oq+hO?oe$rcP;l; z!2-gL3Pl(dt#ntTOH>r(tdgy=M8c_Yp$eymf-OeUwyO|57p2!_=7<_Jz?LTsy2Pxm zollK&8gBJLV_i>*9esx47m)HXuS!A|eDdZu1|tsAe8VB%JJ_{1gOpWF!qm_^Z?Iqtx+7iZ>AF1^FZJ>mLcsl_G=+JX zPd>KJYRcOrBMK9RA+Ev@3b!xm`ta}0x0d3go{se3Yq+?)cyBn6C|2(BvEpuJ7KvO@ z51kw#k&^+r5>}=4bIWLpbq|`zNfu^SM_k#Tu2|PcUa4M7jGGs}TEeu@2$-gH<1L9NewocgN}&te)bAr)ejv!*egC-|G@h zMJgx_M#i>g3Sf-n5r>>ixXbBt#gz=^s+9z$LR(SOg17ky1S82qZnGBIQl%1}W!@ZD zx2tBkB`ycLkaFwRb#27;?rR^FebX?1F=Ao=)kWt!fFW_!ddTK5$-p>NIf7o^MP;iNQ zy66m0XQzg6DALoARGV_^k}4C1(I9EdrD>ST+7|05$g1DP0eeo!I0h4I#^ZsqR`Np`U5+#MER)S<^kgTeh1> zjx&>xW57sufd?bQWn2!E;I#WJiZ4bNXryu8<}jbVdle(K_LjDKXxxCd3q}7FR9x_) zS7bT1Z|U(M-5rhym|y77z_j>Q!DjU>+^{$^5#pPC_B{e`#^DWAhh?rk5{KS>C@Gx$ z;Rcjo;%FCpv7TO=;Ra(mkxi_lTt42mMy%_g`3Ovk&dmF<)jHWS+g@swjXL0OLnEBU>)k3nha{U=yL2Lejxg=}>O)@}YP-l4W;0Y+E<$alE5fz@&b^9rA z{g;S3%=GW% zsQCoG>~M5xuf&zwLs^Z|ygol=#pq`$8yN0W{4qoVVdx3?;)Yx`bZuONj*qSDvZAYY^GE4mRUxYPF}GUIs;{dJLyqq`jWVkAlv7I)4SZtz)G+X zB81&Nn|w?PjxQe-al97?ra7m;Z?u1W0-@+B#mzy2uZnractoq4+9t%=4!9Qr2)Ksa zd^Z}HD_|>Sch-&nr9q1f-fdMp%lzuN$t9R0#gpgU>_hiyy-u#og(;)^f9s$nsEpD+^qP8wWlr&nb28lUNT|=S| z)pC-gk(JjYerYN6-se&hR=~bSb-^htb~rpMs&I@h@D)-Fj|wokZDI}1w%ULA&dC#p zNOmqS_|T6HUcuT|V4~F3WwgIRIE%&w538(jcI+CtXw}J2EI0aKYI8_{X|>rjS8Qmg zy@{9OE_zt6_4anY&(_BxPfhqfW((ihh#pLjFZ(XV@~PE^n&slD?L5T{z0ye6br`+m z`Y#n>j#*UWy!-JT$6^*nGrbPa1iq=RPwFRi3eK9+3J6{t8ypl{eHt#=plI?it}4jo zec?_WiEN&y)7>Y6Up?X5W)T#grA4|2 zIg%j`#p0cDXa^T(rL?H^o9&)E7@7x6y+J~eNBP_BAb}vFlRHrUOmwTzW%Q?71hWz^ ziL3omA#w*5iE^G}!z^>X$D!d0^l4qI=^E^eS4eJP4|*kz0Hkk~hy-4Od40}fR?3o) zXM1n;R;!KrEm-TNBs9teEa;_eB$~iMw1rDondDA(WV&~Z^E0XgQ9xM(-8-VS8#|ya za{-|-?!rMpP3ckNHBJS0@bO;+IX?r^8hf8_k1cG4k1m;o;8V?2U(ISZnys9wte@eF zZ?xaSTRDCLaT3pSIlTQ0o09nT`(q%`zTeBxrvE@%cWkPT0*c`Lc7h-1T4nC%i~siL z9ogeJdOFdLSX5A59^v zQd$Y+v5`!EcjEcb5dA(4H#sy_j zsMjREX_GMj1VZ#r=7!g+Hy%ZG7bq)+oV2YNgEt7xjmC2|@SN&J`~M_i1dv zU=l+K!nZQf61xEjilOJ@#Y$HVBTsuS+r}vpRkDc0sy-Z;BwO1G7nI)E9rSXDQx`{6UYm9GFxRJvy))%RD0DX|VdRc5WLswwF3A1xjnR%^Ek z^`;NcHeP(7t*ok0+F}GJkOj>t4Y`ZRm846RM%***$u)ILK2e~Zj}6Bc+=EBPxTH^r zxx^HQKef)El~W8E5g#zHaF-#+q~KE^Sv?N+Ty5$wy%i6E5j*BRW0qJ1!X6( z&}G(e^v_s*@2NZO(|_iYyRN?y|_t$@(%HLU_p;JUT)Pp?BjUR(z zHSfb+;84{I;oZzaiy_(Gk&1qC?-(?;ynN+Dks&gVL1H5CxdH;<1SF%&&Pzs)w8GFR z>NX^I8=gI>cu%`hK;jCc<3?IhFO&9g@`gLUQ%VzIU91D>t3w(!?@KtWfc41%jXNfh zO`VBi_L~KF8!>SfCu_?Jygcpu4G$a}p^9cT)ZtPayd7Hgjt3tvp;u!t4vqs>C*Hlb z^9p?|5f>osAUq{k$F1bM#q&U*yNI+BkjSr0AktU7y&Vaf2(49f|E0z{?iF8j02FC2 zqf!;%f;_4?qpz<{phOTllV9lP7I8Yo3f^+Srb7w}2bhVnRw!m5nyOl4^HAWU5%hyQWQws!}Qr6XCKI! z2Q1)SX2+s7F=j3pSDlGB%pU#nZ46)df{_FQvOzJ;4Dj8`AHoc|1y zV4FCO3``U`i$3b2P;BkH^bW03v11=l;jCl9{k+l`s%wc)_AWPsKSa1MUYVbwSo$** zJYKK9?6!D*$3;%QkUZOJm0O+CyCFSkBqK5w?PjkbC6fwRPPMiC_omW(qGdsct^-I^ z(>@Hn+Muq}Q078P0a2q)Zw_;=*Q5Dqc_maas$W}YT@d}9SSK}*m^$>7&- zzLd_xX5zUeRKLX(>iZEKHj-71j#glo?v5^koxOUaDncV~t^V*Ci)aoy$}3fa^+PGV z)Lcn?o%!{sJ?=z>W%hN@)L#Lmp0PmqvG$`u-A1b%9)F;zw$1Rn_9)HQiFpX{s!6V( zPw(43fI~~A<^gHS@}nZL)l*jxQ`nr8I=e!Q2OxfTb(ordfAguKs$2Sn>@8CD`>A4c zs}ve6)-tK08d5rk;VWhB1b#f2*6Nk5@ATqdA!YT>q6KiF=!(t`T}@#*Ia)1S>+Ehy z2_N9)bgS5@tJ~m}ZG+2Zz@qZcD~(=m+}LLEd+!@8fqYCjP4ux$gO4&ZN>G}lbLm6- z_WLpvvs#Hn6K1-FIg{<}a`dE(+dT~-Y0~gxn?uK@rRTXFfr-5t=rigGE#NxwZ2$LB z&-DvdVvnWgI!>fyXMSD=3GJ-x9?4$?^z|=(UIqXv$vtNYIlknif=>q$Z3WryuLP^f z1pFO``bFvh0#y1>=Tawo40?_TA+z7RZ|ynpsilbB@9DO z$#m_-chZWGizqGyFa?es1TP4T7e8*P)H)zjz5K5tSAtgRF|Jd}y-H5+0OE2Zs=MZW zKpM(L&xmDW-`QNtv41lkG|NIE>A7kBBxl(6v-g(;wcTt7a8E}x4(GXQfISYS~hD|~kp!m_8c z5N55r!#)H?)CZbG4%J%1XUfSbcbi9(3$Erma1W7*6d=L5Ji}%J3U4SR2Ifn>@a~!~ zio=O}OPHID23qzz4UWTLCiuw^ctAzM5jVkS^W1GB?gdr-Qw}7pgb#HA_mn@nFQV}H z=uC%m59_8e&SI9&`X#H8J+JZ-2-*)GqGDr-cS)0Y;d2nn(3b|K>tfPFGM_+R?Y7B1 z05gft&ba8-tlI9tlUdm*AxSHyDBIUcM4U@z!v0c^$fU{Wva6<$W&MS6Y1${yS@Tg< z)K3tF-Kw7Kiis`Q@YCb^pFkwJ!g)#^N?~kycWQL!`Zr0}e;*LwAo2mln2F7XBZOYL z4Muj2?{xv<;fs~SN3Oz=t{Ov!KA%#NWux)bp5~DH#^etyE!nX#0GYAz%Mru;G zY}?wdWcL?(&Fc?UDDCWu$D&tY$A|ioa@q}2LzT5Mo}GZ6y(eQdY2n5KFkgR=%9j0c zcr@!PoL{=^cOKbMhmQ#2lUdL=>OX&Z>U~_a-ZfjlPaxrqH}V)!RPkKX(yrmsQ>Vs{ zqr3F69my>#xK&PxV`H^pn7ufsT|d033s6g0jD`RM_)&TDIxXjZL}>&1 zsS`8K!ErV!&IBX%mIS?1B#zKmx9hF|U%h00I87k9!3V-|hSP}WNN?u2l6iPutukb6 zhcE#|%yTdhJ)zyTf~N7%u@9Z=6EjvK9@X}cep|IPjw_LZzN)@A?Rog4!c97NYHdD& z?3+JM`icX8M8w~};iJ=cHa-YAc0iwmKj@gBSY95|-2v^pcO7&z^s>!c*KG2;t#jJ{ zTiz0c^9gQt_Nmkvk?gVJkFuq^`Pr}hpV7~Wvs6SR=}^@cn>8o<9c|T!<@zOYfRRV& z`EFPF`395FV__53K}By7lQ#$JtL)Wx;Lbq8yTt}agfpraG<%^?6&-V7hPYZ}j7FTT z5#(Pu#kd1&5MGU6e7Y6jAlSI0JV8ouWixjrk4gwVZDb&*S( z8sS!{3TNQ7$u276O62^0g3+v-k!$tvJkFuqe7K{#vlNxO%rSJG2Ins=VZS#5LrSe#p_zYZ#W_NPHU`gc5P#~(y5*K>Ct z87}H?9k&kcuRQNi1!~MYL(^Qf%3CW^g^x9y7dg-HiDy3FK_ngDv&Mh?H-d`T`@2N^ z2G7o6JBr|L>m0ye6Uuwb;vY`l1O{ZKa9pyv&amE5b+*CH+bcd=eb_FRZ5LAsgOHqo zyrse&BfXxQQcF^Ly*i`QSj9Pjw^!SE4S!dD{uRY$3o)jEY&^SICt}*$v_`N5nt;8g zqE1DsIC;FX_m_&wI%gn81ZtJJxja)&OUx zH}BYzYareFEr=WTrxE!E`tRUWY39GGMAB?xc=^`egqnpn8@DN|plbAW@F zy^WG)r_=cCns%2~<%a2iE~t@lo#PZcq3!m>-qr$u`o^HH6M5-GB!DzM9NndsExQ$? zc~Q(3B2`Wysv(MiqJan2{?jOcar9Xq!>G&TqBcVRyXjMr7o9{o22SXWv}7Hr^~go{I(-hcpbpDI}y)&Vstrl zt3AR%c}CI^bOiq=se_1g6$#5aabX5j8xsU8+txUN4fnXcK|yYmXT$Y{zEb^sp)t7) z(3lwh0YJS*`2&~wSFG@tTO3dvGyHfhe$;s9i8`cLAhdrhls9!wB-F8d-Z~Q(SS$Py zd7^w^Fh4~UsGA9`ush)uS`=#;@<>r7hzhAUxxM0&$>g}!z8wcSbia=KOO(Lo_ndUcNTr4$oE zxOI)6_mb>SoNhFBuC~xK5cqer@t&1b)oqT=Mj(XVxV=M5SU*;qHu`c3w)1r01!r_> z4u>Laqr2J%vtYpw;O)3+3Jp0qz6YUu7SMg0agHx`QtMysBy{%SsIb8c22UW0R^8jV zLR0(b&1Yih{yhV}*Y~`^!)@B{Ylq)MgVn`ozaQ=sF1%(@8MH6t;hUo0IUN1^cNw#H zwtfXj_r40NkimU$RU;E$)~58%UZctGt^nS(mh`S3Z~3i#DO;ee4Q`NC4mWda)rNa# zjbXP-wV%eCC>)HSH)|{mS%Ab@{X&?Zzd3Z<8Lb4zPV?y=o4~O4=aFkaudLW`e%3XY6J@(Ko+nu z6|qHqQCX(Up2iV-xKw?C{&hiU;AdCfF0T_xHS3z;ZJmcBklHf1X}ef#-+&+-PlpXZ zRyX{m=V!Gp~ zCw}P#-bDDPKRbIM5ZGHYn&JUA+=DdP?Fv z6KG?w;Ve}V;&*0}G@rc?%)av$Ihd-MY9*G{7T$CUZxRroslkf)5JTpPQ@HRP6nXKF zh|A}ToBRXKlma%$k`iQYh{q)9ZQvX>V$K^KcMn;rJa3N$y~q>(!}ZUy{NM1s?K_|6 zC0h+KxeN#!rX^nELqGOq;qMxbvJYNjHK15)B>H8K9waDMZ%>nOUj zB@U>>@UTGvgC`V4s~4fkYAjH|(^0APc*Oztsn4(d&F{&C|C7AJ-`)fSw_>w@_i|no z7JBsfLZNfk1%FmbtUr`e+h;#0+u<(W#wl20K=5KwQ39B>Dv}+qoh8KXU|1jN97vk%cD(go=wBblCily{YhpFr2YFx~+(_K*0t*5Dsu z@!zQ0eE(BSif4A*-iP^ahQ4xod%6Bu_cmw9qwK#k#{GrE@%Je1V-;gn{QP;D#g|GVgbGyhcv?LXe^+seP&Z2ud2Mit{4b<&PweMC2Xd0h0B`9e?hMy#^I zKSxOa@urXd7NgoP{!xofyF8wvygE?R?5 zh)@0ekGI-8`JHZTQ#wO!3r~?3^q_r>$cTT5$gp02wm+bw20-~|t*h_HZ3{l7DJ*|2 zuw(!$VtZA<hL&T@hb?WVQDrU|j(}a{pOb@4?eHO|)C3*Viy8 zsED2=%G$l8KsSE#`{8ZrfUjvfTH9CdMTgkzdFzVvMWFrM|KWRpN$b8wDq!$s6Z|x^ zItyKI#?lAkQ37jti?i+sqciqW83jXsia^{j7%pOC0Q)l`00kJGf8EsoltSYDlObTR z_1l^Q;J)?z5s|sd2ItN+?=fJv0s{CG0XC3hB3*VR>`LxYZ;jHFWyZS<@zK}jk1o+m zIAl=j{lk3`<2EVEH^19pRv*VYR(%s+ ztNkSDMEmV&enc)IMSfoU_?xz7?l}qRBip9@Cmg4He{RbF@^hnbDX-g{!_C2CvQ#Fw0)|4a7h!DUeNYXDA(SS z1fvC|DU{2`Jge+BYQmRvzv@dTbOC||;u(R<04wTsK(2cmG-@YqZ^>&b_CzwaZH1Iu4(9C=I33xX>V5! z=vx4GWurPSu6V?sN(;Z(N zg7wiik(&i8RM(iq(oz_nN?*X@tmD}VI2;vlB7|aAulhNh-5v6f6d$X93zGj+>TC&* ziK>WmHX9%xedFcfVFABVsM1}k@18|4Frmu9j$6CYo=)DeL5>YGvs`n%(P!J8iPDwW zk)j-w2#KCCJvnRm*4F~DZXdwl-msshBE)>p{e&qW&Oj&;SC_=On3wuf(ms~fy3Xo( z0069^N@2UwwkB?us=u0ff0fX0|581-*3_)b)&MxUkR*;D+O>_$2>5K5Qqi>Qy{?Qw zsdu?vWVFln;t*mlbMF+33kXr!lnW$bv9oSCelDd-u(nK61JXNJNOc9z4~llHgqpi8 zzU^#EcyYwXJX@#Oy!fP1BZ|fH_{|mc?>Oo$yL>~2V@Zo)%d9yIbVxbNZYVV)%yalR+UR6DoCYqmOJ!%sKXb!Qq$)YOE4q2dFICg^KPv|=BO(G~#K8$BymhcA5*S<_ z<)-`*96rwMtBZmjI#L0a^&RHF2|?OC!6CZN%?=fj;X~Chir?;c<{=b2#NXoxFnD~k zoQZR-c$)59wbmtrV@EN`hVoJ+433w8w6xDb?~s4tg0!_Y4%Z z`iaVLN>9Bbh-|w#8CnxYBg8S(+k=%4dL>4~oSK{ub9);5DmSG0)65@lH+xIoWw-3T ze4Yp;|F+S9WU070v-rw7S7%1Wc}kg=n^b@&W7)1o=^j+1YO=Kb-Cy0Rf0zYl`q^>; zQ6)XWirb$+6Qo1zA3dOmg4WJ>O`QTH;8Q~{)n?IuSZ^Z=n2fviIJniaPQttdJhlfN z-qt#LN$*eZ(7Z!#yrI_iG*6#x5wlaLJPC7e+en^UJn@^w`*x<{@ zHnq-;V=F0$%Tv7pW$hWCKmn`#KNirdefV#=YoTU;>!pmhVCRNzN$Lb+!=ATx`@~=- ze)*TWdu`h>hj)QSGj8p8)PTp$x_P==;zUO(8+SJlX_ zpUtxT=z{PEXFZQ_b6&Uv?cw16?u1+8yZ^2)mR1$h`LjX|G`R;7Vwj}6^Atb1E74)r zgThX$Umn#}Vx=1gyDkc<(kg7x-yqC{ZUe0z+YW!`$MDgFETHaW495{gv~b9%|5j(-gyGZzNrvZqioz`qJMkEN#pWrMHJ@FIE0cBHsnNOCI{~ z8q=>6YEuWTGtJFCJ%u)=w?5OEaFbJHJSgizLxwz@XY%s$6LSGV)wB<*7gD-Wao9Tj zi|ud9q=t1QRMbTM{O&>dI8=p|XBh51q-D7Bogcmovf@E;VB!i7BK`k9rIjmr9{qQH z(M&ZJbJtoaG=#%2F(@c$9{TTr?7I{k{xaj`2qchi>bv*)jWhE4sU zISyw`q?2b(8=+P<6L1lecjsEprw!j7S33G8-34x*F#O0px%V;$&pq%2!Oq|n@_{u2 zcFXTjnpr=$E~}$o0tkK$q3#yz6a;CnWm~dI%SOs~IO_IqQ8qR6xDTL#L2HkD%&N*aGE$fqr&ABvg{BxHvjj=#LJBZ-^WS$N^=C~;~k zy6o5se7uLTU{chI2ke&5p_KO5rPl0_7VjuI`IWM>wP5B(_dIm=_aUlBs9ydbIdtcc zj2Y~iN{JK~i)43`5gsnf3vXjWa1>95eqQ9zccSInUR3r+y-ihNF{vSXyKM~f-=~PT zAs7Z#m%g76F}8v+yk$TNG5HVPH2eSS{1Tkx?egb4YaWuG;dH;W!=#s7i;uP3escZu zB0RwzUQDSykCR}hi;X*CJ8h%m?vvh+tq81T@G62`f<;9f-^Cp~{nX|3Q#Iumx^C=> zuQR5Su)pFHNPBRd_Z}@0{RA`FRO@CP7uPr~-O-hvNGEIvEF5!FbhvjU8sSuH8t9AP zj&Oe=-T#}yNE0g2c&{(chwdVhVmYUw3;*+H%=weRj1e@u)YWFoc?LNszoy@4E%Hzm#*yW;F-$jJP zs-Z@pe%SuH#9l3$Ij`Tle`TJ2)m#wJOV<9epkm!zAN1{>hS?uH)Z$*(nzcjXe)B9{a`>Et&w_P&S|i>(WT zt89MN(nnT3m*fAxuCD)J+u>LeH^Dzt(3VKG74+ay9O3?9O321|P<~wJa_(MQ2)MJHC`mhojO^})6^?jaN-W5gO(b9`hVd5cmB9f8OkWZspfBVMMlc#NK-rb6Z! znwT3aVVGpOV?k3N(D#k9S}yG&6O;TDj#nom_vC-kP=Z*^E5v3+CcRBYl4}R zE@`mnxP9XKxW|7~|8G2Ew~4hL7--S0bpU;quLOXWF0;QP1gAE1o!8v29Hap^F-^e_ z=CnYhUhAl0N@UXeW*tMrjWsGYvhstvUp|lVm%I3?a~&c5pSBjh+>v75HFPWqvzF{AD%pGgvQGE zY2Z4u9<-KkXmOyxO?TP2{e- zunhb3_$M8xa z|HSpBREbeFFqE%oT!rgd-;rY9VFh+NL+crhjgf>O!|qJd^O0Unc|qdDhORHBH88)c zhT~$-WyL#(<8*P?=bewV6*M0&Q5^s6q+}|Dxf@;?N7apKl9vw z|C?i8Sd=2G!u(1fI6$H9XBTq$|n!K?Zu<4Dz5M(8{oyf33fFL6kzT%9m(aW;e~vfB5JRa2c1En<)3Ke^ zAADPf4TYF%Aw@Cyj)nIXUU0H;T+$0b*B!xK~dM$n1y{yRmExMX z7-B$Sz#d#SHsjL5y*&6Mo{@O7N$hQEfJB1IK(#xOpXenXDW6G2Dz+7u^b15LQE$1- zj?}3~I=UfwXbDt-F7s>?9FiUpSsNp|V8*8jG~&Of^wZ4k8iSj$W!aEq)jCuw#wGZE ze6Pc^v}~1HN%L<-Ayq*)u%sx86{XI~2y_j!uJ-6sadcIxDW@N4zH8wI8Mn(|=IM}& zC;`ZUH%ODu$+|^A_rZIIEN-YZ7T5{+F&w^{0kiA6B)ynmwU^o9*7_}3jYd}+YrPz@ znb>2t3Ukq6s@Z)xR+t1%*B`-}P+SRg&KpBrUhgcs1M$VnS4B_>@1vTAcc_fybi=gwsA1!p?x?3j zLoF894mU8Miz3eh^BH`Pw@Bphs&w^qR~s3HzYtGHJtg}*{+%9kRG1#-&fEJ-mgO9Z z*cG}DGl^?kT=6gpQXYc4Kjgb}>Ckp=4 zX&e+c8-4xOkjjmI%y!|2>rC52ro-v{COM^~^`c2+L2R#A0g5PzLIYSdVOSJP zq(zHwI{jz?Q$lP8-d9u2&x{Q59{GeOm)E`pgLh9?P0(Eshz$y+@kd84X#TEZqHjm`#wsU>=%6tqy}+bG?n9dzm1>>aN5)sv3vR6m@_T{Dj= zG2u+6+nfvk+*sfUhD$)5EPWrYrK8VCP{;VuD~X#>UjT=azXG$c7&KkXl&Nj=^06_G zb185mSg+&IaIRFkhrLuv(Aky`hJ^{v`Gt#C0xx&)o2_yJQ)thq=oJA|(<>*Rq3>>X z*_9SVsV$(zE#3rH^f2Nx@Z!eQ^m$`BdQoo0Q>67`^4WX}ztE=c4b7xYH&3+(Vz%TE z?~FH@hjy&FTkzCnLgxZjpbUXUc89L&%(OTu)}1y5nxxre^&ul2QR*&@eDV=d`(kF) z_>-QZ?)2SFF~c5(>idPqks^7yB_%jfnUBL-z<~}k*6p}eslIr{o#Z?|!FZ29J8k_= zZ~E_-&V%+K%saH=B~~t{UzvJ5kr^B+L zmD_~|JZIgu<55liWk`R&?3ZT~?GpaDg1;{Trf@~N6yqB4Ulf{JlXY0RBJXz15xZ}P zhHo4r^d%$PtcU4DpYq#c=;8%Wh%(`4YV7J0*RR2MhsQCJNRL!{PVVume}BV2JU*&O zy@T_*G$6EM%kW$$nMF)WoE(TQ>@AdvYKh#xuw$P!g4ioXYPdQY7D0yc10na0n^#+W&hz_R zkb^W(iJ%tb>)kXgA;e8s6fF_GgQlf=iK~;DTygGibOH)o?pgZ=9hc1^*7Y+o$=P80 z{0iH$la<%k{D-Ri0wU11a>xfNvUKhZ2x33r+eF>eUOx=xn9fOYoO$D4HYhLr$|GZ6 zumd8*z~X@{H@SV{rx+(UUHMWh+!I0$y?$Ak`6ASxA7o>0rzTUB8`%(;bjthg^t&V- zJr&kUdoc^=O&E3`y{xA&3(1Lb6uToIi?z2}Sy= zAb*5TaWSRTQDyG3ZLP}JFgyAe*GCdv?n`q%SXZ$kAE_@R`mc3-ZQdv&DKxvuxMzU{ zZU$#{9L-i!QI7sanfBmPqg~?cr{Xs=cGtV7HGX9~)$c^}1DFv^#}*}>gXsD7AY%FH zDSsnbemkw8mdYUs&Dglob+nzP?IZ>-pC&&@q0vd3&)#!6VkeCkZi|G=noGu;Bac7a{iVJQrXqi&8lMgkGz;@9%zPD*=`z6XU9Hyt3#} zcJ8oXfduU>r0Lif>L4UAGyWlqOGAf7LPWV zw?v7H5Ovqo+X0snN>juUwnfS@`>OVF_kT+GQl0alQQ4+hHZp0OYR9M0=by(7-~lzo z!Na-zZcUyC3kvNuTQUNIx(O;pscvicSV3v;`~QZg$TP)7x%X3rag%5@(&4V{mQSY#oy6_dlDD}tAmw`N#(nvU66 zJ(*0S2C476ovzka<2iFO^DB`>AoB{v6-o2=u&DY#Kj|aJR3S~>o`|iqS`%|zgwiGZ z-~q^H!HU!sb+GjaL|`P}Ix>{S<$GS5*A+y^*NP)rX#mzRz$vDimVf(|Eq{G6DN*+u zz{R3jB)L1?|kgzy7deRu+qjCPGfYzyyJjB6j48 zeOuomV(R%g(Qp&)kvln-U)A%=Lc)xAsqtEKH< z)x=V0ty%Ojln(s`1oqtU49g&(xwaucAZ8tFm%Id0x@sG^P-BEvzvZp%gL?0U}3dF1v!#^r@Z9NeCO;4zUq7jU6R&~4_u-+ z(O9RHDTu$JquVz^Mo#q@o87HHuKRPcP845f@q#YIws@FcrXG=UvOtMrT61Q%GMRkbJMF&K^nc%_T>62J6CBwmd>D4i_hw0w7Xg*dj&pS7^ z4&m!8i{@YECRWM;h0@sV11F_D-#s}R4LHfi;w;cqJzMmF$l|pUC4Pc(wy!m9sqrfr zCqTMIA{NW7&+CQREQa7WNRi_B;tZKtR)ZbeLza#QAWOR??=?kE!N0NSL~SB-|9#r< znGV{y4z2MvI5@Nm4%0#pQq&_D!^7NVHc1~z4wWzZ)9YmeMW?mg5e&j$6(L@~cq%Pj zw>)%nqiFkkv^s|<>B+O!-@3He&7Gr;65~>RFaMN5=R5!=#I0^+ALICdQhXk5XGb@X zvexi2Hw>LR;G5E0VtxK>ZPtWqB5P+g&1$CyOcP? zD3k){h}4yHcyiWs_Ags;;auk)HrRAbtNBq=YOlW&I0&wa`vKX7i0SEXw{7~=B-j}5 zaa8tysk8sqEjbu9y!#wyLE$*58;Q{YW(F6cCDIEsHp1LVl)}hQh+%Q2Ua$c@`)vQc z?R_Js7(CE&kH(FpR?%9Ec(r4g(B!g^{Kk?&uxAVJk9OT#pG?(^+yNil!G1BHV}H_o z2fpw$Gg}t|5Hz*x$`*-TngFR4FH%4tG*BIOHu&-HjSLIM%&idnr6*++N*~Xq`q=ul?gGQn_B2Yti88$XOgD($mxtr|@2}BQPIgxM0)g`8rqhI-p z(xRU8#VI^3xnFf@QpgQ^Zn|@X#LdxEKUe8jzof`_rQZv;DE>4mVB_RD{?x_;U) z3|=)XbA5g&sr>2r9@|6l*qyf~sn zoCRdv{!;Nn_|T1OhLx?OZYpxE_mC?m?W{gcUjXi?_+v)B9$FT`x&ixg0qWgs(K3y> ze|~TMd!qX5HBrP~NX?p<8$u2CExA(0F~vu+A%NV5o9o4?}Z*FB!Ak}zm4oA@8s`L~iI z3uegE;eHL3l z{^Dd!i%|T#imb>%faD;(3pa#9s$tPk6844EsfRlDqdb@H^6QLJw6=^S&l-r(P|`9| z!5JUFVy)Zrt%tGJsX98XqUZmtF7-DV{O$Xv4d1<~;*qSuMy)UUrE5%+B#_(4m$1{1 z6vbx71g6U9Ox<7El>KVGo(~*NiL)g+V5TIRpwxz;n=O*VU6p+<=rJU0Y>x37FBC(F z_&hUO`9O`DWM0>j(3I`HGpPJvDk8ohjoW(Oq^x|YCuqX;R+JP1s(*;;-T2`75rGs% zr%?5i4{Iuq`=ISwlk@C^xe)N%DwW>_E}LxRToa9|tbN<4`$on_Zrp-CO@K~+FC@YJ zZ5S#A&w@pXOI*=mt?$46$4EH#2`LaoDUQfQUj4?dYr9-P!72I3x1d~3-&uN!aR>I5 zo8W5XTPf>IZKSQr+l=9I3iiHWB$~zat8T?&Lq!*p5p+F4)Klwnv)vm8sAKOW?65@v zcmP@;78}@U((0lmw%8vZ8aO^H5V`Alt=0-4inncW6wZ{=4KQtxzD1f`yyz5wtzjm8 zD5{XuS!Uz;&%P0M^(H$B?8E^PR)er3Z6Md}tM_JYlXzDYS`PrOEZ!?XN%GOjt!OySM69eW5bsr?AMftb92Ia}=I!6!_kZR4OiDAp(m^b}U2@keg(DQB5d+*LNbgOJ zF#tH5a9RLwZ10L-Rt~bB3md4ppcCSZ)6R_a;gy-^*PWI3EVb4nqYi{dYE^07q1R<4=mO(2oq}SiuYYC3 zR)&(&(u>-(K|d^sq$} z{hZtDsqm%X-9+K#d-z^` zCV?K+FyU>fBLf=Alg_S*jUCz;H_+-AKG<>EJ8HCVaCzDSdVF@fau?|RsXY$r?a`4{ zuu9*&Zf6J7@-_e(2e|3sMA7g^xzE_!u{!OV(#vF5!1qm4A#4n&wrRBQIbxqJO?*9z z1q$>>z4^pk`e?27ydDJ36_p0Pv2$eMxTewo^+IfAEt0jnUXgb2Yp_}JL=7^pm)WIM z=c!k}3Q{%y`qj&t1ws%}ifAR0%&w0uNIk6YF&BSZWkJlhA7&ARe_I-#L-8gK8t|HL zn|j_pAM>6>^4W-^s6VtMaI1|?BKrV^z70hMl8&_L;4_gDac7xEVwO{La<-DDHMXRi z|1~|&0x|PG&i)P|o?1Lxd3MKC{o{33M(y<3u4(71MsL7tHby_N=(;{;@!%j?l!B+P zC+ON3l8kr^tjZ`c>cHS%{<)l1SRSczLeMeLiEnSqH$f zl-{%3ry)PO71~v^Rb`X3)${q1w4K-(GsQqEq@8kqJ7IZcp(xS@a$_kVvkax-mj}q> zJfdiR@K8Q3NYUzMj29s_QHalXdqZ^`z>Tjgx#Pilwx@5o*8k|e|NZqNNNxpc==C}q zhB~ZgsCL(U$^Uwq&dx{9)X8xtJ;PNb#SoE3Raklj`+9~#ab^rP@-;KD4OHQXgu|&duXrRP8dQL}sMcRk#cz z=R?#cs@fN@sZA-;9q~K{Kh`ny99r%sW-jBKGP4t8svhxTx<00!IVsdj zs$xMCS?`d!vcDLK9Z*7p#FsP1)!n{-Ke{00Jyoz#&30D*?`8Ri$47b+Jnb*%aZGq$TBGOFebQk>k1@nW8?I?*S%M?>xn3#Fk8Y(k7*2%B^#5r75Mc9g+S+`Tw;* z+jd8v!G!vYqPd$GfiHv3Uk-4*)67aAQK8U0A}l0eBc+cn8q!(thlW1gDFbgU``LYd zE`iI7bT~?nhILxcl`U6JuQ*e2nsR|<$W~e`5*xV2f0abCZJp>8V<5 zx-Wk(UguxP_7966cC*9XwkzeofRmXJJ}!SYO)$Utp^u>fztA`o>W|iZZD=_0eFdk5 zmX<&rCA#dfdXdNraV zLlD=N*w-xP=ReTY(v|xQ+^-;?q7M@K%rFCrl-d#2yX2&aSs5OkUHpf}zBkj7>TgcH zI8*U2d&*y06U@@Pe>1E;H-kqWRK!N#(Uj-@c}jBe@J#Lx&H-B9iZUfSX>`i-^~;Oz zR!q)IZhaFfBp8*;^0FqK;ilK5M7-iYI+Z&w`l> z5?H$YL)n7E^@P?st0^}2KYUrg6`YSKrW8kI)L*`JK9`c-GAq6r9yPOhd=jj*RyCt( zrVj71gx9$*I${WMDIy{rH1ld{ccR3EFl;M4ZAC!8+K?I=$2*C%FC*F+d-fVHUQ=ij zOZ3iA>&P=rw-&ILTpxPbdB|WHQAeW^*i*iX8w4|I>a6`ACJ<3w@SB+ugmJ|7MW-W* z{P9j*Qn%O)ul~=T_Ms{KxT2X$8lL!Z!dG!o)79OZQLV1-r}jmf;7cbytPeeOuS@1Y z#xxj+DkoUpiRP@?SCNCRn+WSo17(tWA88;ZZe-GskJz`Ru9~!{)Mp_l5)$mueO`;x z2dWd4g|1B_4a%*h^X$(k6jJw4uzEitHZ~wT2BS5z(wQ;Z7j$&IJj{_PJOF0lqbT*D z(4u|aX6h9=_iyvMg-dn_xK)xvO$xMMLg_Q_|IEV2j!8c>G~V8>j6PJOe~o;;YoIpa z?t4njzL$h^htl0UO{j0Tii@L?PrwxG9Pa^J$ww}gLC)wQQC=`;zlw3{x3w25vOw+! zq2r=0*>e!vb^W`AhCXvLsqP!ESC+M?ckh&81r-Z)A)ck!in#5B$65{=IcEg?4gGc3 zU!4>);b(c3eO9y{b4^zK&jkNpE<4dZ=Tu^$-`*Vkrp%bg($Xu;<$H=ED{K2E5cf`H zzl=3mB*4|TVH)oMx2R9-k~=m;hFANKwx*-{jk}z}-Zpo&sNBCX%q`E@h*a8+x?AKt zrBJ22TiIFc5A+Vil5)`^$fH$XIgwX_g<)fa=T z9ww{V0MU)a6Kb8qUV+LB0XOUVRAW5Td?ivUe#iIqJIy_@NXLm)r0KNl6OufKY31Qn zmLkKgVt%!OD}%;I6vm$D8EHs*6JkjTx?dtwd$b-bi3bpD!RBKcErx1o&3rDhzW&`_ zi~9L#QC*g!wGV2$l1>`8_}wgBvs^%?ld_4Y9w_K-5P}5bDczY$3YCdf2yCL}2Sr&^ z^@Izga6(k47*>EJ4CP1O+iTNS{WT5t-0o8m3>$)aTRz#>0z2CvR zBeE1GCeNq3>U<5n-(1?d$wYjxpt)`UWNK0#isI?1cdopeZkm$g&{AM@iVbwYc};M} zD~ff``SN}J9=4b(?W>WC0-WlHW$w0|!hg0hX?YnBt2euIM!-55IaGIdpmWrPW4?96 zRwO1_4QLjRCGedL>pQB%^4t8A@VjKN*pL(@h~ zLFp#TbtWq>W36i=0Rdqbt$<_56jhzp&FN*$OUrBdS&}8?Rwy()-I2T0bXRm?yHxOC zBzxD7%bFEC;q3PCeRMPGZAO2TU^JMqCIqNboCy?o2<(^%Y4|Y&OumHG z{l8)QI6eNSCjF07mX9ftfMB6W9@{w|G4Ey8i$K_Og*nW&8)YvPkaNhr&H^pZ(qfyF zbGJR|hiHpn6O^Lw$hQ>7f^uA4ot_xQ-Lve9GOup%_nc>v2KyG~`kjte;sKVgKP<^{ zbI3j)Fu2(%$_lc|s(uea0%}pkS>kT2{&S9H_+s^+o1K4E05HEP08aqc2M>{@<~muO zc$o~FgQ;1-TU}CNxnVdAX&bM*v}Nop*j7?;L{S!|Ng{>hSy$_HDL=r~t7>s`m$Kq} zxK%`@t{on2`X6okTKs$fqqc)qXuj{Ad08^LD7$YHf^t@H9C z+%_ph%E3^s)R0e2+d_igU-z1=>t!AVhD}aBRr#cJ_j??fLk{8Pn7mDx!EqrB{Q*AK zUUg+Bbk&uISk;shsFVa^W=d&*E8aa%Gfpfxy+OFsP3Tu?i<=u}xA|0hu??G7mW^Y_m1{{HM4=a`UvZ|hcxD= zxqF?8u3?xItcs8Ho0;-xrxP%CIh@5i?f@abglkqYiSSvGEEqHh$f))5`mvB4VwY87 z*dwVqzw2ez$?y~{XYU8>MB2C&G`Q^>V-}o!kwWB{gQr`GUE89T7jI75TwQWQ4C}u! z7Ly1zYjIqx!)7Yhx=ItXPd$L4)|<3_riZnxGb-M-uRajH$$%j`N_G<9T5;{&DVJK% zD_0ymiE()!4d6na)q=2qx(6hGJqp%&$vZa~(i>pb>#4>ULY)6QL+9@c;kT=iW^P0Z zy&EP#^P}Q_rmkGKWTh1KYr9&(darNb%viATE-t=+K2+^~s?cyCVpnE1S>yJMPv3{P z>^(LAv9P%-G$7ki!pAW;$IE_1y{@EAzu5A;9cYcjM60yRUb>@|zUif~ ztnYCbRmXWmV=so`Yi)~1^37~%$Zf);N-^9!sk&$%Z%y5Dmt?%r91wF|RePFWU0V@H z_qnYOk~p7I}WYhxd@__Ojs!TQ|3Z|E02iK@ifUN{spnY zJqc9sY_6`lQzDv9t{GVX^hr}!z*S?CScVGqe%JwTf@$nn!V)Bwm5p7Ti9{U{iZiY? zgO~or+rb9~`=-vf7FiunRzJ7kRH?f>)ghLMUV9!ch(n63tYZO>KtJQXt$*Rdin~f zC*xV~Ss4}YP!a8PKx$Ebe%yb0Wsc;u-J!&>4>qgPEuQbVeH7H#on?!MPrVOg@n-08 zQ3!dG4@l$-?#fTMnie&~4 z-5h|6%4%uC5XLwNIVUBerM$oaHN-%p%u6a%GLg9HadvJNY<+lxjq^V% z*L`fq=Ca~({C$e94^%XUw<#qdaY{it5$%*&KCY&3N7Tzbu9F%E82vr3eb)0);wyD+MyJ#Ib#Zp6l1-Um0$kc48!Lr2V%$f##od7cfv;V2`~o-KxZw)owva6lrQH3)>!Wt|{Q}N?6TXE;69;}wHFBuk zyo!~yMA~3qRnLO$cXR0USn9IOV@Zp^j@M=i=Q4zF5uXEuWi?Wlz(R|&wr^UAb5YViXb1~B^cnT_OM2DIL{T`UCUCGDuCCLH6HAbW zsn_%}6uT;RbyX6hFb%#q(Ut?oQz8!wBRG-`#zm^qcFiC$#R;c0U1<#c@(%9@wW z19P*Xx2=_My^1$>g~pW4ooA#xns`+g%*!G_s|IhtqXwwf;;=p{r_d`pr=jU;o+q73 zFcRo};p*7eFA}o{+-Np9nN2uLZ_h`0rS{e!*1Ft|r>rJBP`1OJ`%Q&<=q#KCNk4b^ zB8%fF3=vM02CARiamd~K%M{3U;FjD~S*s`DxTEkc|L9>$^ozpBn(w$|74sak1i;Dy zi)DKo?H@{IQ}olxr)O8QIA!z~4iGjj1GpTc#}5(e&O^P zCRKav8jWvoP2AmBLv%1qjh~Ucgk+Hu(<9G0AxT-|f>zUjwlI3h<#FUX0PMVT&#TJd zN2349fCSf(OZGdh8ZND#{wn3ymh@am#GD)~DZ$Or-2jMU@466<#&iQjO7}sF#JQd; zgq-o`HRPq@a^!=;GO`oC`r9BC&d)R%TCv!KioOxlXfDHm?RVV*PQJL*9CW;u&qLeu`S@A?O^>)*zm0S4A^EELTjc_xSXA(t?$|!BF;}62Q1p>#yg=H3M*H%>O3SAL%w^$3`*k;1BGykO({X4; zobBG6;bByClFyHByfVq+`*KTWl%_~Tm8pyd@+Yq|eagNAlZ{(XD~`Vq7;Lm&{k#xh zh4mVXDvmS2D<_tplY|?I4>J=iE%?ej-`LJQvRXZgOZK%e@FK^dDrFOCrJh8!X07L( zJ6nx+`Ni_RO+4>8HsmcIacd@0Kh~n4l%k=gb(#EtoMR%3tf`bp<%^P2J%8(L_XH?m z?mi1S{WUAhv?OQQk~+T;R1>|G!N0iIc)v|5_juJe&`8y4%i_q$_Zp^oI~sq{|8+!_ z7z!=?3h{-l{*hsOnw(6Hg-SOY@qv7E&;b+)#|yh;ycVNgXI4`dmv-X$e1l@(B;Hi4puzd zSKWO0X&s&QD_1#wcNX~Pi<%hB%F4O8Y>W2jHmwVZLD?_EjC=}8vu+pR?dRP`Si0_h z4l)t>rXs0^tk9%}^oIz3&$|bkp;(HVmAv?W27$W!-1)$()Udz`taJ;7pTYg}nB?^W4z+g-6!(EPDhoZUv9%`A%4d8gXeB_@c@c+;G z8MWN-ybOR&7k}m~lkOA`q=XBE_X8FA#T3Kb*WEjg-V&X=+#4|rEz65*Ir~ODp;CZZ zU^yMuzf}|~L9X#Ch%G5e49cL zs2d86q}gfi^;yB5{GXd2UiT15YtBw<&KoIwV<+&oF^gNVF45(Y#m|?1W#eErH3g)& zh@4TZ&D@($JyEn2z+&^^T5-QmpZQP}Zn@{jY&w~f(i3zOW_MX_x~AlpbK~Rw8rZnt z*1IA(S?i;Hd%sx0J;I%EvPVrt`g{-O-M^PeuRtM)9#4k3ga$s4cZvJpfb%M5lXc@} z>MCoqU+i_EPUaIyUP?2zZ=;0g(qeHo&<6$@Y8DQ4p3smUO%gvMF|&u+Y-}V}%?aNa zKVF_4t7_0+OWTnKC0H%|f+6OlCTh>&gq!-FHt^VOI^}3FypYowij%<7@>rqb(Gn)C zVA&QxcF;`f@i8{wrDl=Ds$;(eJC1S2rUZzOPLyu6$doURU&Sx@B3IYv@}Jy3q198} zsH`^iz;?#hYdrBSXIx8{Qjwv?T#8(yPG9@==$*W~?fOYf$N35TxrimABREb~i!HU& z*t^I`_WG}EHBBRzSDTz_63%uRFAFV!ZQtA}^P7dAmtJOXHF@0*g?mqvxfPAe>}&Cp zEOZ&?Jp~J}IM%kq-GZhN6?8f?cq(}sAW})GwH}o^yYa!FErZa^aMkmPwW;)Ui-pd_ zM*{qEBDM3jI*w(r+pb5x%Fv(MT!Rm@Pt{M`2)C16oV;u#V}<5nq$V7oHh_}=xyiz` z>-!ciI;V;}Jag+L`cNli32Hv?207)G^2-CzA#d_S<>aiYg3=IiysFx{v;)(0iYoYy z{wjanYr6tt%DtV3uY6uSZMa}QaXUXtJltx4oYO_!>VLLZ5<+rv@k08k*Q`7PdBeqVmJLJZRcPEX&h6FOtzL86pd8<=T0qSQFKQgY>qN9_?w9 z$_k58GSYo@zq&~$=y>dasWBA5Rh9%mG6=4(yeYKy2M9|Tyxi@zHQS|?OCSs0+ zzg}=leEr7c(h~8!8H{&*GF(@GYEIUcblu0{))UC;JNEJ@gO7W1KxN^MdGR4c2g+oe zh#d31pVVP; zTrlvmyRmavR&gBidaH8t1+0^&Ova@+Pf3M_ncQlJdlf9~A!O@C3zkpn3fQyMla;w+ zEY)e*D5-rs?7&NCItBfJ^fSOI=N{kG-TZx|2T5IdNUCI8A^SwHC`CS!(CQQ~ObJo? z=*pr1No#U2_?d5Lr!?+kqE>8NRHa#;&ZOnXVUy?c8RjdKCJQ7-2RUXk%_GzF=1J%8 zqK(RS(@I#Snvz&PIk&r%GLzDIN+X&QDYjG?-AZqix{az}Eo6brqsjd+BXyIwWP`+C z=7W*yobgd=_xp55XFW3vGSA-*(_G4>nv&D21=2XE=(4VX~My)OEQl-TiDU#4WP$QnMD0SwJe)J zAp3r0TR6kXj8-bggQ;SuV5~$NyeC!aaSn23MyWzQn>}`08x3_hy+#l<(z|bEzg!j| zivra~A47365?&ug`_&T^CD9r-W*{Swi|cY~-*+M)VJqIZtvGXPV?vKbA=G))>2q}E zqE)|}SL(+)RhNpArA^$Np2@Flj9_ho>|=@1q24&W>%>w=Br<~1^U>C$>sXU}_D)fs zfYoCosi6;g&Ck@Bv9>!HiacM`+!LG6=C!I5&O2AG+{PS{$(rkXD17P+zOqpdq7ZWr z2%c*k*4C}X5oGm1qBOXt??+iSiNxm*5k1S&(_(i5DN_$leQ4@5vy)12mdDk~=&5nr z&QE0(K4Y(Tke@|qth~44Kep&=rp*63+Vp-gYbby59)L{QZ*YEz{)yAMNfWe~eh&W@ zUb2aDM2p0>`Yf1o`BPS0u+H^f@@1ai9}34`Q)PF@R%zMR%F9z>uzniKAD4fBD_bdX zN+JiSgbUXUD8LKRb^wn}zC#ME-;_aJ?kgXktM6MHi19Z~hc=W%Pe&T#=lmeGnTJ8* zFS%dDUL1MjAT~Kg;C?;zzy?OALsyD$KHr--~YRF=X4dbN!)=0d$+1uQrK{af5um*BM~;_SFrZ zj$=pxDuKTA@WL^MPk{k032w4dSmZeG2lV~A!y_7giNErcTP&?lU`o=og1gBfA|kC- Z)al!wagY6<9v1(vzW*yEaOBtV{{}9zAp8IT literal 0 HcmV?d00001 From c32df581cc517aca7e0fa5f827941100f0ce05fa Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 4 Apr 2023 17:30:33 -0400 Subject: [PATCH 05/39] Move anatomy to top of document --- bip-tx-terminology.mediawiki | 111 ++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 9b1c0c4376..e057cb0152 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -38,6 +38,62 @@ Likewise, the _input script_ is a transaction component, but the length indicato We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [AT] for Abstract Term). +===Anatomy of a serialized transaction=== + +In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction's serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. + +* Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 +** First part of '''Transaction Header''' +*** '''Transaction Version''' 02000000: integer field, here indicating version 2 +*** '''Marker''' 00: serialization artifact indicating extended serialization +*** '''Flag''' 01: serialization artifact indicating presence of a Witness Structure +** '''Transaction Input List''' +*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header +*** First '''Input''' +**** '''Outpoint''' +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent UTXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b +**** '''Input Script''' +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable +*** Second '''Input''' +**** '''Outpoint''' +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b +***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b +**** '''Input Script''' +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable +** '''Transaction Output List''' +*** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header +*** First '''Output''' +**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output +**** '''Output Script (scriptPubKey)''' +***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes +***** '''Witness Version''' 00: indicates a native segwit v0 output +***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte Witness Program +***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 Witness Program indicates a P2WPKH output) +** '''Witness Structure''' +*** First '''Witness Stack''': The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) +**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. +**** First '''Witness Item''' +***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature +***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. +*** Second '''Witness Stack''': The Witness data corresponding to the second input. +**** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. +**** First '''Witness Item''' +***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature +***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script +**** '''Second Witness Item''' +***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes +***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend +**** Third '''Witness Item''' +***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script +***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script +***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent +***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. +** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. +*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little endian for 709631 + ===Definition of Terms=== ; Annex @@ -197,61 +253,6 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de | P2TR SP || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] |} -===Anatomy of a serialized transaction=== - -In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction's serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. - -* Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 -** First part of '''Transaction Header''' -*** '''Transaction Version''' 02000000: integer field, here indicating version 2 -*** '''Marker''' 00: serialization artifact indicating extended serialization -*** '''Flag''' 01: serialization artifact indicating presence of a Witness Structure -** '''Transaction Input List''' -*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header -*** First '''Input''' -**** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent UTXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. -***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b -**** '''Input Script''' -***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable -*** Second '''Input''' -**** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b -***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b -**** '''Input Script''' -***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable -** '''Transaction Output List''' -*** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header -*** First '''Output''' -**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output -**** '''Output Script (scriptPubKey)''' -***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes -***** '''Witness Version''' 00: indicates a native segwit v0 output -***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte Witness Program -***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 Witness Program indicates a P2WPKH output) -** '''Witness Structure''' -*** First '''Witness Stack''': The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) -**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. -**** First '''Witness Item''' -***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature -***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. -*** Second '''Witness Stack''': The Witness data corresponding to the second input. -**** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. -**** First '''Witness Item''' -***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature -***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script -**** '''Second Witness Item''' -***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes -***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend -**** Third '''Witness Item''' -***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script -***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script -***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent -***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. -** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. -*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little endian for 709631 ==Rationale== From e4d6310e78d12810beecaf0ac6d1859be3a6d1eb Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 4 Apr 2023 17:39:47 -0400 Subject: [PATCH 06/39] Improve points that came up in discussion with Stacie --- bip-tx-terminology.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index e057cb0152..3d14a24c3a 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -127,7 +127,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script -: [TC] A Condition Script used for spending P2TR outputs via the script path +: [TC] A Condition Script used for spending P2TR outputs via the script path. The Leaf Script appears as a Witness Item. ; Leaf Version : [TC] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. @@ -148,13 +148,13 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [TC] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. ; Output Script -: [TC] originally called `scriptPubKey`. The part of a transaction output that contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +: [TC] originally called `scriptPubKey`. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. ; P2SH Program : [AT] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. ; Redeem Script -: [TC] The Condition Script used for spending P2SH outputs. Note that the Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. +: [TC] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arugemnts to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. ; Script Arguments : [AT] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys @@ -220,10 +220,10 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [AT] The part of the serialized transaction that contains the witness stacks for each input ; Witness Script -: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs +: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs. Appears in the Witness Stack. ; Witness Stack -: [TC] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. +: [TC] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR script path spend. ; Witness Version : [TC] The version of the witness program in native segwit outputs From cbac6f5d26f28a2c1fc16ac5b2fe231c2076703e Mon Sep 17 00:00:00 2001 From: Murch Date: Wed, 5 Apr 2023 12:23:39 -0400 Subject: [PATCH 07/39] Change definition labels to words MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also: • mention endianness of txid in Outpoint • amend comment about replaceability --- bip-tx-terminology.mediawiki | 96 ++++++++++++++++----------------- bip-tx-terminology/scripts.png | Bin 83650 -> 94465 bytes 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 3d14a24c3a..89b4e26b48 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -32,11 +32,11 @@ The hope is that this terminology could be used in technical writing about Bitco ===Objects and their Serialization=== We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. -We distinguish concrete properties of transactions such as fields and scripts (labeled [TC] for Transaction Component) from serialization artifacts (labeled [SA]). +We distinguish concrete properties of transactions such as fields and scripts (labeled [Component]) from serialization artifacts (labeled [Artifact]). For example, version and lock time are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. Likewise, the _input script_ is a transaction component, but the length indicator of the input script is a serialization artifact. -We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [AT] for Abstract Term). +We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]). ===Anatomy of a serialized transaction=== @@ -55,14 +55,14 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability *** Second '''Input''' **** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b ***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but is not replaceable +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability ** '''Transaction Output List''' *** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header *** First '''Output''' @@ -97,70 +97,70 @@ In this section we dissect a serialized transaction. Each sub-level in the list ===Definition of Terms=== ; Annex -: [TC] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) +: [Component] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) ; Amount -: [TC] The count of satoshis assigned to an output +: [Component] The count of satoshis assigned to an output ; Bare Output Script -: [TC] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. +: [Component] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [AT] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [Concept] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). ; Control Block -: [TC] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. +: [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. ; Flag -: [SA] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: [Artifact] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; Forwarding Script -: [AT] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeemscript must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeemscript must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. +: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeemscript must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeemscript must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. ; Input Counter -: [SA] The length of the transaction input list, aka `txin_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) +: [Artifact] The length of the transaction input list, aka `txin_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) ; Input Index -: [AT] The position of an input in a transaction's Input List +: [Concept] The position of an input in a transaction's Input List ; Input Script -: [TC] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. +: [Component] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script -: [TC] A Condition Script used for spending P2TR outputs via the script path. The Leaf Script appears as a Witness Item. +: [Component] A Condition Script used for spending P2TR outputs via the script path. The Leaf Script appears as a Witness Item. ; Leaf Version -: [TC] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. +: [Component] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. ; Lock Time -: [TC] Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. +: [Component] Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. ; Marker -: [SA] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) +: [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) ; Outpoint -: [TC] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. +: [Component] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little endian but displayed in big endian. ; Output Counter -: [SA] The length of the transaction output list, aka `txout_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) +: [Artifact] The length of the transaction output list, aka `txout_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) ; Output Index -: [TC] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. +: [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. ; Output Script -: [TC] originally called `scriptPubKey`. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +: [Component] originally called `scriptPubKey`. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. ; P2SH Program -: [AT] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. +: [Concept] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. ; Redeem Script -: [TC] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arugemnts to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. +: [Component] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arugemnts to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. ; Script Arguments -: [AT] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys +: [Concept] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys ; Script Tree -: [AT] The Merkle tree composed from the collection of Leaf Scripts committed to by a P2TR output +: [Concept] The Merkle tree composed from the collection of Leaf Scripts committed to by a P2TR output ; scriptPubKey : See _Output Script_ @@ -169,67 +169,67 @@ In this section we dissect a serialized transaction. Each sub-level in the list : See _Input Script_ ; Sequence -: [TC] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. +: [Component] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. ; Signature -: [TC] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default `SIGHASH_ALL` is used the sighash flag may be omitted for Schnorr signatures. +: [Component] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default `SIGHASH_ALL` is used the sighash flag may be omitted for Schnorr signatures. ; Sighash Flag -: [TC] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. +: [Component] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. ; Taproot Branch -: [TC] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree +: [Component] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree ; Taproot Internal Key -: [TC] (aka Inner Key). The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. +: [Component] (aka Inner Key). The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. ; Taproot Output Key -: [TC] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root +: [Component] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root ; Tapscript -: [AT] The variant of the Script language used in P2TR Leaf Scripts (see BIP342) +: [Concept] The variant of the Script language used in P2TR Leaf Scripts (see BIP342) ; Transaction Header -: [AT] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time +: [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time ; Transaction Input -: [TC] aka Input. An element of the input list of the transaction. Must include an outpoint, an input script, and a sequence. The input script can have various content, corresponding to the UTXO that is being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. +: [Component] aka Input. An element of the input list of the transaction. Must include an outpoint, an input script, and a sequence. The input script can have various content, corresponding to the UTXO that is being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. ; Transaction Input List -: [AT] The enumeration of all Transaction Inputs of a transaction +: [Concept] The enumeration of all Transaction Inputs of a transaction ; Transaction Output -: [TC] Creates a UTXO by specifying an amount and an output script +: [Component] Creates a UTXO by specifying an amount and an output script ; Transaction Output List -: [AT] The enumeration of all Transaction Outputs of a transaction +: [Concept] The enumeration of all Transaction Outputs of a transaction ; txid -: [TC] Part of an Outpoint that identifies the transaction that created a UTXO. Result of hashing a transaction without its witness structure. +: [Component] Part of an Outpoint that identifies the transaction that created a UTXO. Result of hashing a transaction without its witness structure. ; Version -: [TC] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. +: [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. ; Witness Item -: [TC] An element of a witness stack. Witness Items are: Witness Script (P2WSH only), Script Arguments, Leaf Script (P2TR scriptpath only), Control Block (P2TR scriptpath only), Annex (P2TR only). BIP341 also refers to Witness Items as “Witness Elements” or “Witness Stack Elements”. +: [Component] An element of a witness stack. Witness Items are: Witness Script (P2WSH only), Script Arguments, Leaf Script (P2TR scriptpath only), Control Block (P2TR scriptpath only), Annex (P2TR only). BIP341 also refers to Witness Items as “Witness Elements” or “Witness Stack Elements”. ; Witness Program -: [AT] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. +: [Concept] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. ; Witness Structure -: [AT] The part of the serialized transaction that contains the witness stacks for each input +: [Concept] The part of the serialized transaction that contains the witness stacks for each input ; Witness Script -: [TC] A Witness Item that provides the Condition Script used to spend P2WSH outputs. Appears in the Witness Stack. +: [Component] A Witness Item that provides the Condition Script used to spend P2WSH outputs. Appears in the Witness Stack. ; Witness Stack -: [TC] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR script path spend. +: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR script path spend. ; Witness Version -: [TC] The version of the witness program in native segwit outputs +: [Component] The version of the witness program in native segwit outputs ; wtxid -: [AT] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. +: [Concept] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. ===Usage in context of UTXO creation and spending=== @@ -288,4 +288,4 @@ In this section we dissect a serialized transaction. Each sub-level in the list ==Acknowledgements== -Thanks to Pieter Wuille for the discussions that led to this proposal, as well as to Otto Allmendinger, Matthew Zipkin, Larry Ruane, and Stacie Waleyko for feedback on this proposal. +Thanks to Pieter Wuille for the discussions that led to this proposal. Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, and Dave Harding for feedback on this proposal. diff --git a/bip-tx-terminology/scripts.png b/bip-tx-terminology/scripts.png index 1a464ee3a5d70713598d60d9e67b60221f41053e..90765650c82c629d79341d65f52dc8da96d53854 100644 GIT binary patch literal 94465 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%0D{`~ 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 D<=bIz literal 83650 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≶eG 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 Z)al!wagY6<9v1(vzW*yEaOBtV{{}9zAp8IT From d438d5f6bf63e257a0ea7300636f1ec097cc1424 Mon Sep 17 00:00:00 2001 From: Murch Date: Wed, 5 Apr 2023 16:23:40 -0400 Subject: [PATCH 08/39] Add a few more aliases --- bip-tx-terminology.mediawiki | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 89b4e26b48..8dbdf84042 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -106,7 +106,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [Concept] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). ; Control Block : [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. @@ -124,7 +124,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Concept] The position of an input in a transaction's Input List ; Input Script -: [Component] originally called `scriptSig`. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. +: [Component] aka “scriptSig”. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script : [Component] A Condition Script used for spending P2TR outputs via the script path. The Leaf Script appears as a Witness Item. @@ -133,7 +133,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. ; Lock Time -: [Component] Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. +: [Component] aka “nLockTime”. Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. ; Marker : [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) @@ -148,16 +148,16 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. ; Output Script -: [Component] originally called `scriptPubKey`. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +: [Component] aka “scriptPubKey”. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. ; P2SH Program : [Concept] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. ; Redeem Script -: [Component] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arugemnts to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. +: [Component] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arguments to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. ; Script Arguments -: [Concept] Arguments presented to satisfy the Condition Script, including Signatures, and Public Keys +: [Concept] aka “Unlocking Script”. Arguments presented to satisfy the Condition Script, includes e.g. Signatures and Public Keys. ; Script Tree : [Concept] The Merkle tree composed from the collection of Leaf Scripts committed to by a P2TR output @@ -181,7 +181,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree ; Taproot Internal Key -: [Component] (aka Inner Key). The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. +: [Component] aka “Inner Key”. The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. ; Taproot Output Key : [Component] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root From be7a0ee6a629e566e1025e464eacaab7d5f4754d Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 10 Apr 2023 14:55:46 -0400 Subject: [PATCH 09/39] Define UTXO, use TXO instead of UTXO --- bip-tx-terminology.mediawiki | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 8dbdf84042..d8d70f63ca 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -51,15 +51,15 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header *** First '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent UTXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. -***** '''Output Index''' 00000000: position of the UTXO on transaction output list of e700b7b33…a4bbc07b +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability *** Second '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating the spent transaction output was created by the transaction e700b7b33…a4bbc07b -***** '''Output Index''' 01000000: the output position, the UTXO was the second position on the transaction output list of e700…c07b +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating that the spent TXO was created by transaction e700b7b33…a4bbc07b +***** '''Output Index''' 01000000: the output position, the TXO was the second position on the transaction output list of e700…c07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability @@ -89,7 +89,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list **** Third '''Witness Item''' ***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script ***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script -***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the UTXO's Witness Program being spent +***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the TXO's Witness Program being spent ***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. ** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. *** '''Lock Time''' ffd30a00: the 4-byte lock time field, little endian for 709631 @@ -106,7 +106,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a UTXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). ; Control Block : [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. @@ -139,13 +139,13 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) ; Outpoint -: [Component] Identifies the UTXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little endian but displayed in big endian. +: [Component] Identifies the TXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little endian but displayed in big endian. ; Output Counter : [Artifact] The length of the transaction output list, aka `txout_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) ; Output Index -: [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified UTXO. +: [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified TXO. ; Output Script : [Component] aka “scriptPubKey”. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. @@ -193,19 +193,19 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time ; Transaction Input -: [Component] aka Input. An element of the input list of the transaction. Must include an outpoint, an input script, and a sequence. The input script can have various content, corresponding to the UTXO that is being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. +: [Component] aka Input. An element of the _transaction input list_ that consists of an _outpoint_, an _input script_, and a _sequence_. The _outpoint_ identifies the TXO that is being spent. The _input script_ can have various content corresponding to the TXO being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. ; Transaction Input List : [Concept] The enumeration of all Transaction Inputs of a transaction -; Transaction Output -: [Component] Creates a UTXO by specifying an amount and an output script +; Transaction Output (TXO) +: [Component] aka txout. A transaction component that consists of an _amount_ and an _output script_. Adds a new Unspent Transaction Output (UTXO) to the UTXO set that is uniquely identified by an _outpoint_. ; Transaction Output List : [Concept] The enumeration of all Transaction Outputs of a transaction ; txid -: [Component] Part of an Outpoint that identifies the transaction that created a UTXO. Result of hashing a transaction without its witness structure. +: [Component] Part of an Outpoint that identifies the transaction that created a TXO. Result of hashing a transaction without its witness structure. The txid is serialized in little endian but displayed in big endian. ; Version : [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. @@ -231,7 +231,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; wtxid : [Concept] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. -===Usage in context of UTXO creation and spending=== +===Usage in context of TXO creation and spending=== {| class="wikitable" ! Output Type !! Output Script !! Output Script content !! Input Script !! Witness Stack From bb7c0e0004813a529789869b7d8325c2b76333db Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 10 Apr 2023 16:20:05 -0400 Subject: [PATCH 10/39] Address many small review items Thanks, vostrnad, karask, LLFourn --- bip-tx-terminology.mediawiki | 53 ++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index d8d70f63ca..67e9a2a330 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -33,7 +33,7 @@ The hope is that this terminology could be used in technical writing about Bitco We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. We distinguish concrete properties of transactions such as fields and scripts (labeled [Component]) from serialization artifacts (labeled [Artifact]). -For example, version and lock time are fields that can be set during transaction creation and therefore properties of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. +For example, version and lock time are fields that can be set during transaction creation and therefore components of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. Likewise, the _input script_ is a transaction component, but the length indicator of the input script is a serialization artifact. We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]). @@ -51,7 +51,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header *** First '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. ***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). @@ -91,8 +91,8 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script ***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the TXO's Witness Program being spent ***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. -** '''Transaction Header (cont)''': A collective term to refer to the meta information of a transaction, split across the transaction. -*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little endian for 709631 +** '''Transaction Header''' (cont.) +*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 ===Definition of Terms=== @@ -106,19 +106,19 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. ; Condition Script -: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the tweaked public key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (bare outputs, Pay to Multisig, P2PK, P2PKH). +: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the taproot output key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (P2PK, P2PKH, P2MS, and arbitrary scripts). ; Control Block -: [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR script path inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. +: [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR scriptpath inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. ; Flag : [Artifact] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; Forwarding Script -: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeemscript must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeemscript must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. +: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeem script must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeem script must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. ; Input Counter -: [Artifact] The length of the transaction input list, aka `txin_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) +: [Artifact] The length of the transaction input list, aka txin_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]) ; Input Index : [Concept] The position of an input in a transaction's Input List @@ -127,28 +127,28 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] aka “scriptSig”. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. ; Leaf Script -: [Component] A Condition Script used for spending P2TR outputs via the script path. The Leaf Script appears as a Witness Item. +: [Component] A Condition Script used for spending P2TR outputs via the scriptpath. The Leaf Script appears as a Witness Item. ; Leaf Version : [Component] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. ; Lock Time -: [Component] aka “nLockTime”. Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with `OP_CHECKSEQUENCEVERIFY`. Serialized as the four-byte nlock time integer field. +: [Component] aka “nLockTime”. Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nlock time integer field. ; Marker -: [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP144). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) +: [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) ; Outpoint -: [Component] Identifies the TXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little endian but displayed in big endian. +: [Component] Identifies the TXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little-endian but displayed in big-endian. ; Output Counter -: [Artifact] The length of the transaction output list, aka `txout_count` (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]).BIP-144) +: [Artifact] The length of the transaction output list, aka txout_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; Output Index : [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified TXO. ; Output Script -: [Component] aka “scriptPubKey”. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named `scriptPubKey` to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +: [Component] aka “scriptPubKey”. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. ; P2SH Program : [Concept] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. @@ -172,7 +172,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. ; Signature -: [Component] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default `SIGHASH_ALL` is used the sighash flag may be omitted for Schnorr signatures. +: [Component] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default SIGHASH_ALL is used the sighash flag may be omitted for Schnorr signatures. ; Sighash Flag : [Component] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. @@ -181,13 +181,13 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree ; Taproot Internal Key -: [Component] aka “Inner Key”. The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a script path P2TR input. +: [Component] aka “Inner Key”. The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a scriptpath P2TR input. ; Taproot Output Key : [Component] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root ; Tapscript -: [Concept] The variant of the Script language used in P2TR Leaf Scripts (see BIP342) +: [Concept] The variant of the Script language used in P2TR Leaf Scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]) ; Transaction Header : [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time @@ -205,7 +205,10 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Concept] The enumeration of all Transaction Outputs of a transaction ; txid -: [Component] Part of an Outpoint that identifies the transaction that created a TXO. Result of hashing a transaction without its witness structure. The txid is serialized in little endian but displayed in big endian. +: [Component] Part of an Outpoint that identifies the transaction that created a TXO. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. + +; Unspent Transaction Output (UTXO) +: [Concept] aka coin. An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent per transaction inputs. UTXOs are uniquelyThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] identified by an _outpoint_. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. ; Version : [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. @@ -223,20 +226,20 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] A Witness Item that provides the Condition Script used to spend P2WSH outputs. Appears in the Witness Stack. ; Witness Stack -: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR script path spend. +: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR scriptpath spend. ; Witness Version -: [Component] The version of the witness program in native segwit outputs +: [Component] The version of the witness program ; wtxid -: [Concept] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct the Witness Commitment. +: [Concept] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. ===Usage in context of TXO creation and spending=== {| class="wikitable" ! Output Type !! Output Script !! Output Script content !! Input Script !! Witness Stack |- -| Bare (e.g. P2PK) || Bare Output Script || Various (e.g. OP_CHECKSIG) || Various (e.g. ) || rowspan="2" | [ ] +| Bare¹ (e.g. P2PK) || Bare Output Script || Various (e.g. OP_CHECKSIG) || Various (e.g. ) || rowspan="2" | [ ] |- | P2SH || rowspan="3" | P2SH Program || rowspan="3" | OP_HASH160 OP_EQUAL || Script Arguments, Redeem Script |- @@ -253,6 +256,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list | P2TR SP || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] |} +¹ Bare Outputs include P2PK, P2PKH, P2MS, and any other arbitrary scripts that are fully defined in the _output script_. ==Rationale== @@ -278,7 +282,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : BIP341 refers to parts of the witness stack as "witness elements" and "witness stack elements", but BIP144 speaks of "item count". We prefer Witness Item to refer to parts of a Witness Stack. ; Witness Section vs Witness Structure -: While Witness Section and Witness Structure both are used, we prefer the use of Witness Structure as introduced in BIP144 +: While Witness Section and Witness Structure are both used, we prefer the use of Witness Structure as introduced in BIP144 ; Witness Stack : While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some Witness Items that appear in Witness Stacks are not added to the stack, such as Control Blocks. We prefer Witness Stack as it is well-established. @@ -288,4 +292,5 @@ In this section we dissect a serialized transaction. Each sub-level in the list ==Acknowledgements== -Thanks to Pieter Wuille for the discussions that led to this proposal. Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, and Dave Harding for feedback on this proposal. +Thanks to Pieter Wuille for the discussions that led to this proposal. +Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin #TODO, Kostas Karasavvas for feedback on this proposal. From d0354e2f9806898ce8ec92aece79c20dbbdef143 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 10 Apr 2023 16:29:22 -0400 Subject: [PATCH 11/39] Capitalize definitions consistently [WIP] --- bip-tx-terminology.mediawiki | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 67e9a2a330..0228d7e013 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -96,23 +96,23 @@ In this section we dissect a serialized transaction. Each sub-level in the list ===Definition of Terms=== -; Annex -: [Component] A Witness Item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) +; annex +: [Component] A _witness item_ reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) -; Amount +; amount : [Component] The count of satoshis assigned to an output -; Bare Output Script -: [Component] A Condition Script that is directly defined in the Output Script field. Used to specify all types of Bare Outputs including Pay to Pubkey, Pay to Public Key Hash, Pay to Multisig outputs, and arbitrary scripts. +; bare output script +: [Component] A _condition script_ that is directly defined in the _output script_ field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (Pay to Public Key Hash), Pay to Multisig (P2MS) outputs, and arbitrary scripts. -; Condition Script -: [Concept] aka “locking script”. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition Scripts may be preceded by one or more forwarding scripts. An Output Script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the taproot output key is considered a condition script as well as each Leaf Script in the script tree. At the time of writing, there are four distinct Condition Scripts: Witness Script, Leaf Script, Redeem Script (only non-segwit P2SH), and Bare Output Script (P2PK, P2PKH, P2MS, and arbitrary scripts). +; condition script +: [Concept] aka locking script. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition scripts may be preceded by one or more forwarding scripts. An _output script_ can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the _taproot output key_ is considered a condition script as well as each _leaf script_ in the script tree. At the time of writing, there are four distinct condition scripts: _witness script_, _leaf script_, _redeem script_ (only non-segwit P2SH), and _bare output script_ (P2PK, P2PKH, P2MS, and arbitrary scripts). -; Control Block -: [Component] The proof of existence for a Leaf Script. Appears as a Witness Item in Witness Stacks for P2TR scriptpath inputs. Only consists of the Inner Key for Script Trees with a single Leaf Script, otherwise provides the Inner Key as well as a Taproot Branch in the form of the hashing partners for the used Leaf Script. +; control block +: [Component] The proof of existence for a _leaf script_. Appears as a _witness item_ in _witness stacks_ for P2TR scriptpath inputs. Only consists of the _taproot internal key_ for _script trees_ with a single _leaf script_, otherwise provides the _taproot internal key_ as well as a _taproot branch_ in the form of the hashing partners for the used _leaf script_. -; Flag -: [Artifact] Serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a Witness Section (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +; flag +: [Artifact] A serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a _witness structure_ (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; Forwarding Script : [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeem script must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeem script must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. From 42b0d7b5f3000349c137f8af12cd504bd0c05e55 Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 11 Apr 2023 17:42:41 -0400 Subject: [PATCH 12/39] Format consistently, expand rationale --- bip-tx-terminology.mediawiki | 215 ++++++++++++++++++----------------- 1 file changed, 109 insertions(+), 106 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 0228d7e013..76eaa57bb8 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -34,21 +34,21 @@ The hope is that this terminology could be used in technical writing about Bitco We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. We distinguish concrete properties of transactions such as fields and scripts (labeled [Component]) from serialization artifacts (labeled [Artifact]). For example, version and lock time are fields that can be set during transaction creation and therefore components of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. -Likewise, the _input script_ is a transaction component, but the length indicator of the input script is a serialization artifact. +Likewise, the input script is a transaction component, but the length indicator of the input script is a serialization artifact. We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]). ===Anatomy of a serialized transaction=== -In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction's serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. +In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction’s serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. * Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 ** First part of '''Transaction Header''' *** '''Transaction Version''' 02000000: integer field, here indicating version 2 *** '''Marker''' 00: serialization artifact indicating extended serialization -*** '''Flag''' 01: serialization artifact indicating presence of a Witness Structure +*** '''Flag''' 01: serialization artifact indicating presence of a witness structure ** '''Transaction Input List''' -*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the Transaction Header +*** Length of '''transaction input list''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. @@ -70,15 +70,15 @@ In this section we dissect a serialized transaction. Each sub-level in the list **** '''Output Script (scriptPubKey)''' ***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes ***** '''Witness Version''' 00: indicates a native segwit v0 output -***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte Witness Program -***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 Witness Program indicates a P2WPKH output) +***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte witness program +***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 witness program indicates a P2WPKH output) ** '''Witness Structure''' -*** First '''Witness Stack''': The Witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a Witness Stack.) -**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single Witness Item indicates a keypath spend. +*** First '''Witness Stack''': The witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a witness stack.) +**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single witness item indicates a keypath spend. **** First '''Witness Item''' ***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature -***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first Witness Item here is a Script Argument for the corresponding Condition Script. In this case, we see the signature corresponding to the P2TR keypath spend. -*** Second '''Witness Stack''': The Witness data corresponding to the second input. +***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first witness item here is a script argument for the corresponding condition script. In this case, we see the signature corresponding to the P2TR keypath spend. +*** Second '''Witness Stack''': The witness data corresponding to the second input. **** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. **** First '''Witness Item''' ***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature @@ -87,152 +87,152 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes ***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend **** Third '''Witness Item''' -***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the Control Block and how many hashing partners are necessary to prove the membership of the Leaf Script -***** '''Leaf Version''' c0: indicates the version of Tapscript used in the Leaf Script -***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The Taproot Internal Key which was tweaked with the Merkle root of the Script Tree to result in the Public Key committed to in the TXO's Witness Program being spent -***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the Leaf Script to the Merkle root of the Script Tree. +***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the control block and how many hashing partners are necessary to prove the membership of the leaf script +***** '''Leaf Version''' c0: indicates the version of Script used in this leaf script, here Tapscript +***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The taproot internal key which was tweaked with the Merkle root of the script tree to result in the public key committed to in the TXO’s witness program being spent +***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the leaf script to the Merkle root of the script tree. ** '''Transaction Header''' (cont.) *** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 ===Definition of Terms=== ; annex -: [Component] A _witness item_ reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]) +: [Component] A witness item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]). ; amount -: [Component] The count of satoshis assigned to an output +: [Component] The count of satoshis assigned to an output. ; bare output script -: [Component] A _condition script_ that is directly defined in the _output script_ field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (Pay to Public Key Hash), Pay to Multisig (P2MS) outputs, and arbitrary scripts. +: [Component] A condition script that is directly defined in the output script field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (Pay to Public Key Hash), Pay to Multisig (P2MS) outputs, and arbitrary scripts. ; condition script -: [Concept] aka locking script. Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition scripts may be preceded by one or more forwarding scripts. An _output script_ can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the _taproot output key_ is considered a condition script as well as each _leaf script_ in the script tree. At the time of writing, there are four distinct condition scripts: _witness script_, _leaf script_, _redeem script_ (only non-segwit P2SH), and _bare output script_ (P2PK, P2PKH, P2MS, and arbitrary scripts). +: [Concept] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition scripts may be preceded by one or more forwarding scripts. An output script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the taproot output key is considered a condition script as well as each leaf script in the script tree. At the time of writing, there are four distinct condition scripts: witness script, leaf script, redeem script (only non-segwit P2SH), and bare output script (P2PK, P2PKH, P2MS, and arbitrary scripts). ; control block -: [Component] The proof of existence for a _leaf script_. Appears as a _witness item_ in _witness stacks_ for P2TR scriptpath inputs. Only consists of the _taproot internal key_ for _script trees_ with a single _leaf script_, otherwise provides the _taproot internal key_ as well as a _taproot branch_ in the form of the hashing partners for the used _leaf script_. +: [Component] The proof of existence for a leaf script. Appears as a witness item in witness stacks for P2TR scriptpath inputs. Only consists of the taproot internal key for script trees with a single leaf script, otherwise provides the taproot internal key as well as a taproot branch in the form of the hashing partners for the used leaf script. ; flag -: [Artifact] A serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a _witness structure_ (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: [Artifact] A serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a witness structure (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). -; Forwarding Script -: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness Programs and P2SH Programs are forwarding scripts. Forwarding Scripts make use of _script templates_ that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH the Output Script in verbatim only implies that the redeem script must be the preimage of the hash in the Output Script, but the _template_ prescribes that the redeem script must additionally be satisfied. For Witness Programs, the Output Script is even less verbose with more implied meaning. +; forwarding script +: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness programs and P2SH Programs are forwarding scripts. Forwarding scripts make use of script templates that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH, the output script in verbatim only implies that the redeem script must be the preimage of the hash in the output script, but the template prescribes that the redeem script must additionally be satisfied. For witness programs, the output script is even less verbose with more implied meaning. -; Input Counter -: [Artifact] The length of the transaction input list, aka txin_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]) +; input counter +: [Artifact] The length of the transaction input list, aka txin_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). -; Input Index -: [Concept] The position of an input in a transaction's Input List +; input index +: [Concept] The position of an input in a transaction’s input list. -; Input Script -: [Component] aka “scriptSig”. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in Transaction Inputs was named for containing the signature and being of the type script. Today, this field is better understood as the _input script_ which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the Witness Stack for wrapped segwit outputs, and is empty for native segwit outputs. The Input Script may contain an actual script when spending a Bare Output Script, but may only contain push operations for any output type since P2SH. +; input script +: [Component] aka scriptSig. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in transaction inputs was named for containing the signature and being of the type script. Today, this field is better understood as the input script which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the witness stack for wrapped segwit outputs, and is empty for native segwit outputs. The input script may contain an actual script when spending a bare output script, but may only contain push operations for any output type since P2SH. -; Leaf Script -: [Component] A Condition Script used for spending P2TR outputs via the scriptpath. The Leaf Script appears as a Witness Item. +; leaf script +: [Component] A condition script used for spending P2TR outputs via the scriptpath. The leaf script appears as a witness item. -; Leaf Version -: [Component] The version of Script used in a leaf script. At the time of writing, only _Tapscript_ is defined. +; leaf version +: [Component] The version of Script used in a leaf script. At the time of writing, only Tapscript is defined. -; Lock Time -: [Component] aka “nLockTime”. Part of the Transaction Header. Lock Time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input's sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nlock time integer field. +; lock time +: [Component] aka “nLockTime”. Part of the transaction header. Lock time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input’s sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nLockTime integer field. -; Marker -: [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). (Note: Non-segwit nodes will only accept _stripped segwit transactions_, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) +; marker +: [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). (Note: Non-segwit nodes will only accept stripped segwit transactions, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) -; Outpoint -: [Component] Identifies the TXO being spent in a transaction input. Consists of a txid and Output Index. The txid is serialized in little-endian but displayed in big-endian. +; outpoint +: [Component] Identifies the transaction output (TXO) being spent by a transaction input. Consists of a txid and output index. The txid is serialized in little-endian but displayed in big-endian. -; Output Counter +; output counter : [Artifact] The length of the transaction output list, aka txout_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). -; Output Index -: [Component] Part of an Outpoint. The position of the output in a transaction's Output List that created the identified TXO. +; output index +: [Component] Part of an outpoint. The position of the output in a transaction’s output list that created the identified TXO. -; Output Script -: [Component] aka “scriptPubKey”. Must be present in each transaction output. Contains either a Condition Script or a Forwarding Script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type _script_ that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the _Output Script_. +; output script +: [Component] aka scriptPubKey. Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type script that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the output script. -; P2SH Program -: [Concept] A script template that forwards input validation to the Redeem Script. P2SH Programs are a type of Forwarding Script. +; P2SH program +: [Concept] A script template that forwards input validation to the redeem script. P2SH programs are a type of forwarding script. -; Redeem Script -: [Component] The Condition Script used for spending P2SH outputs. Is provided in the Input Script along with Script Arguments to satisfy it. The Input Script of wrapped segwit inputs is not a Redeem Script but a Witness Program. +; redeem script +: [Component] The condition script used in spending P2SH outputs. Is provided in the input script along with script arguments to satisfy it. The input script of wrapped segwit inputs is not a redeem script but a witness program. -; Script Arguments -: [Concept] aka “Unlocking Script”. Arguments presented to satisfy the Condition Script, includes e.g. Signatures and Public Keys. +; script arguments +: [Concept] Arguments presented to satisfy a condition script, e.g. signatures and public keys. -; Script Tree -: [Concept] The Merkle tree composed from the collection of Leaf Scripts committed to by a P2TR output +; script tree +: [Concept] The Merkle tree composed from the collection of leaf scripts committed to by a P2TR output. -; scriptPubKey -: See _Output Script_ +; scriptPubKey +: See '''output script'''. -; scriptSig -: See _Input Script_ +; scriptSig +: See '''input script'''. -; Sequence -: [Component] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. +; sequence +: [Component] The sequence number appearing in each transaction input. Serialized as the four-byte nSequence integer field. If any input’s sequence number is less than the maximum allowed value, a transaction is non-final. -; Signature -: [Component] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default SIGHASH_ALL is used the sighash flag may be omitted for Schnorr signatures. +; signature +: [Component] A script argument that proves a key owner’s consent to a transaction. Composed of an r-value, an s-value, and a sighash flag. ECDSA and Schnorr signatures use different serialization schemes for signatures. The length indicator preceding the signature is a serialization artifact that is not part of the signature. If the default signature hash type SIGHASH_ALL is used, the sighash flag may be omitted for Schnorr signatures. -; Sighash Flag -: [Component] Part of the Signature. A one-byte field that indicates which parts of the transaction a signature commits to. +; sighash flag +: [Component] Part of the signature. A one-byte field that indicates which parts of the transaction a signature commits to. -; Taproot Branch -: [Component] Part of a Control Block that specifies the hashing partners necessary to prove the existence of a Leaf Script in a Script Tree +; taproot branch +: [Component] Part of a control block that specifies the hashing partners necessary to prove the existence of a leaf script in a script tree. -; Taproot Internal Key -: [Component] aka “Inner Key”. The untweaked public key before it is tweaked with the Merkle root of the Script Tree to create the Taproot Output Key. Appears as part of a Control Block for a scriptpath P2TR input. +; taproot internal key +: [Component] aka inner key. The untweaked public key before it is tweaked with the Merkle root of the script tree to create the taproot output key. Appears as part of a control block for a scriptpath P2TR input. -; Taproot Output Key -: [Component] The public key present in the Witness Program of a P2TR output script composed by tweaking the Inner Key with the Script Tree's Merkle root +; taproot output key +: [Component] The public key present in the witness program of a P2TR output script composed by tweaking the inner key with the script tree’s Merkle root. ; Tapscript -: [Concept] The variant of the Script language used in P2TR Leaf Scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]) +: [Concept] The variant of the Script language used in P2TR leaf scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]). -; Transaction Header -: [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the Input and Output Lists: Transaction Version, Marker (segwit only), Flag (segwit only), Input Counter, Output Counter, Lock Time +; transaction header +: [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output Lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. -; Transaction Input -: [Component] aka Input. An element of the _transaction input list_ that consists of an _outpoint_, an _input script_, and a _sequence_. The _outpoint_ identifies the TXO that is being spent. The _input script_ can have various content corresponding to the TXO being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a Witness Stack. The Witness Stack is not part of the Transaction Input. +; transaction input +: [Component] aka input. An element of the transaction input list that consists of an outpoint, an input script, and a sequence. The outpoint identifies the TXO that is being spent. The input script can have various content depending on the type of output being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a witness stack. The witness stack is not part of the transaction input. -; Transaction Input List -: [Concept] The enumeration of all Transaction Inputs of a transaction +; transaction input list +: [Concept] The enumeration of all transaction inputs of a transaction. -; Transaction Output (TXO) -: [Component] aka txout. A transaction component that consists of an _amount_ and an _output script_. Adds a new Unspent Transaction Output (UTXO) to the UTXO set that is uniquely identified by an _outpoint_. +; transaction output (TXO) +: [Component] aka txout. A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. -; Transaction Output List -: [Concept] The enumeration of all Transaction Outputs of a transaction +; transaction output list +: [Concept] The enumeration of all transaction outputs of a transaction. ; txid : [Component] Part of an Outpoint that identifies the transaction that created a TXO. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. -; Unspent Transaction Output (UTXO) -: [Concept] aka coin. An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent per transaction inputs. UTXOs are uniquelyThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] identified by an _outpoint_. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. +; unspent transaction output (UTXO) +: [Concept] aka coin. An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent by transaction inputs. UTXOs are uniquely identifiedThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] by an outpoint. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. -; Version -: [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. +; version +: [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. -; Witness Item -: [Component] An element of a witness stack. Witness Items are: Witness Script (P2WSH only), Script Arguments, Leaf Script (P2TR scriptpath only), Control Block (P2TR scriptpath only), Annex (P2TR only). BIP341 also refers to Witness Items as “Witness Elements” or “Witness Stack Elements”. +; witness item +: [Component] aka witness stack element. An element of a witness stack. Witness items are: witness script (P2WSH only), script arguments, leaf script (P2TR scriptpath only), control block (P2TR scriptpath only), annex (P2TR only). [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki|BIP341]] also refers to witness items as witness elements or witness stack elements. -; Witness Program -: [Concept] A script template that forwards input validation to the Witness Stack. Witness Programs are a type of Forwarding Script. Witness Programs appear in the Output Script for native segwit outputs and in the Input Script for wrapped segwit inputs. +; witness program +: [Concept] A script template that forwards input validation to the witness stack. Witness programs are a type of forwarding script. Witness programs appear in the output script for native segwit outputs and in the input script for wrapped segwit inputs. -; Witness Structure -: [Concept] The part of the serialized transaction that contains the witness stacks for each input +; witness structure +: [Concept] The part of the serialized transaction that contains the witness stacks for each input. -; Witness Script -: [Component] A Witness Item that provides the Condition Script used to spend P2WSH outputs. Appears in the Witness Stack. +; witness script +: [Component] A witness item that provides the condition script used to spend P2WSH outputs. Appears in the witness stack. -; Witness Stack -: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input's condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the Control Block. The Witness Stack may contain Condition Scripts, specifically it will contain a Witness Script for P2WSH inputs, and a Leaf Script for a P2TR scriptpath spend. +; witness stack +: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input’s condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. -; Witness Version -: [Component] The version of the witness program +; witness version +: [Component] The version of a witness program. ; wtxid -: [Concept] Witness Transaction Identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. +: [Concept] aka witness transaction identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. ===Usage in context of TXO creation and spending=== @@ -256,7 +256,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list | P2TR SP || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] |} -¹ Bare Outputs include P2PK, P2PKH, P2MS, and any other arbitrary scripts that are fully defined in the _output script_. +¹ Bare outputs include P2PK, P2PKH, P2MS, and any other arbitrary scripts that are fully defined in the output script. ==Rationale== @@ -266,29 +266,32 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; Witness : Ambiguous, use Witness Stack to refer to the witness data of a single Transaction Input, use Witness Structure when talking about all witness data of a transaction -; Forwarding vs Condition Scripts -: We find that we generally distinguish two types of functions in “scripts”. The Condition Scripts encode the actual spending conditions, while Forwarding Scripts just commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] +; Forwarding Scripts and Condition Scripts +: We introduce these two new terms to distinguish two types of functions for “scripts”. The condition scripts encode the actual spending conditions, while forwarding scripts commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] ; Bare Output Scripts -: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the Output Script +: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the output script. ; Flag -: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag” +: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. ; P2SH Program -: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs +: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs. ; Witness Item vs Witness Element -: BIP341 refers to parts of the witness stack as "witness elements" and "witness stack elements", but BIP144 speaks of "item count". We prefer Witness Item to refer to parts of a Witness Stack. +: BIP341 refers to parts of the witness stack as “witness elements” and “witness stack elements”, but BIP144 speaks of “item count”. We prefer witness item to refer to parts of a witness stack. ; Witness Section vs Witness Structure -: While Witness Section and Witness Structure are both used, we prefer the use of Witness Structure as introduced in BIP144 +: While witness section and witness structure are both used, we prefer the use of witness structure as introduced in BIP144. ; Witness Stack -: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some Witness Items that appear in Witness Stacks are not added to the stack, such as Control Blocks. We prefer Witness Stack as it is well-established. +: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some witness items that appear in witness stacks are not added to the stack, such as control blocks. We prefer witness stack as it is well-established. + +; Locking Script and Unlocking Script +: Some popular works refer to scriptPubKey and scriptSig as “locking script” and “unlocking script” respectively. We do not recommend the use of these terms since they conflate the transaction component with the function these scripts had for some of the earlier output types. We introduce a set of new terms to decouple the position of the '''output script''' and '''input script''' from the function of locking and unlocking, and to underscore the evolution of output types from executable scripts to templates with additional implied meaning.—As output types have evolved over the years, we have departed from them relying on fully specified executable scripts, but rather imbued certain templates with additional constraints. For example a P2SH program literally interpreted only checks that the redeem script revealed in the input script matches the pre-image in the output script, but the implied meaning of the P2SH program additionally requires the redeem script to be evaluated satisfactorily. Later with wrapped P2WSH, we didn’t even require the witness script to contain all the arguments with push operations directly in a script but rather provide them as separate items akin to a pre-built stack. We refer to these stand-alone witness items to as '''script arguments'''. With native segwit outputs finally, the input script is empty altogether, and no longer plays any role in “unlocking” the funds at all. -; Output Script vs Locking Script -: The scriptPubKey is also sometimes referred to as a "locking script". However, we aim to emphasize the position of the field in the transaction, as it can either take the function of a condition or forwarding script. We therefore prefer a name that references the location in the transaction rather than a function it does not always have. +; Locking Script vs Output Script + Forwarding Script + Condition Script +: The scriptPubKey has also sometimes been referred to as “locking script”, especially before the activation of the segwit soft fork. However, this term is ambiguous in that it refers to the function of the output script but appears as the label for the field at the same time. This document introduces new terms to distinguish the transaction component from the abstract function it takes. We use '''output script''' when we refer to the scriptPubKey field in the transaction, and speak of either a '''condition script''' or '''forwarding script''' when we refer to the function the output script fulfills in a particular output. ==Acknowledgements== From 4714218d5e69b36b5f42df298ba976d9be8d6b38 Mon Sep 17 00:00:00 2001 From: Murch Date: Wed, 12 Apr 2023 15:32:43 -0400 Subject: [PATCH 13/39] Fix errant lowercasing of title in anatomy section --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 76eaa57bb8..12b03c2cbd 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -48,7 +48,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** '''Marker''' 00: serialization artifact indicating extended serialization *** '''Flag''' 01: serialization artifact indicating presence of a witness structure ** '''Transaction Input List''' -*** Length of '''transaction input list''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the transaction header +*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. From 730a813124680a417f44bfe8117afbc89fd1ea6c Mon Sep 17 00:00:00 2001 From: Murch Date: Wed, 12 Apr 2023 15:35:44 -0400 Subject: [PATCH 14/39] Move synonyms into second description line --- bip-tx-terminology.mediawiki | 83 +++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 12b03c2cbd..d16e4c21c4 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -48,7 +48,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** '''Marker''' 00: serialization artifact indicating extended serialization *** '''Flag''' 01: serialization artifact indicating presence of a witness structure ** '''Transaction Input List''' -*** Length of '''Transaction Input List''' 02: serialization artifact, varInt here indicating 2 inputs, considered part of the transaction header +*** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' ***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. @@ -64,7 +64,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability ** '''Transaction Output List''' -*** Length of '''Transaction Output List''' 01: serialization artifact, varInt here indicating 1 output, considered part of the Transaction Header +*** Length of '''Transaction Output List''' 01: serialization artifact, CompactSize here indicating 1 output, considered part of the Transaction Header *** First '''Output''' **** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output **** '''Output Script (scriptPubKey)''' @@ -96,20 +96,27 @@ In this section we dissect a serialized transaction. Each sub-level in the list ===Definition of Terms=== -; annex -: [Component] A witness item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]). + ; amount : [Component] The count of satoshis assigned to an output. +: Synonym: nValue, value + +; annex +: [Component] A witness item reserved for future extensions, currently unused (see [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-5|BIP341]]). ; bare output script -: [Component] A condition script that is directly defined in the output script field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (Pay to Public Key Hash), Pay to Multisig (P2MS) outputs, and arbitrary scripts. +: [Component] A condition script that is directly defined in the output script field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (P2PKH), Pay to Multisig (P2MS) outputs, and arbitrary scripts. + +; CompactSize +: [Concept] A variable-length integer encoding used in the transaction serialization to express input and output count. +: Synonym: VarInt (do not use, see [[compactsize|Rationale]]) ; condition script -: [Concept] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition scripts may be preceded by one or more forwarding scripts. An output script can either directly contain a condition script in the case of a bare output, or will commit to one or multiple condition scripts for other output types. For P2TR the taproot output key is considered a condition script as well as each leaf script in the script tree. At the time of writing, there are four distinct condition scripts: witness script, leaf script, redeem script (only non-segwit P2SH), and bare output script (P2PK, P2PKH, P2MS, and arbitrary scripts). +: [Concept] Umbrella term for scripts that encode the actual spending conditions that must be fulfilled to spend a TXO. Condition scripts may be preceded by one or more forwarding scripts. An output script will either directly contain a condition script in the case of a bare output, or commit to one or multiple condition scripts for other output types. For P2TR both the taproot internal key and each leaf script in the script tree are considered condition scripts. At the time of writing, there are five distinct condition scripts: taproot output key, leaf script, witness script, redeem script (only non-segwit P2SH), and bare output script (P2PK, P2PKH, P2MS, and arbitrary scripts). ; control block -: [Component] The proof of existence for a leaf script. Appears as a witness item in witness stacks for P2TR scriptpath inputs. Only consists of the taproot internal key for script trees with a single leaf script, otherwise provides the taproot internal key as well as a taproot branch in the form of the hashing partners for the used leaf script. +: [Component] The proof of existence for a leaf script. Appears as a witness item in witness stacks for P2TR scriptpath inputs, but does not get evaluated by the condition script. Only consists of the taproot internal key for script trees with a single leaf script, otherwise provides the taproot internal key as well as a taproot branch in the form of the hashing partners for the used leaf script. ; flag : [Artifact] A serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a witness structure (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). @@ -118,13 +125,15 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness programs and P2SH Programs are forwarding scripts. Forwarding scripts make use of script templates that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH, the output script in verbatim only implies that the redeem script must be the preimage of the hash in the output script, but the template prescribes that the redeem script must additionally be satisfied. For witness programs, the output script is even less verbose with more implied meaning. ; input counter -: [Artifact] The length of the transaction input list, aka txin_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: [Artifact] The length of the transaction input list (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: Synonym: txin_count ; input index : [Concept] The position of an input in a transaction’s input list. ; input script -: [Component] aka scriptSig. The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in transaction inputs was named for containing the signature and being of the type script. Today, this field is better understood as the input script which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the witness stack for wrapped segwit outputs, and is empty for native segwit outputs. The input script may contain an actual script when spending a bare output script, but may only contain push operations for any output type since P2SH. +: [Component] The Bitcoin code base used Hungarian notation when it was published. This transaction field appearing in transaction inputs was named for containing the signature and being of the type script. Today, this field is better understood as the input script which is used to satisfy spending conditions for non-segwit outputs, redirects validation to the witness stack for wrapped segwit outputs, and is empty for native segwit outputs. The input script may contain an actual script when spending a bare output script, but may only contain push operations for any output type since P2SH. +: Synonyms: scriptSig, unlocking script (see [[locking_unlocking|Rationale]]) ; leaf script : [Component] A condition script used for spending P2TR outputs via the scriptpath. The leaf script appears as a witness item. @@ -133,7 +142,8 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] The version of Script used in a leaf script. At the time of writing, only Tapscript is defined. ; lock time -: [Component] aka “nLockTime”. Part of the transaction header. Lock time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input’s sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nLockTime integer field. +: [Component] Part of the transaction header. Lock time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input’s sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nLockTime integer field. +: Synonym: nLockTime ; marker : [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). (Note: Non-segwit nodes will only accept stripped segwit transactions, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) @@ -142,13 +152,15 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] Identifies the transaction output (TXO) being spent by a transaction input. Consists of a txid and output index. The txid is serialized in little-endian but displayed in big-endian. ; output counter -: [Artifact] The length of the transaction output list, aka txout_count (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: [Artifact] The length of the transaction output list, (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). +: Synonym: txout_count ; output index : [Component] Part of an outpoint. The position of the output in a transaction’s output list that created the identified TXO. ; output script -: [Component] aka scriptPubKey. Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type script that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the output script. +: [Component] Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type script that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the output script. +: Synonyms: scriptPubKey, locking script (see [[locking_unlocking|Rationale]]) ; P2SH program : [Concept] A script template that forwards input validation to the redeem script. P2SH programs are a type of forwarding script. @@ -181,7 +193,8 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Component] Part of a control block that specifies the hashing partners necessary to prove the existence of a leaf script in a script tree. ; taproot internal key -: [Component] aka inner key. The untweaked public key before it is tweaked with the Merkle root of the script tree to create the taproot output key. Appears as part of a control block for a scriptpath P2TR input. +: [Component] The untweaked public key before it is tweaked with the Merkle root of the script tree to create the taproot output key. Appears as part of a control block for a scriptpath P2TR input. +: Synonym: inner key ; taproot output key : [Component] The public key present in the witness program of a P2TR output script composed by tweaking the inner key with the script tree’s Merkle root. @@ -193,46 +206,55 @@ In this section we dissect a serialized transaction. Each sub-level in the list : [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output Lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. ; transaction input -: [Component] aka input. An element of the transaction input list that consists of an outpoint, an input script, and a sequence. The outpoint identifies the TXO that is being spent. The input script can have various content depending on the type of output being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a witness stack. The witness stack is not part of the transaction input. +: [Component] An element of the transaction input list that consists of an outpoint, an input script, and a sequence. The outpoint identifies the TXO that is being spent. The input script can have various content depending on the type of output being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a witness stack. The witness stack is not part of the transaction input. +: Synonym: input, txin ; transaction input list : [Concept] The enumeration of all transaction inputs of a transaction. +: Synonym: tx_ins, inputs ; transaction output (TXO) -: [Component] aka txout. A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. +: [Component] A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. +: Synonym: txout ; transaction output list : [Concept] The enumeration of all transaction outputs of a transaction. +: Synonym: outputs, tx_outs ; txid -: [Component] Part of an Outpoint that identifies the transaction that created a TXO. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. +: [Component] Transaction identifier. Identifies the transaction that created a TXO in an outpoint. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. ; unspent transaction output (UTXO) -: [Concept] aka coin. An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent by transaction inputs. UTXOs are uniquely identifiedThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] by an outpoint. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. +: [Concept] An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent by transaction inputs. UTXOs are uniquely identifiedThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] by an outpoint. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. +: Synonym: coin (whitepaper) ; version : [Component] Part of the transaction header that specifies the transaction version. Serializes as the four-byte nVersion integer field. +: Synonym: nVersion ; witness item -: [Component] aka witness stack element. An element of a witness stack. Witness items are: witness script (P2WSH only), script arguments, leaf script (P2TR scriptpath only), control block (P2TR scriptpath only), annex (P2TR only). [[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki|BIP341]] also refers to witness items as witness elements or witness stack elements. +: [Component] An element of a witness stack. Witness items are: witness script (P2WSH only), script arguments, leaf script (P2TR scriptpath only), control block (P2TR scriptpath only), annex (P2TR only). +: Synonyms: witness elements, witness stack elements ([[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki|BIP341]]) ; witness program : [Concept] A script template that forwards input validation to the witness stack. Witness programs are a type of forwarding script. Witness programs appear in the output script for native segwit outputs and in the input script for wrapped segwit inputs. ; witness structure -: [Concept] The part of the serialized transaction that contains the witness stacks for each input. +: [Concept] The part of the serialized transaction that contains the witness stacks for each input. Transactions without segwit inputs are serialized without a witness structure. +: Synonym: witness ; witness script : [Component] A witness item that provides the condition script used to spend P2WSH outputs. Appears in the witness stack. ; witness stack -: [Component] The pre-built stack of witness items that is executed in validation to satisfy an input’s condition script. If a transaction has at least one segwit input, each input has exactly one witness stack. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. Strictly speaking, a witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. +: [Component] The pre-built stack of witness items that is consumed in validation of the input’s condition script. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. A witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. Every transaction input is accompanied by a witness stack, but the witness stack of non-segwit inputs is empty, i.e. consists just of the serialization artifact of a witness item count of 0. +: Synonym: input witness, witness ; witness version : [Component] The version of a witness program. ; wtxid -: [Concept] aka witness transaction identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. +: [Concept] Witness transaction identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. ===Usage in context of TXO creation and spending=== @@ -263,15 +285,18 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; Amount vs Value : Amount underscores that we are referring to a count of satoshis rather than subjective value. As Bitcoin transactions (and code altogether) are littered with “values”, we prefer “amount” as being less ambiguous. +; CompactSize vs VarInt +: The Bitcoin Core codebase uses the term CompactSize for a “variable-length integer encoding used in Bitcoin Core’s serialization framework” that has outside of Bitcoin Core also been referred to as VarIntAlso see Bitcoin Stack Exchange: [[What is the different between CompactSize and VarInt encoding?|https://bitcoin.stackexchange.com/a/114585/5406]]. Since the Bitcoin Core codebase uses another type of variable-length integer encoding called VarInt in the context of database interaction, we prefer using CompactSize in the context of transaction serialization. This approach is also preferred by some technical writers working on widely read technical resources concerned with Bitcoin. + +; Forwarding and condition script in the context of P2TR keypath spends +: The terminology is open to interpretation in the context of P2TR keypath spends. When spending a P2TR output per the keypath, the signer uses the private key corresponding to the taproot internal key and tweaks the resulting signature with the Merkle root of the script tree. Looking at the process under the hood, we should consider the taproot output key a forwarding script that commits to multiple condition scripts: the taproot internal key and all leaf scripts. However, looking at the serialization, this means that a P2TR keypath input is an exception in that it does not explicitly reveal its condition script, since the taproot internal key does not appear in the transaction serialization. Alternatively, the taproot output key could be interpreted as being both the condition script in the case of a keypath spend and a forwarding script in the case of a script path spend. + ; Witness -: Ambiguous, use Witness Stack to refer to the witness data of a single Transaction Input, use Witness Structure when talking about all witness data of a transaction +: We have seen “witness” used to refer to both the witness data of a single input or the entirety of a transaction’s witness data. We use Witness Stack to refer to the witness data of a single Transaction Input, and Witness Structure when talking about all witness data of a transaction. ; Forwarding Scripts and Condition Scripts : We introduce these two new terms to distinguish two types of functions for “scripts”. The condition scripts encode the actual spending conditions, while forwarding scripts commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] -; Bare Output Scripts -: Include P2PK, P2PKH, P2MS, and arbitrary other condition scripts directly defined in the output script. - ; Flag : While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. @@ -285,10 +310,10 @@ In this section we dissect a serialized transaction. Each sub-level in the list : While witness section and witness structure are both used, we prefer the use of witness structure as introduced in BIP144. ; Witness Stack -: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some witness items that appear in witness stacks are not added to the stack, such as control blocks. We prefer witness stack as it is well-established. +: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some witness items that appear in witness stacks are not added to the stack that’s evaluated with the condition script, such as control blocks. We still prefer witness stack as it is well-established. -; Locking Script and Unlocking Script -: Some popular works refer to scriptPubKey and scriptSig as “locking script” and “unlocking script” respectively. We do not recommend the use of these terms since they conflate the transaction component with the function these scripts had for some of the earlier output types. We introduce a set of new terms to decouple the position of the '''output script''' and '''input script''' from the function of locking and unlocking, and to underscore the evolution of output types from executable scripts to templates with additional implied meaning.—As output types have evolved over the years, we have departed from them relying on fully specified executable scripts, but rather imbued certain templates with additional constraints. For example a P2SH program literally interpreted only checks that the redeem script revealed in the input script matches the pre-image in the output script, but the implied meaning of the P2SH program additionally requires the redeem script to be evaluated satisfactorily. Later with wrapped P2WSH, we didn’t even require the witness script to contain all the arguments with push operations directly in a script but rather provide them as separate items akin to a pre-built stack. We refer to these stand-alone witness items to as '''script arguments'''. With native segwit outputs finally, the input script is empty altogether, and no longer plays any role in “unlocking” the funds at all. +; Locking Script and Unlocking Script +: Some popular works refer to scriptPubKey and scriptSig as “locking script” and “unlocking script” respectively. We do not recommend the use of these terms since they conflate the transaction component with the function these scripts had for some of the earlier output types. We introduce a set of new terms to decouple the position of the '''output script''' and '''input script''' from the function of locking and unlocking, and to underscore the evolution of output types from executable scripts to templates with additional implied meaning.—As output types have evolved over the years, we have departed from them relying on fully specified executable scripts, but rather imbued certain templates with additional constraints. For example a P2SH program interpreted as written only checks that the redeem script revealed in the input script matches the pre-image in the output script, but the implied meaning of the P2SH program additionally requires the redeem script to be evaluated satisfactorily. Later with wrapped P2WSH, we didn’t even require the witness script to contain all the arguments with push operations directly in a script but rather provide them as separate items akin to a pre-built stack. We refer to these stand-alone witness items as '''script arguments'''. With native segwit outputs finally, the input script is empty altogether, and no longer plays any role in “unlocking” the funds at all. ; Locking Script vs Output Script + Forwarding Script + Condition Script : The scriptPubKey has also sometimes been referred to as “locking script”, especially before the activation of the segwit soft fork. However, this term is ambiguous in that it refers to the function of the output script but appears as the label for the field at the same time. This document introduces new terms to distinguish the transaction component from the abstract function it takes. We use '''output script''' when we refer to the scriptPubKey field in the transaction, and speak of either a '''condition script''' or '''forwarding script''' when we refer to the function the output script fulfills in a particular output. @@ -296,4 +321,4 @@ In this section we dissect a serialized transaction. Each sub-level in the list ==Acknowledgements== Thanks to Pieter Wuille for the discussions that led to this proposal. -Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin #TODO, Kostas Karasavvas for feedback on this proposal. +Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin Sabouri, and Kostas Karasavvas for feedback on this proposal. From d37359880aa9c9f4df4d7c0fe85886761ba1c095 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 10:26:30 -0700 Subject: [PATCH 15/39] Update preamble for BIP3 --- bip-tx-terminology.mediawiki | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index d16e4c21c4..d4607bf5e6 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -1,14 +1,12 @@
   BIP: 
   Title: 
-  Author: Mark Erhardt 
-  Comments-Summary: No comments yet
-  Comments-URI: 
+  Authors: Mark Erhardt 
   Status: Draft
   Type: Informational
-  Created: 2022-01-13
+  Assigned: ?
   License: BSD-3-Clause
-  Post-History: 
+  Discussion: 
 
== Introduction== From b52d246135ff8f625632e29c70013d5725ae2fde Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 10:30:26 -0700 Subject: [PATCH 16/39] Adopt synonym suggestions from Ishaana --- bip-tx-terminology.mediawiki | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index d4607bf5e6..c1e7a8b0f2 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -148,6 +148,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; outpoint : [Component] Identifies the transaction output (TXO) being spent by a transaction input. Consists of a txid and output index. The txid is serialized in little-endian but displayed in big-endian. +: Synonym: prevout ; output counter : [Artifact] The length of the transaction output list, (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). @@ -155,6 +156,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; output index : [Component] Part of an outpoint. The position of the output in a transaction’s output list that created the identified TXO. +: Synonym: vout_index, sometimes abbreviated as vout ; output script : [Component] Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type script that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the output script. @@ -209,7 +211,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; transaction input list : [Concept] The enumeration of all transaction inputs of a transaction. -: Synonym: tx_ins, inputs +: Synonym: inputs, vin, tx_ins ; transaction output (TXO) : [Component] A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. @@ -217,7 +219,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; transaction output list : [Concept] The enumeration of all transaction outputs of a transaction. -: Synonym: outputs, tx_outs +: Synonym: outputs, vout, tx_outs ; txid : [Component] Transaction identifier. Identifies the transaction that created a TXO in an outpoint. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. From c798c88db558239f4f759e60c2cb1002d2a84b48 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 10:36:16 -0700 Subject: [PATCH 17/39] Move anatomy below definitions --- bip-tx-terminology.mediawiki | 112 +++++++++++++++++------------------ 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index c1e7a8b0f2..5489cdb4a3 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -36,62 +36,6 @@ Likewise, the input script is a transaction component, but the length indicator We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]). -===Anatomy of a serialized transaction=== - -In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction’s serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. - -* Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 -** First part of '''Transaction Header''' -*** '''Transaction Version''' 02000000: integer field, here indicating version 2 -*** '''Marker''' 00: serialization artifact indicating extended serialization -*** '''Flag''' 01: serialization artifact indicating presence of a witness structure -** '''Transaction Input List''' -*** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header -*** First '''Input''' -**** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. -***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b -**** '''Input Script''' -***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability -*** Second '''Input''' -**** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating that the spent TXO was created by transaction e700b7b33…a4bbc07b -***** '''Output Index''' 01000000: the output position, the TXO was the second position on the transaction output list of e700…c07b -**** '''Input Script''' -***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). -**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability -** '''Transaction Output List''' -*** Length of '''Transaction Output List''' 01: serialization artifact, CompactSize here indicating 1 output, considered part of the Transaction Header -*** First '''Output''' -**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output -**** '''Output Script (scriptPubKey)''' -***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes -***** '''Witness Version''' 00: indicates a native segwit v0 output -***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte witness program -***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 witness program indicates a P2WPKH output) -** '''Witness Structure''' -*** First '''Witness Stack''': The witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a witness stack.) -**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single witness item indicates a keypath spend. -**** First '''Witness Item''' -***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature -***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first witness item here is a script argument for the corresponding condition script. In this case, we see the signature corresponding to the P2TR keypath spend. -*** Second '''Witness Stack''': The witness data corresponding to the second input. -**** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. -**** First '''Witness Item''' -***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature -***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script -**** '''Second Witness Item''' -***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes -***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend -**** Third '''Witness Item''' -***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the control block and how many hashing partners are necessary to prove the membership of the leaf script -***** '''Leaf Version''' c0: indicates the version of Script used in this leaf script, here Tapscript -***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The taproot internal key which was tweaked with the Merkle root of the script tree to result in the public key committed to in the TXO’s witness program being spent -***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the leaf script to the Merkle root of the script tree. -** '''Transaction Header''' (cont.) -*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 - ===Definition of Terms=== @@ -318,6 +262,62 @@ In this section we dissect a serialized transaction. Each sub-level in the list ; Locking Script vs Output Script + Forwarding Script + Condition Script : The scriptPubKey has also sometimes been referred to as “locking script”, especially before the activation of the segwit soft fork. However, this term is ambiguous in that it refers to the function of the output script but appears as the label for the field at the same time. This document introduces new terms to distinguish the transaction component from the abstract function it takes. We use '''output script''' when we refer to the scriptPubKey field in the transaction, and speak of either a '''condition script''' or '''forwarding script''' when we refer to the function the output script fulfills in a particular output. +===Example: Anatomy of a serialized transaction=== + +In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction’s serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. + +* Raw '''Transaction''' 020000000001027bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70000000000feffffff7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e70100000000feffffff01b4ba0e0000000000160014173fd310e9db2c7e9550ce0f03f1e6c01d833aa90140134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c03407b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca2220f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac41c0d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45bffd30a00 +** First part of '''Transaction Header''' +*** '''Transaction Version''' 02000000: integer field, here indicating version 2 +*** '''Marker''' 00: serialization artifact indicating extended serialization +*** '''Flag''' 01: serialization artifact indicating presence of a witness structure +** '''Transaction Input List''' +*** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header +*** First '''Input''' +**** '''Outpoint''' +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b +**** '''Input Script''' +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability +*** Second '''Input''' +**** '''Outpoint''' +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating that the spent TXO was created by transaction e700b7b33…a4bbc07b +***** '''Output Index''' 01000000: the output position, the TXO was the second position on the transaction output list of e700…c07b +**** '''Input Script''' +***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). +**** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability +** '''Transaction Output List''' +*** Length of '''Transaction Output List''' 01: serialization artifact, CompactSize here indicating 1 output, considered part of the Transaction Header +*** First '''Output''' +**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output +**** '''Output Script (scriptPubKey)''' +***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes +***** '''Witness Version''' 00: indicates a native segwit v0 output +***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte witness program +***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 witness program indicates a P2WPKH output) +** '''Witness Structure''' +*** First '''Witness Stack''': The witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a witness stack.) +**** Item count for the first '''Witness Stack''' 01: serialization artifact. A single witness item indicates a keypath spend. +**** First '''Witness Item''' +***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature +***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first witness item here is a script argument for the corresponding condition script. In this case, we see the signature corresponding to the P2TR keypath spend. +*** Second '''Witness Stack''': The witness data corresponding to the second input. +**** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. +**** First '''Witness Item''' +***** '''Length of the first Witness Item''' 40: 64 bytes indicate a signature +***** '''Signature''' 7b5d614a4610bf9196775791fcc589597ca066dcd10048e004cd4c7341bb4bb90cee4705192f3f7db524e8067a5222c7f09baf29ef6b805b8327ecd1e5ab83ca: script argument used as an input to the condition script +**** '''Second Witness Item''' +***** Length of the second '''Witness Item''' 22: serialization artifact instructing to read 34 bytes +***** '''Leaf Script''' 20f5b059b9a72298ccbefff59d9b943f7e0fc91d8a3b944a95e7b6390cc99eb5f4ac: the condition scripts for the P2TR scriptpath spend +**** Third '''Witness Item''' +***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the control block and how many hashing partners are necessary to prove the membership of the leaf script +***** '''Leaf Version''' c0: indicates the version of Script used in this leaf script, here Tapscript +***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The taproot internal key which was tweaked with the Merkle root of the script tree to result in the public key committed to in the TXO’s witness program being spent +***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the leaf script to the Merkle root of the script tree. +** '''Transaction Header''' (cont.) +*** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 + ==Acknowledgements== Thanks to Pieter Wuille for the discussions that led to this proposal. From d82322d2cb25365d14b02d5e4f367a8195599822 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 10:51:48 -0700 Subject: [PATCH 18/39] =?UTF-8?q?Take=20John=20Moffett=E2=80=99s=20suggest?= =?UTF-8?q?ions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 5489cdb4a3..918442ec87 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -64,7 +64,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Artifact] A serialization artifact indicating features used by the transaction. As of writing, the only allowed value is 01 which indicates that the transaction serialization has a witness structure (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). ; forwarding script -: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness programs and P2SH Programs are forwarding scripts. Forwarding scripts make use of script templates that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH, the output script in verbatim only implies that the redeem script must be the preimage of the hash in the output script, but the template prescribes that the redeem script must additionally be satisfied. For witness programs, the output script is even less verbose with more implied meaning. +: [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness programs and P2SH Programs are forwarding scripts. Forwarding scripts make use of script templates that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH, the output script itself only explicitly specifies that the redeem script must be the preimage of the hash in the output script, but the template prescribes that the redeem script must additionally be satisfied. For witness programs, the output script is even less verbose with more implied meaning. ; input counter : [Artifact] The length of the transaction input list (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). @@ -290,7 +290,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ** '''Transaction Output List''' *** Length of '''Transaction Output List''' 01: serialization artifact, CompactSize here indicating 1 output, considered part of the Transaction Header *** First '''Output''' -**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshi are assigned to this output +**** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshis are assigned to this output **** '''Output Script (scriptPubKey)''' ***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes ***** '''Witness Version''' 00: indicates a native segwit v0 output From 0132c5e15a197f18a378239e9ae316c9a33f6146 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 10:57:54 -0700 Subject: [PATCH 19/39] Touch-up Output Script definition --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 918442ec87..7c05d90804 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -103,7 +103,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : Synonym: vout_index, sometimes abbreviated as vout ; output script -: [Component] Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey to refer to the transaction field of the type script that contained the public key. The use of this field had evolved beyond that interpretation even when Bitcoin was published since the field could already contain more complicated scripts. Today, this field is referred to as the output script. +: [Component] Must be present in each transaction output. Contains either a condition script or a forwarding script. Originally, the Bitcoin code base used Hungarian notation. This field was presumably named scriptPubKey as it was of the type script and because it fulfilled the role of a public key. While the first standard output type, Pay to Public Key, only contained the public key in this field, the use of this field had evolved beyond that even when Bitcoin was published, since the field could already contain more complicated bare scripts. Today, this field is referred to as the output script. : Synonyms: scriptPubKey, locking script (see [[locking_unlocking|Rationale]]) ; P2SH program From cce73024c49feadbf15fac3f9dab1a46a4088cb5 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 11:20:16 -0700 Subject: [PATCH 20/39] Add footnotes for Signature size and hash endianness --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 7c05d90804..308cf7293f 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -275,7 +275,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: little-endian txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07b. +***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07bTxids are the result of hashing the content of a transaction. The result of a hash is a sequence of bytes. Hashes are defined by the standards as being big-endian and cryptography libraries deal with hashes in that form: Bitcoin also stores and transfers txids in big-endian. Bitcoin sometimes considers hashes to be little-endian integers instead of strings (in the context of block hashes and proof of work calculations), which is presumably why Bitcoin _displays_ hashes, including txids, in little-endian.. ***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). @@ -300,7 +300,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** First '''Witness Stack''': The witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a witness stack.) **** Item count for the first '''Witness Stack''' 01: serialization artifact. A single witness item indicates a keypath spend. **** First '''Witness Item''' -***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a signature +***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a Schnorr signatureNote that the ECDSA signatures used by pre-taproot inputs are larger and vary in size. Only the Schnorr signatures introduced with Tapscript have always a fixed size of 64 bytes (or 65 bytes with a non-default sighash flag) ***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first witness item here is a script argument for the corresponding condition script. In this case, we see the signature corresponding to the P2TR keypath spend. *** Second '''Witness Stack''': The witness data corresponding to the second input. **** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. From 2be9cc889d995b5626f289e7286d91a4d4f2544f Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 11:26:09 -0700 Subject: [PATCH 21/39] Replace txid with transaction identifier --- bip-tx-terminology.mediawiki | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 308cf7293f..8d7775eebf 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -149,6 +149,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; transaction header : [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output Lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. +; transaction identifier (txid) +: [Component] Identifies the transaction that created a TXO in an outpoint. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. + ; transaction input : [Component] An element of the transaction input list that consists of an outpoint, an input script, and a sequence. The outpoint identifies the TXO that is being spent. The input script can have various content depending on the type of output being spent. The input script has length 0 for native segwit inputs. In segwit transactions, every input must be accompanied by a witness stack. The witness stack is not part of the transaction input. : Synonym: input, txin @@ -165,9 +168,6 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Concept] The enumeration of all transaction outputs of a transaction. : Synonym: outputs, vout, tx_outs -; txid -: [Component] Transaction identifier. Identifies the transaction that created a TXO in an outpoint. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. - ; unspent transaction output (UTXO) : [Concept] An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent by transaction inputs. UTXOs are uniquely identifiedThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] by an outpoint. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. : Synonym: coin (whitepaper) @@ -194,12 +194,12 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Component] The pre-built stack of witness items that is consumed in validation of the input’s condition script. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. A witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. Every transaction input is accompanied by a witness stack, but the witness stack of non-segwit inputs is empty, i.e. consists just of the serialization artifact of a witness item count of 0. : Synonym: input witness, witness +; witness transaction identifier (wtxid) +: [Concept] Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. + ; witness version : [Component] The version of a witness program. -; wtxid -: [Concept] Witness transaction identifier. Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. - ===Usage in context of TXO creation and spending=== {| class="wikitable" @@ -275,14 +275,14 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07bTxids are the result of hashing the content of a transaction. The result of a hash is a sequence of bytes. Hashes are defined by the standards as being big-endian and cryptography libraries deal with hashes in that form: Bitcoin also stores and transfers txids in big-endian. Bitcoin sometimes considers hashes to be little-endian integers instead of strings (in the context of block hashes and proof of work calculations), which is presumably why Bitcoin _displays_ hashes, including txids, in little-endian.. +***** '''Transaction Identifier (txid)''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07bTxids are the result of hashing the content of a transaction. The result of a hash is a sequence of bytes. Hashes are defined by the standards as being big-endian and cryptography libraries deal with hashes in that form: Bitcoin also stores and transfers txids in big-endian. Bitcoin sometimes considers hashes to be little-endian integers instead of strings (in the context of block hashes and proof of work calculations), which is presumably why Bitcoin _displays_ hashes, including txids, in little-endian.. ***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). **** '''Sequence''' feffffff: transaction field encoding MAX-1, which indicates that the transaction uses lock time but does not signal replaceability *** Second '''Input''' **** '''Outpoint''' -***** '''txid''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating that the spent TXO was created by transaction e700b7b33…a4bbc07b +***** '''Transaction Identifier (txid)''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: indicating that the spent TXO was created by transaction e700b7b33…a4bbc07b ***** '''Output Index''' 01000000: the output position, the TXO was the second position on the transaction output list of e700…c07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). From 93e6d9db83b71b847b8ac81bd52dda4b88278615 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 12:51:03 -0700 Subject: [PATCH 22/39] Add coinbase field, redemption script synonym --- bip-tx-terminology.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 8d7775eebf..5d393b2298 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -50,6 +50,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; bare output script : [Component] A condition script that is directly defined in the output script field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (P2PKH), Pay to Multisig (P2MS) outputs, and arbitrary scripts. +; coinbase +: [Component] The coinbase field takes the place of the input script in a coinbase transaction (named after this field), since coinbase transactions do not spend a transaction output. + ; CompactSize : [Concept] A variable-length integer encoding used in the transaction serialization to express input and output count. : Synonym: VarInt (do not use, see [[compactsize|Rationale]]) @@ -111,6 +114,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; redeem script : [Component] The condition script used in spending P2SH outputs. Is provided in the input script along with script arguments to satisfy it. The input script of wrapped segwit inputs is not a redeem script but a witness program. +: Synonyms: `redeemScript`, redemption script ; script arguments : [Concept] Arguments presented to satisfy a condition script, e.g. signatures and public keys. From 6f6859e3bd2d567e6696d8c3a337d1e2adeb5b3c Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 12:52:04 -0700 Subject: [PATCH 23/39] Replaced mentions of scriptPubKey in anatomy --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 5d393b2298..7094812308 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -295,8 +295,8 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Output List''' 01: serialization artifact, CompactSize here indicating 1 output, considered part of the Transaction Header *** First '''Output''' **** '''Amount''' b4ba0e0000000000: field defining that 965300 satoshis are assigned to this output -**** '''Output Script (scriptPubKey)''' -***** Length of the '''scriptPubKey''' 16: serialization artifact, here instructing the interpreter to read 22 bytes +**** '''Output Script''' +***** Length of the '''Output Script''' 16: serialization artifact, here instructing the interpreter to read 22 bytes ***** '''Witness Version''' 00: indicates a native segwit v0 output ***** Length of the '''Witness Program''' 14: serialization artifact indicating a 20-byte witness program ***** '''Witness Program''' 173fd310e9db2c7e9550ce0f03f1e6c01d833aa9: a public key hash since a 20-byte v0 witness program indicates a P2WPKH output) From 89ec29f9333bce4828a6114c9395b5f618a871c5 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 12:57:43 -0700 Subject: [PATCH 24/39] Fix inconsistent tap branch --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 7094812308..92621ae2d2 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -318,7 +318,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ***** Length of the third '''Witness Item''' 41: serialization artifact, the length indicates the depth of the control block and how many hashing partners are necessary to prove the membership of the leaf script ***** '''Leaf Version''' c0: indicates the version of Script used in this leaf script, here Tapscript ***** '''Inner key''' d9dfdf0fe3c83e9870095d67fff59a8056dad28c6dfb944bb71cf64b90ace9a7: The taproot internal key which was tweaked with the Merkle root of the script tree to result in the public key committed to in the TXO’s witness program being spent -***** '''Tap Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the leaf script to the Merkle root of the script tree. +***** '''Taproot Branch''' 776b22a1185fb2dc9524f6b178e2693189bf01655d7f38f043923668dc5af45b: The hashing partners necessary to connect the leaf script to the Merkle root of the script tree. ** '''Transaction Header''' (cont.) *** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 From 1587251aa3ea847431ce7a86edd3e0ea4cfd3e6c Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 12:58:26 -0700 Subject: [PATCH 25/39] Fix casing --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 92621ae2d2..fa02bdcbd4 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -151,7 +151,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Concept] The variant of the Script language used in P2TR leaf scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]). ; transaction header -: [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output Lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. +: [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. ; transaction identifier (txid) : [Component] Identifies the transaction that created a TXO in an outpoint. Result of hashing a transaction without its witness structure. The txid is serialized in little-endian but displayed in big-endian. From 530c4afe9f948e5ee9f59892e7868a0e8d673511 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 13:03:52 -0700 Subject: [PATCH 26/39] Put Rationale after example, as intended --- bip-tx-terminology.mediawiki | 76 ++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index fa02bdcbd4..59e8abb264 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -228,44 +228,6 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ¹ Bare outputs include P2PK, P2PKH, P2MS, and any other arbitrary scripts that are fully defined in the output script. -==Rationale== - -; Amount vs Value -: Amount underscores that we are referring to a count of satoshis rather than subjective value. As Bitcoin transactions (and code altogether) are littered with “values”, we prefer “amount” as being less ambiguous. - -; CompactSize vs VarInt -: The Bitcoin Core codebase uses the term CompactSize for a “variable-length integer encoding used in Bitcoin Core’s serialization framework” that has outside of Bitcoin Core also been referred to as VarIntAlso see Bitcoin Stack Exchange: [[What is the different between CompactSize and VarInt encoding?|https://bitcoin.stackexchange.com/a/114585/5406]]. Since the Bitcoin Core codebase uses another type of variable-length integer encoding called VarInt in the context of database interaction, we prefer using CompactSize in the context of transaction serialization. This approach is also preferred by some technical writers working on widely read technical resources concerned with Bitcoin. - -; Forwarding and condition script in the context of P2TR keypath spends -: The terminology is open to interpretation in the context of P2TR keypath spends. When spending a P2TR output per the keypath, the signer uses the private key corresponding to the taproot internal key and tweaks the resulting signature with the Merkle root of the script tree. Looking at the process under the hood, we should consider the taproot output key a forwarding script that commits to multiple condition scripts: the taproot internal key and all leaf scripts. However, looking at the serialization, this means that a P2TR keypath input is an exception in that it does not explicitly reveal its condition script, since the taproot internal key does not appear in the transaction serialization. Alternatively, the taproot output key could be interpreted as being both the condition script in the case of a keypath spend and a forwarding script in the case of a script path spend. - -; Witness -: We have seen “witness” used to refer to both the witness data of a single input or the entirety of a transaction’s witness data. We use Witness Stack to refer to the witness data of a single Transaction Input, and Witness Structure when talking about all witness data of a transaction. - -; Forwarding Scripts and Condition Scripts -: We introduce these two new terms to distinguish two types of functions for “scripts”. The condition scripts encode the actual spending conditions, while forwarding scripts commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] - -; Flag -: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. - -; P2SH Program -: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs. - -; Witness Item vs Witness Element -: BIP341 refers to parts of the witness stack as “witness elements” and “witness stack elements”, but BIP144 speaks of “item count”. We prefer witness item to refer to parts of a witness stack. - -; Witness Section vs Witness Structure -: While witness section and witness structure are both used, we prefer the use of witness structure as introduced in BIP144. - -; Witness Stack -: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some witness items that appear in witness stacks are not added to the stack that’s evaluated with the condition script, such as control blocks. We still prefer witness stack as it is well-established. - -; Locking Script and Unlocking Script -: Some popular works refer to scriptPubKey and scriptSig as “locking script” and “unlocking script” respectively. We do not recommend the use of these terms since they conflate the transaction component with the function these scripts had for some of the earlier output types. We introduce a set of new terms to decouple the position of the '''output script''' and '''input script''' from the function of locking and unlocking, and to underscore the evolution of output types from executable scripts to templates with additional implied meaning.—As output types have evolved over the years, we have departed from them relying on fully specified executable scripts, but rather imbued certain templates with additional constraints. For example a P2SH program interpreted as written only checks that the redeem script revealed in the input script matches the pre-image in the output script, but the implied meaning of the P2SH program additionally requires the redeem script to be evaluated satisfactorily. Later with wrapped P2WSH, we didn’t even require the witness script to contain all the arguments with push operations directly in a script but rather provide them as separate items akin to a pre-built stack. We refer to these stand-alone witness items as '''script arguments'''. With native segwit outputs finally, the input script is empty altogether, and no longer plays any role in “unlocking” the funds at all. - -; Locking Script vs Output Script + Forwarding Script + Condition Script -: The scriptPubKey has also sometimes been referred to as “locking script”, especially before the activation of the segwit soft fork. However, this term is ambiguous in that it refers to the function of the output script but appears as the label for the field at the same time. This document introduces new terms to distinguish the transaction component from the abstract function it takes. We use '''output script''' when we refer to the scriptPubKey field in the transaction, and speak of either a '''condition script''' or '''forwarding script''' when we refer to the function the output script fulfills in a particular output. - ===Example: Anatomy of a serialized transaction=== In this section we dissect a serialized transaction. Each sub-level in the list repeats a subset of the transaction’s serialization to label the included parts. The goal is to provide a map from a serialized transaction back to our definitions above. We use the first ever P2TR transaction with a keypath and a scriptpath input 37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8. @@ -322,6 +284,44 @@ In this section we dissect a serialized transaction. Each sub-level in the list ** '''Transaction Header''' (cont.) *** '''Lock Time''' ffd30a00: the 4-byte lock time field, little-endian for 709631 +==Rationale== + +; Amount vs Value +: Amount underscores that we are referring to a count of satoshis rather than subjective value. As Bitcoin transactions (and code altogether) are littered with “values”, we prefer “amount” as being less ambiguous. + +; CompactSize vs VarInt +: The Bitcoin Core codebase uses the term CompactSize for a “variable-length integer encoding used in Bitcoin Core’s serialization framework” that has outside of Bitcoin Core also been referred to as VarIntAlso see Bitcoin Stack Exchange: [[What is the different between CompactSize and VarInt encoding?|https://bitcoin.stackexchange.com/a/114585/5406]]. Since the Bitcoin Core codebase uses another type of variable-length integer encoding called VarInt in the context of database interaction, we prefer using CompactSize in the context of transaction serialization. This approach is also preferred by some technical writers working on widely read technical resources concerned with Bitcoin. + +; Forwarding and condition script in the context of P2TR keypath spends +: The terminology is open to interpretation in the context of P2TR keypath spends. When spending a P2TR output per the keypath, the signer uses the private key corresponding to the taproot internal key and tweaks the resulting signature with the Merkle root of the script tree. Looking at the process under the hood, we should consider the taproot output key a forwarding script that commits to multiple condition scripts: the taproot internal key and all leaf scripts. However, looking at the serialization, this means that a P2TR keypath input is an exception in that it does not explicitly reveal its condition script, since the taproot internal key does not appear in the transaction serialization. Alternatively, the taproot output key could be interpreted as being both the condition script in the case of a keypath spend and a forwarding script in the case of a script path spend. + +; Witness +: We have seen “witness” used to refer to both the witness data of a single input or the entirety of a transaction’s witness data. We use Witness Stack to refer to the witness data of a single Transaction Input, and Witness Structure when talking about all witness data of a transaction. + +; Forwarding Scripts and Condition Scripts +: We introduce these two new terms to distinguish two types of functions for “scripts”. The condition scripts encode the actual spending conditions, while forwarding scripts commit the spender to providing another script down the line. [[File:bip-tx-terminology/scripts.png|framed|center|alt=An overview of forwarding and condition scripts|Figure 1]] + +; Flag +: While the Flag currently only indicates the presence of a Witness Structure, it could perhaps also indicate the presence of other extended serialization formats in the future, therefore, it’s only flag, not “witness flag”. + +; P2SH Program +: We introduce the term P2SH Program to refer to the commitment in an Output Script that forwards execution to the input script corresponding to witness programs. + +; Witness Item vs Witness Element +: BIP341 refers to parts of the witness stack as “witness elements” and “witness stack elements”, but BIP144 speaks of “item count”. We prefer witness item to refer to parts of a witness stack. + +; Witness Section vs Witness Structure +: While witness section and witness structure are both used, we prefer the use of witness structure as introduced in BIP144. + +; Witness Stack +: While BIP144 refers to witness stacks as “script witnesses”, they are not scripts. Strictly speaking, they’re also not stacks, because some witness items that appear in witness stacks are not added to the stack that’s evaluated with the condition script, such as control blocks. We still prefer witness stack as it is well-established. + +; Locking Script and Unlocking Script +: Some popular works refer to scriptPubKey and scriptSig as “locking script” and “unlocking script” respectively. We do not recommend the use of these terms since they conflate the transaction component with the function these scripts had for some of the earlier output types. We introduce a set of new terms to decouple the position of the '''output script''' and '''input script''' from the function of locking and unlocking, and to underscore the evolution of output types from executable scripts to templates with additional implied meaning.—As output types have evolved over the years, we have departed from them relying on fully specified executable scripts, but rather imbued certain templates with additional constraints. For example a P2SH program interpreted as written only checks that the redeem script revealed in the input script matches the pre-image in the output script, but the implied meaning of the P2SH program additionally requires the redeem script to be evaluated satisfactorily. Later with wrapped P2WSH, we didn’t even require the witness script to contain all the arguments with push operations directly in a script but rather provide them as separate items akin to a pre-built stack. We refer to these stand-alone witness items as '''script arguments'''. With native segwit outputs finally, the input script is empty altogether, and no longer plays any role in “unlocking” the funds at all. + +; Locking Script vs Output Script + Forwarding Script + Condition Script +: The scriptPubKey has also sometimes been referred to as “locking script”, especially before the activation of the segwit soft fork. However, this term is ambiguous in that it refers to the function of the output script but appears as the label for the field at the same time. This document introduces new terms to distinguish the transaction component from the abstract function it takes. We use '''output script''' when we refer to the scriptPubKey field in the transaction, and speak of either a '''condition script''' or '''forwarding script''' when we refer to the function the output script fulfills in a particular output. + ==Acknowledgements== Thanks to Pieter Wuille for the discussions that led to this proposal. From 7931034e40e5c5898cf9e95a8456bf52d17aec25 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 13:30:10 -0700 Subject: [PATCH 27/39] Clarify witness synonyms --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 59e8abb264..393d5b9bcd 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -189,14 +189,14 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; witness structure : [Concept] The part of the serialized transaction that contains the witness stacks for each input. Transactions without segwit inputs are serialized without a witness structure. -: Synonym: witness +: Synonym: witness (underdefined, as "witness" is often used for both witness structure and witness stack) ; witness script : [Component] A witness item that provides the condition script used to spend P2WSH outputs. Appears in the witness stack. ; witness stack : [Component] The pre-built stack of witness items that is consumed in validation of the input’s condition script. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. A witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. Every transaction input is accompanied by a witness stack, but the witness stack of non-segwit inputs is empty, i.e. consists just of the serialization artifact of a witness item count of 0. -: Synonym: input witness, witness +: Synonym: input witness, witness (underdefined, as "witness" is often used for both witness structure and witness stack) ; witness transaction identifier (wtxid) : [Concept] Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. From 5e239247e42cbfab2be4add4242796b6621578de Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 13:43:00 -0700 Subject: [PATCH 28/39] Fix formatting on `redeemScript` --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 393d5b9bcd..175d7535a6 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -114,7 +114,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; redeem script : [Component] The condition script used in spending P2SH outputs. Is provided in the input script along with script arguments to satisfy it. The input script of wrapped segwit inputs is not a redeem script but a witness program. -: Synonyms: `redeemScript`, redemption script +: Synonyms: redeemScript, redemption script ; script arguments : [Concept] Arguments presented to satisfy a condition script, e.g. signatures and public keys. From 5341297e0d1b0b50e1bc07257953f12e78976372 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 13:52:08 -0700 Subject: [PATCH 29/39] Add input and output dummy entries --- bip-tx-terminology.mediawiki | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 175d7535a6..018e775b02 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -51,7 +51,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Component] A condition script that is directly defined in the output script field. Used to specify all types of bare outputs including Pay to Pubkey (P2PK), Pay to Public Key Hash (P2PKH), Pay to Multisig (P2MS) outputs, and arbitrary scripts. ; coinbase -: [Component] The coinbase field takes the place of the input script in a coinbase transaction (named after this field), since coinbase transactions do not spend a transaction output. +: [Component] The coinbase field takes the place of the input script in a coinbase transaction (named after this field), since coinbase transactions do not spend a previous transaction output (TXO). ; CompactSize : [Concept] A variable-length integer encoding used in the transaction serialization to express input and output count. @@ -69,6 +69,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; forwarding script : [Concept] A collective term for scripts that redirect input validation to another script or data structure. Witness programs and P2SH Programs are forwarding scripts. Forwarding scripts make use of script templates that imply additional evaluation steps beyond the explicitly expressed conditions. In the case of P2SH, the output script itself only explicitly specifies that the redeem script must be the preimage of the hash in the output script, but the template prescribes that the redeem script must additionally be satisfied. For witness programs, the output script is even less verbose with more implied meaning. +; input +: See '''transaction input'''. + ; input counter : [Artifact] The length of the transaction input list (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). : Synonym: txin_count @@ -97,6 +100,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Component] Identifies the transaction output (TXO) being spent by a transaction input. Consists of a txid and output index. The txid is serialized in little-endian but displayed in big-endian. : Synonym: prevout +; output +: See '''transaction output'''. + ; output counter : [Artifact] The length of the transaction output list, (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). : Synonym: txout_count @@ -166,7 +172,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; transaction output (TXO) : [Component] A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. -: Synonym: txout +: Synonym: output, txout ; transaction output list : [Concept] The enumeration of all transaction outputs of a transaction. From 725439ae65286871fe0e9d2fe374876cdab07c15 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 14:02:25 -0700 Subject: [PATCH 30/39] Clarify use of witness in BIP141 --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 018e775b02..1ec7b82aee 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -195,14 +195,14 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; witness structure : [Concept] The part of the serialized transaction that contains the witness stacks for each input. Transactions without segwit inputs are serialized without a witness structure. -: Synonym: witness (underdefined, as "witness" is often used for both witness structure and witness stack) +: Synonym: witness (underdefined without more context, as "witness" is used for both witness structure and witness stack including in BIP141) ; witness script : [Component] A witness item that provides the condition script used to spend P2WSH outputs. Appears in the witness stack. ; witness stack : [Component] The pre-built stack of witness items that is consumed in validation of the input’s condition script. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. A witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. Every transaction input is accompanied by a witness stack, but the witness stack of non-segwit inputs is empty, i.e. consists just of the serialization artifact of a witness item count of 0. -: Synonym: input witness, witness (underdefined, as "witness" is often used for both witness structure and witness stack) +: Synonym: input witness, witness (underdefined without more context, as "witness" is used for both witness structure and witness stack including in BIP141) ; witness transaction identifier (wtxid) : [Concept] Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. From a70cb409ca9391eed946d30629a0e5b2bd2f1275 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 14:17:49 -0700 Subject: [PATCH 31/39] Add scriptCode definition --- bip-tx-terminology.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 1ec7b82aee..54684593a0 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -128,6 +128,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; script tree : [Concept] The Merkle tree composed from the collection of leaf scripts committed to by a P2TR output. +; scriptCode +: [Concept] A value calculated from the input script and output script excluding malleable elements that is used to commit to an input in the transaction data hashed to create the message that is signed by a signature. + ; scriptPubKey : See '''output script'''. From a608c5e1c94d26c8a7eede9d34c8a317ceba0ef5 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 14:27:38 -0700 Subject: [PATCH 32/39] Incorporate synonyms from BIP144 --- bip-tx-terminology.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 54684593a0..c5f82d3166 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -91,7 +91,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; lock time : [Component] Part of the transaction header. Lock time specifies a time (in blockheight or UNIX time) before which a transaction cannot be included in a block if any input’s sequence number indicates non-finality. The lock time can also indicate a relative spending lock in combination with OP_CHECKSEQUENCEVERIFY. Serialized as the four-byte nLockTime integer field. -: Synonym: nLockTime +: Synonym: nLockTime, lock_time ; marker : [Artifact] 1-byte serialization artifact indicating that a type of extended serialization is being used for this transaction. Must always be 00 (see [[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki|BIP144]]). (Note: Non-segwit nodes will only accept stripped segwit transactions, because the marker appears at the position where non-segwit nodes expect the input counter. The input counter may not be zero, so a complete (non-stripped) segwit transaction appears invalid to a non-segwit node.) @@ -171,7 +171,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; transaction input list : [Concept] The enumeration of all transaction inputs of a transaction. -: Synonym: inputs, vin, tx_ins +: Synonym: inputs, vin, txins, tx_ins ; transaction output (TXO) : [Component] A transaction component that consists of an amount and an output script. Adds a new unspent transaction output (UTXO) to the UTXO set that is uniquely identified by an outpoint. @@ -179,7 +179,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; transaction output list : [Concept] The enumeration of all transaction outputs of a transaction. -: Synonym: outputs, vout, tx_outs +: Synonym: outputs, vout, txouts, tx_outs ; unspent transaction output (UTXO) : [Concept] An entry in Bitcoin’s ledger of spendable funds, the UTXO set. UTXOs get created by transaction outputs and spent by transaction inputs. UTXOs are uniquely identifiedThere have been two instances in which UTXOs with existing outpoints were recreated, see [[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP30]] by an outpoint. The UTXO model with its uniquely-identifiable discrete portions of funds is instrumental to Bitcoin’s solution of the doublespend problem. @@ -198,14 +198,14 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; witness structure : [Concept] The part of the serialized transaction that contains the witness stacks for each input. Transactions without segwit inputs are serialized without a witness structure. -: Synonym: witness (underdefined without more context, as "witness" is used for both witness structure and witness stack including in BIP141) +: Synonym: script_witnesses (BIP144), witness (BIP141, underdefined without more context, as "witness" is used for both witness structure and witness stack) ; witness script : [Component] A witness item that provides the condition script used to spend P2WSH outputs. Appears in the witness stack. ; witness stack : [Component] The pre-built stack of witness items that is consumed in validation of the input’s condition script. Witness stacks are not scripts, but may include witness items that are scripts. While there is a witness stack for each input, the witness stack is not part of the input. A witness stack can contain witness items that will not be added to the stack, such as the control block. The witness stack may contain condition scripts, specifically it will contain a witness script for P2WSH inputs, and a leaf script for a P2TR scriptpath spend. Every transaction input is accompanied by a witness stack, but the witness stack of non-segwit inputs is empty, i.e. consists just of the serialization artifact of a witness item count of 0. -: Synonym: input witness, witness (underdefined without more context, as "witness" is used for both witness structure and witness stack including in BIP141) +: Synonym: input witness, witness (underdefined without more context, as "witness" is used for both witness structure and witness stack including in BIP141), script witness (BIP144) ; witness transaction identifier (wtxid) : [Concept] Result of hashing a complete transaction including its witness structure. Used in transaction propagation and to construct a witness commitment. From 95589ff4a690d85df8972c142c0f1694918fed27 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 16:37:40 -0700 Subject: [PATCH 33/39] Add notes section, touch-up objects&serialization --- bip-tx-terminology.mediawiki | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index c5f82d3166..98139ffd91 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -30,9 +30,9 @@ The hope is that this terminology could be used in technical writing about Bitco ===Objects and their Serialization=== We treat the objects of the Bitcoin protocol (e.g. transactions, blocks) as distinct from their serialization. -We distinguish concrete properties of transactions such as fields and scripts (labeled [Component]) from serialization artifacts (labeled [Artifact]). +We distinguish parts and concrete properties of transactions (labeled [Component]) such as fields and scripts as well as composites thereof from serialization artifacts (labeled [Artifact]) which only appear in the serialization format. For example, version and lock time are fields that can be set during transaction creation and therefore components of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format. -Likewise, the input script is a transaction component, but the length indicator of the input script is a serialization artifact. +Likewise, the input script is a transaction component, but the length indicator of the input script is a serialization artifact, and a witness stack is a component, but the marker and flag appearing in a segwit transaction’s header are serialization artifacts. We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]). @@ -250,7 +250,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** Length of '''Transaction Input List''' 02: serialization artifact, CompactSize here indicating 2 inputs, considered part of the transaction header *** First '''Input''' **** '''Outpoint''' -***** '''Transaction Identifier (txid)''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07bTxids are the result of hashing the content of a transaction. The result of a hash is a sequence of bytes. Hashes are defined by the standards as being big-endian and cryptography libraries deal with hashes in that form: Bitcoin also stores and transfers txids in big-endian. Bitcoin sometimes considers hashes to be little-endian integers instead of strings (in the context of block hashes and proof of work calculations), which is presumably why Bitcoin _displays_ hashes, including txids, in little-endian.. +***** '''Transaction Identifier (txid)''' 7bc0bba407bc67178f100e352bf6e047fae4cbf960d783586cb5e430b3b700e7: txhash indicating that the spent TXO was created by the transaction e700b7b330e4b56c5883d760f9cbe4fa47e0f62b350e108f1767bc07a4bbc07bTxids are the result of hashing the content of a transaction. The result of a hash is a sequence of bytes. Hashes are defined by the standards as being big-endian and cryptography libraries deal with hashes in that form: Bitcoin also stores and transfers txids in big-endian. Bitcoin sometimes considers hashes to be little-endian integers instead of strings (in the context of block hashes and proof of work calculations), which is presumably why Bitcoin _displays_ hashes, including txids, in little-endian.. ***** '''Output Index''' 00000000: position of the TXO on transaction output list of e700b7b33…a4bbc07b **** '''Input Script''' ***** Length of '''Input Script''' 00: serialization artifact indicating the length of the input script. Since this input spends a native segwit output, the input script is empty (length 0). @@ -275,7 +275,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list *** First '''Witness Stack''': The witness data corresponding to the first input. (Note that the count of witness stacks is implicitly provided by the input counter, since each input must have a witness stack.) **** Item count for the first '''Witness Stack''' 01: serialization artifact. A single witness item indicates a keypath spend. **** First '''Witness Item''' -***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a Schnorr signatureNote that the ECDSA signatures used by pre-taproot inputs are larger and vary in size. Only the Schnorr signatures introduced with Tapscript have always a fixed size of 64 bytes (or 65 bytes with a non-default sighash flag) +***** Length of the first '''Witness Item''' 40: serialization artifact, 64 bytes indicate a Schnorr signatureNote that the ECDSA signatures used by pre-taproot inputs are larger and vary in size. Only the Schnorr signatures introduced with Tapscript have always a fixed size of 64 bytes (or 65 bytes with a non-default sighash flag) ***** '''Signature''' 134896c42cd95680b048845847c8054756861ffab7d4abab72f6508d67d1ec0c590287ec2161dd7884983286e1cd56ce65c08a24ee0476ede92678a93b1b180c: The first witness item here is a script argument for the corresponding condition script. In this case, we see the signature corresponding to the P2TR keypath spend. *** Second '''Witness Stack''': The witness data corresponding to the second input. **** Item count for the second '''Witness Stack''' 03: serialization artifact, two or more Witness Items indicate a scriptpath spend. @@ -335,3 +335,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list Thanks to Pieter Wuille for the discussions that led to this proposal. Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin Sabouri, and Kostas Karasavvas for feedback on this proposal. + +==Notes== + + From 23ac105281b1497de606d0d53265a680d5beff92 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 16:46:13 -0700 Subject: [PATCH 34/39] Unearth discussion from 2023 --- bip-tx-terminology.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 98139ffd91..c622c717dc 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -6,7 +6,7 @@ Type: Informational Assigned: ? License: BSD-3-Clause - Discussion: + Discussion: 2023-04-05: https://gnusha.org/pi/bitcoindev/6bb373cc-bee0-13a3-a510-b65d4faa867f@murch.one/#t == Introduction== From 08ed385eac61890d63fd67d8527942fe0ca6598a Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 16:57:09 -0700 Subject: [PATCH 35/39] Fix a couple typos --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index c622c717dc..710e06a8ef 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -191,7 +191,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de ; witness item : [Component] An element of a witness stack. Witness items are: witness script (P2WSH only), script arguments, leaf script (P2TR scriptpath only), control block (P2TR scriptpath only), annex (P2TR only). -: Synonyms: witness elements, witness stack elements ([[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki|BIP341]]) +: Synonyms: witness element, witness stack element ([[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki|BIP341]]) ; witness program : [Concept] A script template that forwards input validation to the witness stack. Witness programs are a type of forwarding script. Witness programs appear in the output script for native segwit outputs and in the input script for wrapped segwit inputs. @@ -302,7 +302,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list : The Bitcoin Core codebase uses the term CompactSize for a “variable-length integer encoding used in Bitcoin Core’s serialization framework” that has outside of Bitcoin Core also been referred to as VarIntAlso see Bitcoin Stack Exchange: [[What is the different between CompactSize and VarInt encoding?|https://bitcoin.stackexchange.com/a/114585/5406]]. Since the Bitcoin Core codebase uses another type of variable-length integer encoding called VarInt in the context of database interaction, we prefer using CompactSize in the context of transaction serialization. This approach is also preferred by some technical writers working on widely read technical resources concerned with Bitcoin. ; Forwarding and condition script in the context of P2TR keypath spends -: The terminology is open to interpretation in the context of P2TR keypath spends. When spending a P2TR output per the keypath, the signer uses the private key corresponding to the taproot internal key and tweaks the resulting signature with the Merkle root of the script tree. Looking at the process under the hood, we should consider the taproot output key a forwarding script that commits to multiple condition scripts: the taproot internal key and all leaf scripts. However, looking at the serialization, this means that a P2TR keypath input is an exception in that it does not explicitly reveal its condition script, since the taproot internal key does not appear in the transaction serialization. Alternatively, the taproot output key could be interpreted as being both the condition script in the case of a keypath spend and a forwarding script in the case of a script path spend. +: The terminology is open to interpretation in the context of P2TR keypath spends. When spending a P2TR output per the keypath, the signer uses the private key corresponding to the taproot internal key and tweaks the resulting signature with the Merkle root of the script tree. Looking at the process under the hood, we should consider the taproot output key a forwarding script that commits to multiple condition scripts: the taproot internal key and all leaf scripts. However, looking at the serialization, this means that a P2TR keypath input is an exception in that it does not explicitly reveal its condition script, since the taproot internal key does not appear in the transaction serialization. Alternatively, the taproot output key could be interpreted as being both the condition script in the case of a keypath spend and a forwarding script in the case of a scriptpath spend. ; Witness : We have seen “witness” used to refer to both the witness data of a single input or the entirety of a transaction’s witness data. We use Witness Stack to refer to the witness data of a single Transaction Input, and Witness Structure when talking about all witness data of a transaction. From 030c7a1ed03333a03a5bc7f219daf3a7211cafc2 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 17:01:12 -0700 Subject: [PATCH 36/39] Touch up title --- bip-tx-terminology.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 710e06a8ef..587e134ce7 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -1,6 +1,6 @@
-  BIP: 
-  Title: 
+  BIP: ?
+  Title: Terminology of Transaction Components
   Authors: Mark Erhardt 
   Status: Draft
   Type: Informational

From 638756c8bc0826de267efc4285ca5fee81ee8744 Mon Sep 17 00:00:00 2001
From: Murch 
Date: Mon, 8 Jun 2026 17:10:23 -0700
Subject: [PATCH 37/39] Refer to Anatomy for understanding SA vs CMPNT

---
 bip-tx-terminology.mediawiki | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki
index 587e134ce7..1c6e5ad5c1 100644
--- a/bip-tx-terminology.mediawiki
+++ b/bip-tx-terminology.mediawiki
@@ -1,7 +1,7 @@
 
   BIP: ?
   Title: Terminology of Transaction Components
-  Authors: Mark Erhardt 
+  Authors: Murch 
   Status: Draft
   Type: Informational
   Assigned: ?
@@ -34,6 +34,8 @@ We distinguish parts and concrete properties of transactions (labeled [Component
 For example, version and lock time are fields that can be set during transaction creation and therefore components of a transaction, while the input counter is a serialization artifact resulting from how the input list of the transaction is represented in the transfer format.
 Likewise, the input script is a transaction component, but the length indicator of the input script is a serialization artifact, and a witness stack is a component, but the marker and flag appearing in a segwit transaction’s header are serialization artifacts.
 
+If the distinction between components and serialization artifacts is not readily clear, perusing the below example of a [[#example-anatomy-of-a-serialized-transaction|transaction’s anatomy]] may help foster an intuitive sense.
+
 We also introduce some umbrella terms, concepts, and ideas that are useful to describe aspects of transactions (labeled [Concept]).
 
 ===Definition of Terms===

From c0ae0f22454c232c35c60fd5f8ff890a1bb5f71b Mon Sep 17 00:00:00 2001
From: Murch 
Date: Mon, 8 Jun 2026 17:12:37 -0700
Subject: [PATCH 38/39] Add personal bips PR to discussion

---
 bip-tx-terminology.mediawiki | 1 +
 1 file changed, 1 insertion(+)

diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki
index 1c6e5ad5c1..1918881150 100644
--- a/bip-tx-terminology.mediawiki
+++ b/bip-tx-terminology.mediawiki
@@ -7,6 +7,7 @@
   Assigned: ?
   License: BSD-3-Clause
   Discussion: 2023-04-05: https://gnusha.org/pi/bitcoindev/6bb373cc-bee0-13a3-a510-b65d4faa867f@murch.one/#t
+              2023-03-22–…: https://github.com/murchandamus/bips/pull/1
 
== Introduction== From aab3707e52b673037804a9aea44fbc70648ecc57 Mon Sep 17 00:00:00 2001 From: Murch Date: Mon, 8 Jun 2026 17:46:31 -0700 Subject: [PATCH 39/39] =?UTF-8?q?Incorporate=20more=20of=20Otto=E2=80=99s?= =?UTF-8?q?=20comments,=20extend=20ACKs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bip-tx-terminology.mediawiki | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bip-tx-terminology.mediawiki b/bip-tx-terminology.mediawiki index 1918881150..3e5a7a31c4 100644 --- a/bip-tx-terminology.mediawiki +++ b/bip-tx-terminology.mediawiki @@ -125,6 +125,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Component] The condition script used in spending P2SH outputs. Is provided in the input script along with script arguments to satisfy it. The input script of wrapped segwit inputs is not a redeem script but a witness program. : Synonyms: redeemScript, redemption script +; Script +: [Concept] The original variant of the Bitcoin Script language used in bare output scripts, P2SH redeems scripts, and P2WSH witness scripts. Signature processing opcodes in Script expect DER-encoded ECDSA signatures. Capitalized Script refers to the language, whereas lowercase script refers to a script. + ; script arguments : [Concept] Arguments presented to satisfy a condition script, e.g. signatures and public keys. @@ -160,7 +163,7 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de : [Component] The public key present in the witness program of a P2TR output script composed by tweaking the inner key with the script tree’s Merkle root. ; Tapscript -: [Concept] The variant of the Script language used in P2TR leaf scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]). +: [Concept] The variant of the Script language used in P2TR leaf scripts (see [[https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki|BIP342]]). Signature processing opcodes in Tapscript expect Schnorr signatures. ; transaction header : [Concept] Collective term for the serialization artifacts and transaction fields that appear only once in the transaction serialization regardless of lengths of the input and output lists: transaction version, marker (segwit only), flag (segwit only), input counter, output counter, and lock time. @@ -233,9 +236,9 @@ We also introduce some umbrella terms, concepts, and ideas that are useful to de |- | P2WSH || OP_0 || […Script Arguments, Witness Script] |- -| P2TR KP || rowspan="2" | OP_1 || [] +| P2TR Keypath || rowspan="2" | OP_1 || [] |- -| P2TR SP || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] +| P2TR Scriptpath || […Script Arguments, Leaf Script, Control Block, (Opt: Annex)] |} ¹ Bare outputs include P2PK, P2PKH, P2MS, and any other arbitrary scripts that are fully defined in the output script. @@ -337,7 +340,7 @@ In this section we dissect a serialized transaction. Each sub-level in the list ==Acknowledgements== Thanks to Pieter Wuille for the discussions that led to this proposal. -Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin Sabouri, and Kostas Karasavvas for feedback on this proposal. +Thanks to Otto Allmendinger, Matthew Zipkin, Larry Ruane, Stacie Waleyko, Dave Harding, Lloyd Fournier, Vojtěch Strnad, Armin Sabouri, Kostas Karasavvas, Sebastian Falbesoner, Ishaana Misra, AJ Towns, dpc, Matt Corallo, and John Moffett for feedback on this proposal. ==Notes==