From a4f337b840a71b3d6820afd30fe2226dd6c32679 Mon Sep 17 00:00:00 2001 From: "David A. Harding" Date: Fri, 30 Jun 2023 13:39:58 -1000 Subject: [PATCH] All: update to comply with current draft of bip-bikeshed --- ch03.asciidoc | 2 +- ch04.asciidoc | 74 +++--- ch08.asciidoc | 32 +-- ch10.asciidoc | 18 +- ch12.asciidoc | 14 +- chapters/authorization-authentication.adoc | 292 ++++++++++----------- chapters/fees.adoc | 14 +- chapters/signatures.adoc | 6 +- chapters/transactions.adoc | 269 +++++++++---------- glossary.asciidoc | 18 +- images/input-byte-map.png | Bin 12983 -> 15259 bytes images/output-byte-map.png | Bin 17152 -> 16407 bytes images/tx-map-1.png | Bin 18220 -> 18988 bytes images/tx-weight-map.png | Bin 14542 -> 15789 bytes images/witness-byte-map.png | Bin 9355 -> 9633 bytes second_edition_changes.asciidoc | 6 +- third_edition_changes.asciidoc | 4 +- 17 files changed, 375 insertions(+), 374 deletions(-) diff --git a/ch03.asciidoc b/ch03.asciidoc index 258fcae1..29b218bf 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -880,7 +880,7 @@ The transaction decode shows all the components of this transaction, including the transaction inputs and outputs. In this case we see that the transaction used one input and generated two outputs. The input to this transaction was the output from a previously confirmed transaction -(shown as the vin +txid+). The two outputs correspond to the payment to +(shown as the input +txid+). The two outputs correspond to the payment to Bob and the change back to Alice. We can further explore the blockchain by examining the previous diff --git a/ch04.asciidoc b/ch04.asciidoc index 8edc6864..5d50f368 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -388,21 +388,21 @@ library] to do the elliptic curve math. .Elliptic curve cryptography: visualizing the multiplication of a point G by an integer k on an elliptic curve image::images/mbc2_0404.png["ecc_illustrated"] -=== ScriptPubKey and ScriptSig +=== Output and Input Scripts Although the illustration from the original Bitcoin paper, <>, shows public keys (pubkeys) and signatures (sigs) being used directly, the first version of Bitcoin instead had payments sent to a field called -_scriptPubKey_ and had them authorized by a field called _scriptSig_. +_output script_ and had spends of those bitcoins authorized by a field called _input script_. These fields allow additional operations to be performed in addition to (or instead of) verifying that a signature corresponds to a public key. -For example, a scriptPubKey can contain two public keys and require two -corresponding signatures be placed in the spending scriptSig. +For example, an output script can contain two public keys and require two +corresponding signatures be placed in the spending input script. Later, in <>, we'll learn about scripts in detail. For now, -all we need to understand is that bitcoins are received to a -scriptPubKey which acts like a public key, and bitcoin spending is -authorized by a scriptSig which acts like a signature. +all we need to understand is that bitcoins are received to an +output script which acts like a public key, and bitcoin spending is +authorized by a input script which acts like a signature. [[p2pk]] === IP Addresses: The Original Address For Bitcoin (P2PK) @@ -439,21 +439,21 @@ looking at the blockchain and noticing that all of the transactions paid the same public key. Using the public key her node received from Bob's node, Alice's wallet -would construct a transaction output paying a very simple scriptPubKey: +would construct a transaction output paying a very simple output script: ---- OP_CHECKSIG ---- -Bob would later be able to spend that output with a scriptSig consisting +Bob would later be able to spend that output with an input script consisting entirely of his signature: ---- ---- -To figure out what a scriptPubKey and scriptSig are doing, you can -combine them together (scriptSig first) and then note that each piece of +To figure out what an output and input script are doing, you can +combine them together (input script first) and then note that each piece of data (shown in angle brackets) is placed at the top of a list of items, called a stack. When an operation code (opcode) is encountered, it uses items from the stack, starting with the topmost items. Let's look at @@ -564,13 +564,13 @@ where _K_ is the public key and _A_ is the resulting commitment. Now that we understand how to make a commitment to a public key, we need to figure out how to use it in a transaction. Consider the following -scriptPubKey: +output script: ---- OP_DUP OP_HASH160 OP_EQUAL OP_CHECKSIG ---- -And also the following scriptSig: +And also the following input script: ---- @@ -592,8 +592,8 @@ so now the top of the stack is a hash of Bob's public key. Next, the commitment to Bob's public key is added to the top of the stack. The +OP_EQUALVERIFY+ operation consumes the top two items and verifies that they are equal; that should be the case if the public key Bob provided -in the scriptSig is the same public key used to create the commitment in -the scriptPubKey that Alice paid. If +OP_EQUALVERIFY+ fails, the whole +in the input script is the same public key used to create the commitment in +the output script that Alice paid. If +OP_EQUALVERIFY+ fails, the whole script fails. Finally, we're left with a stack containing just Bob's signature and his public key; the +OP_CHECKSIG+ opcode verifies they correspond with each other and that the signature commits to the @@ -664,7 +664,7 @@ To convert data (a number) into a base58check format, we first add a prefix to the data, called the "version byte," which serves to easily identify the type of data that is encoded. For example, the prefix zero (0x00 in hex) indicates that the data should be used as the commitment (hash) in -a legacy P2PKH scriptPubKey. A list of common version prefixes is shown +a legacy P2PKH output script. A list of common version prefixes is shown in <>. Next, we compute the "double-SHA" checksum, meaning we apply the SHA256 @@ -866,14 +866,14 @@ compressed public keys. As we've seen in preceding sections, someone receiving Bitcoins (like Bob) can require payments to him contain certain constraints in their -scriptPubKeys. Bob will need to fulfill those constraints using a -scriptSig when he spends those bitcoins. In <>, the constraint -was simply that the scriptSig needed to provide an appropriate +output script. Bob will need to fulfill those constraints using an +input script when he spends those bitcoins. In <>, the constraint +was simply that the input script needed to provide an appropriate signature. In <>, an appropriate public key also needed to be provided. In order for a spender (like Alice) to place the constraints Bob wants -in the scriptPubKey she uses to pay him, Bob needs to communicate those +in the output script she uses to pay him, Bob needs to communicate those constraints to her. This is similar to the problem of Bob needing to communicate his public key to her. Like that problem, where public keys can be fairly large, the constraints Bob uses can also be @@ -883,22 +883,22 @@ for which she needs to pay transaction fees every time she wants to spend money to Bob. However, the solution of using hash functions to create small commitments to large amounts of data also applies here. -The BIP16 upgrade to the Bitcoin protocol in 2013 allows a -scriptPubKey to commit to a _redemption script_ (_redeemScript_). When -Bob spends his bitcoins, his scriptSig need to provide a redeemScript +The BIP16 upgrade to the Bitcoin protocol in 2013 allows an +output script to commit to a _redemption script_ (_redeem script_). When +Bob spends his bitcoins, his input script need to provide a redeem script that matches the commitment and also any data necessary to satisfy the -redeemScript (such as signatures). Let's start by imagining Bob wants +redeem script (such as signatures). Let's start by imagining Bob wants to require two signatures to spend his bitcoins, one signature from his desktop wallet and one from a hardware signing device. He puts those -conditions into a redeemScript: +conditions into a redeem script: ---- OP_CHECKSIGVERIFY OP_CHECKSIG ---- -He then creates a commitment to the redeemScript using the same +He then creates a commitment to the redeem script using the same HASH160 mechanism used for P2PKH commitments, +RIPEMD160(SHA256(script))+. -That commitment is placed into the scriptPubKey using a special +That commitment is placed into the output script using a special template: ---- @@ -908,24 +908,24 @@ OP_HASH160 OP_EQUAL [WARNING] ==== Payments to Script Hashes (P2SH) must use the specific P2SH template -with no extra data or conditions in the scriptPubKey. If the -scriptPubKey is not exactly +OP_HASH160 <20 bytes> OP_EQUAL+, the -redeemScript will not be used and any bitcoins may either be unspendable +with no extra data or conditions in the output script. If the +output script is not exactly +OP_HASH160 <20 bytes> OP_EQUAL+, the +redeem script will not be used and any bitcoins may either be unspendable or spendable by anyone (meaning anyone can take them). ==== When Bob goes to spend the payment he received to the commitment for his -script, he uses a scriptSig that includes the redeemScript, with it +script, he uses an input script that includes the redeem script, with it serialized as a single data element. He also provides the signatures -he needs to satisfy the redeemScript, putting them in the order that +he needs to satisfy the redeem script, putting them in the order that they will be consumed by the opcodes: ---- - + ---- When Bitcoin full nodes receive Bob's spend, they'll verify that the -serialized redeemScript will hash to the same value as the commitment. +serialized redeem script will hash to the same value as the commitment. Then they'll replace it on the stack with its deserialized value: ---- @@ -968,7 +968,7 @@ Legacy addresses were supplanted by the bech32 family of addresses. .P2SH collision attacks **** All addresses based on hash functions are theoretically vulnerable to an -attacker finding two different inputs (e.g. redeemScripts) that produce +attacker finding two different inputs (e.g. redeem scripts) that produce the same hash function output (commitment). For addresses created entirely by a single party, the chance of an attacker generating a different input for an existing commitment is proportional to the @@ -1363,7 +1363,7 @@ With the checksum created, each 5-bit character in the data part (including the witness version, witness program, and checksum) is converted to alphanumeric characters. -For decoding back into a scriptPubKey, we work in reverse. First let's +For decoding back into an output script, we work in reverse. First let's use the reference library to decode two of our addresses: ---- @@ -1378,7 +1378,7 @@ decode(hrp, addr) ---- We get back both the witness version and the witness program. Those can -be inserted into the template for our scriptPubKey: +be inserted into the template for our output script: ---- diff --git a/ch08.asciidoc b/ch08.asciidoc index 04ef4978..e23b73b5 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -284,7 +284,7 @@ node will start a "handshake" (see <>) by transmitting a +version+ message, which contains basic identifying information, including: -+nVersion+:: The Bitcoin P2P protocol version the client "speaks" (e.g., 70002) ++Version+:: The Bitcoin P2P protocol version the client "speaks" (e.g., 70002) +nLocalServices+:: A list of local services supported by the node, currently just +NODE_NETWORK+ +nTime+:: The current time +addrYou+:: The IP address of the remote node as seen from this node @@ -296,7 +296,7 @@ information, including: The +version+ message is always the first message sent by any peer to another peer. The local peer receiving a +version+ message will examine -the remote peer's reported +nVersion+ and decide if the remote peer is +the remote peer's reported +Version+ and decide if the remote peer is compatible. If the remote peer is compatible, the local peer will acknowledge the +version+ message and establish a connection by sending a +verack+. @@ -974,7 +974,7 @@ transaction affecting that wallet. For a wallet to be effective, it needs to learn two types of information: 1. When it has received money. Specifically, when a transaction - output contains a scriptPubKey that the wallet controls (such as by + output contains a script that the wallet controls (such as by controlling the authorized private key). 2. When it has spent money. Specifically, when a transaction input @@ -991,7 +991,7 @@ accurate filter. For both the primary and secondary goals to be met, a filter would need to reference two types of information: -1. The scriptPubKey for every output in every transaction in a block. +1. The script for every output in every transaction in a block. 2. The outpoint for every input in every transaction in a block. @@ -1001,27 +1001,27 @@ to accomplish the primary goal if we sacrificed the secondary goal. In the new design, a block filter would still references two types of information, but they'd be more closely related: -1. As before, the scriptPubKey for every output in every transaction in a +1. As before, the script for every output in every transaction in a block. -2. In a change, it would also reference the scriptPubKey of the output +2. In a change, it would also reference the script of the output referenced by the outpoint for every input in every transaction in a -block. In other words, the scriptPubKey being spent. +block. In other words, the output script being spent. This had several advantages. First, it meant that wallets didn't need to track outpoints; they could instead just scan for the the -scriptPubKeys to which they expected to receive money. Second, any time a +output scripts to which they expected to receive money. Second, any time a later transaction in a block spends the output of an earlier transaction in the same block, they'll both reference the same -scriptPubKey. More than one reference to the same scriptPubKey is +output script. More than one reference to the same output script is redundant in a compact block filter, so the redundant copies can be removed, shrinking the size of the filters. -When full nodes validate a block, they need access to the scriptPubKeys +When full nodes validate a block, they need access to the output scripts for both the current transaction outputs in a block and the transaction outputs from previous blocks that are being referenced in inputs, so they're able to build compact block filters in this simplified model. -But a block itself doesn't include the scriptPubKeys from transactions +But a block itself doesn't include the output scripts from transactions included in previous blocks, so there's no convenient way for a client to verify a block filter was built correctly. However, there is an alternative that can help a client detect if a peer is lying to it: @@ -1066,7 +1066,7 @@ more bandwidth than expected. ==== Reducing bandwidth with lossy encoding The data about the transactions in a block that we want to communicate -is a scriptPubKey. ScriptPubKeys vary in length and follow patterns, +is an output script. Output scripts vary in length and follow patterns, which means the differences between them won't be evenly distributed like we want. However, we've already seen in many places in this book that we can use a hash function to create a commitment to some data and @@ -1079,23 +1079,23 @@ faster and more configurable non-cryptographic hash functions, such as the SipHash function we'll use for compact block filters. The details of the algorithm used are described in BIP158, but the gist -is that each scriptPubKey is reduced to a 64 bit commitment using +is that each output script is reduced to a 64 bit commitment using SipHash and some arthritic operations. You can think of this as taking a set of large numbers and truncating them to shorter numbers, a process that loses data (so it's called _lossy encoding_). By losing some information, we don't need to store as much information later, -which saves space. In this case, we go from a typical scriptPubKey +which saves space. In this case, we go from a typical output script that's 160 bits or longer down to just 64 bits. ==== Using compact block filters -The 64 bit value for every commitment to a scriptPubKey in a block are +The 64 bit value for every commitment to an output script in a block are sorted, duplicate entries are removed, and the GCS is constructed by finding the differences (deltas) between each entry. That compact block filter is then distributed by peers to their clients (such as wallets). A client uses the deltas to reconstruct the original commitments. The -client such as a wallet also takes all the scriptPubKeys it is +client such as a wallet also takes all the output scripts it is monitoring for and generates commitments in the same way as BIP158. It checks whether any of its generated commitments match the commitments in the filter. diff --git a/ch10.asciidoc b/ch10.asciidoc index 4fb812ad..6cbf54b5 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -273,8 +273,8 @@ criteria: - Each output value, as well as the total, must be within the allowed range of values (zero or more, but less than 21m coins). -- +nLocktime+ is equal to +INT_MAX+, or +nLocktime+ and +nSequence+ - values are satisfied according to the locktime and BIP68 rules. +- Lock time is equal to +INT_MAX+, or lock time and sequence + values are satisfied according to the lock time and BIP68 rules. - The number of signature operations (SIGOPS) contained in the transaction is less than the signature operation limit. @@ -492,7 +492,7 @@ structure of the coinbase transaction's input. | 32 bytes | Transaction Hash | Pointer to the transaction containing the UTXO to be spent | 4 bytes | Output Index | The index number of the UTXO to be spent, first one is 0 | 1–9 bytes (VarInt) | Script Size | Script length in bytes, to follow -| Variable | ScriptSig | A script that fulfills the conditions of the UTXO scriptPubKey +| Variable | Input script | A script that fulfills the conditions of the UTXO output script | 4 bytes | Sequence Number | Multipurpose field used for BIP68 time locks and transaction replacement signaling |======= @@ -512,14 +512,14 @@ In a coinbase transaction, the first two fields are set to values that do not represent a UTXO reference. Instead of a "transaction hash," the first field is filled with 32 bytes all set to zero. The "output index" is filled with 4 bytes all set to 0xFF (255 decimal). The -+scriptSig+ is replaced by coinbase data, a data field used by +input script is replaced by coinbase data, a data field used by the miners, as we will see next. [[duplicate_transactions]] ==== Coinbase Data ((("coinbase transactions", "coinbase data")))Coinbase transactions do -not have a +scriptSig+ field. Instead, this +not have an input script field. Instead, this field is replaced by coinbase data, which must be between 2 and 100 bytes. Except for the first few bytes, the rest of the coinbase data can be used by miners in any way they want; it is arbitrary data. @@ -1169,11 +1169,11 @@ miner can influence the timestamps in order to gain fees from transactions with a timelock that hasn't yet matured. Median time past changes the implementation of time calculations for -+nLocktime+, +CLTV+, +nSequence+, and +CSV+. The consensus time +lock time, +CLTV+, sequence, and +CSV+. The consensus time calculated by median time past is usually about one hour behind wall clock time. If you create timelock transactions, you should account -for it when estimating the desired value to encode in +nLocktime+, -+nSequence+, +CLTV+, and +CSV+. +for it when estimating the desired value to encode in lock time, +sequence, +CLTV+, and +CSV+. === Successfully Mining the Block @@ -2173,7 +2173,7 @@ effect. Execution continues after the NOP opcode as if it wasn't there. A soft fork therefore can modify the semantics of a NOP code to give it new meaning. For example, BIP65 (+CHECKLOCKTIMEVERIFY+) reinterpreted the NOP2 opcode. Clients implementing BIP65 interpret NOP2 as -+OP_CHECKLOCKTIMEVERIFY+ and impose an absolute locktime consensus rule ++OP_CHECKLOCKTIMEVERIFY+ and impose an absolute lock time consensus rule on UTXOs that contain this opcode in their locking scripts. This change is a soft fork because a transaction that is valid under BIP65 is also valid on any client that is not implementing (ignorant of) BIP65. To diff --git a/ch12.asciidoc b/ch12.asciidoc index 8303ff0a..25a9fb74 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -581,7 +581,7 @@ to fix those: commitment that is in her favor. Both of these problems can be solved with timelocks—let's look at -how we could use transaction-level timelocks (+nLocktime+). +how we could use transaction-level time locks. Emma cannot risk funding a 2-of-2 multisig unless she has a guaranteed refund. To solve this problem, Emma constructs the funding and refund @@ -591,7 +591,7 @@ transaction to Fabian and obtains his signature. The refund transaction acts as the first commitment transaction and its timelock establishes the upper bound for the channel's life. In this -case, Emma could set the +nLocktime+ to 30 days or 4320 blocks into the +case, Emma could set the lock time to 30 days or 4320 blocks into the future. All subsequent commitment transactions must have a shorter timelock, so that they can be redeemed before the refund transaction. @@ -604,7 +604,7 @@ Every commitment transaction the parties exchange during the life of the channel will be timelocked into the future. But the delay will be slightly shorter for each commitment so the most recent commitment can be redeemed before the prior commitment it invalidates. Because of the -nLockTime, neither party can successfully propagate any of the +lock time, neither party can successfully propagate any of the commitment transactions until their timelock expires. If all goes well, they will cooperate and close the channel gracefully with a settlement transaction, making it unnecessary to transmit an intermediate @@ -641,8 +641,8 @@ commitments. Thus, the most recent commitment transaction can be transmitted, spending the inputs and invalidating prior commitment transactions. The enforcement of smart contracts with absolute timelocks protects against cheating by one of the parties. This implementation -needs nothing more than absolute transaction-level timelocks -(+nLocktime+). Next, we will see how script-level timelocks, +needs nothing more than absolute transaction-level lock time. +Next, we will see how script-level timelocks, +CHECKLOCKTIMEVERIFY+ and +CHECKSEQUENCEVERIFY+, can be used to construct more flexible, useful, and sophisticated state channels. @@ -959,7 +959,7 @@ IF HASH160 EQUALVERIFY ELSE # Refund after timeout. - CHECKLOCKTIMEVERIFY DROP + CHECKLOCKTIMEVERIFY DROP CHECKSIG ENDIF ---- @@ -1194,7 +1194,7 @@ startref="alicetwelve"))) Each element of the path contains information on the HTLC that must be extended to the next hop, the amount that is being sent, the fee to -include, and the CLTV locktime (in blocks) expiration of the HTLC. As +include, and the CLTV lock time (in blocks) expiration of the HTLC. As the route information propagates, the nodes make HTLC commitments forward to the next hop. diff --git a/chapters/authorization-authentication.adoc b/chapters/authorization-authentication.adoc index 0404e0b7..7ba18611 100644 --- a/chapters/authorization-authentication.adoc +++ b/chapters/authorization-authentication.adoc @@ -29,8 +29,8 @@ used. id="Tsript06")))((("scripting", "transactions and", id="Stransact06")))The original version of Bitcoin introduced a new programming language called _Script_, a Forth-like stack-based -language. Both the scriptPubKey placed in an output and the legacy -scriptSig used in a spending transaction are written in this scripting +language. Both the script placed in an output and the legacy +input script used in a spending transaction are written in this scripting language. Script is a very simple language. It requires minimal processing and @@ -94,28 +94,28 @@ system. ==== Script Construction Bitcoin's legacy transaction validation engine relies on two parts of scripts -to validate transactions: a scriptPubKey and a scriptSig. +to validate transactions: an output script and an input script. -A scriptPubKey is a spending condition placed on an output: +An output script is a spending condition placed on an output: it specifies the conditions that must be met to spend the output in the future, such as who is authorized to spend the output and how they will be authenticated. -A scriptSig is a script that satisfies the -conditions placed on an output by a scriptPubKey and allows the output -to be spent. ScriptSigs are part of every transaction input. Most +An input script is a script that satisfies the +conditions placed on an output by an output script and allows the output +to be spent. Input scripts are part of every transaction input. Most of the time in legacy transactions they contain a digital signature produced by the user's -wallet from his or her private key, but not all scriptSigs +wallet from his or her private key, but not all input scripts must contain signatures. Every bitcoin validating node will validate transactions by executing -the scriptPubKey and scriptSig together. As we saw in +the output and input scripts. As we saw in <>, each input contains an outpoint which refers to a -previous transaction output. The input also contains a scriptSig. The -validation software will copy the scriptSig, retrieve the UTXO -referenced by the input, and copy the scriptPubKey from that UTXO. The -scriptSig and scriptPubKey are then executed in sequence. The input is -valid if the scriptSig satisfies the scriptPubKey conditions +previous transaction output. The input also contains an input script. The +validation software will copy the input script, retrieve the UTXO +referenced by the input, and copy the output script from that UTXO. The +input and output scripts are then executed in sequence. The input is +valid if the input script satisfies the output script's conditions (see <>). All the inputs are validated independently, as part of the overall validation of the transaction. @@ -123,18 +123,18 @@ Note that the steps above involve making copies of all data. The original data in the previous output and current input is never changed. In particular, the previous output is invariable and unaffected by failed attempts to spend it. Only a valid transaction that correctly -satisfies the conditions of the scriptPubKey results in the output being +satisfies the conditions of the output script results in the output being considered as "spent". -<> is an example of the scriptPubKey and -scriptSig for the most common type of legacy Bitcoin transaction (a +<> is an example of the output and +input scripts for the most common type of legacy Bitcoin transaction (a payment to a public key hash), showing the combined script resulting from the concatenation of the scripts prior to validation. -[[scriptSig_and_scriptPubKey]] -.Combining scriptSig and scriptPubKey to evaluate a transaction script -image::../images/mbc2_0603.png["scriptSig_and_scriptPubKey"] +[[input_and_output_scripts_legacy]] +.Combining input and output scripts to evaluate a transaction script +image::../images/mbc2_0603.png["input_and_output_scripts"] ===== The script execution stack @@ -172,21 +172,21 @@ operator +OP_EQUAL+, which checks that the resulting sum is equal to in this book. For more details on the available script operators and functions, see <>. -Although most legacy scriptPubKeys refer to a public key hash (essentially, a +Although most legacy output scripts refer to a public key hash (essentially, a legacy Bitcoin address), thereby requiring proof of ownership to spend the funds, the script does not have to be that complex. Any combination of -scriptPubKey and scriptSig that results in a TRUE value is valid. The +output and input scripts that results in a TRUE value is valid. The simple arithmetic we used as an example of the scripting language is also a valid script. -Use part of the arithmetic example script as the scriptPubKey: +Use part of the arithmetic example script as the output script: ---- 3 OP_ADD 5 OP_EQUAL ---- which can be satisfied by a transaction containing an input with the -scriptSig: +input script: ---- 2 @@ -200,7 +200,7 @@ The validation software combines the scripts: As we saw in <>, when this script is executed, the result is +OP_TRUE+, making the transaction -valid. Not only have we shown a valid transaction output scriptPubKey, but +valid. Not only have we shown a valid transaction output script, but the resulting UTXO could be spent by anyone with the arithmetic skills to know that the number 2 satisfies the script. @@ -237,38 +237,38 @@ When the script execution ends, you should be left with a +TRUE+ value on the stack. [[script_exec]] -===== Separate execution of scriptPubKey and scriptSig +===== Separate execution of output and input scripts In the original Bitcoin -client, scriptPubKey and scriptSig were concatenated and executed +client, output and input scripts were concatenated and executed in sequence. For security reasons, this was changed in 2010 because of a vulnerability known as the +1 OP_RETURN+ bug. In the current implementation, the scripts are executed separately with the stack transferred between the two executions. -First, the scriptSig executed using the stack execution -engine. If the scriptSig is executed without errors and has +First, the input script executed using the stack execution +engine. If the input script is executed without errors and has no operations left over, the stack is copied and the -scriptPubKey is executed. If the result of executing scriptPubKey -with the stack data copied from scriptSig is +TRUE+, -the scriptSig has succeeded in resolving the conditions imposed -by the scriptPubKey and, therefore, the input is a valid authorization +output script is executed. If the result of executing the output script +with the stack data copied from the input script is +TRUE+, +the input script has succeeded in resolving the conditions imposed +by the output script and, therefore, the input is a valid authorization to spend the UTXO. If any result other than +TRUE+ remains after execution of the combined script, the input is invalid because it has failed to satisfy the spending conditions placed on the output. -//SOMEDAY:implications of not being able to use script in scriptSig +//SOMEDAY:implications of not being able to use script in input script [[p2pkh]] ==== Pay-to-Public-Key-Hash (P2PKH) ((("Pay-to-Public-Key-Hash (P2PKH)"))) -A Pay-to-Public-Key-Hash or "P2PKH" script uses a scriptPubKey that +A Pay-to-Public-Key-Hash or "P2PKH" script uses a output script that contains a hash which commits to a public key. P2PKH is best known as a the basis for a legacy Bitcoin address. A P2PKH output can be spent by presenting a public key which matches the hash commitment and a digital signature created by the corresponding private key (see -<>). Let's look at an example of a P2PKH scriptPubKey: +<>). Let's look at an example of a P2PKH output script: ---- OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG @@ -279,7 +279,7 @@ address. Most applications would show the _public key hash_ in a script using hexadecimal encoding and not the familiar Bitcoin address Base58Check format that begins with a "1." -The preceding scriptPubKey can be satisfied with a scriptSig +The preceding output script can be satisfied with an input script of the form: ---- @@ -294,8 +294,8 @@ script: ---- When executed, this combined script will evaluate to TRUE if, and only -if, the scriptSig matches the conditions set by the scriptPubKey. -In other words, the result will be TRUE if the scriptSig +if, the input script matches the conditions set by the output script. +In other words, the result will be TRUE if the input script has a valid signature from Bob's private key that corresponds to the public key hash set as an encumbrance. @@ -338,7 +338,7 @@ to tell "M" and "N" apart when they're spoken, so we use the alternative K-of-N. Both phrases refer to the same type of signature scheme. ==== -At this time, _standard_ multisignature scriptPubKeys are limited to at most 3 +At this time, _standard_ multisignature output scripts are limited to at most 3 listed public keys, meaning you can do anything from a 1-of-1 to a 3-of-3 multisignature or any combination within that range. You may want to check the +IsStandard()+ function to see what is currently @@ -348,7 +348,7 @@ multisignature scripts wrapped in a Pay-to-Script-Hash (P2SH) script. P2SH multisignature scripts are limited to 15 keys, allowing for up to 15-of-15 multisignature. We will learn about P2SH in <>. -The general form of a scriptPubKey setting an K-of-N multisignature +The general form of a output script setting an K-of-N multisignature condition is: ---- @@ -358,14 +358,14 @@ K ... N OP_CHECKMULTISIG where N is the total number of listed public keys and K is the threshold of required signatures to spend the output. -A scriptPubKey setting a 2-of-3 multisignature condition looks like +An output script setting a 2-of-3 multisignature condition looks like this: ---- 2 3 OP_CHECKMULTISIG ---- -The preceding scriptPubKey can be satisfied with a scriptSig +The preceding output script can be satisfied with an input script containing pairs of signatures and public keys: ---- @@ -382,8 +382,8 @@ The two scripts together would form the combined validation script: ---- When executed, this combined script will evaluate to TRUE if, and only -if, the scriptSig script matches the conditions set by the scriptPubKey. -In this case, the condition is whether the scriptSig has +if, the input script script matches the conditions set by the output script. +In this case, the condition is whether the input script has a valid signature from the two private keys that correspond to two of the three public keys set as an encumbrance. @@ -429,7 +429,7 @@ like this: OP_0 2 3 OP_CHECKMULTISIG ---- -Thus the scriptSig actually used in multisig is not: +Thus the input script actually used in multisig is not: ---- @@ -517,7 +517,7 @@ than a simple payment transaction, because this script contains very long public keys. The burden of that extra data would be borne by the customer in the form of extra transaction fees. Finally, a large transaction script like this would be carried in the UTXO set in every full -node, until it was spent. All of these issues make using complex scriptPubKeys +node, until it was spent. All of these issues make using complex output scripts difficult in practice. P2SH was developed to resolve these practical difficulties and to make @@ -529,33 +529,33 @@ matches the commitment in addition to the data which satisfies the script. In si P2SH means "pay to a script matching this hash, a script that will be presented later when this output is spent." -((("redeemScripts")))((("scripting", "redeemScripts")))In P2SH +((("redeem scripts")))((("scripting", "redeem scripts")))In P2SH transactions, the script that is replaced by a hash is referred -to as the _redeemScript_ because it is presented to the system at -redemption time rather than as a scriptPubKey. <> shows +to as the _redeem script_ because it is presented to the system at +redemption time rather than as an output script. <> shows the script without P2SH and <> shows the same script encoded with P2SH. [[without_p2sh]] .Complex script without P2SH |======= -| ScriptPubKey | 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG -| ScriptSig | Sig1 Sig2 +| Output script | 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG +| Input script | Sig1 Sig2 |======= [[with_p2sh]] .Complex script as P2SH |======= -| RedeemScript | 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG -| ScriptPubKey | OP_HASH160 <20-byte hash of redeemScript> OP_EQUAL -| ScriptSig | Sig1 Sig2 +| Redeem script | 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG +| Output script | OP_HASH160 <20-byte hash of redeem script> OP_EQUAL +| Input script | Sig1 Sig2 |======= As you can see from the tables, with P2SH the complex script that -details the conditions for spending the output (redeemScript) is not -presented in the scriptPubKey. Instead, only a hash of it is in the -scriptPubKey and the reedemScript itself is presented later, as part -of the scriptSig when the output is spent. This shifts the burden +details the conditions for spending the output (redeem script) is not +presented in the output script. Instead, only a hash of it is in the +output script and the reedemScript itself is presented later, as part +of the input script when the output is spent. This shifts the burden in fees and complexity from the sender to the recipient (spender) of the transaction. @@ -599,18 +599,18 @@ echo \ ---- The series of commands above first encodes Mohammed's multisig -redeemScript as a serialized hex-encoded bitcoin Script. The next +bx+ command +redeem script as a serialized hex-encoded bitcoin Script. The next +bx+ command calculates the SHA256 hash of that. The next +bx+ command hashes again with RIPEMD160, producing the final script-hash: -The 20-byte hash of Mohammed's redeemScript is: +The 20-byte hash of Mohammed's redeem script is: ---- 54c557e07dde5bb6cb791c7a540e0a4796f5e97e ---- A P2SH transaction locks the output to this hash instead of the longer -redeemScript, using a special scriptPubKey template: +redeem script, using a special output script template: ---- OP_HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e OP_EQUAL @@ -619,23 +619,23 @@ OP_HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e OP_EQUAL which, as you can see, is much shorter. Instead of "pay to this 5-key multisignature script," the P2SH equivalent transaction is "pay to a script with this hash." A customer making a payment to Mohammed's -company need only include this much shorter scriptPubKey in his +company need only include this much shorter output script in his payment. When Mohammed and his partners want to spend this UTXO, they -must present the original redeemScript (the one whose hash locked the +must present the original redeem script (the one whose hash locked the UTXO) and the signatures necessary to unlock it, like this: ---- <2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG> ---- -The two scripts are combined in two stages. First, the redeemScript is -checked against the scriptPubKey to make sure the hash matches: +The two scripts are combined in two stages. First, the redeem script is +checked against the output script to make sure the hash matches: ---- -<2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG> OP_HASH160 OP_EQUAL +<2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG> OP_HASH160 OP_EQUAL ---- -If the redeemScript hash matches, the redeemScript is executed: +If the redeem script hash matches, the redeem script is executed: ---- 2 PK1 PK2 PK3 PK4 PK5 5 OP_CHECKMULTISIG @@ -698,31 +698,31 @@ scripts in outputs: present time (payment) to a future time (when it is spent). - P2SH shifts the transaction fee cost of a long script from the sender - to the recipient, who has to include the long redeemScript to spend + to the recipient, who has to include the long redeem script to spend it. -==== RedeemScript and Validation +==== Redeem Script and Validation -You are not able to put a P2SH inside a P2SH redeemScript, because the +You are not able to put a P2SH inside a P2SH redeem script, because the P2SH specification is not recursive. Also, while it is technically -possible to include +OP_RETURN+ (see <>) in a redeemScript, as +possible to include +OP_RETURN+ (see <>) in a redeem script, as nothing in the rules prevents you from doing so, it is of no practical use because executing +OP_RETURN+ during validation will cause the transaction to be marked invalid. -Note that because the redeemScript is not presented to the network +Note that because the redeem script is not presented to the network until you attempt to spend a P2SH output, if you create an output with the -hash of an invalid redeemScript, you will not be able to spend -it. The spending transaction, which includes the redeemScript, +hash of an invalid redeem script, you will not be able to spend +it. The spending transaction, which includes the redeem script, will not be accepted because it is an invalid script. This creates a risk, because you can send bitcoin to a P2SH address that cannot be spent later. [WARNING] ==== -((("warnings and cautions", "accidental bitcoin invalidation")))P2SH scriptPubKeys -contain the hash of a redeemScript, which gives no clues as to -the content of the redeemScript. The P2SH transaction will be -considered valid and accepted even if the redeemScript is invalid. You +((("warnings and cautions", "accidental bitcoin invalidation")))P2SH output scripts +contain the hash of a redeem script, which gives no clues as to +the content of the redeem script. The P2SH transaction will be +considered valid and accepted even if the redeem script is invalid. You might accidentally receive bitcoin in such a way that it cannot later be spent. ==== @@ -763,7 +763,7 @@ from the UTXO set and cause the size of the UTXO database to forever increase, or "bloat." A compromise was reached -that allows a scriptPubKey starting with +OP_RETURN+ to +that allows an output script starting with +OP_RETURN+ to add nonpayment data to a transaction output. However, unlike the use of "fake" UTXOs, the +OP_RETURN+ operator creates an explicitly _provably unspendable_ output, which does not need to be stored in the @@ -787,7 +787,7 @@ http://proofofexistence.com[Proof of Existence] digital notarization service uses the 8-byte prefix +DOCPROOF+, which is ASCII encoded as +44 4f 43 50 52 4f 4f 46+ in hexadecimal. -Keep in mind that there is no scriptSig that corresponds to +Keep in mind that there is no input script that corresponds to +OP_RETURN+ that could possibly be used to "spend" an +OP_RETURN+ output. The whole point of an +OP_RETURN+ output is that you can't spend the money locked in that output, and therefore it does not need to be held in the UTXO set as @@ -801,22 +801,22 @@ script to "RETURN" with a +FALSE+ and halt. Thus, if you accidentally reference a +OP_RETURN+ output as an input in a transaction, that transaction is invalid. -[[locktime_limitations]] -==== Transaction locktime limitations +[[lock_time_limitations]] +==== Transaction lock time limitations -+nLockTime+ has the limitation that while it makes it possible to spend some outputs in the future, it does not make it impossible to spend them until that time. Let's explain that with the following example. +Lock time has the limitation that while it makes it possible to spend some outputs in the future, it does not make it impossible to spend them until that time. Let's explain that with the following example. -((("use cases", "buying coffee", id="alicesseven")))Alice signs a transaction spending one of her outputs to Bob's address, and sets the transaction +nLockTime+ to 3 months in the future. Alice sends that transaction to Bob to hold. With this transaction Alice and Bob know that: +((("use cases", "buying coffee", id="alicesseven")))Alice signs a transaction spending one of her outputs to Bob's address, and sets the transaction lock time to 3 months in the future. Alice sends that transaction to Bob to hold. With this transaction Alice and Bob know that: * Bob cannot transmit the transaction to redeem the funds until 3 months have elapsed. * Bob may transmit the transaction after 3 months. However: -* Alice can create another transaction, double-spending the same inputs without a locktime. Thus, Alice can spend the same UTXO before the 3 months have elapsed. +* Alice can create another transaction, double-spending the same inputs without a lock time. Thus, Alice can spend the same UTXO before the 3 months have elapsed. * Bob has no guarantee that Alice won't do that. -It is important to understand the limitations of transaction +nLockTime+. The only guarantee is that Bob will not be able to redeem it before 3 months have elapsed. There is no guarantee that Bob will get the funds. To achieve such a guarantee, the timelock restriction must be placed on the UTXO itself and be part of the script, rather than on the transaction. This is achieved by the next form of timelock, called Check Lock Time Verify. +It is important to understand the limitations of transaction lock time. The only guarantee is that Bob will not be able to redeem it before 3 months have elapsed. There is no guarantee that Bob will get the funds. To achieve such a guarantee, the timelock restriction must be placed on the UTXO itself and be part of the script, rather than on the transaction. This is achieved by the next form of timelock, called Check Lock Time Verify. ==== Check Lock Time Verify (OP_CLTV) @@ -828,7 +828,7 @@ timelock was introduced to Bitcoin as a soft fork upgrade. Based on a specification in BIP65, a new script operator called _OP_CHECKLOCKTIMEVERIFY_ (_CLTV_) was added to the scripting language. +OP_CLTV+ is a per-output timelock, rather than a per-transaction timelock -as is the case with +nLockTime+. This allows for much greater +as is the case with lock time. This allows for much greater flexibility in the way timelocks are applied. In simple terms, by committing to the +OP_CLTV+ opcode in an @@ -837,21 +837,21 @@ specified time has elapsed. [TIP] ==== -While +nLockTime+ is a transaction-level timelock, +OP_CLTV+ is an +While lock time is a transaction-level timelock, +OP_CLTV+ is an output-based timelock. ==== -+OP_CLTV+ doesn't replace +nLockTime+, but rather restricts specific UTXO ++OP_CLTV+ doesn't replace lock time, but rather restricts specific UTXO such that they can only be spent in a future transaction with -+nLockTime+ set to a greater or equal value. +lock time set to a greater or equal value. The +OP_CLTV+ opcode takes one parameter as input, expressed as a number in -the same format as +nLockTime+ (either a block height or Unix epoch +the same format as lock time (either a block height or Unix epoch time). As indicated by the +VERIFY+ suffix, +OP_CLTV+ is the type of opcode that halts execution of the script if the outcome is +FALSE+. If it results in TRUE, execution continues. -In order to use +OP_CLTV+, you insert it into the redeemScript of the +In order to use +OP_CLTV+, you insert it into the redeem script of the output in the transaction that creates the output. For example, if Alice is paying Bob's address, the output would normally contain a P2PKH script like this: @@ -861,7 +861,7 @@ OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG ---- To lock it to a time, say 3 months from now, the transaction would be a -P2SH transaction with a redeemScript like this: +P2SH transaction with a redeem script like this: ---- OP_CHECKLOCKTIMEVERIFY OP_DROP OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG @@ -875,13 +875,13 @@ where ++ is a block height or time value estimated When Bob tries to spend this UTXO, he constructs a transaction that references the UTXO as an input. He uses his signature and public key in -the scriptSig of that input and sets the transaction +nLockTime+ +the input script of that input and sets the transaction lock time to be equal or greater to the timelock in the +OP_CHECKLOCKTIMEVERIFY+ Alice set. Bob then broadcasts the transaction on the Bitcoin network. Bob's transaction is evaluated as follows. If the +OP_CHECKLOCKTIMEVERIFY+ parameter Alice set is less than or equal the spending transaction's -+nLockTime+, script execution continues (acts as if a _no +lock time, script execution continues (acts as if a _no operation_ or OP_NOP opcode was executed). Otherwise, script execution halts and the transaction is deemed invalid. @@ -890,17 +890,17 @@ the transaction invalid if (source: BIP65): 1. the stack is empty; or 2. the top item on the stack is less than 0; or -3. the lock-time type (height versus timestamp) of the top stack item and the +nLockTime+ field are not the same; or -4. the top stack item is greater than the transaction's +nLockTime+ field; or -5. the +nSequence+ field of the input is 0xffffffff. +3. the lock-time type (height versus timestamp) of the top stack item and the lock time field are not the same; or +4. the top stack item is greater than the transaction's lock time field; or +5. the sequence field of the input is 0xffffffff. [[timelock_conflicts]] .Timelock conflicts [WARNING] ==== -+OP_CLTV+ and +nLockTime+ use the same format to describe timelocks, either ++OP_CLTV+ and lock time use the same format to describe timelocks, either a block height or the time elapsed in seconds since Unix epoch. -Critically, when used together, the format of +nLockTime+ must match +Critically, when used together, the format of lock time must match that of +OP_CLTV+ in the outputs--they must both reference either block height or time in seconds. @@ -922,10 +922,10 @@ dropped, with +OP_DROP+, for correct execution of subsequent script opcodes. You will often see +OP_CHECKLOCKTIMEVERIFY+ followed by +OP_DROP+ in scripts for this reason. -By using nLockTime in conjunction with +OP_CLTV+, the scenario described in -<> changes. Alice can no longer spend the money +By using lock time in conjunction with +OP_CLTV+, the scenario described in +<> changes. Alice can no longer spend the money (because it's locked with Bob's key) and Bob cannot spend it before the -3-month locktime has expired.((("", startref="alicesseven"))) +3-month lock time has expired.((("", startref="alicesseven"))) By introducing timelock functionality directly into the scripting language, +OP_CLTV+ allows us to develop some very interesting complex @@ -937,7 +937,7 @@ https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki[BIP65 ==== Relative Timelocks -+nLockTime+ and +OP_CLTV+ are ((("timelocks", "relative timelocks", +Lock time and +OP_CLTV+ are ((("timelocks", "relative timelocks", id="Trelative07")))((("scripting", "timelocks", "relative timelocks")))((("relative timelocks", id="relativetime07")))both _absolute timelocks_ in that they specify an absolute point in time. The @@ -956,7 +956,7 @@ and Lightning Networks, as we will see in <>. Relative timelocks, like absolute timelocks, are implemented with both a transaction-level feature and a script-level opcode. The transaction-level relative timelock is implemented as a consensus rule -on the value of +nSequence+, a transaction field that is set in every +on the value of +sequence+, a transaction field that is set in every transaction input. Script-level relative timelocks are implemented with the +OP_CHECKSEQUENCEVERIFY+ (OP_CSV) opcode. @@ -976,20 +976,20 @@ the consensus rules. ((("scripting", "timelocks", "relative timelocks with CHECKSEQUENCEVERIFY")))((("CHECKSEQUENCEVERIFY (CSV)")))Just like OP_CLTV -and +nLockTime+, there is a script opcode for relative timelocks that -leverages the +nSequence+ value in scripts. That opcode is +and lock time, there is a script opcode for relative timelocks that +leverages the sequence value in scripts. That opcode is +OP_CHECKSEQUENCEVERIFY+, commonly referred to as +OP_CSV+ for short. The +OP_CSV+ opcode when evaluated in an UTXO's script allows -spending only in a transaction whose input +nSequence+ value is greater +spending only in a transaction whose input sequence value is greater than or equal to the +OP_CSV+ parameter. Essentially, this restricts spending the UTXO until a certain number of blocks or seconds have elapsed relative to the time the UTXO was mined. As with CLTV, the value in +OP_CSV+ must match the format in the -corresponding +nSequence+ value. If +OP_CSV+ is specified in terms of -blocks, then so must +nSequence+. If +OP_CSV+ is specified in terms of -seconds, then so must +nSequence+. +corresponding sequence value. If +OP_CSV+ is specified in terms of +blocks, then so must sequence. If +OP_CSV+ is specified in terms of +seconds, then so must sequence. [WARNING] ==== @@ -1156,7 +1156,7 @@ OP_ENDIF OP_CHECKSIG ---- -Looking at this redeemScript, you may be wondering: "Where is the +Looking at this redeem script, you may be wondering: "Where is the condition? There is nothing preceding the +IF+ clause!" The condition is not part of the script. Instead, the condition @@ -1182,11 +1182,11 @@ known as +OP_0+, pushes an empty byte array to the stack. OP_FALSE ---- -Bob's scriptSig causes the +OP_IF+ clause +Bob's input script causes the +OP_IF+ clause to execute the second (+OP_ELSE+) script, which requires Bob's signature. Since +OP_IF+ clauses can be nested, we can create a "maze" of execution -paths. The scriptSig can provide a "map" selecting which +paths. The input script can provide a "map" selecting which execution path is actually executed: ---- @@ -1202,18 +1202,18 @@ OP_ENDIF ---- In this scenario, there are three execution paths (+subscript A+, +subscript -B+, and +subscript C+). The scriptSig provides a path in the form of +B+, and +subscript C+). The input script provides a path in the form of a sequence of +TRUE+ or +FALSE+ values. To select path +subscript B+, for -example, the scriptSig must end in +OP_1 OP_0+ (+TRUE+, +FALSE+). These +example, the input script must end in +OP_1 OP_0+ (+TRUE+, +FALSE+). These values will be pushed onto the stack, so that the second value (+FALSE+) ends up at the top of the stack. The outer +OP_IF+ clause pops the +FALSE+ value and executes the first +OP_ELSE+ clause. Then the +TRUE+ value moves to the top of the stack and is evaluated by the inner (nested) +OP_IF+, selecting the +B+ execution path. -Using this construct, we can build redeemScripts with tens or hundreds +Using this construct, we can build redeem scripts with tens or hundreds of execution paths, each offering a different way to redeem the UTXO. To -spend, we construct an scriptSig that navigates the execution +spend, we construct an input script that navigates the execution path by putting the appropriate +TRUE+ and +FALSE+ values on the stack at each flow control point.((("", startref="Sflow07")))((("", startref="flow07")))((("", startref="condition07"))) @@ -1242,7 +1242,7 @@ partner signatures. Finally, if all partners are unavailable or incapacitated for a while, they want the lawyer to be able to manage the account directly. -Here's the redeemScript that Mohammed designs to achieve this (line +Here's the redeem script that Mohammed designs to achieve this (line number prefixed as XX): [[variable_timelock_multisig]] @@ -1272,7 +1272,7 @@ In the first execution path, this script operates as a simple 2-of-3 multisig with the three partners. This execution path consists of lines 3 and 9. Line 3 sets the quorum of the multisig to +2+ (2-of-3). This execution path can be selected by putting +OP_TRUE OP_TRUE+ at the end of the -scriptSig: +input script: .Spending data for the first execution path (2-of-3 multisig) ---- @@ -1282,7 +1282,7 @@ OP_0 OP_TRUE OP_TRUE [TIP] ==== -The +OP_0+ at the beginning of this scriptSig is because of an oddity in +The +OP_0+ at the beginning of this input script is because of an oddity in +OP_CHECKMULTISIG+ that pops an extra value from the stack. The extra value is disregarded by the +OP_CHECKMULTISIG+, but it must be present or the script fails. Pushing an empty byte array with +OP_0+ is a workaround to the oddity, as @@ -1293,7 +1293,7 @@ The second execution path can only be used after 30 days have elapsed from the creation of the UTXO. At that time, it requires the signature of Abdul the lawyer and one of the three partners (a 1-of-3 multisig). This is achieved by line 7, which sets the quorum for the multisig to -+1+. To select this execution path, the scriptSig would end in ++1+. To select this execution path, the input script would end in +OP_FALSE OP_TRUE+: .Spending data for the second execution path (Lawyer + 1-of-3) @@ -1310,9 +1310,9 @@ stack and +TRUE+ is pushed on top of it. Finally, the third execution path allows Abdul the lawyer to spend the funds alone, but only after 90 days. To select this execution path, the -scriptSig has to end in +OP_FALSE+: +input script has to end in +OP_FALSE+: -.ScriptSig for the third execution path (Lawyer only) +.Input script for the third execution path (Lawyer only) ---- OP_FALSE ---- @@ -1333,9 +1333,9 @@ inside a P2SH script. ===== Pay-to-Witness-Public-Key-Hash (P2WPKH) Let's start by looking at the example of a P2PKH -scriptPubKey: +output script: -.Example P2PKH scriptPubKey +.Example P2PKH output script ---- OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG ---- @@ -1349,7 +1349,7 @@ to the same public key, it would look like this: 0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 ---- -As you can see, a P2WPKH scriptPubKey is much +As you can see, a P2WPKH output script is much simpler than the P2PKH equivalent. It consists of two values that are pushed on to the script evaluation stack. To an old (nonsegwit-aware) Bitcoin client, the two pushes would look like an output that anyone can @@ -1366,7 +1366,7 @@ would have to include a signature within the transaction input: .Decoded transaction showing a P2PKH output being spent with a signature ---- [...] -“Vin” : [ +"vin" : [ "txid": "0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2", "vout": 0, "scriptSig": “”, @@ -1376,12 +1376,12 @@ would have to include a signature within the transaction input: However, to spend the P2PKH output, the transaction has no signature on that input. Instead, Bob’s transaction has an empty -+scriptSig+ and includes a witness field: +input script and includes a witness structure: -.Decoded transaction showing a P2WPKH output being spent with a witness field +.Decoded transaction showing a P2WPKH output being spent with a witness structure ---- [...] -“Vin” : [ +"vin" : [ "txid": "0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2", "vout": 0, "scriptSig": “”, @@ -1424,21 +1424,21 @@ saw this type of script in <>. In that example, P2SH was used by Mohammed's company to express a multisignature script. Payments to Mohammed's company were encoded with a script like this: -.Example P2SH scriptPubKey +.Example P2SH output script ---- OP_HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e OP_EQUAL ---- -This P2SH script references the hash of a _redeemScript_ that defines a +This P2SH script references the hash of a _redeem script_ that defines a 2-of-3 multisignature requirement to spend funds. To spend this output, -Mohammed's company would present the redeemScript (whose hash matches +Mohammed's company would present the redeem script (whose hash matches the script hash in the P2SH output) and the signatures necessary to -satisfy that redeemScript, all inside the transaction input: +satisfy that redeem script, all inside the transaction input: .Decoded transaction showing a P2SH output being spent ---- [...] -“Vin” : [ +"vin" : [ "txid": "abcdef12345...", "vout": 0, "scriptSig": “ <2 PubA PubB PubC PubD PubE 5 OP_CHECKMULTISIG>”, @@ -1450,7 +1450,7 @@ If Mohammed's customers were using a segwit-compatible wallet, they would make a payment, creating a Pay-to-Witness-Script-Hash (P2WSH) output that would look like this: -.Example P2WSH scriptPubKey +.Example P2WSH output script ---- 0 a9b7b38d972cabc7961dbfbcb841ad4508d133c47ba87457b4a0e8aae86dbb89 ---- @@ -1458,7 +1458,7 @@ output that would look like this: Again, as with the example of P2WPKH, you can see that the Segregated Witness equivalent script is a lot simpler and reduces the template overhead that you see in P2SH scripts. Instead, the Segregated Witness -scriptPubKey consists of two values pushed to the stack: a witness version +output script consists of two values pushed to the stack: a witness version (0) and the 32-byte SHA256 hash of the witness script. [TIP] @@ -1475,13 +1475,13 @@ Mohammed's company can spend the P2WSH output by presenting the correct witness script and sufficient signatures to satisfy it. Both the witness script and the signatures would be included as part of the witness data. No data would be placed in the -scriptSig because this is a native witness program, which does not use -the legacy scriptSig field. +input script because this is a native witness program, which does not use +the legacy input script field. .Decoded transaction showing a P2WSH output being spent with witness data ---- [...] -“Vin” : [ +"vin" : [ "txid": "abcdef12345...", "vout": 0, "scriptSig": “”, @@ -1516,7 +1516,7 @@ Witness is a two-step process. First, wallets must create segwit type outputs. Then, these outputs can be spent by wallets that know how to construct Segregated Witness transactions. In the examples, Alice's wallet is able to create outputs paying -Segregated Witness scriptPubKeys. Bob's wallet is also segwit-aware and able +Segregated Witness output scripts. Bob's wallet is also segwit-aware and able to spend those outputs. Segregated Witness was implemented as a @@ -1587,7 +1587,7 @@ echo \ 3e0547268b3b19288b3adef9719ec8659f4b2b0b ---- -Next, the redeemScript hash is converted to a Bitcoin address. Let's +Next, the redeem script hash is converted to a Bitcoin address. Let's use +bx+ on the command-line again: .P2SH address @@ -1625,7 +1625,7 @@ company, regardless of whether their wallets are upgraded for segwit, Mohammed's wallet can embed the P2WSH witness program inside a P2SH script. -First, Mohammed's wallet hashes the redeemScript with SHA256 (just +First, Mohammed's wallet hashes the redeem script with SHA256 (just once). Let's use +bx+ to do that on the command-line: .Mohammed's wallet creates a P2WSH witness program @@ -1641,7 +1641,7 @@ echo \ 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73 ---- -Next, the hashed redeemScript is turned into a P2WSH witness program: +Next, the hashed redeem script is turned into a P2WSH witness program: ---- 0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73 diff --git a/chapters/fees.adoc b/chapters/fees.adoc index 3d571fff..4cdf297d 100644 --- a/chapters/fees.adoc +++ b/chapters/fees.adoc @@ -384,8 +384,8 @@ https://bitcoinops.org/en/compatibility/#replace-by-fee-rbf As a developer, if you plan to implement RBF fee bumping, you will first need to implement the signaling specified in BIP125, which is a simple -modification to any one of the nSequence fields in a transaction (see -<>). +modification to any one of the sequence fields in a transaction (see +<>). When you need to fee bump a transaction, you will simply create a new transaction that spends at least one of the same UTXOs as the original @@ -727,11 +727,11 @@ higher than total fees per block. But at some point in the future, transaction fees will be the majority of the reward (or even the entirety of the reward). At that time, this scenario becomes inevitable. -Several wallets discourage fee sniping by creating transactions with an -+nLocktime+ that limits those transactions to being included in the next +Several wallets discourage fee sniping by creating transactions with a +lock time that limits those transactions to being included in the next block or any later block. In our -scenario, our wallet would set +nLocktime+ to 100,001 on any -transaction it created. Under normal circumstances, this +nLocktime+ has +scenario, our wallet would set lock time to 100,001 on any +transaction it created. Under normal circumstances, this lock time has no effect—the transactions could only be included in block #100,001 anyway; it's the next block. @@ -745,7 +745,7 @@ This does not entirely prevent fee sniping, but it does make it less profitable in some cases and so can help preserve the stability of the Bitcoin network as the block subsidy declines. We recommend all wallets implement anti fee sniping when it doesn't interfere with the wallet's -other uses of the nLockTime field. +other uses of the lock time field. As Bitcoin continues to mature, and as the subsidy continues to decline, fees become more and more important to Bitcoin users, both in their diff --git a/chapters/signatures.adoc b/chapters/signatures.adoc index cc41d98e..ec9b7a09 100644 --- a/chapters/signatures.adoc +++ b/chapters/signatures.adoc @@ -186,8 +186,8 @@ different subsets of the data in the transaction. By including the [NOTE] ==== -All +SIGHASH+ types sign the transaction +nLocktime+ field (see -<>). In addition, the +SIGHASH+ type +All +SIGHASH+ types sign the transaction lock time field (see +<>). In addition, the +SIGHASH+ type itself is appended to the transaction before it is signed, so that it can't be modified once signed. ==== @@ -219,7 +219,7 @@ even if they haven't reached the specified value. +NONE+ :: This construction can be used to create a "bearer check" or "blank check" of a specific amount. It commits to the input, but allows the output script to be changed. Anyone can write their own -Bitcoin address into the output scriptPubKey. However, the output value +Bitcoin address into the output script. However, the output value itself cannot be changed. By itself, this allows any miner to change the output destination and claim the funds for themselves, but if other required signatures in the transaction use +SIGHASH_ALL+ or another type diff --git a/chapters/transactions.adoc b/chapters/transactions.adoc index f8f23943..275fe596 100644 --- a/chapters/transactions.adoc +++ b/chapters/transactions.adoc @@ -83,7 +83,7 @@ in the transaction and describe any additional fields that they contain. .A byte map of Alice's transaction image::../images/tx-map-1.png["A byte map of Alice's transaction"] -[[nVersion]] +[[version]] === Version The first four bytes of a serialized Bitcoin transaction are its @@ -94,7 +94,7 @@ described throughout this book. Version 2 Bitcoin transactions were introduced in the BIP68 soft fork change to Bitcoin's consensus rules. BIP68 places additional -constraints on the nSequence field, but those constraints only apply to +constraints on the sequence field, but those constraints only apply to transactions with version 2 or higher. Version 1 transactions are unaffected. BIP112, which was part of the same soft fork as BIP68, upgraded an opcode (OP_CHECKSEQUENCEVERIFY) which will now fail if it is @@ -116,7 +116,7 @@ Network, depend on pre-signed transactions. This creates a challenge for protocol developers when they assist users in upgrading the Bitcoin consensus protocol. Adding new -constraints--such as BIP68 did to the nSequence field--may invalidate +constraints--such as BIP68 did to the sequence field--may invalidate some pre-signed transactions. If there's no way to create a new signature for an equivalent transaction, then the money being spent in the pre-signed transaction is permanently lost. @@ -125,7 +125,7 @@ This problem is solved by reserving some transaction features for upgrades, such as version numbers. Anyone creating pre-signed transactions prior to BIP68 should have been using version 1 transactions, so only applying BIP68's additional constraints on -nSequence to transactions v2 or higher should not invalidate any +sequence to transactions v2 or higher should not invalidate any pre-signed transactions. If you implement a protocol that uses pre-signed transactions, ensure @@ -150,8 +150,8 @@ part of the Segregated Witness (segwit) soft fork change to Bitcoin's consensus rules. The rules were changed according to BIPs 141 and 143, but the _extended serialization format_ is defined in BIP144. -If the transaction includes a witness field (which we'll describe in -<>), the marker must be zero (0x00) and the flag must be +If the transaction includes a witness structure (which we'll describe in +<>), the marker must be zero (0x00) and the flag must be non-zero. In the current P2P protocol, the flag should always be one (0x01); alternative flags are reserved for later protocol upgrades. @@ -177,9 +177,9 @@ map of those bytes in <>. .Map of bytes in the input field of Alice's transaction image::../images/input-byte-map.png["map of bytes in the input field of Alice's transaction"] -==== Inputs Count +==== Length of transaction input list -The input field starts with an integer indicating the number of inputs +The transaction input list starts with an integer indicating the number of inputs in the transaction. The minimum value is one. There's no explicit maximum value, but restrictions on the maximum size of a transaction effectively limit transactions to a few thousand inputs. The number is @@ -210,7 +210,8 @@ For numbers from 0 to 252, compactSize unsigned integers are identical to the C-language data type +uint8_t+, which is probably the native encoding familiar to any programmer. For other numbers up to 0xffffffffffffffff, a byte is prefixed to the number to indicate its -length—but otherwise the numbers look like regular unsigned integers. +length—but otherwise the numbers look like regular C-language encoded +unsigned integers. [cols="1,1,1"] |=== @@ -226,9 +227,9 @@ Each input in a transaction must contain three fields: - An _outpoint_ field -- A length-prefixed _scriptSig_ field +- A length-prefixed _input script_ field -- An _nSequence_ +- A _sequence_ We'll look at each of those fields in the following sections. Some inputs also include a witness, but this is serialized at the end of a @@ -252,7 +253,7 @@ This txid is in Bitcoin's internal byte order for hashes, see Because transactions may contain multiple outputs, Alice also needs to identify which particular output from that transaction to use, called -its output vector (_vout_). Output vectors are four-byte unsigned +its _output index_. Output indices are four-byte unsigned integers indexed from zero. When a full node encounters an outpoint, it uses that information to @@ -348,14 +349,14 @@ _little-endian byte order_ for the internal version and _big-endian byte order_ for the display version. **** -==== ScriptSig +==== Input script -The scriptSig field is a remnant of the legacy transaction format. Our +The input script field is a remnant of the legacy transaction format. Our example transaction input spends a native segwit output which doesn't -require any data in the scriptSig, so the length prefix for the -scriptSig is set to zero (0x00). +require any data in the input script, so the length prefix for the +input script is set to zero (0x00). -For an example of a length-prefixed scriptSig that spends a legacy +For an example of a length-prefixed input script that spends a legacy output, we use one from an arbitrary transaction in the most recent block as of this writing: @@ -367,23 +368,23 @@ fa2580bb664b020220366060ea8203d766722ed0a02d1599b99d3c95b97dab8e ---- The length prefix is a compactSize unsigned integer indicating the -length of the serialized scriptSig field. In this case, it's a single -byte (0x6b) indicating the scriptSig is 107 bytes. We'll cover parsing +length of the serialized input script field. In this case, it's a single +byte (0x6b) indicating the input script is 107 bytes. We'll cover parsing and using scripts in detail in the next chapter, <>. -[[nsequence]] -==== nSequence +[[sequence]] +==== Sequence -The final four bytes of an input are its sequence number, called -_nSequence_. The use and meaning of this field has changed over time. +The final four bytes of an input are its _sequence_ number. +The use and meaning of this field has changed over time. [[original_tx_replacement]] -===== Original nSequence-based Transaction Replacement +===== Original Sequence-Based Transaction Replacement -The +nSequence+ field was originally intended to allow creation of +The sequence field was originally intended to allow creation of multiple versions of the same transaction, with later versions replacing -earlier versions as candidates for confirmation. The nSequence number +earlier versions as candidates for confirmation. The sequence number tracked the version of the transaction. For example, imagine Alice and Bob want to bet on a game of cards. They @@ -399,27 +400,27 @@ output: the transaction at this time. They only need it if there's a problem. - Alice wins the first round of the card game, so the second version of - the transaction, with nSequence 1, increases the amount of money paid + the transaction, with sequence 1, increases the amount of money paid to Alice and decreases Bob's share. They both sign the updated transaction. Again, they don't need to broadcast this version of the transaction unless there's a problem. -- Bob wins the second round, so the nSequence is incremented to 2, +- Bob wins the second round, so the sequence is incremented to 2, Alice's share is decreased, and Bob's share is increased. They again sign but don't broadcast. -- After many more rounds where the nSequence is incremented, the +- After many more rounds where the sequence is incremented, the funds redistributed, and the resulting transaction is signed but not broadcast, they decide to finalize the transaction. Creating a - transaction with the final balance of funds, they set nSequence to its + transaction with the final balance of funds, they set sequence to its maximum value (0xffffffff), finalizing the transaction. They broadcast this version of the transaction, it's relayed across the network, and eventually confirmed by miners. -We can see the replacement rules for nSequence at work if we consider +We can see the replacement rules for sequence at work if we consider alternative scenarios: -- Imagine that Alice broadcasts the final transaction, with an nSequence of +- Imagine that Alice broadcasts the final transaction, with a sequence of 0xffffffff, and then Bob broadcasts one of the earlier transactions where his balance was higher. Because Bob's version of the transaction has a lower sequence number, full nodes using the original @@ -429,7 +430,7 @@ alternative scenarios: - In another scenario, imagine that Bob broadcasts an earlier version of the transaction a few seconds before Alice broadcasts the final version. Nodes will relay Bob's version and miners will attempt to - mine it, but when Alice's version with its higher nSequence number + mine it, but when Alice's version with its higher sequence number arrives, nodes will also relay it and miners using the original Bitcoin code will try to mine it instead of Bob's version. Unless Bob got lucky and a block was discovered before Alice's version arrived, @@ -442,7 +443,7 @@ the protocol to support them. We'll learn about several of those other features later and also discover how modern versions of payment channels are increasingly being used in Bitcoin today. -There were a few problems with purely nSequence-based payment channels. +There were a few problems with purely sequence-based payment channels. The first was that the rules for replacing a lower-sequence transaction with a higher-sequence transaction were only a matter of software policy. There was no direct incentive for miners to prefer one version @@ -465,27 +466,27 @@ need to pay any costs for the enormous burden they placed on full node operators. To eliminate the risk of this attack, the original type of -nSequence-based transaction replacement was disabled in an early version +sequence-based transaction replacement was disabled in an early version of the Bitcoin software. For several years, Bitcoin full nodes would not allow an unconfirmed transaction containing a particular input (as indicated by its outpoint) to be replaced by a different transaction containing the same input. However, that situation didn't last forever. -[[nsequence-bip125]] +[[sequence-bip125]] ===== Opt-in Transaction Replacement Signaling -After the original nSequence-based transaction replacement was disabled +After the original sequence-based transaction replacement was disabled due to the potential for abuse, a solution was proposed: programming Bitcoin Core and other relaying full node software to allow a transaction that paid a higher transaction fee rate to replace a conflicting transaction that paid a lower fee rate. This is called _Replace-By-Fee_, or _RBF_ for short. Some users and businesses objected to adding support for transaction replacement back into Bitcoin -Core, so a compromise was reached that once again used the nSequence +Core, so a compromise was reached that once again used the sequence field in support of replacement. As documented in BIP125, an unconfirmed transaction with any input that -has an nSequence set to a value below 0xfffffffe (i.e., at least 2 below +has an sequence set to a value below 0xfffffffe (i.e., at least 2 below the maximum value) signals to the network that its signer wants it to be replaceable by a conflicting transaction paying a higher fee rate. Bitcoin Core allowed those unconfirmed transactions to be replaced and @@ -495,56 +496,56 @@ ignore unconfirmed transactions containing the BIP125 signal until they became confirmed. There's more to modern transaction replacement policies than fee rates -and nSequence signals, which we'll see in <>. +and sequence signals, which we'll see in <>. [[relative_timelocks]] -===== nSequence as a consensus-enforced relative timelock +===== Sequence as a consensus-enforced relative timelock -In the <> section, we learned that the BIP68 soft fork added +In the <> section, we learned that the BIP68 soft fork added a new constraint to transactions with version numbers 2 or higher. That -constraint applies to the nSequence field. +constraint applies to the sequence field. -Transaction inputs with +nSequence+ values less than 2^31^ are +Transaction inputs with sequence values less than 2^31^ are interpreted as having a relative timelock. Such a transaction may only be included in the blockchain once the previous output (referenced by the outpoint) has aged by the relative timelock amount. For example, a transaction with one input with a relative timelock of 30 blocks can only be confirmed after least 30 blocks have elapsed from the time the previous output was confirmed in a block on the current blockchain. -Since +nSequence+ is a per-input field, a transaction may contain any +Since sequence is a per-input field, a transaction may contain any number of timelocked inputs, all of which must have sufficiently aged for the transaction to be valid. A transaction can include both -timelocked inputs (+nSequence+ < 2^31^) and inputs without a relative -timelock (+nSequence+ >= 2^31^). +timelocked inputs (sequence < 2^31^) and inputs without a relative +timelock (sequence >= 2^31^). -The +nSequence+ value is specified in either blocks or seconds. +The sequence value is specified in either blocks or seconds. A type-flag is used to differentiate between values counting blocks and values counting time in seconds. The type-flag is set in the 23rd least-significant bit (i.e., value 1<<22). If the type-flag is set, then -the +nSequence+ value is interpreted as a multiple of 512 seconds. If -the type-flag is not set, the +nSequence+ value is interpreted as a +the sequence value is interpreted as a multiple of 512 seconds. If +the type-flag is not set, the sequence value is interpreted as a number of blocks. -When interpreting +nSequence+ as a relative timelock, only the 16 least +When interpreting sequence as a relative timelock, only the 16 least significant bits are considered. Once the flags (bits 32 and 23) are -evaluated, the +nSequence+ value is usually "masked" with a 16-bit mask -(e.g., +nSequence+ & 0x0000FFFF). The multiple of 512 seconds is +evaluated, the sequence value is usually "masked" with a 16-bit mask +(e.g., +sequence+ & 0x0000FFFF). The multiple of 512 seconds is roughly equal to the average amount of time between blocks, so the maximum relative timelock in both blocks and seconds from 16 bits (2^16^) is about one year. -<> shows the binary layout of the +nSequence+ value, +<> shows the binary layout of the sequence value, as defined by BIP68. [[bip_68_def_of_nseq]] -.BIP68 definition of nSequence encoding (Source: BIP68) -image::../images/mbc2_0701.png["BIP68 definition of nSequence encoding"] +.BIP68 definition of sequence encoding (Source: BIP68) +image::../images/mbc2_0701.png["BIP68 definition of sequence encoding"] -Note that any transaction which sets a relative timelock using nSequence +Note that any transaction which sets a relative timelock using sequence also sends the signal for opt-in replace-by-fee as described in -<>. +<>. === Outputs @@ -566,10 +567,10 @@ transaction. It's a compactSize integer and must be greater than zero. The example transaction has two outputs. -==== nValue +==== Amount -The first field of a specific output is its value, also called -_nValue_ in Bitcoin Core. This is an eight-byte signed integer indicating +The first field of a specific output is its _amount_, also called +"value" in Bitcoin Core. This is an eight-byte signed integer indicating the number of _satoshis_ to transfer. A satoshi is the smallest unit of bitcoin that can be represented in an onchain Bitcoin transaction. There are 100 million satoshis in a bitcoin. @@ -639,39 +640,39 @@ use Utreexo. ==== Bitcoin Core's policy rules about dust do have one exception: output -scriptPubKeys starting with +OP_RETURN+, called _data carrier outputs_, +scripts starting with +OP_RETURN+, called _data carrier outputs_, can have a value of zero. The OP_RETURN opcode causes the script to immediately fail no matter what comes after it, so these outputs can never be spent. That means full nodes don't need to keep track of them, a feature Bitcoin Core takes advantage of to allow users to store small amounts of arbitrary data in the blockchain without increasing the size of its UTXO database. Since the outputs are unspendable, they aren't -uneconomical--any satoshis in nValue assigned to them becomes -permanently unspendable--so allowing the nValue to be zero ensures +uneconomical--any satoshis assigned to them becomes +permanently unspendable--so allowing the amount to be zero ensures satoshis aren't being destroyed. -==== ScriptPubKey +==== Output scripts The output amount is followed by a compactSize integer indicating the -length of the output's _scriptPubKey_, the script that contains the +length of the _output script_, the script that contains the conditions which will need to be fulfilled in order to spend the bitcoins, the _spending authorization_. According to Bitcoin's -consensus rules, the minimum size of a scriptPubKey is zero. +consensus rules, the minimum size of an output script is zero. -The consensus maximum allowed size of a scriptPubKey varies depending on -when it's being checked. There's no explicit limit on the size of a -scriptPubKey in the output of a transaction, but a later transaction can -only spend a previous output with a scriptPubKey of 10,000 bytes or -smaller. Implicitly, a scriptPubKey can be almost as large as the +The consensus maximum allowed size of an outputs script varies depending on +when it's being checked. There's no explicit limit on the size of an +output script in the output of a transaction, but a later transaction can +only spend a previous output with a script of 10,000 bytes or +smaller. Implicitly, an output script can be almost as large as the transaction containing it, and a transaction can be almost as large as the block containing it. [[anyone-can-spend]] [TIP] ==== -A scriptPubKey with zero length can be spent by a scriptSig containing -OP_TRUE. Anyone can create that scriptSig, which means anyone -can spend an empty scriptPubKey. There are an essentially unlimited +An output script with zero length can be spent by a input script containing +OP_TRUE. Anyone can create that input script, which means anyone +can spend an empty output script. There are an essentially unlimited number of scripts which anyone can spend and they are known to Bitcoin protocol developers as _anyone can spends_. Upgrades to Bitcoin's script language often take an existing anyone-can-spend script and add @@ -683,7 +684,7 @@ future upgrades don't accidentally interfere with your system. ==== Bitcoin Core's policy for relaying and mining transactions effectively -limits scriptPubKeys to just a few templates, called _standard +limits output scripts to just a few templates, called _standard transaction outputs_. This was originally implemented after the discovery of several early bugs in Bitcoin related to the Script language and is retained in modern Bitcoin Core to support @@ -694,8 +695,8 @@ segwit v2 (taproot) tapscripts. We'll look at each of the current standard transaction templates and learn how to parse scripts in <>. -[[witnesses]] -=== Witnesses +[[witness_structure]] +=== Witness structure In court, a witness is someone who testifies that they saw something important happen. Human witnesses aren't always reliable, so courts @@ -743,10 +744,10 @@ Witnesses, the values used to solve the math problems that protect bitcoins, need to be included in the transactions where they're used in order for full nodes to verify them. In the legacy transaction format used for all early Bitcoin transactions, signatures and other data are -placed in the scriptSig field. However, when developers started to +placed in the input script field. However, when developers started to implement contract protocols on Bitcoin, such as we saw in <>, they discovered several significant -problems with placing witnesses in the scriptSig field. +problems with placing witnesses in the input script field. ==== Circular Dependencies @@ -758,7 +759,7 @@ other person becomes unresponsive. A simple solution is to sign transactions out of order. - Tx~0~ pays money from Alice and money from Bob into an output with a - scriptPubKey that requries signatures from both Alice and Bob to spend + script that requries signatures from both Alice and Bob to spend - Tx~1~ spends the previous output to two outputs, one refunding Alice her money and one refunding Bob his money (minus a small amount for @@ -770,7 +771,7 @@ transactions out of order. protocol_. A problem with this construction in the legacy transaction format is -that every field, including the scriptSig field which contains +that every field, including the input script field which contains signatures, is used to build a transaction's identifier (txid). The txid for Tx~0~ is part of the input's outpoint in Tx~1~. That means there's no way for Alice and Bob to construct Tx~1~ until both @@ -784,13 +785,13 @@ _circular dependency_. A more complex series of transactions can sometimes eliminate a circular dependency, but many protocols will then encounter a new concern: it's often possible to solve the same script in different ways. For example, -consider our simple script from <>: +consider our simple script from <>: ---- 2 OP_ADD 4 OP_EQUAL ---- -We can make this script pass by providing the value _2_ in a scriptSig, +We can make this script pass by providing the value _2_ in a input script, but there are several ways to put that value on the stack in Bitcoin. Here are just a few: @@ -811,7 +812,7 @@ OP_PUSHDATA4 0x000000020002 ... ---- -Each alternative encoding of the number _2_ in a scriptSig will produce +Each alternative encoding of the number _2_ in an input script will produce a slightly different transaction with a completely different txid. Each different version of the transaction spends the same inputs (outpoints) as every other version of the transaction, making them all _conflict_ @@ -819,7 +820,7 @@ with each other. Only one version of a set of conflicting transactions can be contained within a valid blockchain. Imagine Alice creates one version of the transaction with +OP_2+ in the -scriptSig and an output that pays Bob. Bob then immediately spends that +input script and an output that pays Bob. Bob then immediately spends that output to Carol. Anyone on the network can replace +OP_2+ with +OP_PUSH1 0x02+, creating a conflict with Alice's original version. If that conflicting transaction is confirmed, then there's no way to @@ -855,7 +856,7 @@ that person could generate alternative signatures and so change the txid. For example, Alice and Bob have deposited their money into a script requiring a signature from both of them to spend. They've also created -a refund transaction that allows each of the to get their money back at +a refund transaction that allows each of them to get their money back at any time. Alice decides she wants to spend just some of the money, so she cooperates with Bob to create a chain of transactions. @@ -892,9 +893,9 @@ mutation is called _unwanted second-party transaction malleability_. As early as https://bitcointalk.org/index.php?topic=40627.msg494697[2011], protocol developers knew how to solve the problems of circular dependence, third-party malleability, and second-party malleability. The -idea was to avoid including the scriptSig in the calculation that +idea was to avoid including the input script in the calculation that produces a transaction's txid. Recall that an abstract name for the data -held by a scriptSig is a _witness_. The idea of separating the rest of +held by a input script is a _witness_. The idea of separating the rest of the data in a transaction from its witness for the purpose of generating a txid is called _segregated witness_ (segwit). @@ -915,28 +916,28 @@ explore the details of upgrading Bitcoin's consensus rules in <>). The soft fork segwit approach is based on anyone-can-spend -scriptPubKeys. A script which starts with any of the numbers 0 to 16 +output scripts. A script which starts with any of the numbers 0 to 16 and followed by 2 to 40 bytes of data is defined as a segwit -scriptPubKey template. The number indicates its version (e.g. 0 is +output script template. The number indicates its version (e.g. 0 is segwit version 0, or _segwit v0_). The data is called a _native witness program_. It's also possible to wrap the segwit template in a P2SH commitment, called a _P2SH witness program_, but we won't deal with that here. -From the perspective of old nodes, these scriptPubKey templates can be -spent with an empty scriptSig. From the perspective of a new node which -is aware of the new segwit rules, any payment to a segwit scriptPubKey -template must only be spent with an empty scriptSig. Notice the -difference here: old nodes _allow_ an empty scriptSig; new nodes -_require_ an empty scriptSig. +From the perspective of old nodes, these output script templates can be +spent with an empty input script. From the perspective of a new node which +is aware of the new segwit rules, any payment to a segwit output script +template must only be spent with an empty input script. Notice the +difference here: old nodes _allow_ an empty input script; new nodes +_require_ an empty input script. -An empty scriptSig keeps witnesses from affecting the txid, eliminating +An empty input script keeps witnesses from affecting the txid, eliminating circular dependencies, third-party transaction malleability, and second-party transaction malleability. But, with no ability to put -data in a scriptSig, users of segwit scriptPubKey templates need a -new field. That field is called the _witness_. +data in an input script, users of segwit output script templates need a +new field. That field is called the _witness structure_. -The introduction of witnesses and witness programs complicates Bitcoin, +The introduction of witness programs and the witness structure complicates Bitcoin, but it follows an existing trend of increasing abstraction. Recall from <> that the original Bitcoin whitepaper describes a system where bitcoins were received to public keys (pubkeys) and spent with @@ -945,50 +946,50 @@ the bitcoins (whoever controlled the corresponding private key) and the signature provided _authentication_ that the spending transaction came from someone who controlled the private key. To make that system more flexible, the initial release of Bitcoin introduced scripts that allow -bitcoins to be received to scriptPubKeys and spent with scriptSigs. +bitcoins to be received to output scripts and spent with input scripts. Later experience with contract protocols inspired allowing bitcoins to -be received to witness programs and spent with witnesses. +be received to witness programs and spent with the witness structure. .Terms used for authorization and authentication data in different parts of Bitcoin [cols="1,1,1"] |=== | | **Authorization** | **Authentication** | **Whitepaper** | Public key | Signature -| **Original (Legacy)** | scriptPubKey | scriptSig -| **Segwit** | Witness program | Witness +| **Original (Legacy)** | Output script | Input script +| **Segwit** | Witness program | Witness structure |=== -==== Witness Serialization +==== Witness Structure Serialization -Similar to the inputs and outputs fields, the witness field contains -several other fields, so we'll start with a map of those bytes from +Similar to the inputs and outputs fields, the witness structure contains +other fields, so we'll start with a map of those bytes from Alice's transaction in <>: [[alice_tx_witness_map]] -.A byte map of the witness from Alice's transaction +.A byte map of the witness structure from Alice's transaction image::../images/witness-byte-map.png["A byte map of the witness from Alice's transaction"] -Unlike the inputs and outputs fields, the overall witness field doesn't -start with any indication of the total number of elements it contains. +Unlike the inputs and outputs fields, the overall witness structure doesn't +start with any indication of the total number of witness stacks it contains. Instead, this is implied by the inputs field--there's one witness -element for every input in a transaction. +stack for every input in a transaction. -The witness field for a particular input does start with a count of the -number of elements they contain. Those elements are called _stack +The witness structure for a particular input does start with a count of the +number of elements they contain. Those elements are called _witness items_. We'll explore them in detail in <>, but for now we need to know that -each stack item is prefixed by a compactSize integer indicating its +each witness item is prefixed by a compactSize integer indicating its size. -Legacy inputs don't contain any witness stack items so their witness +Legacy inputs don't contain any witness items so their witness stack consists entirely of a count of zero (0x00). Alice's transaction contains one input and one stack item. -[[nlocktime]] -=== nLockTime +[[lock_time]] +=== Lock Time -The final field in a serialized transaction is its _nLockTime_. This +The final field in a serialized transaction is its lock time. This field was part of Bitcoin's original serialization format but it was only initially enforced by Bitcoin's policy for choosing which transactions to mine. Bitcoin's earliest known soft fork added a rule @@ -996,21 +997,21 @@ that, starting at block height 31,000, forbid the inclusion of a transaction in a block unless it satisfies one of the following rules: - The transaction indicates that it should be eligible for inclusion in - any block by setting its nLockTime to 0. + any block by setting its lock time to 0. - The transaction indicates that it wants to restrict which blocks it - can be included in by setting its nLockTime to a value less than + can be included in by setting its lock time to a value less than 500,000,000. In this case, the transaction can only be included in a - block that has a height equal to the nLockTime or higher. For - example, a transaction with an nLockTime of 123,456 can be included in + block that has a height equal to the lock time or higher. For + example, a transaction with a lock time of 123,456 can be included in block 123,456 or any later block. - The transaction indicates that it wants to restrict when it can be - included in the blockchain by setting its nLockTime to a value of + included in the blockchain by setting its lock time to a value of 500,000,000 or greater. In this case, the field is parsed as epoch time (the number of seconds since 1970-01-01T00:00 UTC) and the transaction can only be included in a block with a _Median Time Past_ - (MTP) greater than the nLockTime. MTP is normally about an hour or + (MTP) greater than the lock time. MTP is normally about an hour or two behind the current time. The rules for MTP are described in <>. @@ -1040,7 +1041,7 @@ Some of the special rules for coinbase transactions include: which would (at the very least) be confusing given that the coinbase transaction spends fees and subsidy. -- The field which would contain a scriptSig in a normal transaction is +- The field which would contain a input script in a normal transaction is called a _coinbase_. It's this field that gives the coinbase transaction its name. The coinbase field must be at least two bytes and not longer than 100 bytes. This script is not executed but legacy @@ -1123,14 +1124,14 @@ creation of uneconomical outputs as described in | Marker & Flag | 1 | 2 | Inputs Count | 4 | 4 | Outpoint | 4 | 144 -| scriptSig | 4 | 4 -| nSequence | 4 | 16 +| Input script | 4 | 4 +| Sequence | 4 | 16 | Outputs Count | 4 | 4 -| nValue | 4 | 64 (2 outputs) -| scriptPubKey | 4 | 232 (2 outputs with different scripts) +| Amout | 4 | 64 (2 outputs) +| Output script | 4 | 232 (2 outputs with different scripts) | Witness Count | 1 | 1 -| Witnesses | 1 | 66 -| nLockTime | 4 | 16 +| Witness items | 1 | 66 +| Lock time | 4 | 16 | **Total** | _N/A_ | **569** |=== @@ -1162,13 +1163,13 @@ older format, called _legacy serialization_, must be used on the Bitcoin P2P network for any transaction with an empty witness (which is only valid if the transaction doesn't spend any witness programs). -Legacy serialization does not include the marker, flag, and witness +Legacy serialization does not include the marker, flag, and witness structure fields. In this chapter, we looked at each of the fields in a transaction and discovered how they communicate to full nodes the details about the bitcoins to be transferred between users. We only briefly looked at the -scriptPubKey, scriptSig, and witness fields that allow specifying and +output script, input script, and witness structure that allow specifying and satisfying conditions which restrict who can spend what bitcoins. Understanding how to construct and use these conditions is essential to ensuring that only Alice can spend her bitcoins, so they will be the diff --git a/glossary.asciidoc b/glossary.asciidoc index 6a4fca9b..da446d72 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -7,7 +7,7 @@ address:: A Bitcoin address looks like +1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV+. It consists of a string of letters and numbers. It's really an encoded base58check version of a public key 160-bit hash. Just as you ask others to send an email to your email address, you would ask others to send you bitcoin to one of your Bitcoin addresses. bip:: - Bitcoin Improvement Proposals. A set of proposals that members of the bitcoin community have submitted to improve bitcoin. For example, BIP-21 is a proposal to improve the bitcoin uniform resource identifier (URI) scheme. + Bitcoin Improvement Proposals. A set of proposals that members of the bitcoin community have submitted to improve bitcoin. For example, BIP21 is a proposal to improve the bitcoin uniform resource identifier (URI) scheme. bitcoin:: The name of the currency unit (the coin), the network, and the software. @@ -107,8 +107,8 @@ LevelDB:: Lightning Networks:: Lightning Network is a proposed implementation of Hashed Timelock Contracts (HTLCs) with bi-directional payment channels which allows payments to be securely routed across multiple peer-to-peer payment channels. This allows the formation of a network where any peer on the network can pay any other peer even if they don't directly have a channel open between each other. -Locktime:: - Locktime, or more technically nLockTime, is the part of a transaction which indicates the earliest time or earliest block when that transaction may be added to the block chain. +Lock time:: + Lock time is the part of a transaction which indicates the earliest time or earliest block when that transaction may be added to the block chain. mempool:: The bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by Bitcoin nodes, but are not yet confirmed. @@ -165,10 +165,10 @@ P2SH address:: P2SH addresses are Base58Check encodings of the 20-byte hash of a script, P2SH addresses use the version prefix "5", which results in Base58Check-encoded addresses that start with a "3". P2SH addresses hide all of the complexity, so that the person making a payment does not see the script. P2WPKH:: - The signature of a P2WPKH (Pay-to-Witness-Public-Key-Hash) contains the same information as a P2PKH spending, but is located in the witness field instead of the scriptSig field. The scriptPubKey is also modified. + The signature of a P2WPKH (Pay-to-Witness-Public-Key-Hash) contains the same information as a P2PKH spending, but is located in the witness structure instead of the input script. The output script is also modified. P2WSH:: - The difference between P2SH and P2WSH (Pay-to-Witness-Script-Hash) is about the cryptographic proof location change from the scriptSig field to the witness field and the scriptPubKey that is also modified. + The difference between P2SH and P2WSH (Pay-to-Witness-Script-Hash) is about the cryptographic proof location change from the input script to the witness structure and the output script that is also modified. paper wallet:: In the most specific sense, a paper wallet is a document containing all of the data necessary to generate any number of Bitcoin private keys, forming a wallet of keys. However, people often use the term to mean any way of storing bitcoin offline as a physical document. This second definition also includes paper keys and redeemable codes. @@ -200,11 +200,11 @@ Satoshi Nakamoto:: Script:: Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based, and processed from left to right. It is purposefully not Turing-complete, with no loops. -ScriptPubKey (aka pubkey script):: - ScriptPubKey or pubkey script, is a script included in outputs which sets the conditions that must be fulfilled for those satoshis to be spent. Data for fulfilling the conditions can be provided in a signature script. +Output script:: + A script included in outputs which sets the conditions that must be fulfilled for those satoshis to be spent. Data for fulfilling the conditions can be provided in a signature script. -ScriptSig (aka signature script):: - ScriptSig or signature script, is the data generated by a spender which is almost always used as variables to satisfy a pubkey script. +Input script:: + The data generated by a spender which is almost always used as variables to satisfy an output script. secret key (aka private key):: The secret number that unlocks bitcoin sent to the corresponding address. pass:[A secret] key looks like the following: diff --git a/images/input-byte-map.png b/images/input-byte-map.png index c59358352617e66fe0bb1363de72afe0d7a9dfba..d88a18358be37e7dbd7df6a78bfe9e2ee7b3c6d7 100644 GIT binary patch literal 15259 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

|>u-}x-0pPjz;Sy$|AtWIk(9o(TaDpx78`0m}i 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 literal 17152 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 diff --git a/images/tx-map-1.png b/images/tx-map-1.png index 42f3d3e8b06729e49f5a35551b55c9c996be9cfe..fec2399a90fb460df316b65eb357d69e1475a775 100644 GIT binary patch literal 18988 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

$JHc~ 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 XnNit}^O(SQ#$e@D<#Mjw4)}inVWvP( literal 18220 zcmd^ncR1Dk|NoIn3r%}8M48#Li*QQF&Mw)RIhhByhP$i~8b(6)O4hMcWbYAiNHUI9 zI5xlMOW*JJb6?-@b^Wg2_~$pSi`+QQd7szo`FcJd>wQ1bP*bKpz;pnE!BAsW6g4rJ zT~!ziMdrS}@RQD8N3<{)r3I|wC2jYZnL#gi?XmLZ?N$T39+sm=cO8F5C@7tot-trk zzs^ZhL%!>Pwjn7|W@2DF@wfJ=`cL2HdU0b{g#sLB8R_g~@3p!OHVW2C?1D?-9f|US zFBo~Z(-=w&riy#F8GNVz2y+O&WE}RRz+lWy?79HoWM0O=wfpJptAcNG4^S|`7u{3; z2mDc_N(q$)f1*$^`e(Lr zX<^%}+g!!^EKlS;Rg7oOjYK7nndOTiqt@i`=F@t$pEK>l0#6@(IiF4G_4PX#W5;n>>o-Z&w$UD4QICdjC44u(q_YiEGmA;s zt}DwKb({(Jsa#ke36F{GrIb&3A!h%I=RE%;1GX}9Q5k!UgEh5q-Ycn}d`Vqp?Lm^c zaxl}_Oc^_7I^U-AT}jPj>Od7q-43RL87sE1#hV3>i01c8H}+w(;Z zIq-`10wP)AaoPilpN?bQu3pvF)>i#uneUh{uq!tQmTOGr*QaBTo<4nA{ZiHPWj|S% z_-xTHN%eG?L`g}>ssncOzRA`$);2pem0{r9w~hPu_Vzi%ZGGX!XKE>|*apk|xPB8q zCMsICjqoHTEc;gv4|gd{AA1Dnb?&IEXH$H)x3)C~4mO!~k@susYF^UR*7U`O%&k9a zXlM|)D#`P@xd-dwxgJRCmo04Dl^V{0C+Ej!MJ!rixs(&zGn44B&9;rcrV%3iY@v=i z13~kZ7WrRa2-ZI3y>lJokdj(ReX^&m?Sh8Aa5bNl0F|HGk;OJ+_mM}<;U>{tdYX?o z)Jxaqgu-cB#uq{@gWHePhUUm^q5ILAcuxx*OB}{?l zA_r4w-2+OeSa)f*Cv~IQ9Ht$1uo0?Qs%xI^U*B6ipyM;pW)Zc0uGf-BxiVi0b$m5h zvz}4tj!I(EHIA|0s~hUQ*~U_L#;?nsniLK<`Gwyu8>tC!j1{tYYE{FfA-2~{-JUA> zhpnw`A+}*=BbJ^S6PvEheKCN|)7lvdD2tDe&!%9;(dCKa>9KVmU3>e(FK_3qd`RL8 zr)jdxuTYet^TS80a!o^XD`lC0u9 zYNHozumRYqGimQDDz^T9_wJo~n!TyEdC{s_4mG9Nhw+!aNz815e zN+~>Ht*d-G%$(yaM>#BSP}2HYywK4nMj3_o+u&_6(_uLyIQx8;EPFC{ohsnl|K7U& z^qENwY-QAlsn1tu|>AO>w1+N+B$aHon}N#A~i<6yoi)0%g%-D%($9_|~X|FzdiV0h<{?_RV)A#o5ckJPj zmX;hh7aXWye4M7dnSbC@T+=Jj#;mNY;6A4hXCzIbO`^__w`pdYyJ_Z&J~<+=DTRe% zLUuj8cK6=UG+TiftV zJJ0gx*`{w>U`(I@?1I{1e`U|xjG-?!LHp@L_L3jZP^~}sk54Ol5?gN9$nnIAB+C0f z<6VjFrhPuSa{v0gpC^PV(t6%iydX7y>7Os7U%A=G=EsU{k0t&^`}9AakZQeVZKjTl z;Vp<|V(inqE7!;V@1MGka{p^XbXe_~DrYPjNA-7HDqB)7$I|M>wsdr|(c=gyYF3jr zp@EWvS}FO9AL_2e&Zbe;3)bo{bI>r0@&4XeXdOSx$~k!pn}YSUnP^Mcy4NbB*BAXN zWb{RgJAYc|0x5S>BVZ;#axA@utPmSlxaqAgNLj`nUY|5d$iBGPrhvy%v3O1-RFDWi zA5;h@wghDS*O%

DfQ}R&BZKl2k22U13gwLcp37`_`>+6XL3|LIBN@oJwri8D*vW zJ*zQE^lm=AU&79u>6$FZ_4%a2%d!@-PkA$tTzkl!%oQ&vhG-{UCEdrzu1T7WFO#FS zQs{dod1YptZ=`rlxkkm2i&HygaFW;5y^Ojh<0ShYVZL2_8qVbAlM?ceAIB!A$na0O zs{hAAg)Hr>imeGdKDZhyN$&dZJYmlnj2oK*D-Y?vzSh4#DQm`&{}lwJ*dXKQvLM}h zo-QziBc-GSoy)oPY3}Cc=8*oD+K!P7@$SjY@syPA8?;_=X$q`U8Ud1BlP!``rs~8w zV=vYL%3S!{)l&+Oe-t?q9ZY;y$Gmyzyogr%^Knn zIG?%@*7eN|*ZZ*)lzV?LGcz|g3RK2~DkaX9s@d7u4K3q^orbG63hf6DNL6aV%O%j@ zQq6T>&cvywbb8$M*1ecPIe#mF^=B}H;M=w6$__;T7rfK$NTZ+8&IXrELx_fbD|<5(*-S+oC)PM%(@#N}&COG{yYQBrZrZceJRJJ+9$F5Ad* z#5Zn#ZS~Pz!Qf;UGY?h404w=b%X|%b;HCp%@|~{{eyO{Aj7>{j+tf6Nxbah*F#W!f zoS|lH981SL9Myczaet ztz57+(qiUtA=lrx;r+?Ri$A(tt#~?Y(?fXv67kVepJXk=#gIh%fx@(cg6{h914d&ix||gp96K%&BP3<9(-a zA73<>aP4~^rlOcldfa;Lu+al~1MbKVP9vAE$IBX@IB{YwU5h*N2VvH$XZ7Uh{;6q} z=wnY5$>Nx6Z7_^vT28VCEDUXSRL0 zx47v7f8$L*-@aj98`M70p4cd(3Y5f3cbuI>d4U`}D$y|JvbL1toAvG;XO@26cjF>P zVM|p;CEzc)ZoAFA%`U||;&26pcfY<(Pv^$k^U(qp)8~0wFxPF_I`UPqHk2CD;%5rNrBCjSd>(sqi-a20EoN2EPRLb}vCJ3*|OE=~b z2c!Jd^_N0d;0m88UWNq$R-&h%@L-KRvtD64V;|MWP@^h@!Axi;9q=}*zL7NPYA_z> zm93j&k~P_xLR#uI?R`XVlA0JQYf$vfrExtwy4kY3t1IcQSO$E!N@l^wT`}ftrBi~; zK-46u;CeqfvlJ8-UJZu{pQd>F6mdCHg+s)9#mRoC%p+%+Hp;;6?%ggw3Q7_8c{3ed z-SqeGHAO{5nJ$?5ar5xtKJMq5Q1@MnNGi;40nRrqU~n>5{psho=@}WgZ_ag-NfBzA zc6J#;FM}*wV$w=y3D;<)=j9n(mN_K!v){hGtY?ZZm@QjSGj?sia+Tw#LAhta@71yv zNfPg%@Af7t`o+ag^+w!aIr$*)%rf?!ZAcAPJZ(_ol5A^dw}gJZAYDHH@t{H8?MJnt z>^a`D0>ouvzFHe`psz1=iPTFPen1<=u{j?g*9A+IV;(A_OWfXCUJ48KR{VNbx83@K zAsag^>!9^tRkHgno$i&y^kf;Ppc7G1VN%OL%`R)CF0<5S(z-&octl)Obh1uvEAMum zegFxcrjn#rxfU6RC*Oo-;XRyR2kTHqzw3f*?wf*B5%t#d!_}TEBLO;ET8ZAWIUWl? z(}0u^)@MtXJ=OMl(ih4CADY9l%wVZ_hXy5QP%L)qr{k9xvXdWMMamiL&;#bB0;npUwm z-D2&2FTvV#N1seY89KBtS8n46q4|d=S&O8zZwyntl5l?OP_b%heE+M(t!)9GOBmz8 zZ7a-OdCU;4muJF0nvSU^`e$)u{~v_x+j%eGqbJ)q!_j+`nJ^Y*=sJ~_GWG7YL&rz} zJAc}Yd`bB)Y4utLm;;wX<+h4lN{m({65CS^3=CYmb@Xuc_YRn~o(@y#izh~Ibu-_= zOkCYPyqTLK-*e(rR?2QU^B|*Moom+u9bgcMii^XhvN}~!g!h}Y>1G?H0b?;l#}>;K zyC`6{m#cVR&j#P|15fKl*LsR7k{cSX4!Sh*jaXm^CR$n%-b6hSCTayIr?rLQaryb5 z-j2O9lWyigYfGdQZSJLPrqW&tzifD$$|Xi>@DUjqIl`-yr>`ycS|?3g6Ng(eF=f~_ zV|w_0rD`}7BzypQAbV~P|0XXHrmk>AH%b9t_LA8J5p9bS&4QVs&jRmHoKhl_HybCRAGUrK*yqp**#&>b~94 zd!&|c=k<-eznpM5?#}6#s_0Y$$`GnO2fe>|W)|nRT_W7uOl=Ya2U*9|ls)7;41-|t zAr0lm*8mly5oe6>u)E1KCW^gjO4=2@?@!A^MBG)|iO{yNB^zaO${UGr4OceiM%UAz+h;ZFV06M2Y}LUt?fp{7a=4@>bJ|GUVjLHcL~<@I@+eRl(_Wmt-0+U z;a2HH#nVSxIH>*tiOZJMleIRbSD6k!)`DJvE&|tq<(dq?#@`M^rNCiOa?rK&I@&8b z0h3IC216LiiKB}cU-{~wA1?&WMQppy@#*Kv%K`f4z*eq&77zi|4E1QPc<=W{z1;(j zm09qgngs;~Xaa`FZMlnziA{CunRZ90%ciMtyxrPdCjkKNhOI}h*WJ^@9j0OpZ`5<4 zS$qlJOZ_r_XTZ_=%v182l<9NDxxYnY^m?51&EVkRk-+x+R@t3eOH>Z+nM{e#UR@X` zy|T+*jkdBFpa+=6BzV&0}aS4bY1MuLQHn7(mzcXkFjS$D*U7WAOgYlNPyc z?@c)5y--_8%nrquj&Z8Cm3b^^^U_`1zgL5^nt9wjeW1fip^afu4;-{ zSqa)z(xnG`)AI7dwzn~a-Cj}n!z^E%*Ctc!nqP@}!V_{7G=Bt9O$U%us0{f9!ZJMB z#h2s8)3muKx7O!+Q*R`4V9}cFrC~`0AYYQ5AvIg90B?y&+C5jyafl^5^O*_<9Cs!r zCfCiSUeZ)XP7j>KvsgGjdeUsY>OQ}ZHNOy42p73OtxwG+tq&4oIEipez{Tnw3mPMp zTT3|zY@OiIbuAuRkPc>*x}PKJ&-T4jP3n41#acQv2!v`k7gOY*Ux-pwV`LOz-T*v; z2E>7r*m?u~;`;UL(Ab^}Dz#gS#9X4W3i)$cPjI(Piz*C?1Z zP=x_0Cqq8p{w=LOP-uU!E~@^{ouC`gNYk{Z!f|2`LPenGeXwYxg8?3par=kMMHp+O z2A-U6=A_H>A75NehW4HajTo*D_~t{qgS1Q{DsU|Gty-f`9neH)ie0jUd`JFr}+QIH?u->EkbXgUrGl$~r{`1q1Ie6o*{R$3!j z6N?bIU>!?hFthknh}5hG9$y~k{(b-1qx%g`VqEuI`Ym5_n%9N7T(R2hI0g79Y*a#W zW({r~zO`8waL9ILDyR`V6ayg#Y0|XtE$IsleWM0K1|ul;4{jS25={c_^JkNKa2kuoxy@vB_NK z&HUrRN;pzh(d;juT87WJ1=Pl9&>Cvd;%Lkib&Gsceq-}wXS%J#b% zi*LxR_;O=W*)2h9u&EC}3)}Ug<>ELCa599#px3zt^rQ}Ndxd7(9 zG2NWflN^t^x7b^`r30q~q%|Wu7K|h_g**EmsqOv8I46MlMROSYZZ3`3QU}rt^n9@C zL>nu!x!AeZXu9>5&#+L%*6?apS{hc<@P*GrLV$=D`L40^=Mx5%KINyw{%(;NJ%qJq zm-)HiaV7CabG)1>v^OTf+Ygn37!uIoLwy5AW6i)G+=H{7{zNIm+{ber$=7f&pC0+< zZ!%SQ83anK$j}8&t^;1L+>okPJ>r*rg5|mA*6KJZw}z&ZJTrjX_*IwTNUV6Olz26z zQ*yR=RQtvapfTMY9jEJ@Meu8`GAqLmn8Y1o_=|`AomSs7JC@xzNY4-0p#y-s&T2(Y z4ULp40twL-i)TNNIwO1mu1>Z8o;Bd;@8B3u$Zd_vxk8^wFD%prKEJU|)pmAY)%v-< z^P$Y*YU1CV9&n&FEb{>vj(TJi@6EUM5nOhI1YCM{wytb^FTf>am0<0u9+m-DApqMi zfaPSxb=@HRd}a4BLM6tzmT{^#Cmz_-V_Np?BBGCB(U4~b^rH_hV^^Vy`C~R?WxVc7 zJa(5J8d+|Mxnf`Wc<%XmEfI%r5xYGr2wRbO_FXkC(}>ty<`YN(^`vLMPgJG-ArGe0#}TaznbJ^k`wjt zXo!>=>YVUsxU?WaCZRijBXrTzqYJP4knbAM_G=PiA|ey-8~L^PqqP7n>F7lA6DHm| zMO}=jpMc_|j+U`=aL`pypd6u>k3NN&<1$y3h+uqJI(%jW;l^*p&a4h|>lNYkKT4;j zWto}0KS_8lTEqB}EX#cNPDyTKgjVXCn7(Hwe(=rblWkuGI7)Lyq@dusySr_GslF04 ze~fTdtlN;soQJQuYVps!x%H9#vfe~m)4wTP1xHf?V% z!3j)HO$AY;7Z_iS`lJ5%hgP77h4+(hNZp^_w~QtVsARY7t~lXyrxcwSF|H?e&HEhi zf0IO$z}Ht_Bu8yM|M6MtxKxwF-Ym+QIp*Cx!}3Q#E}_)&A1JIGjGLO>^0Mm3Qxj2@ z!PTVzqAs}mRcOqmqCC|9Kj{5^`3PmsOMBwM=SCd`g zJX<$BKMxnmI!nJ#EwapOP{x=GxAoc;)5pBaiOW6b>($l;aqF7N ztdECY^IM;1qTb8ow?8F9Xe5R)9&z;9dq>uN0-W#BoqIFBpXN?*-DqY9W?10~CWy9) z;TW5dxbt_#^4|?SUPd);jx2RIBx8Fb^-R)WGE4vhg?<1t=hg(Puw@Y7w8YB^RjL=- zYTznm*d`8O*!S)>D|4(?ehV{9^84Rs5Ds^h98AEUk$7PVP-SjP$DwsW8XEB6{Q>*% z`^~yJrj->nGw@V3Y0v&*dpdt`xaKKb3gCKhC9j7kfliE09AHgEkr7>J90Ta|W!Y#i zp9IAh)9tn1T!9NK3%28(e$U+YFQ!VaukrrzdzoU}Hi&qRX9d6~jG0HAEom+!i8>`zlXC`p<)|Tf4u)N0bCOmnM9+16Y z9%SOXiDNWh{M{&E2aQZ}eL5eYw%R@XXv?=-66)^7;1K&~nAH0O@$(m6GiB zIGpSk_kLoiufQT*_3Nvc37Q#GDf{i`J^h$(K9(KMF-|iE)1D6Be-#7el$DdKW~y2@ zLSG%GS_=kHOc;x?>hLtHhgBoLe z{)Gl`Stb!{jgkN@-JZQ>tqbT9g4yLvh+E{Mr535VFUy-Qv>A2I#zk6|DU$g#BlPT+ z)vvxXi`{L53wB){i;nhE!SHsrwY_2AUa1>nQ$iO^>CodIvn``vq9fJ;5A$)3}G?MOn=gl*uq- z{NImeNUTa@FoRVL$F`;=)EJd_`7xSdFob7ux^7x&M|I-Ih#1IwLymb zI)jkN zOUy+{fI4G@>>xpqg<;iitu&3f*jig_+`E^L7zrX6hJ|S4A56Ksg& zDS&CeNiM4FPQpfXRr>nk;c~iAJA$EssB$*R76zW=#G41ena^So_@I$l)IdFTtwFEi z?bD|RVx2zjCoB(n6_{1;!b7|0{r)*n)OA7wbudk#m(NEfZ0+s4FHx~3y>_g)xx>BD za)No2yfZ}awOj-e()ENZE){tX21O3Bvdbl{lk+vSz0Xc5xXu*xaz|dpdb%<1ZF`Nv zJ`;CfTf#rsc5{2gr9f;T10-?#BcpYp(c>Nl1-6kK=OgM}Ur;~_Vu!EB&Uq^nH)q|t zzkSO@yccO;_ow?32n0zP=v1EMuU0rXh<30E24K{J0t4#^%bsK`T!oJHSF89eq-=nA z+bXwR)*`cP1dMnpGry$+op@L%1Y8k%<9za9tgY1fFbfFn9APSmI=pTMwM%Gv`Fctx zya^DU!#QAn_LaU?;drjXaVMz#&7}umqd@V10+(I(`znyS2_VYtp+1Xez!ta+ks&aU zTm}nQv)-udhl45#Z47Xcgwq=XLqqr@z@Rk1ERleN`VtK&-q`TD^}!WYiow90W1_-K z7lC>l@7)_tEGac(9odxKU`rw4JU#tm+>n{r#n;V`shSzh5nlqNrK6|U$dCx(jvgr3 zRd3ltgVjwg8W{-*mn!B+pXp7zzLng=)liF1K*R6Ny;Xx|7uMdMMc(lW#IN2&?4e3F z_Wt!5RXdm3^P~$&YB3TwvPo0l0|lbG?zb5pwv}n^1ce3^teS2%fO>lmF`Vqh)qEW+ zu zy~FoaA!Qu{R{^XK&Z*DlnhnfG$%Q6iRFr6jd4iO@Gppd|&^n(52}&+?X^DcEjd%X$yaV`}^pzx0d^v14X6(GadE=_g661ED-F8+QX%e2x2ESHpcA3~5II7u<;r`nQH zXw8)Zh^5my@F5bA#2e=3iE0Iy#fNdthFwEuY_Zu*POp0_1x8iJV z?s{O)V#q*1^okTJ{aXdAXJ*ONK_ zn=H3HGfr@*v*1{)FJd2d`x z;ZKh^!05ED2cu3MoP{$80&zBBiW?1J&@RBQYqwrBPLXohc7um0*sqiPF+)B^4^8|0 z(Mgh31RJKGfa|k9IyHLzKhQ6H~h3p-2*JX;~%`?zl|EKebd0X0FvPlgL$IuM5 zt*rdIc@RSY6-)ZbQ&PVSl`S6QU}JOR%9TfO^1X=y%TAa@7|4KZfj+{=#gLi`D*2*) zA02^s-@AA3rLvYu&)#9EeI$$n>?_^^3Z@K0B5pj=OCRHT(L4yA$ppWogUDx2Ir-Jo z&!^YfF@qnSS&-5Sg0#T0MngkC@=n>jrUh9c2!uc&uvmABU2XQ>MAVo;d-(1`yT|Ve zDAG`;$bQ1lhJk$r^lvoqo_jF>&ce{pNZ8oh>+JZ% zDYSt976F(oO?E01S6kc~WS+l&FNUFlXXiKyLoV#^C3Oh#OpFByavwi{V9M9>y?{ae z&iboYiaQQvg05NKlz3j?A7~?2K9^=5O&*9Dl>O)5VPvXG|B)T_+cQBi^v_5suRQHM z|35-9W)z-&ZvV`Z9&Dp5JNS=?slFfEu<<{Vr&YTaF?0V6q|&{iatE&tR^m@iHTVCJ zOF&VOH~?2ZU?wgqA%k9F=m>>AC}rR*Fa<|>or6m@=A59|>Z_A|2T#RGK_P=6UB~97iuyec_$gp?$o>j|R1Qq$6(mo= z-Z6?cUy|CHajF24+JBEV?yo9@JPT^K$Snhg2J{h~S&O4(dmRS}I*`We0N*MZ)LD-> zz1f5%?itE?$elFE#K649P(i0p@s?Ge6M#QCz8hVGJ})P6d2C&lqBw%l{Ns2JS?m~( zoS_P51ZY8^8~Ya1n8?NpETqCxU310J4#ZpWP@=7#wy?mcaYi5v1QrEd+`$2IC<-;- zy=AeJRW64_#wFT$F1b~#C(7~gn*ZzPD0hkJYi!sFI(tDlc!xUXMn~>c9T_gPlM?8a znZUnZ>Kzqio=X|bhnCi7qYFS1$X1y9^Gf%BN#`gaGaEb%h|+arS1~_Pga!yMsr!It zT9Rg3S2?9p^uIl+pA48`prY{79em&bA`2L0fH%&bKU4$O2<#)Ep>Pn`b#B~9fOPAH z-9@w=bD~;hMT|eoja!=TE$0fswfhaVGMs5$KyFcv_ZSa?R{%M>K(|I}F?hyNfK+{! zW(M>C$M0+~gghpJv~;cf8bx>wqAW11<2t~`=_+zGg+K$1a9y?Pui30)K-i8xDdQ1Y zuV7arfO~*FV7GS}q}tsh{FWA&on`QHk4u3GV+Y|KKwi+@VQ2vL1PM8O+@s-+5EAnj zC)IropuRF&q!&~HPeMzaL^%{N3$j6khAyhjebzh(hy<*FbSo%Vx1PZorsw470j7qg z3^?U&dn$A(Fzq1X15=72m4}-fy-7fr$(=Tk2~ZDHd3gBSqtn}KoUrrkYCu^cjDUe5 zbdS7zP+??lAX2ksGJ*#DsGug~;|dP0}&)T{V?0{jlS zj*{`X9oZNbuQ7_R6KM`sEi9ma!Z|{S73iE?7Z`Uhg{^EqKHTpKcGYuL&L!x_K=>!B zC~3Puk;MU+wH<4SL>%TLU626u=N)7Zx;cnKPKAuIb^VNHs5B=wLB@j%Sb`jsi9p%B ze~{oBaeLGBkADui4zO{Mj|b=+K?jsv5hr?UfyRN9D3-eR^C>ZJA04EJhXF>~oN@H+ zL@pzedDd#!x85MveRF-e7Z7G9)FZ;`;)AXcD9eEqc~5ZZ7Q3|6cbEe@)o_KzUNZ&g zZHe6bsT%A4{Rtuu5NYD%Gb+{q9T}uSoj%ULT0WzrKM@I=2(xB;YZDoyiJ&FeH1LPuxdsVB6(NfVw4t+DaNs}CfC%IC zv-l6x6R22u8v^JDIj`W*)G{E{rttVs7)Nugl-^E>$*$j}W|h>2GK2#N*%UuOxQKP} z8GKNAu$NlX+}u2%`&^qxW-J9NU^qSt(jX^Xe{tawEb8{$_NH9<+EfNYYXAV#V3A;D zl`Gc==R`nDLz5HG`gA2k6>dEP%&?zS_~FC3=tkf}P{oh_y2uoqo}7FI4lrDwo{{q- zHHnek$g}G;x)%(m8;AT%K!dMjyb2M*>oshCP(h2m9#h3WA}cOFq@NuW3Nz5!hVzfO)M5nOf*+5Bbl17^W!u?rB@N>Xhz=qT8B8POWbQ1iXSeLOhlqK_#|P9w6Oc-V7LIaM!ZQ)YDNSFevmH$ zKo!1d8yaRv&6R0|i-2YawFzPe=tB@eBV+?jhH(N(7#ui&88GNxH#gvnfhwIl4h*~t z?&R1Urjly|MpSeE?_LwH>nSlVPltTg?KgXUH>24+ejEW4N!532A%4f7^rNI{gJ$*t zxN!?h?Q?Q2PkJ2mXm?4QBSWo~Y zszfcD7!Z|5j0kz+)qChCzTInu{W8ck`^#s2fM^TO+gj-M3T-ST2hy{$bnti?isC?t zS_V>24-CH+h-v7RSe6% zAdMyk>ftb#AUG2*i~o4G$^R7`4T#jh_TN%>c7nnJ6NILB%N`!Y84*Uh?~sy?*l*L_ zp|Ym1>e=sLkl#iCONLpmGQe(kXzG6B`nykdqBu@$?ZM^Q+P4A^uP|3g`i_4BxU-L&FpwX>~ka z4-_^qHd*TOwgwNwo|^^1QCl0A+fD=5&U&;q7$hj5xZe~=I4Eqf*WHlc)tyav9vMj? z@lq9bHP-ug{aTZiY+`@E0pyfQvLpH00f_E{eFekCbFp37#&-fxiXyVBQ&Z0&Zqfju z_Hs&?!o4u{mSB_^LV3|#OQ67LSZ0%s`jq~?qv|@A{dx@cnC9%r^T+}UiD!*tsHC*H zujCwo)#wfqM6CwQ#zj!scbE(QJNWBy^?3mRTU_bn0j{yfpYCte zRv_^TTqjn0_EaSGKN&!kGYj+%6eU9fa<@#?{}=q>f0{)-dG3Xg`Ad*<1Ay>E@E564 zeRe-Q5fvLqRdefOY&7t53;(J~3ALBX9b!?T_-S(pbX45I(dI5utjrVlN4!h~XDr6M2`PabO3E9D5yo*9Tl^6Eibaz3cC2-uv0qj>0O&##w-b zB6j{bZ3jl6$^}1JXGiXD5F4Rul7*-z4C?0=hh!eX$!ObAxp*L%=fQ?5%$3PJ2;k?q z2b{lKKb;1DXI^IBJ?s*akdphmoht$hfCc8_O(;xF@I%4CD+z!G?B`(iFE#-e1i(E* zH>;y7O$&5JP$C;-c%jf;DgP6H_-8LtMbmS_=J%?1N<4oFk1ctxZVnhwdlu1MCj%tn;_^oLMU6(Xq@1{P&f|1v}lZitj&3* zV1SY>-aOYRFUV9u5tM>Q1OQ_a7y}5;U9i5QU|RwD5|61Dt^Kl$hhO4~b9P*VaO86v zyVRd0fCE|Jxnv97ekTdJ1o8(7d1D2=CK=k?C*r31mhk}4;rH;elaSQWy>{(j%4Pm# zSUHSmK7cTkWtr(OKx}iCK;j4J&>SaY7{R5ko1pP*RKiQzteGJZC?qz5bMm>C8f4m$ zMGlTP$L0vF@3XmexTPfkC4C~Vo<*P$AQK9(fjkPhL)2+lUIx_5S0XmyaUMSzVc;7O z*KEcvIn8+a0Sdp2?f~qsz?VXkj)!y8_Sye1%M-=Lf*kyH_SG-SFkF*Sa0(p6P^t_d zNEyfD99Zz3pnj2I$w1zBO_M)5zk;@}fo>m~ zg7Oz7LXNepL;(@3-Z7rIAh#2&1PMiu!cp7`#&=IoPi}lscDC9tcOz)!m%hUOjXF2S zT-2hK+sH+(9z^a@fS0gI9$0EqptXS@5~A>Mixkh!NsxCNkeQ#|D&4VGAcBD?#s}y& zC||U_Mcn3rtOqO+d}{|m7{cn$*Ek3rr$KfA<=r3>^ae2LPNsb1F*C>cn42wkgdm|1 z2tXMbZr6@dRY!VZ#;PPy)k?vQ6rpucnkNd`IgaiJ@%@@Dsh1Uk4?fUYCjLGX(grgQ z_ajVs>V1k>02!2CINdv^#zY*F6 zhL!=K#>jsrJtMmVW%JPS^6k}ydxZ&{&+Z6Kesij!PWF~1E`K~I;5`ceWDY?|!QGWT zGJqT2*nvu;!m)_Li!f(H_)DjS0475Z`LZ+cVCMbt41lr1L2o(0jG!}e7j&E9b>Z|t z)jlrTzY7P7YTIjYt^z;*aXr9eZ-Q1H3z~LPcE#G%1J*hlk=o+$CN_3O0ShSdf9s;@ zIvGC*{5z-o8ptmdL-L1JlMC-Z8tlb52$|-b-ftQ7z-Q#-ZmQlrBYK(vFNcN| z87cQ3%H4`^{IjbUe?Vix6q^-_zo@460f}xZ1dTBxtmOFQSD!tML0vvyve&=xSb$kfW)V?R`te zJ?10}g!(V+wC3ynLxWF_aoNHw3s2f}kZ!{NAb%TVE6%6Q_!R~66I4JEiQquh;t8w< z2igMZF|$M4rzgimAw7!jgh4#K>7{Uuh7m8FC`!ISsYBcdVw>Ip55Bk6HdsAiGs9ps zXsVkWA?zg^k4!W87jkbfDRQ-6?yzvv3Zw83u9KRm9ilAk7Nij;(JclLBtn4=xE>d2TPstTiOq(XnU@U55jbFg}5pyua2z~;x?kzZ6~2jk<0>V2pHe2 zx-q%2krXd*sH>>!Lh5j9aHoTvggDnu>{kRb3{DsG-)ts;$pJSA;1}EBN`-2Xrta=u zN=`8@geQR6{3fNZGxP5HSfhXZKAr zXI!33B%dnWw74W@RNA@4A_G@y0j8l-HSWAFZ$mnwrOS*e;gW_-7 zt#Jt&7ii+CVe+co4nn;IVglm!Ac*Q2<8=B6Z6>gdV3hOH4UAfVNC39-q3SuDaqhR9 ze@t``PimY$*d<&50o4WMv$!q@XO#c@sm;9lr3p!v&u^@Mh2T)3mxNCa2|z!PHL%|M zmK&L>ye!9rFYiE#^W?5Lv!ML~j@t{BgcjT&P4p3;DH;^cP%h9hd{wW0Y09bvbWx{req9ETh~uVlqVoTjf3L9 zSqG?=tnPF=2>8!LR?$!g$mAfEHr^jDM}$HWkrGH9H$;E(!thW!fki&!crM*A+7+^of zQ3F)A?q37bG0%J9%u=VA*#16Qz0R4V z9zszbamok4%bK_h>(*=PJ4pOs6QOnPc#KMtv^w0=_^+bbcz+10tLiBDA`lyf{>hA8 zLd8(cU>*~zl{eUo^mf$*4JU~8uW(|UcEM?MJyOS@71h?OAQ8Scy)mQ(x0`l6eryKk zjQ^GwCTdhdhTpn>%MqTpEi#j~YU*Zw=s=A|H~Wp dZ|2{|cK*#*x80SD;B;Ux*ehy^*_X}y{~O2Bi5CC> diff --git a/images/tx-weight-map.png b/images/tx-weight-map.png index 45f0d6609cae95c9e15936ba567c46b8bd3acfb7..6d53942c83619599295e4b3e0ebe7e0528d98833 100644 GIT binary patch literal 15789 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 literal 14542 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 WZMmSotpZ*i!RQ#CD>>_U`+otu)>3Bx diff --git a/images/witness-byte-map.png b/images/witness-byte-map.png index 1095cba398172c6c90a7dde180939c2ccb337ed2..7117c8155c6a5d2c144ed0feffd6ced2a696300b 100644 GIT binary patch literal 9633 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 m5AgZ_KXr%l`lnb~HW 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 diff --git a/second_edition_changes.asciidoc b/second_edition_changes.asciidoc index 2aab9ee6..80c02d33 100644 --- a/second_edition_changes.asciidoc +++ b/second_edition_changes.asciidoc @@ -46,9 +46,9 @@ == Chapter 7 * Time Locks - * Transaction level absolute (nLocktime) + * Transaction level absolute lock time * UTXO/Script level absolute (CHECKLOCKTIMEVERIFY) - * Input level relative (nSequence) + * Input level relative sequence * UTXO/Script level relative (CHECKSEQUENCEVERIFY) * Median Time Past * Timelock defense against fee sniping @@ -82,7 +82,7 @@ * Diverging hard forks * Soft forks for feature upgrades * Signaling soft forks with block version -* BIP-9 (versionbits) signaling and activation +* BIP9 (versionbits) signaling and activation * Consensus software development == Chapter 11 diff --git a/third_edition_changes.asciidoc b/third_edition_changes.asciidoc index f4d5b117..bd960d93 100644 --- a/third_edition_changes.asciidoc +++ b/third_edition_changes.asciidoc @@ -114,10 +114,10 @@ Bitcoin Addresses, Balances, and Other Abstractions * Redeem Script and Validation * Data Recording Output (RETURN) * Timelocks -* Transaction Locktime (nLocktime) +* Transaction lock time * Check Lock Time Verify (CLTV) * Relative Timelocks -* Relative Timelocks with nSequence +* Relative Timelocks with sequence * Relative Timelocks with CSV * Median-Time-Past * Timelock Defense Against Fee Sniping