From d84186c01caa6728aff157b596908e8c5fdd2ad0 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Tue, 3 Jan 2017 17:07:37 -0600 Subject: [PATCH 001/124] Specify which 1 byte push op codes are valid This adds documentation to BIP141 about which 1 byte push op codes are valid for segwit. This is needed because `OP_1NEGATE` is a 1 byte push op code, but is NOT a valid 1 byte push op code for segwit. See the implementation here for why `OP_1NEGATE` is not valid: https://github.com/bitcoin/bitcoin/blob/14d01309bed59afb08651f2b701ff90371b15b20/src/script/script.cpp#L228 --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 7cc587a28f..cbdf5cedf5 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -83,7 +83,7 @@ If all transactions in a block do not have witness data, the commitment is optio === Witness program === -A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a 1-byte push opcode (for 0 to 16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". +A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a valid 1-byte push opcode (OP_0,OP_1,OP_2...,OP_16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". There are two cases in which witness validation logic are triggered. Each case determines the location of the witness version byte and program, as well as the form of the scriptSig: # Triggered by a scriptPubKey that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails. (''"native witness program"'') From 608d5dc95f2ddcee32758fe73de6d68b99021e39 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Tue, 3 Jan 2017 17:46:14 -0600 Subject: [PATCH 002/124] Update bip-0141.mediawiki Clarifying rewording, `OP_0` is not a 1 byte push op code since it pushes the empty byte vector onto the stack. --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index cbdf5cedf5..eeb6eb93db 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -83,7 +83,7 @@ If all transactions in a block do not have witness data, the commitment is optio === Witness program === -A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a valid 1-byte push opcode (OP_0,OP_1,OP_2...,OP_16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". +A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a select subset of opcodes (OP_0,OP_1,OP_2,...,OP_16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". There are two cases in which witness validation logic are triggered. Each case determines the location of the witness version byte and program, as well as the form of the scriptSig: # Triggered by a scriptPubKey that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails. (''"native witness program"'') From b2b24b53935544f45188fbe1ae8701074b8cc9f6 Mon Sep 17 00:00:00 2001 From: azuchi Date: Sun, 19 Feb 2017 16:19:17 +0900 Subject: [PATCH 003/124] BIP 143: Unify coin unit --- bip-0143.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 476b84da5a..77d75c9a49 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -551,7 +551,7 @@ These examples show that FindAndDelete for the signature is not app nLockTime: 00000000 The input comes from a P2WSH witness program: - scriptPubKey : 00209e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19, value: 200000 + scriptPubKey : 00209e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19, value: 0.00200000 redeemScript : OP_CHECKSIGVERIFY <0x30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01> ad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 From ce5d831516bfdb34904a765b3f742e38621ec036 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 27 Sep 2017 18:50:05 +0000 Subject: [PATCH 004/124] BIP 2: Allow editors to fix typos --- bip-0002.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index ea60d1d7c1..05f13e547e 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -95,6 +95,8 @@ The BIP editor will: The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and update BIP headers as appropriate. +BIP editors may also, at their option, unilaterally make and merge strictly-editorial changes to BIPs, such as correcting misspellings, fixing broken links, etc. + ==BIP format and structure== ===Specification=== From b84deb2adf23695a0f21b5f056257be65294c064 Mon Sep 17 00:00:00 2001 From: philsmd <921533+philsmd@users.noreply.github.com> Date: Tue, 7 Nov 2017 22:19:47 +0100 Subject: [PATCH 005/124] bip38 typo: specifid -> specified There was a small typo in the bip38 specification. If I'm not totally mistaken the word should be "specified" (not specifid) Thx --- bip-0038.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki index bfe1f4ab61..9e4d3ef164 100644 --- a/bip-0038.mediawiki +++ b/bip-0038.mediawiki @@ -170,7 +170,7 @@ To recalculate the address: # Derive ''passfactor'' using scrypt with ''ownerentropy'' and the user's passphrase and use it to recompute ''passpoint'' # Derive decryption key for ''pointb'' using scrypt with ''passpoint'', ''addresshash'', and ''ownerentropy'' # Decrypt ''encryptedpointb'' to yield ''pointb'' -# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specifid in ''flagbyte''. +# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specified in ''flagbyte''. =====Decryption===== # Collect encrypted private key and passphrase from user. From 9d879aaf5ce36c270d6874ef72aa723732f3bc12 Mon Sep 17 00:00:00 2001 From: nopara73 Date: Sat, 12 May 2018 21:51:18 +0700 Subject: [PATCH 006/124] Fix typos --- bip-0126.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index f498b1cb33..4cfa2929a7 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -50,7 +50,7 @@ Applications which wish to comply both with this procedure and BIP69 should appl A HIT is Standard form if it adheres to all of the following rules: -# The number of unique output scripts must be equal to the number of unique inputs scripts (irrespective of the number of inputs and outputs). +# The number of unique output scripts must be equal to the number of unique input scripts (irrespective of the number of inputs and outputs). # All output scripts must be unique. # At least one pair of outputs must be of equal value. # The largest output in the transaction is a member of a set containing at least two identically-sized outputs. @@ -88,7 +88,7 @@ Clients which create intentional HITs must have the capability to form alternate An HIT formed via the preceding procedure will adhere to the following conditions: -# The number of unique inputs scripts must exceed the number of output scripts. +# The number of unique input scripts must exceed the number of output scripts. # All output scripts must be unique. # At least one pair of outputs must be of equal value. ## "Standard outputs" refers to the set of outputs with equal value From 1dcb4eef3083323f17a3446e240e07a1115c3b3f Mon Sep 17 00:00:00 2001 From: tadhg Date: Fri, 30 Nov 2018 18:37:42 +0100 Subject: [PATCH 007/124] Fix typo in BIP47 --- bip-0047.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index af801f96ac..4b1763fb2d 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -150,7 +150,7 @@ It is assumed that Alice can easily obtain Bob's payment code via a suitable met Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform Bob of her payment code via the following procedure: -Note: this procedure is used if Bob uses a version 1 payment code (regardless of the the version of Alice's payment code). If Bob's payment code is not version 1, see the appropriate section in this specification. +Note: this procedure is used if Bob uses a version 1 payment code (regardless of the version of Alice's payment code). If Bob's payment code is not version 1, see the appropriate section in this specification. # Alice constructs a transaction which sends a small quantity of bitcoins to Bob's notification address (notification transaction) ## The inputs selected for this transaction MUST NOT be easily associated with Alice's notification address From a66d1852a27007e14d1d233afbeb3ce362f1c13c Mon Sep 17 00:00:00 2001 From: tadhg Date: Fri, 7 Dec 2018 01:25:19 +0100 Subject: [PATCH 008/124] Missing word --- bip-0047.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index af801f96ac..ce4af498fe 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -229,7 +229,7 @@ The following actions are recommended to reduce this risk: # Bob is watching for incoming payments on B' ever since he received the notification transaction from Alice. -## Bob calculates n shared secrets with Alice, using the 0th public key derived Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window. +## Bob calculates n shared secrets with Alice, using the 0th public key derived from Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window. ## Bob calculates the ephemeral deposit addresses using the same procedure as Alice:
B' = B + sG
## Bob calculate the private key for each ephemeral address as:
b' = b + s
From e5c708b3e74f8ab0e855c215f94ed8aadbca3e7d Mon Sep 17 00:00:00 2001 From: Chm Date: Sat, 22 Dec 2018 23:50:26 +0800 Subject: [PATCH 009/124] Typo of test data in bip 143 Transaction signature got sigHashType byte missing in decomposed block. --- bip-0143.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index ed07c8281d..9619da1c17 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -187,7 +187,7 @@ To ensure consistency in consensus-critical behaviour, developers should test th nHashType: 01000000 sigHash: c37af31116d1b27caf68aae9e3ac82f1477929014d5b917657d0eb49478cb670 - signature: 304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee + signature: 304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01 The serialized signed transaction is: 01000000000102fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000494830450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac000247304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee0121025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee635711000000 From 9b03604c5bae35510c420b7a8a42dd00eed41dd3 Mon Sep 17 00:00:00 2001 From: Javed Khan Date: Thu, 25 Oct 2018 21:00:52 +0530 Subject: [PATCH 010/124] bip158: update test vectors --- bip-0158.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0158.mediawiki b/bip-0158.mediawiki index 535ffd9a5e..5ebfaed3d9 100644 --- a/bip-0158.mediawiki +++ b/bip-0158.mediawiki @@ -315,6 +315,8 @@ complete serialization of a filter is: * N, encoded as a CompactSize * The bytes of the compressed filter itself +A zero element filter MUST be written as one byte containing zeroes. + ==== Signaling ==== This BIP allocates a new service bit: From c7cc17f14ec44fa2c0463a6ed2fd9bfcaac7535c Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Fri, 7 Jun 2019 14:26:45 +0700 Subject: [PATCH 011/124] [bip38] Consistent hyphenation usage --- bip-0038.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki index bfe1f4ab61..9642f42f1c 100644 --- a/bip-0038.mediawiki +++ b/bip-0038.mediawiki @@ -39,7 +39,7 @@ This proposal is hereby placed in the public domain. :'''''User story:''' As a Bitcoin user who uses paper wallets, I would like the ability to add encryption, so that my Bitcoin paper storage can be two factor: something I have plus something I know.'' :'''''User story:''' As a Bitcoin user who would like to pay a person or a company with a private key, I do not want to worry that any part of the communication path may result in the interception of the key and theft of my funds. I would prefer to offer an encrypted private key, and then follow it up with the password using a different communication channel (e.g. a phone call or SMS).'' :'''''User story:''' (EC-multiplied keys) As a user of physical bitcoins, I would like a third party to be able to create password-protected Bitcoin private keys for me, without them knowing the password, so I can benefit from the physical bitcoin without the issuer having access to the private key. I would like to be able to choose a password whose minimum length and required format does not preclude me from memorizing it or engraving it on my physical bitcoin, without exposing me to an undue risk of password cracking and/or theft by the manufacturer of the item.'' -:'''''User story:''' (EC multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate. +:'''''User story:''' (EC-multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate. ==Specification== This proposal makes use of the following functions and definitions: From 62c759eae68c380c1a494540331254039cbbd1ee Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Sat, 3 Aug 2019 13:55:29 -0500 Subject: [PATCH 012/124] bip112: fix trivial typo --- bip-0112.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index f3d370a3f1..b159786586 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -36,7 +36,7 @@ When executed, if any of the following conditions are true, the script interpret Otherwise, script execution will continue as if a NOP had been executed. -BIP 68 prevents a non-final transaction from being selected for inclusion in a block until the corresponding input has reached the specified age, as measured in block-height or block-time. By comparing the argument to CHECKSEQUENCEVERIFY against the nSequence field, we indirectly verify a desired minimum age of the +BIP 68 prevents a non-final transaction from being selected for inclusion in a block until the corresponding input has reached the specified age, as measured in block-height or block-time. By comparing the argument to CHECKSEQUENCEVERIFY against the nSequence field, we indirectly verify a desired minimum age of the output being spent; until that relative age has been reached any script execution pathway including the CHECKSEQUENCEVERIFY will fail to validate, causing the transaction not to be selected for inclusion in a block. From a0481edf92c91ca785d3b6da577aba5a0929213d Mon Sep 17 00:00:00 2001 From: Enegnei Date: Sun, 30 Aug 2020 22:01:46 +0200 Subject: [PATCH 013/124] Minor grammar fix --- bip-0032.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index f2f1e48b7e..5a1d778440 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -118,7 +118,7 @@ To shorten notation, we will write CKDpriv(CKDpriv(CKDpriv(m,3H),2),5 * N(m/aH/b/c) = N(m/aH/b)/c = N(m/aH)/b/c. However, N(m/aH) cannot be rewritten as N(m)/aH, as the latter is not possible. -Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public keys allows reconstruction of all descendant non-hardened public keys. +Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public key allows reconstruction of all descendant non-hardened public keys. ===Key identifiers=== From 688b0dabab2fcdadffe69bf1bdf5d4773b5be391 Mon Sep 17 00:00:00 2001 From: Enegnei Date: Sun, 30 Aug 2020 22:41:52 +0200 Subject: [PATCH 014/124] A few more minor grammar fixes / improvements --- bip-0032.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index 5a1d778440..341dc08949 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -24,7 +24,7 @@ This document describes hierarchical deterministic wallets (or "HD Wallets"): wa The specification is intended to set a standard for deterministic wallets that can be interchanged between different clients. Although the wallets described here have many features, not all are required by supporting clients. -The specification consists of two parts. In a first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree. +The specification consists of two parts. In the first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree. ==Copyright== @@ -36,7 +36,7 @@ The Bitcoin reference client uses randomly generated keys. In order to avoid the Deterministic wallets do not require such frequent backups, and elliptic curve mathematics permit schemes where one can calculate the public keys without revealing the private keys. This permits for example a webshop business to let its webserver generate fresh addresses (public key hashes) for each order or for each customer, without giving the webserver access to the corresponding private keys (which are required for spending the received funds). -However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customer's payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root. +However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customers' payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root. ==Specification: Key derivation== @@ -103,7 +103,7 @@ The function N((k, c)) → (K, c) computes the extended public key correspond To compute the public child key of a parent private key: * N(CKDpriv((kpar, cpar), i)) (works always). * CKDpub(N(kpar, cpar), i) (works only for non-hardened child keys). -The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further for more information. +The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further below for more information. ====Public parent key → private child key==== @@ -183,7 +183,7 @@ When a business has several independent offices, they can all use wallets derive ====Recurrent business-to-business transactions: N(m/iH/0)==== In case two business partners often transfer money, one can use the extended public key for the external chain of a specific account (M/i h/0) as a sort of "super address", allowing frequent transactions that cannot (easily) be associated, but without needing to request a new address for each payment. -Such a mechanism could also be used by mining pool operators as variable payout address. +Such a mechanism could also be used by mining pool operators as a variable payout address. ====Unsecure money receiver: N(m/iH/0)==== @@ -211,7 +211,7 @@ Private and public keys must be kept safe as usual. Leaking a private key means Somewhat more care must be taken regarding extended keys, as these correspond to an entire (sub)tree of keys. One weakness that may not be immediately obvious, is that knowledge of a parent extended public key plus any non-hardened private key descending from it is equivalent to knowing the parent extended private key (and thus every private and public key descending from it). This means that extended public keys must be treated more carefully than regular public keys. -It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private key never risks compromising the master or other accounts. +It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private keys never risks compromising the master or other accounts. ==Test Vectors== From 5ec9df085ebc2adfef5ab667662a8aba967f06cd Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Thu, 28 Sep 2017 08:47:50 -0500 Subject: [PATCH 015/124] BIP-0047: Adjust text to match test vectors The original implementation of BIP-47 in Samourai Wallet reversed the parameters in the calculation of the HMAC-SHA512 step of notification transaction blinding. This change adjusts the text to match the as-implementend behavior in deployed BIP-47 wallets and the test vectors. --- bip-0047.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index af801f96ac..ada9deb5d9 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,7 +1,7 @@ RECENT CHANGES: +* (28 Sep 2017) Adjust text to match test vectors * (19 Apr 2016) Define version 2 payment codes * (17 Apr 2016) Clarify usage of outpoints in notification transactions -* (18 Dec 2015) Update explanations to resolve FAQs
   BIP: 47
@@ -158,7 +158,7 @@ Note: this procedure is used if Bob uses a version 1 payment code (regardless of
 ## Alice selects the private key corresponding to the designated pubkey: 
a
## Alice selects the public key associated with Bob's notification address:
B, where B = bG
## Alice calculates a secret point:
S = aB
-## Alice calculates a 64 byte blinding factor:
s = HMAC-SHA512(x, o)
+## Alice calculates a 64 byte blinding factor:
s = HMAC-SHA512(o, x)
### "x" is the x value of the secret point ### "o" is the outpoint being spent by the designated input # Alice serializes her payment code in binary form. From bc069fa050fb9816746c9e13b34d9d13a7d89562 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Mon, 15 Feb 2021 06:22:42 -0900 Subject: [PATCH 016/124] Finalize BIP-47 --- bip-0047.mediawiki | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index ada9deb5d9..4806b0b625 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,7 +1,7 @@ RECENT CHANGES: +* (15 Feb 2021) Finalize specification * (28 Sep 2017) Adjust text to match test vectors * (19 Apr 2016) Define version 2 payment codes -* (17 Apr 2016) Clarify usage of outpoints in notification transactions
   BIP: 47
@@ -10,11 +10,17 @@ RECENT CHANGES:
   Author: Justus Ranvier 
   Comments-Summary: Unanimously Discourage for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0047
-  Status: Draft
+  Status: Final
   Type: Informational
   Created: 2015-04-24
 
+==Status== + +This BIP can be be considered final in terms of enabling compatibility with wallets that implement version 1 and version 2 reusable payment codes, however future developments of the reusable payment codes specification will not be distributed via the BIP process. + +The Open Bitcoin Privacy Project RFC repo should be consulted for specifications related to version 3 or higher payment codes: https://github.com/OpenBitcoinPrivacyProject/rfc + ==Abstract== This BIP defines a technique for creating a payment code which can be publicly advertised and associated with a real-life identity without creating the loss of security or privacy inherent to P2PKH address reuse. From 497ad1c81a8d7e882c86ffe780db5b01db66d686 Mon Sep 17 00:00:00 2001 From: katesalazar Date: Fri, 17 Sep 2021 21:08:05 +0200 Subject: [PATCH 017/124] Remove transparent background from figure. Before this change, the figure presented black text on transparent background, which might be unconvenient when using a browser able to pass a dark theme preference to some environments where this document is published, currently notably GitHub. A white background could help a better visualization compromise. White background on the figure is the single purpose of this revision. This PNG was compiled using: dot -Tpng states.gv -o states.png --- bip-0009/states.gv | 22 ++++++++++++++++++++++ bip-0009/states.png | Bin 30632 -> 50153 bytes 2 files changed, 22 insertions(+) create mode 100644 bip-0009/states.gv diff --git a/bip-0009/states.gv b/bip-0009/states.gv new file mode 100644 index 0000000000..9dc95c56e3 --- /dev/null +++ b/bip-0009/states.gv @@ -0,0 +1,22 @@ +/* There are many ways to compile this, but one of them is: + * + * $ dot -Tpng states.gv -o states.png + */ +digraph { + /* States. */ + DEFINED; FAILED; STARTED; LOCKED_IN; ACTIVE; + + /* Relationships between states, labeled where applicable. */ + DEFINED -> DEFINED; + DEFINED -> FAILED [label = "timeout ≤ MTP"]; + DEFINED -> STARTED [label = "starttime ≤ MTP < timeout"]; + FAILED -> FAILED; + STARTED -> STARTED; + STARTED -> FAILED [label = "timeout ≤ MTP"]; + STARTED -> LOCKED_IN [label = "(MTP < timeout) AND (threshold reached)"]; + LOCKED_IN -> ACTIVE [label = "Always"]; + ACTIVE -> ACTIVE; + + /* Visualization hack to unclutter output. */ + nodesep = 1.2; +} diff --git a/bip-0009/states.png b/bip-0009/states.png index 09312a1c0381845d10afe2ffbbec912ee1b1b1e0..2048ed870df296d86bef1145b1f10aa980801c8f 100644 GIT binary patch literal 50153 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 literal 30632 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 Date: Thu, 18 Nov 2021 23:55:55 +0100 Subject: [PATCH 018/124] BIP 155: add Yggdrasil --- bip-0155.mediawiki | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bip-0155.mediawiki b/bip-0155.mediawiki index 3e7b0d829d..0ec680194d 100644 --- a/bip-0155.mediawiki +++ b/bip-0155.mediawiki @@ -117,6 +117,11 @@ The list of reserved network IDs is as follows: | CJDNS | 16 | Cjdns overlay network address +|- +| 0x07 +| YGGDRASIL +| 16 +| Yggdrasil overlay network address |} Clients are RECOMMENDED to gossip addresses from all known networks even if they are currently not connected to some of them. That could help multi-homed nodes and make it more difficult for an observer to tell which networks a node is connected to. @@ -184,6 +189,10 @@ I2P addresses MUST be sent with the I2P network ID, with the decode Cjdns addresses are simply IPv6 addresses in the fc00::/8 range[https://github.com/cjdelisle/cjdns/blob/6e46fa41f5647d6b414612d9d63626b0b952746b/doc/Whitepaper.md#pulling-it-all-together Cjdns whitepaper: Pulling It All Together]. They MUST be sent with the CJDNS network ID. +==Appendix E: Yggdrasil address encoding== + +Yggdrasil addresses are simply IPv6 addresses in the 0200::/7 range[https://yggdrasil-network.github.io/faq.html#will-yggdrasil-conflict-with-my-network-routing Yggdrasil FAQ]. They MUST be sent with the YGGDRASIL network ID. + ==References== From 3248581928b5299525b32979c8a569ce9107fdfc Mon Sep 17 00:00:00 2001 From: katesalazar Date: Fri, 13 May 2022 20:20:49 +0000 Subject: [PATCH 019/124] Bring back transparent background to figures Black arrows are visible only in light theme (unless white background for dark theme). Two-color arrows are visible in light theme and in dark theme. --- .gitignore | 6 + bip-0174/build.sh | 9 + bip-0174/coinjoin-workflow.svg | 1460 +++++++++++++--- bip-0174/coinjoin-workflow.tex | 12 +- bip-0174/multisig-workflow.svg | 2957 ++++++++++++++++++++++++++------ bip-0174/multisig-workflow.tex | 19 +- 6 files changed, 3612 insertions(+), 851 deletions(-) create mode 100644 .gitignore create mode 100755 bip-0174/build.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..d939d2a572 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +bip-0174/coinjoin-workflow.aux +bip-0174/coinjoin-workflow.log +bip-0174/coinjoin-workflow.pdf +bip-0174/multisig-workflow.aux +bip-0174/multisig-workflow.log +bip-0174/multisig-workflow.pdf diff --git a/bip-0174/build.sh b/bip-0174/build.sh new file mode 100755 index 0000000000..2de1e56275 --- /dev/null +++ b/bip-0174/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +pdflatex -output-format=pdf coinjoin-workflow.tex && \ +inkscape --with-gui --export-text-to-path \ + --export-plain-svg=coinjoin-workflow.svg coinjoin-workflow.pdf && \ +pdflatex -output-format=pdf multisig-workflow.tex && \ +inkscape --with-gui --export-text-to-path \ + --export-plain-svg=multisig-workflow.svg multisig-workflow.pdf && \ +echo '"success"' diff --git a/bip-0174/coinjoin-workflow.svg b/bip-0174/coinjoin-workflow.svg index 4c2a041d70..3b6b952e8f 100644 --- a/bip-0174/coinjoin-workflow.svg +++ b/bip-0174/coinjoin-workflow.svg @@ -1,8 +1,54 @@ - - - - + + + + + + image/svg+xml + + + + + + + + @@ -107,7 +153,7 @@ - + @@ -376,281 +422,1133 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bip-0174/coinjoin-workflow.tex b/bip-0174/coinjoin-workflow.tex index e0516ffeea..a325321ae4 100644 --- a/bip-0174/coinjoin-workflow.tex +++ b/bip-0174/coinjoin-workflow.tex @@ -7,7 +7,7 @@ \usepackage{lmodern} \renewcommand*\familydefault{\sfdefault} \usepackage{tikz} -\usetikzlibrary{shapes,arrows} +\usetikzlibrary{shapes,arrows.meta} \tikzset{>=latex} \begin{document} % \sffamily{} @@ -22,7 +22,7 @@ rounded corners] \begin{tikzpicture}[auto] % outlining the flowchart on a grid - \matrix[column sep=3ex,row sep=2ex]{ + \matrix[column sep=3ex,row sep=3ex]{ \node [block_center] (0alice1) {Alice creates a PSBT with only her inputs with UTXOs filled in.\\Sends it to Bob.}; @@ -49,7 +49,13 @@ \\ };% end matrix % connecting nodes with paths - \draw[line width = 1pt, ->] + \draw [ultra thick, draw=black, -{Stealth[length=8pt]}] + (0alice1) edge (1bob1) + (1bob1) edge (2carol1) + (2carol1) edge (3bob2) + (3bob2) edge (4alice1) + (4alice1) edge (5alice2); + \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}] (0alice1) edge (1bob1) (1bob1) edge (2carol1) (2carol1) edge (3bob2) diff --git a/bip-0174/multisig-workflow.svg b/bip-0174/multisig-workflow.svg index 8abe4c51c6..2d873b052b 100644 --- a/bip-0174/multisig-workflow.svg +++ b/bip-0174/multisig-workflow.svg @@ -1,6 +1,47 @@ - + + viewBox="0 0 375.988 411.906" version="1.2" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg1424" + sodipodi:docname="multisig-workflow.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + + + + image/svg+xml + + + + + + @@ -192,277 +233,931 @@ - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + @@ -471,397 +1166,1381 @@ - - - - - + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - + - - - - + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -873,23 +2552,173 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bip-0174/multisig-workflow.tex b/bip-0174/multisig-workflow.tex index 2b8744d32a..d2250cfa6b 100644 --- a/bip-0174/multisig-workflow.tex +++ b/bip-0174/multisig-workflow.tex @@ -7,7 +7,7 @@ \usepackage{lmodern} \renewcommand*\familydefault{\sfdefault} \usepackage{tikz} -\usetikzlibrary{shapes,arrows} +\usetikzlibrary{shapes,arrows.meta} \tikzset{>=latex} %\pgfdeclarelayer{bg} % declare background layer %\pgfsetlayers{bg,main} % set order of layers @@ -83,7 +83,15 @@ };% end matrix % connecting nodes with paths % \begin{pgfonlayer}{bg} - \draw[line width = 1pt, ->] + \draw [ultra thick, draw=black, -{Stealth[length=8pt]}] + (R1) edge (R2) + (R2) edge (R3) + (R3) -| (R4C1) + (R3) edge (R4C2) + (R5) edge (R6) + (R6) edge (R7) + (R7) edge (stop); + \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}] (R1) edge (R2) (R2) edge (R3) (R3) -| (R4C1) @@ -92,7 +100,12 @@ (R6) edge (R7) (R7) edge (stop); % circumvent missing arrow - \draw[line width = 1pt, ->] + \draw [ultra thick, draw=black, -{Stealth[length=8pt]}] + (R4C1) |-+(0,-2.2em)-| (R5) + (R4C2) edge (R5) + (R4C3) |-+(0,-2.2em)-| (R5) + (R3) -| (R4C3); + \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}] (R4C1) |-+(0,-2.2em)-| (R5) (R4C2) edge (R5) (R4C3) |-+(0,-2.2em)-| (R5) From 9df0b19c243362e798186d82e4484a677dc6f854 Mon Sep 17 00:00:00 2001 From: scgbckbone Date: Tue, 22 Nov 2022 01:45:26 +0100 Subject: [PATCH 020/124] update bip-0129.mediawiki --- bip-0129.mediawiki | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bip-0129.mediawiki b/bip-0129.mediawiki index 8719fe420f..d2c29d9400 100644 --- a/bip-0129.mediawiki +++ b/bip-0129.mediawiki @@ -47,11 +47,14 @@ Concerns #4 and #5 should be handled by Signers and are out of scope of this pro ==Specification== ===Prerequisites=== -This proposal assumes the parties in the multisig support [https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki BIP-0032], [https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki BIP-0322], [https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md the descriptor language] and [https://tools.ietf.org/html/rfc3686 AES encryption]. +This proposal assumes the parties in the multisig support [https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki BIP-0032], [https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki BIP-0322], [https://github.com/bitcoin/bips/blob/master/bip-0380.mediawiki BIP-0380 Output Script Descriptors] ([https://github.com/bitcoin/bips/blob/master/bip-0381.mediawiki BIP-0381],[https://github.com/bitcoin/bips/blob/master/bip-0382.mediawiki BIP-0382],[https://github.com/bitcoin/bips/blob/master/bip-0383.mediawiki BIP-0383]) and [https://tools.ietf.org/html/rfc3686 AES encryption]. ===File Extensions=== All descriptor and key records should have a .bsms file extension. Encrypted data should have a .dat extension. +===Newline=== +This specification uses line feed (LF) control character \n. + ===Roles=== ====Coordinator==== @@ -141,7 +144,7 @@ Whereas: * Password = "No SPOF" * Salt = TOKEN * c = 2048 -* dkLen = 256 +* dkLen = 256 bits (32 bytes) * DKey = Derived ENCRYPTION_KEY ====Encryption Scheme==== From 3e10085c09f1322691cb6a22355f30ae54c1eab5 Mon Sep 17 00:00:00 2001 From: D++ <82842780+dplusplus1024@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:49:26 -0600 Subject: [PATCH 021/124] Update Anchor Link Fixed the link to the #simpler-syntax portion of the BIP. --- bip-0021.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index 0fba9bcf9a..cdc37baae7 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -37,7 +37,7 @@ Elements of the query component may contain characters outside the valid range. === ABNF grammar === -(See also [[#Simpler syntax|a simpler representation of syntax]]) +(See also [[#simpler-syntax|a simpler representation of syntax]]) bitcoinurn = "bitcoin:" bitcoinaddress [ "?" bitcoinparams ] bitcoinaddress = *base58 From 9f25645be58f4db49cc2ae5a0a8ceca241517767 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Thu, 6 Jul 2023 16:36:29 +0200 Subject: [PATCH 022/124] bip-0324: fix git instruction order in test_sage_decoding.py Tiny fix correcting the order of commands, for `git checkout` one has to change into the repository directory first. --- bip-0324/test_sage_decoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0324/test_sage_decoding.py b/bip-0324/test_sage_decoding.py index c26c33477d..1ec5fdf45a 100644 --- a/bip-0324/test_sage_decoding.py +++ b/bip-0324/test_sage_decoding.py @@ -5,8 +5,8 @@ * Clone the SwiftEC repository, and enter the directory: git clone https://github.com/Jchavezsaab/SwiftEC - git checkout 5320a25035d91addde29d14164cce684b56a12ed cd SwiftEC + git checkout 5320a25035d91addde29d14164cce684b56a12ed * Generate parameters for the secp256k1 curve: From 2f1e2bc4d8ea0da70b7e840875292b0a5df8228e Mon Sep 17 00:00:00 2001 From: sgmoore Date: Tue, 15 Aug 2023 12:54:34 -0700 Subject: [PATCH 023/124] added colon at end of if statement - bip-0119.mediawiki Python requires a colon at the end of an if statement to denote the beginning of the block of code that will be executed if the condition is True. If the colon is omitted, a syntax error will occur, and the code will not run. Since the syntax error will prevent the code from running, it won't introduce any vulnerabilities by itself. However, it will cause the application to fail at the point where the code is parsed, which might expose other issues if error handling is not implemented properly. --- bip-0119.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0119.mediawiki b/bip-0119.mediawiki index 86defa7cf7..99554009b8 100644 --- a/bip-0119.mediawiki +++ b/bip-0119.mediawiki @@ -88,7 +88,7 @@ def execute_bip_119(self): self.context.precomputed_ctv_data = self.context.tx.get_default_check_template_precomputed_data() # If the hashes do not match, return error - if stack[-1] != self.context.tx.get_default_check_template_hash(self.context.nIn, self.context.precomputed_ctv_data) + if stack[-1] != self.context.tx.get_default_check_template_hash(self.context.nIn, self.context.precomputed_ctv_data): return self.errors_with(errors.script_err_template_mismatch) return self.return_as_nop() From 91bbe3307c622a420d328407d29739a41a3f8b82 Mon Sep 17 00:00:00 2001 From: Chun Date: Sun, 20 Aug 2023 08:59:19 +0100 Subject: [PATCH 024/124] Update bip-0087.mediawiki typo fix --- bip-0087.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0087.mediawiki b/bip-0087.mediawiki index d270027e57..308e8521e5 100644 --- a/bip-0087.mediawiki +++ b/bip-0087.mediawiki @@ -40,7 +40,7 @@ A modern standardization is needed for multisig derivation paths. There are som m / purpose' / cosigner_index / change / address_index
-BIP45 unecessarily demands a single script type (here, P2SH). In addition, BIP45 sets cosigner_index in order to sort the purpose' public keys of each cosigner. This too is redundant, as descriptors can set the order of the public keys with multi or have them sorted lexicographically (as described in [https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki BIP67]) with sortedmulti. Sorting public keys between cosigners in order to create the full derivation path, prior to sending the key record to the coordinator to create the descriptor, merely adds additional unnecessary communication rounds. +BIP45 unnecessarily demands a single script type (here, P2SH). In addition, BIP45 sets cosigner_index in order to sort the purpose' public keys of each cosigner. This too is redundant, as descriptors can set the order of the public keys with multi or have them sorted lexicographically (as described in [https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki BIP67]) with sortedmulti. Sorting public keys between cosigners in order to create the full derivation path, prior to sending the key record to the coordinator to create the descriptor, merely adds additional unnecessary communication rounds. The second multisignature "standard" in use is m/48', which specifies: From 496b6c9ecc61ef7c80ce00c8925cad627bf034f6 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 29 Aug 2023 23:39:04 +0200 Subject: [PATCH 025/124] bip-0158: remove unused and unrelated "data pushes" definition This BIP is not in any way connected to the rules of Bitcoin script, i.e. the "data pushes" term is also not used anywhere and its definition can hence be removed. --- bip-0158.mediawiki | 3 --- 1 file changed, 3 deletions(-) diff --git a/bip-0158.mediawiki b/bip-0158.mediawiki index 8887d32f14..a3e0269413 100644 --- a/bip-0158.mediawiki +++ b/bip-0158.mediawiki @@ -39,9 +39,6 @@ that is designed to reduce the filter size for regular wallets. ''CompactSize'' is a compact encoding of unsigned integers used in the Bitcoin P2P protocol. -''Data pushes'' are byte vectors pushed to the stack according to the rules of -Bitcoin script. - ''Bit streams'' are readable and writable streams of individual bits. The following functions are used in the pseudocode in this document: * new_bit_stream instantiates a new writable bit stream From 6fd7de46b79898cff9dd1ada44fb65bd22b41f6c Mon Sep 17 00:00:00 2001 From: GoodDaisy <90915921+GoodDaisy@users.noreply.github.com> Date: Fri, 13 Oct 2023 09:05:19 +0800 Subject: [PATCH 026/124] Fix typos --- bip-0088.mediawiki | 6 +++--- bip-0152.mediawiki | 2 +- bip-0176.mediawiki | 2 +- bip-0300.mediawiki | 4 ++-- bip-0330.mediawiki | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-0088.mediawiki b/bip-0088.mediawiki index 936f2ca931..49be7dba42 100644 --- a/bip-0088.mediawiki +++ b/bip-0088.mediawiki @@ -89,7 +89,7 @@ installation of malicious or incorrect profiles, though. ==Specification== -The format for the template was choosen to make it easy to read, convenient and visually unambigous. +The format for the template was chosen to make it easy to read, convenient and visually unambigous. Template starts with optional prefix m/, and then one or more sections delimited by the slash character (/). @@ -127,13 +127,13 @@ Constraints: # To avoid ambiguity, an index range that matches a single value MUST be specified as Unit range. # To avoid ambiguity, an index range 0-2147483647 is not allowed, and MUST be specified as Wildcard index template instead # For Non-unit range, range_end MUST be larger than range_start. -# If there is more than one index range within the Ranged index template, range_start of the second and any subsequent range MUST be larger than the range_end of the preceeding range. +# If there is more than one index range within the Ranged index template, range_start of the second and any subsequent range MUST be larger than the range_end of the preceding range. # To avoid ambiguity, all representations of integer values larger than 0 MUST NOT start with character 0 (no leading zeroes allowed). # If hardened marker appears within any section in the path template, all preceding sections MUST also specify hardened matching. # To avoid ambiguity, if a hardened marker appears within any section in the path template, all preceding sections MUST also use the same hardened marker (either h or '). # To avoid ambiguity, trailing slashes (for example, 1/2/) and duplicate slashes (for example, 0//1) MUST NOT appear in the template. -It may be desireable to have fully unambiguous encoding, where for each valid path template string, there is no other valid template string that matches the exact same set of paths. This would enable someone to compare templates for equality through a simple string equality check, without any parsing. +It may be desirable to have fully unambiguous encoding, where for each valid path template string, there is no other valid template string that matches the exact same set of paths. This would enable someone to compare templates for equality through a simple string equality check, without any parsing. To achieve this, two extra rules are needed: diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 8200714b95..fad17460fa 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -211,7 +211,7 @@ There are several design goals for the Short ID calculation: SipHash is a secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables. We truncate the output from SipHash-2-4 to 48 bits (see next section) in order to minimize space. The resulting 48-bit hash is certainly not large enough to avoid intentionally created individual collisons, but by using the block hash as a key to SipHash, an attacker cannot predict what keys will be used once their transactions are actually included in a relayed block. We mix in a per-connection 64-bit nonce to obtain independent short IDs on every connection, so that even block creators cannot control where collisions occur, and random collisions only ever affect a small number of connections at any given time. The mixing is done using SHA256(block_header || nonce), which is slow compared to SipHash, but only done once per block. It also adds the ability for nodes to choose the nonce in a better than random way to minimize collisions, though that is not necessary for correct behaviour. Conversely, nodes can also abuse this ability to increase their ability to introduce collisions in the blocks they relay themselves. However, they can already cause more problems by simply refusing to relay blocks. That is inevitable, and this design only seeks to prevent network-wide misbehavior. -====Random collision probabilty==== +====Random collision probability==== Thanks to the block-header-based SipHash keys, we can assume that the only collisions on links between honest nodes are random ones. diff --git a/bip-0176.mediawiki b/bip-0176.mediawiki index 60311c4c77..2f5ee9f9d6 100644 --- a/bip-0176.mediawiki +++ b/bip-0176.mediawiki @@ -16,7 +16,7 @@ Bits is presented here as the standard term for 100 (one hundred) satoshis or 1/ == Motivation == The bitcoin price has grown over the years and once the price is past $10,000 USD or so, bitcoin amounts under $10 USD start having enough decimal places that it's difficult to tell whether the user is off by a factor of 10 or not. Switching the denomination to "bits" makes comprehension easier. For example, when BTC is $15,000 USD, $10.05 is a somewhat confusing 0.00067 BTC, versus 670 bits, which is a lot clearer. -Additonally, reverse comparisons are easier as 59 bits being $1 is easier to comprehend for most people than 0.000059 BTC being $1. Similar comparisons can be made to other currencies: 1 yen being 0.8 bits, 1 won being 0.07 bits and so on. +Additionally, reverse comparisons are easier as 59 bits being $1 is easier to comprehend for most people than 0.000059 BTC being $1. Similar comparisons can be made to other currencies: 1 yen being 0.8 bits, 1 won being 0.07 bits and so on. Potential benefits of utilizing "bits" include: diff --git a/bip-0300.mediawiki b/bip-0300.mediawiki index ab81c3223c..e5048e75b2 100644 --- a/bip-0300.mediawiki +++ b/bip-0300.mediawiki @@ -290,7 +290,7 @@ For example: if there are two sidechains, and we wish to upvote the 7th bundle o The version number allows us to shrink the upvote vector in many cases. Version 0x00 omits the upvote vector entirely (ie, 6 bytes for the whole M4) and sets this block's M4 equal to the previous block's M4. Version 0x01 uses one byte per sidechain, and can be used while all ACKed withdrawals have an index under 256 (ie, 99.99%+ of the time). -Version 0x02 uses a full two bytes per sidechain (each encoded in little endian), but it always works no matter how many withdrawl proposals exist. +Version 0x02 uses a full two bytes per sidechain (each encoded in little endian), but it always works no matter how many withdrawal proposals exist. Version 0x03 omits the upvote vector, and instead upvotes only those withdrawals that are leading their rivals by at least 50 votes. If a sidechain has no pending bundles, then it is skipped over when M4 is created and parsed. @@ -465,7 +465,7 @@ M2: 1 get, 1 delete, 1 create M3: 3 get, 1 delete, 2 create, 2 hash for each coinbase output: search for prior M3 for this sidechain lookup if M3 was ever rejected or paid in the past - for each prior proposed withdrawl: (included in 1 get+delete+create) + for each prior proposed withdrawal: (included in 1 get+delete+create) M4: 1 get + for every proposed withdraw, 1 get, 1 delete, 1 create, 1 add v0 needs to read and parse previous block diff --git a/bip-0330.mediawiki b/bip-0330.mediawiki index c24ea427b8..996f74e15f 100644 --- a/bip-0330.mediawiki +++ b/bip-0330.mediawiki @@ -210,7 +210,7 @@ The reconcildiff message is used by reconciliation initiator to announce transac | uint32[] || ask_shortids || The short IDs that the sender did not have. |} -Upon receipt a "reconcildiff" message with ''success=1'' (reconciliation success), a node sends an "inv" message for the transactions requested by 32-bit IDs (first vector) containing their wtxids (with parent transactions occuring before their dependencies). +Upon receipt a "reconcildiff" message with ''success=1'' (reconciliation success), a node sends an "inv" message for the transactions requested by 32-bit IDs (first vector) containing their wtxids (with parent transactions occurring before their dependencies). If ''success=0'' (reconciliation failure), receiver should announce all transactions from the reconciliation set via an "inv" message. In both cases, transactions the sender of the message thinks the receiver is missing are announced via an "inv" message. The regular "inv" deduplication should apply. From 44794188ec9c0f202f8d7263392860b89a24948d Mon Sep 17 00:00:00 2001 From: Coco_Ardo <105318683+RealCocoArdo@users.noreply.github.com> Date: Fri, 20 Oct 2023 20:51:06 +0200 Subject: [PATCH 027/124] Update bip-0042.mediawiki spelling Bitcoin the network is written with a capital B. The unit is writting with small b. --- bip-0042.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0042.mediawiki b/bip-0042.mediawiki index 223076f59e..2c5de6dfa3 100644 --- a/bip-0042.mediawiki +++ b/bip-0042.mediawiki @@ -15,7 +15,7 @@ Although it is widely believed that Satoshi was an inflation-hating goldbug he never said this, and in fact programmed Bitcoin's money supply to grow indefinitely, forever. He modeled the monetary supply as 4 gold mines being discovered per mibillenium (1024 years), with equal intervals between them, each one being depleted over the course of 140 years. -This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion Bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default. +This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default. To combat this, this document proposes a controversial change: making Bitcoin's monetary supply finite. From 3732ac478b0ea2decb678cfc5552c92538bd23ca Mon Sep 17 00:00:00 2001 From: Vehorny <153144728+vehorny@users.noreply.github.com> Date: Thu, 7 Dec 2023 02:12:27 +0100 Subject: [PATCH 028/124] Update bip-0010.mediawiki --- bip-0010.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki index 42071f3a6f..289e3b041a 100644 --- a/bip-0010.mediawiki +++ b/bip-0010.mediawiki @@ -93,10 +93,10 @@ The following is an example TxDP from Armory, produced while running on the test In this transaction, there are two inputs, one of 150 BTC and the other of 12 BTC. This transaction combines 162 BTC to create two outputs, one of 160 BTC, one 1.9995 BTC, and a tx fee of 0.0005. In this TxDP, both inputs have been signed, and thus could broadcast immediately. -The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpretted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP. +The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpreted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP. A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _TXSIGS_ lines between serializations, though it is not the recommended method for combining TxDPs. == Reference Implementation == -This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of verion 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format. +This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of version 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format. From 682fd8bc588df7d71476420f7bc9ed1cbacabd05 Mon Sep 17 00:00:00 2001 From: Vehorny <153144728+vehorny@users.noreply.github.com> Date: Thu, 7 Dec 2023 02:13:58 +0100 Subject: [PATCH 029/124] Update bip-0060.mediawiki --- bip-0060.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0060.mediawiki b/bip-0060.mediawiki index 8e9f289f05..626a039725 100644 --- a/bip-0060.mediawiki +++ b/bip-0060.mediawiki @@ -23,14 +23,14 @@ The implementation is problematic because the RelayTransactions flag is an optio One property of Bitcoin messages is their fixed number of fields. This keeps the format simple and easily understood. Adding optional fields to messages will cause deserialisation issues when other fields come after the optional one. -As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherance to standard messages with field length compliance with every protocol version. +As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherence to standard messages with field length compliance with every protocol version. Another property of fixed-length field messages is the ability to pass stream operators around for deserialization. This property is also lost, as now the deserialisation code must know the remaining length of bytes to parse. The parser now requires an additional piece of information (remaining size of the stream) for parsing instead of being a dumb reader. ==Specification== === version === -When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version. +When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No further communication is possible until both peers have exchanged their version. Payload: From 83ca57f22268edb1ff2815085a4383ba8d1b55fe Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 11 Dec 2023 18:11:22 -0500 Subject: [PATCH 030/124] Create bip-???-cat.mediawiki --- bip-???-cat.mediawiki | 89 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 bip-???-cat.mediawiki diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki new file mode 100644 index 0000000000..8cd7baae1b --- /dev/null +++ b/bip-???-cat.mediawiki @@ -0,0 +1,89 @@ +
+  BIP: ???
+  Layer: Consensus (soft fork)
+  Title: OP_CAT
+  Author: Ethan Heilman 
+          Armin Sabouri 
+  Status: Draft
+  Type: Standards Track
+  Created: 2023-10-21
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-op-cat
+  License: BSD-3-Clause
+
+ +==Abstract== + +This BIP defines OP_CAT a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126. + +When evaluated the OP_CAT instruction: +# Pops the top two values off the stack, +# concatenate the popped values together, +# and then pushes the concatenated value on the top of the stack. + +OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size of greater than the maximum script element size of 520 Bytes. + +==Motivation== +Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. For instance this prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. + +OP_CAT aims to expands the toolbox of the tapscript developer with a simple, modular and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: + +* Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf +* Tree Signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ +* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely requires the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html +* Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. +* Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. +* Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. + +The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script for which an evaluation could have memory usage exponential in the size of the script. +For instance a script which pushed an 1 Byte value on the stack then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. + +==Specification== + +OP_CAT pops two elements of the stack, concatenates them together in stack order and pushes the resultant element onto the stack. Given the stack [x1,x2], where x2 is at the top of the stack, OP_CAT will push x1||x2 onto the stack. By '||' we denote concatenation. + +Implementation +
+case OP_CAT:
+{
+    if (stack.size() < 2)
+        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
+    valtype& vch1 = stacktop(-2);
+    valtype& vch2 = stacktop(-1);
+    if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE)
+        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
+    vch1.insert(vch1.end(), vch2.begin(), vch2.end());
+    stack.pop_back();
+}
+break;
+
+This implementation is inspired by the original implementation of OP_CAT as shown below. Alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. + +The value of MAX_SCRIPT_ELEMENT_SIZE is 520 Bytes + +==Notes== + +OP_CAT as it existed in the Bitcoin codebase prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefL381 which disabled it. + +
+  // (x1 x2 -- out)
+  if (stack.size() < 2)
+    return false;
+  valtype& vch1 = stacktop(-2);
+  valtype& vch2 = stacktop(-1);
+  vch1.insert(vch1.end(), vch2.begin(), vch2.end());
+  stack.pop_back();
+  if (stacktop(-1).size() > 5000)
+    return false;
+  }
+
+ +==References== + + + +==Acknowledgements== + +We wish to acknowledge Dan Gould for encouraging and helping review this effort. + +== Copyright == +This document is placed in the public domain. From f1169dd1fc067825c56016379a8b84c033b6eeb2 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Tue, 12 Dec 2023 08:24:39 -0500 Subject: [PATCH 031/124] Fixes typo Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 8cd7baae1b..281fa3c535 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -39,7 +39,7 @@ For instance a script which pushed an 1 Byte value on the stack then repeated th ==Specification== -OP_CAT pops two elements of the stack, concatenates them together in stack order and pushes the resultant element onto the stack. Given the stack [x1,x2], where x2 is at the top of the stack, OP_CAT will push x1||x2 onto the stack. By '||' we denote concatenation. +OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack [x1,x2], where x2 is at the top of the stack, OP_CAT will push x1||x2 onto the stack. By '||' we denote concatenation. Implementation

From 26e8e5f7fc1f51e6ba861de7a25524e1b561a08d Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Tue, 12 Dec 2023 08:26:36 -0500
Subject: [PATCH 032/124] Better fits bitcoin style guide

"If an if only has a single-statement then-clause, it can appear on the same line as the if, without braces. In every other case, braces are required, and the then and else clauses must appear correctly indented on a new line."

Co-authored-by: kallewoof 
---
 bip-???-cat.mediawiki | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 281fa3c535..05f16d651b 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -45,8 +45,9 @@ Implementation
 
 case OP_CAT:
 {
-    if (stack.size() < 2)
+    if (stack.size() < 2) {
         return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
+    }
     valtype& vch1 = stacktop(-2);
     valtype& vch2 = stacktop(-1);
     if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE)

From 0335c9d18813f3a18cff9f9b776432114f6a570c Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Tue, 12 Dec 2023 08:27:35 -0500
Subject: [PATCH 033/124] Grammar fix

Co-authored-by: kallewoof 
---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 05f16d651b..6833621100 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -57,7 +57,7 @@ case OP_CAT:
 }
 break;
 
-This implementation is inspired by the original implementation of OP_CAT as shown below. Alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. +This implementation is inspired by the original implementation of OP_CAT as shown below. An alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. The value of MAX_SCRIPT_ELEMENT_SIZE is 520 Bytes From 3d31e5c8947bf5d2d8ba02dc22c5302085b9f91b Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Tue, 12 Dec 2023 08:59:03 -0500 Subject: [PATCH 034/124] Adds brackets Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 6833621100..584f697f60 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -50,8 +50,9 @@ case OP_CAT: } valtype& vch1 = stacktop(-2); valtype& vch2 = stacktop(-1); - if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE) + if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE) { return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION); + } vch1.insert(vch1.end(), vch2.begin(), vch2.end()); stack.pop_back(); } From bb725e652357f2502fba3cd8e2e8fa92e40ca706 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:43:42 -0500 Subject: [PATCH 035/124] Wording Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 584f697f60..40b4cc55a8 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -13,7 +13,7 @@ ==Abstract== -This BIP defines OP_CAT a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126. +This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126. When evaluated the OP_CAT instruction: # Pops the top two values off the stack, From 9779dc9920eeacbf39a9b53e5165423551de209e Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:44:14 -0500 Subject: [PATCH 036/124] Keeps past tense consistant Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 40b4cc55a8..1beb7c565e 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -17,7 +17,7 @@ This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows When evaluated the OP_CAT instruction: # Pops the top two values off the stack, -# concatenate the popped values together, +# concatenates the popped values together, # and then pushes the concatenated value on the top of the stack. OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size of greater than the maximum script element size of 520 Bytes. From c5d66d670671dbac8265b5588f3de8e1ca4f3972 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:44:44 -0500 Subject: [PATCH 037/124] Better phrasing Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 1beb7c565e..c84680acaf 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -20,7 +20,7 @@ When evaluated the OP_CAT instruction: # concatenates the popped values together, # and then pushes the concatenated value on the top of the stack. -OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size of greater than the maximum script element size of 520 Bytes. +OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 Bytes. ==Motivation== Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. For instance this prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. From 848352f40875e43ba7fd5ecabb63272f165fcd4a Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:45:04 -0500 Subject: [PATCH 038/124] Phrasing Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index c84680acaf..d921524315 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -23,7 +23,7 @@ When evaluated the OP_CAT instruction: OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 Bytes. ==Motivation== -Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. For instance this prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. +Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. OP_CAT aims to expands the toolbox of the tapscript developer with a simple, modular and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: From a2b0100671f492628ce219d706fa71a506ca0475 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:47:36 -0500 Subject: [PATCH 039/124] Typo Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index d921524315..32595c33c8 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -29,7 +29,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf * Tree Signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ -* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely requires the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html +* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. From 6a790ec52635a7aa52cc2c20dc25a9236daae5f8 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:47:50 -0500 Subject: [PATCH 040/124] Removes space in ref Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 32595c33c8..cd952c82e7 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -31,7 +31,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Tree Signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ * Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. -* Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. +* Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script for which an evaluation could have memory usage exponential in the size of the script. From 01db3acab0830a43b526c6c5c0a8daad77704d7b Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:47:58 -0500 Subject: [PATCH 041/124] Removes space in ref Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index cd952c82e7..9e98da0fd9 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -32,7 +32,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. -* Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. +* Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script for which an evaluation could have memory usage exponential in the size of the script. For instance a script which pushed an 1 Byte value on the stack then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. From 945e2a374249114c313d6204d7db61dfe496fe97 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 14 Dec 2023 23:48:46 -0500 Subject: [PATCH 042/124] Typos TIL that it is "a one" rather than "an one" Co-authored-by: kallewoof --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 9e98da0fd9..ef026fd6fe 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -35,7 +35,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script for which an evaluation could have memory usage exponential in the size of the script. -For instance a script which pushed an 1 Byte value on the stack then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. +For instance a script which pushed a 1 Byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. ==Specification== From b434f1813ca2d4c270b51e53a4b7acd52f69bf60 Mon Sep 17 00:00:00 2001 From: Alexander Nemish Date: Fri, 15 Dec 2023 11:00:10 +0100 Subject: [PATCH 043/124] Update bip-0085.mediawiki Fix doublicated word --- bip-0085.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index 06277555d9..d5557fbf7b 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -364,7 +364,7 @@ The resulting RSA key can be used to create a GPG key where the creation date MU Note on GPG key capabilities on smartcard/hardware devices: -GPG capable smart-cards SHOULD be be loaded as follows: The encryption slot SHOULD be loaded with the ENCRYPTION capable key; the authentication slot SHOULD be loaded with the AUTHENTICATION capable key. The signature capable slot SHOULD be loaded with the SIGNATURE capable key. +GPG capable smart-cards SHOULD be loaded as follows: The encryption slot SHOULD be loaded with the ENCRYPTION capable key; the authentication slot SHOULD be loaded with the AUTHENTICATION capable key. The signature capable slot SHOULD be loaded with the SIGNATURE capable key. However, depending on available slots on the smart-card, and preferred policy, the CERTIFY capable key MAY be flagged with CERTIFY and SIGNATURE capabilities and loaded into the SIGNATURE capable slot (for example where the smart-card has only three slots and the CERTIFY capability is required on the same card). In this case, the SIGNATURE capable sub-key would be disregarded because the CERTIFY capable key serves a dual purpose. From 7180c1cf8c478ed53ee65705e34fc61975f96239 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 15 Dec 2023 09:54:50 -0500 Subject: [PATCH 044/124] Prefer bytes to Bytes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com> --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index ef026fd6fe..2a39158b98 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -20,7 +20,7 @@ When evaluated the OP_CAT instruction: # concatenates the popped values together, # and then pushes the concatenated value on the top of the stack. -OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 Bytes. +OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 bytes. ==Motivation== Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. From 6f5a74d83e621ded090f436a3cc407dc705ad132 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 15 Dec 2023 10:04:36 -0500 Subject: [PATCH 045/124] Increases conciseness and clarity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com> --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 2a39158b98..92b2588e8a 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -34,7 +34,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. -The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script for which an evaluation could have memory usage exponential in the size of the script. +The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script. For instance a script which pushed a 1 Byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. ==Specification== From d4f85b11464a60961962960b306cac72461a977f Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 15 Dec 2023 14:44:07 -0500 Subject: [PATCH 046/124] Lowercase bytes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com> --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 92b2588e8a..ec4834a2e9 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -35,7 +35,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script. -For instance a script which pushed a 1 Byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 Terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 Bytes. +For example, a script that pushed a 1-byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 bytes. ==Specification== From beb5802cc6c5f28da1aeaf0f75eb59738a004fb9 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 15 Dec 2023 15:27:22 -0500 Subject: [PATCH 047/124] Adds subsection header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com> --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index ec4834a2e9..6a5c54a05a 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -41,7 +41,7 @@ For example, a script that pushed a 1-byte value on the stack and then repeated OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack [x1,x2], where x2 is at the top of the stack, OP_CAT will push x1||x2 onto the stack. By '||' we denote concatenation. -Implementation +===Implementation===
 case OP_CAT:
 {

From 0a143d396910a49225c6fc2f487a968dc6e96035 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Fri, 15 Dec 2023 15:46:49 -0500
Subject: [PATCH 048/124] Use BSD-3 license

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 6a5c54a05a..61428e34c2 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -88,4 +88,4 @@ OP_CAT as it existed in the Bitcoin codebase prior to the commit "misc changes"
 We wish to acknowledge Dan Gould for encouraging and helping review this effort. 
 
 == Copyright ==
-This document is placed in the public domain.
+This document is licensed under the 3-clause BSD license.

From 82198302cd1d36f841f1bb6cd93c3c97ecbb8a31 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Fri, 15 Dec 2023 15:52:05 -0500
Subject: [PATCH 049/124] Code formatting
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 61428e34c2..cd5b86a533 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -60,7 +60,7 @@ break;
 
This implementation is inspired by the original implementation of OP_CAT as shown below. An alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. -The value of MAX_SCRIPT_ELEMENT_SIZE is 520 Bytes +The value of MAX_SCRIPT_ELEMENT_SIZE is 520. ==Notes== From 0b8a7e4b64458821d474fa08976a1d38d33d3004 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 15 Dec 2023 15:56:12 -0500 Subject: [PATCH 050/124] Code formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com> --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index cd5b86a533..d3af82f5ed 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -39,7 +39,7 @@ For example, a script that pushed a 1-byte value on the stack and then repeated ==Specification== -OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack [x1,x2], where x2 is at the top of the stack, OP_CAT will push x1||x2 onto the stack. By '||' we denote concatenation. +OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack _[x1, x2]_, where _x2_ is at the top of the stack, OP_CAT will push _x1 || x2_ onto the stack. By _||_ we denote concatenation. ===Implementation===

From 77509f6c23a6036a3e4ac929ab2fe7c6d8dbdeec Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Fri, 15 Dec 2023 15:57:08 -0500
Subject: [PATCH 051/124] Period to colon
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index d3af82f5ed..707cf79719 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -64,7 +64,7 @@ The value of MAX_SCRIPT_ELEMENT_SIZE is 520.
 
 ==Notes==
 
-OP_CAT as it existed in the Bitcoin codebase prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefL381 which disabled it.
+OP_CAT as it existed in the Bitcoin codebase prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefL381 which disabled it:
 
 
   // (x1 x2 -- out)

From 4f39e4b9d55960432d5548fa7e52568d3051428a Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Sat, 16 Dec 2023 16:23:49 -0500
Subject: [PATCH 052/124] Avoids designing or discussing how to add
 post-quantum commitments to Bitcoin

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 707cf79719..8709f7b607 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -29,7 +29,7 @@ OP_CAT aims to expands the toolbox of the tapscript developer with a simple, mod
 
 * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf
 * Tree Signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
-* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html
+* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if the quantum resistance of Lamport Signatures can be preserved when used in a taproot output.
 * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.

From 97635f5c094709dd18f4afee017e33face886f5b Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Sun, 17 Dec 2023 12:49:46 -0500
Subject: [PATCH 053/124] Lowercase the signatures

---
 bip-???-cat.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 8709f7b607..68c24c962a 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -28,8 +28,8 @@ Bitcoin tapscript lacks a general purpose way of combining objects on the stack
 OP_CAT aims to expands the toolbox of the tapscript developer with a simple, modular and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable:
 
 * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf
-* Tree Signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
-* Post-Quantum Lamport Signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if the quantum resistance of Lamport Signatures can be preserved when used in a taproot output.
+* Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
+* Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if the quantum resistance of Lamport signatures can be preserved when used in a taproot output.
 * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.

From e3dc3ba3617d33dc1c434196f5f7b4e463254e49 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Sun, 17 Dec 2023 12:53:07 -0500
Subject: [PATCH 054/124] Italicize variables
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 68c24c962a..334cc2022a 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -39,7 +39,7 @@ For example, a script that pushed a 1-byte value on the stack and then repeated
 
 ==Specification==
 
-OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack _[x1, x2]_, where _x2_ is at the top of the stack, OP_CAT will push _x1 || x2_ onto the stack. By _||_ we denote concatenation.
+OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack ''[x1, x2]'', where ''x2'' is at the top of the stack, OP_CAT will push ''x1 || x2'' onto the stack. By ''||'' we denote concatenation.
 
 ===Implementation===
 

From e492a90fec53ceb1839080024cc90a41ce503906 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Mon, 18 Dec 2023 20:28:22 -0500
Subject: [PATCH 055/124] Better reference for OP_CAT removal

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 334cc2022a..ea2213dd0a 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -64,7 +64,7 @@ The value of MAX_SCRIPT_ELEMENT_SIZE is 520.
 
 ==Notes==
 
-OP_CAT as it existed in the Bitcoin codebase prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefL381 which disabled it:
+[OP_CAT as it existed in the Bitcoin codebase](https://github.com/bitcoin/bitcoin/blob/01cd2fdaf3ac6071304ceb80fb7436ac02b1059e/script.cpp#L381-L393) prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefR94 which disabled it:
 
 
   // (x1 x2 -- out)

From 3671465ce62f91c6e115ec870b2b66e91b0cac43 Mon Sep 17 00:00:00 2001
From: momodaka <463435681@qq.com>
Date: Thu, 9 Nov 2023 21:06:22 +0800
Subject: [PATCH 056/124] Update BIP-380: fix typo

revert: fix
---
 bip-0380.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0380.mediawiki b/bip-0380.mediawiki
index 48dd93f9e8..3f17755883 100644
--- a/bip-0380.mediawiki
+++ b/bip-0380.mediawiki
@@ -26,7 +26,7 @@ This BIP is licensed under the BSD 2-clause license.
 
 Bitcoin wallets traditionally have stored a set of keys which are later serialized and mutated to produce the output scripts that the wallet watches and the addresses it provides to users.
 Typically backups have consisted of solely the private keys, nowadays primarily in the form of BIP 39 mnemonics.
-However this backup solution is insuffient, especially since the introduction of Segregated Witness which added new output types.
+However this backup solution is insufficient, especially since the introduction of Segregated Witness which added new output types.
 Given just the private keys, it is not possible for restored wallets to know which kinds of output scripts and addresses to produce.
 This has lead to incompatibilities between wallets when restoring a backup or exporting data for a watch only wallet.
 
@@ -238,7 +238,7 @@ Valid expressions:
 * Extended private key with hardened derivation and children: xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc/3h/4h/5h/*h
 * Extended private key with key origin, hardened derivation and children: [deadbeef/0h/1h/2]xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc/3h/4h/5h/*h
 
-Invalid expressiosn:
+Invalid expression:
 
 * Children indicator in key origin: [deadbeef/0h/0h/0h/*]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600
 * Trailing slash in key origin: [deadbeef/0h/0h/0h/]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600

From 785b11e8616cf0a15cb19107c0dba7e2b80ffd53 Mon Sep 17 00:00:00 2001
From: Armin Sabouri 
Date: Fri, 29 Dec 2023 12:14:45 -0500
Subject: [PATCH 057/124] Add backwards compatibility section

---
 bip-???-cat.mediawiki | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index ea2213dd0a..8efe002d7e 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -79,6 +79,9 @@ The value of MAX_SCRIPT_ELEMENT_SIZE is 520.
   }
 
+==Backwards Compatibility== +OP_CAT usage in any Non-SegWitV1 script will continue to trigger the SCRIPT_ERR_DISABLED_OPCODE. + ==References== From 82fe9fc3dba07d51533dbce4de4b5eb58ddbed55 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 29 Dec 2023 18:29:00 -0500 Subject: [PATCH 058/124] specify the hex value of the opcode --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 8efe002d7e..6ae466e8a6 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -13,7 +13,7 @@ ==Abstract== -This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126. +This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (the opcode 0x7e). When evaluated the OP_CAT instruction: # Pops the top two values off the stack, From ae68ef11cb11d54f670779def60479170e64bc49 Mon Sep 17 00:00:00 2001 From: Armin Sabouri Date: Sun, 7 Jan 2024 13:24:04 -0500 Subject: [PATCH 059/124] add clarifying note about the current opcode And some grammar + spelling cleanup --- bip-???-cat.mediawiki | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 6ae466e8a6..59f13802a4 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -14,6 +14,7 @@ ==Abstract== This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (the opcode 0x7e). +Note that the currently disabled opcode also uses `0x7e` in a non-tapscript context and will continue to be disabled. When evaluated the OP_CAT instruction: # Pops the top two values off the stack, @@ -25,21 +26,21 @@ OP_CAT fails if there are less than two values on the stack or if a concatenated ==Motivation== Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. -OP_CAT aims to expands the toolbox of the tapscript developer with a simple, modular and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: +OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modular, and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ * Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if the quantum resistance of Lamport signatures can be preserved when used in a taproot output. * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. -* Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficent to build vaults in Bitcoin. +* Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin. * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. -The opcode OP_CAT was available in early versions of Bitcoin. However OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script. +The opcode OP_CAT was available in early versions of Bitcoin. However, OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script. For example, a script that pushed a 1-byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 bytes. ==Specification== -OP_CAT pops two elements off the stack, concatenates them together in stack order and pushes the resulting element onto the stack. Given the stack ''[x1, x2]'', where ''x2'' is at the top of the stack, OP_CAT will push ''x1 || x2'' onto the stack. By ''||'' we denote concatenation. +OP_CAT pops two elements off the stack, concatenates them together in stack order, and pushes the resulting element onto the stack. Given the stack ''[x1, x2]'', where ''x2'' is at the top of the stack, OP_CAT will push ''x1 || x2'' onto the stack. By ''||'' we denote concatenation. ===Implementation===

From f9e100e9de0091be99d06b196a189733e9fe353d Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Sun, 7 Jan 2024 16:34:23 -0500
Subject: [PATCH 060/124] Notes that the opcode used is the same as the
 original cat opcode

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 6ae466e8a6..ae73ed5813 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -13,7 +13,7 @@
 
 ==Abstract==
 
-This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (the opcode 0x7e).
+This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexidecimal). This is same opcode value used by the original OP_CAT.
 
 When evaluated the OP_CAT instruction:
 # Pops the top two values off the stack,

From 2cec73a5b437cc4e3c108cb482de09b0e87edb8d Mon Sep 17 00:00:00 2001
From: Armin Sabouri 
Date: Sun, 7 Jan 2024 18:18:09 -0500
Subject: [PATCH 061/124] rm comment on disabled CAT opcode

---
 bip-???-cat.mediawiki | 1 -
 1 file changed, 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 59f13802a4..7b214d63ce 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -14,7 +14,6 @@
 ==Abstract==
 
 This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (the opcode 0x7e).
-Note that the currently disabled opcode also uses `0x7e` in a non-tapscript context and will continue to be disabled.
 
 When evaluated the OP_CAT instruction:
 # Pops the top two values off the stack,

From 5dde7ea5cfe2b046dde7f9e7ecf40730f2005697 Mon Sep 17 00:00:00 2001
From: Armin Sabouri 
Date: Sun, 7 Jan 2024 18:18:46 -0500
Subject: [PATCH 062/124] revert changes to abstract

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 7b214d63ce..4875820a46 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -13,7 +13,7 @@
 
 ==Abstract==
 
-This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (the opcode 0x7e).
+This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexidecimal). This is same opcode value used by the original OP_CAT.
 
 When evaluated the OP_CAT instruction:
 # Pops the top two values off the stack,

From 181875217114843e71f82adcc87dedf23611262d Mon Sep 17 00:00:00 2001
From: 2014 <116435491+5atoshiNakamoto@users.noreply.github.com>
Date: Mon, 29 Jan 2024 23:45:16 +0200
Subject: [PATCH 063/124] Update bip-0039-wordlists.md

typos, grammar, clarity
---
 bip-0039/bip-0039-wordlists.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md
index f2c173c58d..5acf87d1f1 100644
--- a/bip-0039/bip-0039-wordlists.md
+++ b/bip-0039/bip-0039-wordlists.md
@@ -53,7 +53,7 @@ Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
 7.  No words in the plural (except invariable words like "univers", or same spelling than singular like "heureux").
 8.  No female adjectives (except words with same spelling for male and female adjectives like "magique").
 9.  No words with several senses AND different spelling in speaking like "verre-vert", unless a word has a meaning much more popular than another like "perle" and "pairle".
-10. No very similar words with 1 letter of difference.
+10. No very similar words with only 1 letter of difference.
 11. No essentially reflexive verbs (unless a verb is also a noun like "souvenir").
 12. No words with "ô;â;ç;ê;œ;æ;î;ï;û;ù;à;ë;ÿ".
 13. No words ending by "é;ée;è;et;ai;ait".
@@ -93,12 +93,12 @@ Words chosen using the following rules:
 
 1.  Words are 4-8 letters long.
 2.  Words can be uniquely determined typing the first 4 letters.
-3.  Only words containing all letters without diacritical marks. (It was the hardest task, because in one third of all Czech letters has diacritical marks.)
+3.  Only words containing all letters without diacritical marks. (It was the hardest task, because one third of all Czech letters has diacritical marks.)
 4.  Only nouns, verbs and adverbs, no other word types. All words are in basic form.
 5.  No personal names or geographical names.
 6.  No very similar words with 1 letter of difference.
-7. Words are sorting according English alphabet (Czech sorting has difference in "ch").
-8.  No words already used in other language mnemonic sets (english, italian, french, spanish). Letters with diacritical marks from these sets are counted as analogous  letters without diacritical marks.
+7.  Words are sorted according to English alphabet (Czech sorting has difference in "ch").
+8.  No words already used in other language mnemonic sets (english, italian, french, spanish). Letters with diacritical marks from these sets are counted as analogous letters without diacritical marks.
 
 ### Portuguese
 
@@ -109,9 +109,9 @@ Credits: @alegotardo @bitmover-studio @brenorb @kuthullu @ninjastic @sabotag3x @
 3. No complex verb forms.
 4. No plural words, unless there's no singular form.
 5. No words with double spelling.
-6. No words with the exact sound of another word with different spelling.
+6. No words with the exact sound as another word with different spelling.
 7. No offensive words.
 8. No words already used in other language mnemonic sets.
 9. The words which have not the same spelling in Brazil and in Portugal are excluded.
-10. No words that remind negative/sad/bad things.
-11. No very similar words with 1 letter of difference.
+10. No words that remind one of negative/sad/bad things.
+11. No very similar words with only 1 letter of difference.

From 55ec890fca8cc892f49be8d11898890cc8485f6d Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 23 Feb 2024 23:03:27 +0000
Subject: [PATCH 064/124] Update for Google Groups ML

---
 bip-0002.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index af8bb3090a..d4cb7e1fb4 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -32,13 +32,13 @@ The BIP process begins with a new idea for Bitcoin. Each potential BIP must have
 Small enhancements or patches to a particular piece of software often don't require standardisation between multiple projects; these don't need a BIP and should be injected into the relevant project-specific development workflow with a patch submission to the applicable issue tracker.
 Additionally, many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons.
 The first step should be to search past discussions to see if an idea has been considered before, and if so, what issues arose in its progression.
-After investigating past work, the best way to proceed is by posting about the new idea to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Bitcoin development mailing list].
+After investigating past work, the best way to proceed is by posting about the new idea to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
 
 Vetting an idea publicly before going as far as writing a BIP is meant to save both the potential author and the wider community time.
 Asking the Bitcoin community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick).
 It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Bitcoin is used.
 
-Once the champion has asked the Bitcoin community as to whether an idea has any chance of acceptance, a draft BIP should be presented to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Bitcoin development mailing list].
+Once the champion has asked the Bitcoin community as to whether an idea has any chance of acceptance, a draft BIP should be presented to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
 This gives the author a chance to flesh out the draft BIP to make it properly formatted, of high quality, and to address additional concerns about the proposal.
 Following a discussion, the proposal should be submitted to the [https://github.com/bitcoin/bips BIPs git repository] as a pull request.
 This draft must be written in BIP style as described below, and named with an alias such as "bip-johndoe-infinitebitcoins" until an editor has assigned it a BIP number (authors MUST NOT self-assign BIP numbers).

From 79c1ec02a78aeaa9cf53da623e41363f92cff7bb Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 23 Feb 2024 23:04:31 +0000
Subject: [PATCH 065/124] README: Update for Google Groups ML

---
 README.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.mediawiki b/README.mediawiki
index 43e60a4093..4ecc207b90 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -1,4 +1,4 @@
-People wishing to submit BIPs, first should propose their idea or document to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (do not assign a number - read BIP 2 for the full process). After discussion, please open a PR. After copy-editing and acceptance, it will be published here.
+People wishing to submit BIPs, first should propose their idea or document to the [https://groups.google.com/g/bitcoindev bitcoindev@googlegroups.com] mailing list (do not assign a number - read BIP 2 for the full process). After discussion, please open a PR. After copy-editing and acceptance, it will be published here.
 
 We are fairly liberal with approving BIPs, and try not to be too involved in decision making on behalf of the community. The exception is in very rare cases of dispute resolution when a decision is contentious and cannot be agreed upon. In those cases, the conservative option will always be preferred.
 

From ddf5b25fc7f8009fa46ccb94f9ea73e85feffbf5 Mon Sep 17 00:00:00 2001
From: siv2r 
Date: Thu, 1 Feb 2024 11:14:27 +0530
Subject: [PATCH 066/124] bip327: fix broken links

---
 bip-0327.mediawiki | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/bip-0327.mediawiki b/bip-0327.mediawiki
index 07b40f53e7..b5600ab3a3 100644
--- a/bip-0327.mediawiki
+++ b/bip-0327.mediawiki
@@ -123,7 +123,7 @@ This is by design: All algorithms in this proposal handle multiple signers who (
 and applications are not required to check for duplicate individual public keys.
 In fact, applications are recommended to omit checks for duplicate individual public keys in order to simplify error handling.
 Moreover, it is often impossible to tell at key aggregation which signer is to blame for the duplicate, i.e., which signer came up with an individual public key honestly and which disruptive signer copied it.
-In contrast, MuSig2 is designed to identify disruptive signers at signing time (see [[#identifiying-disruptive-signers|Identifiying Disruptive Signers]]).
+In contrast, MuSig2 is designed to identify disruptive signers at signing time (see [[#identifying-disruptive-signers|Identifying Disruptive Signers]]).
 
 While the algorithms in this proposal are able to handle duplicate individual public keys, there are scenarios where applications may choose to abort when encountering duplicates.
 For example, we can imagine a scenario where a single entity creates a MuSig2 setup with multiple signing devices.
@@ -211,7 +211,7 @@ The bit can be obtained with ''GetPlainPubkey(keyagg_ctx)[0] & 1''.
 
 The following specification of the algorithms has been written with a focus on clarity.
 As a result, the specified algorithms are not always optimal in terms of computation and space.
-In particular, some values are recomputed but can be cached in actual implementations (see [[#signing-flow|Signing Flow]]).
+In particular, some values are recomputed but can be cached in actual implementations (see [[#general-signing-flow|General Signing Flow]]).
 
 === Notation ===
 
@@ -367,7 +367,7 @@ Algorithm ''ApplyTweak(keyagg_ctx, tweak, is_xonly_t)'':
 Algorithm ''NonceGen(sk, pk, aggpk, m, extra_in)'':
 * Inputs:
 ** The secret signing key ''sk'': a 32-byte array (optional argument)
-** The individual public key ''pk'': a 33-byte array (see [[#modifications-to-nonce-generation|Modifications to Nonce Generation]] for the reason that this argument is mandatory)
+** The individual public key ''pk'': a 33-byte array (see [[#signing-with-tweaked-individual-keys|Signing with Tweaked Individual Keys]] for the reason that this argument is mandatory)
 ** The x-only aggregate public key ''aggpk'': a 32-byte array (optional argument)
 ** The message ''m'': a byte array (optional argument)In theory, the allowed message size is restricted because SHA256 accepts byte strings only up to size of 2^61-1 bytes (and because of the 8-byte length encoding).
 ** The auxiliary input ''extra_in'': a byte array with ''0 ≤ len(extra_in) ≤ 232-1'' (optional argument)
@@ -465,7 +465,7 @@ Algorithm ''Sign(secnonce, sk, session_ctx)'':
 * Fail if ''pk ≠ secnonce[64:97]''
 * Let ''a = GetSessionKeyAggCoeff(session_ctx, P)''; fail if that failsFailing ''Sign'' when ''GetSessionKeyAggCoeff(session_ctx, P)'' fails is not necessary for unforgeability. It merely indicates to the caller that the scheme is not being used correctly.
 * Let ''g = 1'' if ''has_even_y(Q)'', otherwise let ''g = -1 mod n''
-* 
Let ''d = g⋅gacc⋅d' mod n'' (See [[negation-of-the-secret-key-when-signing|Negation Of The Secret Key When Signing]]) +*
Let ''d = g⋅gacc⋅d' mod n'' (See [[#negation-of-the-secret-key-when-signing|Negation Of The Secret Key When Signing]]) * Let ''s = (k1 + b⋅k2 + e⋅a⋅d) mod n'' * Let ''psig = bytes(32, s)'' * Let ''pubnonce = cbytes(k1'⋅G) || cbytes(k2'⋅G)'' From 5658236e6c9d9b39e99022674817925b18ea29d9 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 18 Mar 2024 23:48:22 +0100 Subject: [PATCH 067/124] BIP-00{43,49,84}: move to Standards Track --- README.mediawiki | 6 +++--- bip-0043.mediawiki | 2 +- bip-0049.mediawiki | 2 +- bip-0084.mediawiki | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 43e60a4093..5379bbe094 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -235,7 +235,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Applications | Purpose Field for Deterministic Wallets | Marek Palatinus, Pavol Rusnak -| Informational +| Standard | Final |- style="background-color: #ffffcf" | [[bip-0044.mediawiki|44]] @@ -270,7 +270,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Applications | Derivation scheme for P2WPKH-nested-in-P2SH based accounts | Daniel Weigl -| Informational +| Standard | Final |- style="background-color: #cfffcf" | [[bip-0050.mediawiki|50]] @@ -439,7 +439,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Applications | Derivation scheme for P2WPKH based accounts | Pavol Rusnak -| Informational +| Standard | Final |- | [[bip-0085.mediawiki|85]] diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki index 32e02b1e63..f07c94aa11 100644 --- a/bip-0043.mediawiki +++ b/bip-0043.mediawiki @@ -7,7 +7,7 @@ Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0043 Status: Final - Type: Informational + Type: Standards Track Created: 2014-04-24
diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki index 7d8d2c7496..a13b437b92 100644 --- a/bip-0049.mediawiki +++ b/bip-0049.mediawiki @@ -6,7 +6,7 @@ Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0049 Status: Final - Type: Informational + Type: Standards Track Created: 2016-05-19 License: PD
diff --git a/bip-0084.mediawiki b/bip-0084.mediawiki index 7f20217dcd..e1e458c83a 100644 --- a/bip-0084.mediawiki +++ b/bip-0084.mediawiki @@ -6,7 +6,7 @@ Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0084 Status: Final - Type: Informational + Type: Standards Track Created: 2017-12-28 License: CC0-1.0
From 0278bf3d7111bab8f0ef8dd08f16fd7b5ac6cbd6 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 18 Mar 2024 23:48:44 +0100 Subject: [PATCH 068/124] BIP-0044: mark as Final --- README.mediawiki | 2 +- bip-0044.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 5379bbe094..ef51adb5f8 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -243,7 +243,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Multi-Account Hierarchy for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Standard -| Proposed +| Final |- style="background-color: #ffffcf" | [[bip-0045.mediawiki|45]] | Applications diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 4ddd56b2cc..5db540c70a 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -6,7 +6,7 @@ Pavol Rusnak Comments-Summary: Mixed review (one person) Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0044 - Status: Proposed + Status: Final Type: Standards Track Created: 2014-04-24
From b3493746b1a1208ddaae52682f98cdfff1e2d563 Mon Sep 17 00:00:00 2001 From: Armin Sabouri Date: Wed, 20 Mar 2024 18:33:02 -0400 Subject: [PATCH 069/124] update OP_CAT implementation --- bip-???-cat.mediawiki | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 4875820a46..111519d63d 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -43,18 +43,15 @@ OP_CAT pops two elements off the stack, concatenates them together in stack orde ===Implementation===
-case OP_CAT:
-{
-    if (stack.size() < 2) {
-        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
-    }
-    valtype& vch1 = stacktop(-2);
-    valtype& vch2 = stacktop(-1);
-    if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE) {
-        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
-    }
-    vch1.insert(vch1.end(), vch2.begin(), vch2.end());
-    stack.pop_back();
+case OP_CAT: {
+  if (stack.size() < 2)
+    return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
+  valtype& vch1 = stacktop(-2);
+  valtype& vch2 = stacktop(-1);
+  if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE)
+    return set_error(serror, SCRIPT_ERR_PUSH_SIZE);
+  vch1.insert(vch1.end(), vch2.begin(), vch2.end());
+  stack.pop_back();
 }
 break;
 
From ac231a17c2e6839d9af6576d9aa1c79fb8c16eca Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 20 Mar 2024 23:53:53 -0400 Subject: [PATCH 070/124] Fixes broken mediawiki link --- bip-???-cat.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki index 111519d63d..1f803ba5c4 100644 --- a/bip-???-cat.mediawiki +++ b/bip-???-cat.mediawiki @@ -61,7 +61,7 @@ The value of MAX_SCRIPT_ELEMENT_SIZE is 520. ==Notes== -[OP_CAT as it existed in the Bitcoin codebase](https://github.com/bitcoin/bitcoin/blob/01cd2fdaf3ac6071304ceb80fb7436ac02b1059e/script.cpp#L381-L393) prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefR94 which disabled it: +[https://github.com/bitcoin/bitcoin/blob/01cd2fdaf3ac6071304ceb80fb7436ac02b1059e/script.cpp#L381-L393 OP_CAT as it existed in the Bitcoin codebase] prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefR94 which disabled it:
   // (x1 x2 -- out)

From c235aa493933dfff82ef3ba46a5e56eecb80d3c6 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Tue, 26 Mar 2024 20:36:19 -0400
Subject: [PATCH 071/124] Adds more acknowledgements

---
 bip-???-cat.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 1f803ba5c4..3d3b73444f 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -85,7 +85,7 @@ OP_CAT usage in any Non-SegWitV1 script will continue to trigger the SCRIPT_ERR_
 
 ==Acknowledgements==
 
-We wish to acknowledge Dan Gould for encouraging and helping review this effort. 
+We wish to acknowledge Dan Gould for encouraging and helping review this effort. We also want to thank Madars Virza, Jeremy Rubin, Andrew Poelstra, Bob Summerwill for their feedback and helpful comments.
 
 == Copyright ==
 This document is licensed under the 3-clause BSD license.

From 109811e4b95168159155a98afb6229c8065a65ea Mon Sep 17 00:00:00 2001
From: Chris Stewart 
Date: Mon, 1 Apr 2024 13:33:48 -0500
Subject: [PATCH 072/124] Fix BIP380 typos

---
 bip-0380.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0380.mediawiki b/bip-0380.mediawiki
index c457a34dea..a5743d5821 100644
--- a/bip-0380.mediawiki
+++ b/bip-0380.mediawiki
@@ -249,8 +249,8 @@ Invalid expressiosn:
 * Invalid hardened indicators: [deadbeef/-0/-0/-0]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600
 * Private key with derivation: L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1/0
 * Private key with derivation children: L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1/*
-* Derivation index out of range: xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483648)", "pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/2147483648
-* Invalid derivation index: xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/1aa)", "pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1aa
+* Derivation index out of range: xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483648
+* Invalid derivation index: xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/1aa
 * Multiple key origins: [aaaaaaaa][aaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0
 * Missing key origin start: aaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0
 * Non hex fingerprint: [gaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0

From 8795003831279c9af60f4a32bbc4af8b4b19cbc0 Mon Sep 17 00:00:00 2001
From: Chris Stewart 
Date: Wed, 3 Apr 2024 10:02:10 -0500
Subject: [PATCH 073/124] Fix unsatisfiable test vector in BIP382

---
 bip-0382.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0382.mediawiki b/bip-0382.mediawiki
index 942f62c183..bb1951d63e 100644
--- a/bip-0382.mediawiki
+++ b/bip-0382.mediawiki
@@ -73,7 +73,7 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
 ** a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87
 ** a914bed59fc0024fae941d6e20a3b44a109ae740129287
 ** a9148483aa1116eb9c05c482a72bada4b1db24af654387
-* sh(wpkh(xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/10/20/30/40/*h))
+* sh(wpkh(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/10/20/30/40/*h))
 ** a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87
 ** a914bed59fc0024fae941d6e20a3b44a109ae740129287
 ** a9148483aa1116eb9c05c482a72bada4b1db24af654387

From 8a9e5744140222a4be238bbaa78f2512cf0102b5 Mon Sep 17 00:00:00 2001
From: Chris Stewart 
Date: Wed, 3 Apr 2024 15:00:42 -0500
Subject: [PATCH 074/124] Fix unsatisfiable test vector in BIP381

---
 bip-0381.mediawiki | 2 --
 1 file changed, 2 deletions(-)

diff --git a/bip-0381.mediawiki b/bip-0381.mediawiki
index 4b94278498..bfda2c8ecc 100644
--- a/bip-0381.mediawiki
+++ b/bip-0381.mediawiki
@@ -100,8 +100,6 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
 ** a9141a31ad23bf49c247dd531a623c2ef57da3c400c587
 * pkh(xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0)
 ** 76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac
-* pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/2147483647'/0)
-** 76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac
 * pkh([bd16bee5/2147483647h]xpub69H7F5dQzmVd3vPuLKtcXJziMEQByuDidnX3YdwgtNsecY5HRGtAAQC5mXTt4dsv9RzyjgDjAQs9VGVV6ydYCHnprc9vvaA5YtqWyL6hyds/0)
 ** 76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac
 * pk(xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L/0)

From 0092a4318f2201793f46cd71d3e465d143a5ae19 Mon Sep 17 00:00:00 2001
From: Murch 
Date: Thu, 4 Apr 2024 16:27:56 -0400
Subject: [PATCH 075/124] Clarify permitted status of markdown

Originally BIP-2 disallowed markdown, but markdown formatting was
permitted via #1504.
---
 bip-0002.mediawiki | 1 -
 1 file changed, 1 deletion(-)

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index af8bb3090a..7de5175419 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -409,7 +409,6 @@ Why is Public Domain no longer acceptable for new BIPs?
 * Non-image auxiliary files are permitted in the bip-XXXX subdirectory.
 * Email addresses are now required for authors.
 * The Post-History header may be provided as a link instead of a simple date.
-* Markdown format is no longer permitted for BIPs.
 * The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions.
 
 ==See Also==

From 4a937e1887891b58eb5a1c5bebc3eda00d3ba5c9 Mon Sep 17 00:00:00 2001
From: Chris Stewart 
Date: Sat, 6 Apr 2024 09:26:59 -0500
Subject: [PATCH 076/124] Fix typo in BIP384 expected descriptors

---
 bip-0384.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0384.mediawiki b/bip-0384.mediawiki
index 02d6f765ec..ba12b55d7b 100644
--- a/bip-0384.mediawiki
+++ b/bip-0384.mediawiki
@@ -55,7 +55,7 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
 *** 2102df12b7035bdac8e3bab862a3a83d06ea6b17b6753d52edecba9be46f5d09e076ac
 *** 76a914f90e3178ca25f2c808dc76624032d352fdbdfaf288ac
 *** 0014f90e3178ca25f2c808dc76624032d352fdbdfaf2
-*** a91473e39884cb71ae4e5ac9739e9225026c99763e6687
+*** a91408f3ea8c68d4a7585bf9e8bda226723f70e445f087
 ** Child 1
 *** 21032869a233c9adff9a994e4966e5b821fd5bac066da6c3112488dc52383b4a98ecac
 *** 76a914a8409d1b6dfb1ed2a3e8aa5e0ef2ff26b15b75b788ac

From f8ad6ede5753b51bfd8a782f7de6d74a7e06cd95 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Fri, 12 Apr 2024 08:48:54 -0400
Subject: [PATCH 077/124] Changes OP_CAT BIP based on feedback given by Bob
 Summerwill

Bob Summerwill proposed a number of changes to the OP_CAT BIP to better follow BIP-2. This commit makes these changes:

* Using the section order specified in BIP-2
* Adding a Rationale section
* Expand the specification section by moving details from the abstract into the specification

Additionally this commit as rewords some confusing language.

Thanks Bob
---
 bip-???-cat.mediawiki | 72 ++++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 29 deletions(-)

diff --git a/bip-???-cat.mediawiki b/bip-???-cat.mediawiki
index 3d3b73444f..d7746fe4c0 100644
--- a/bip-???-cat.mediawiki
+++ b/bip-???-cat.mediawiki
@@ -1,26 +1,33 @@
 
-  BIP: ???
+  BIP: ?
   Layer: Consensus (soft fork)
   Title: OP_CAT
   Author: Ethan Heilman 
           Armin Sabouri 
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-op-cat
   Status: Draft
   Type: Standards Track
   Created: 2023-10-21
-  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-op-cat
   License: BSD-3-Clause
 
==Abstract== -This BIP reintroduces OP_CAT in the form of a new tapscript opcode which allows the concatenation of two values on the stack. This opcode would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexidecimal). This is same opcode value used by the original OP_CAT. +This BIP introduces OP_CAT as a tapscript opcode which allows the concatenation of two values on the stack. OP_CAT would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexadecimal). This is the same opcode value used by the original OP_CAT. + +== Copyright == +This document is licensed under the 3-clause BSD license. + +==Specification== When evaluated the OP_CAT instruction: # Pops the top two values off the stack, -# concatenates the popped values together, +# concatenates the popped values together in stack order, # and then pushes the concatenated value on the top of the stack. -OP_CAT fails if there are less than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 bytes. +Given the stack ''[x1, x2]'', where ''x2'' is at the top of the stack, OP_CAT will push ''x1 || x2'' onto the stack. By ''||'' we denote concatenation. OP_CAT fails if there are fewer than two values on the stack or if a concatenated value would have a combined size greater than the maximum script element size of 520 bytes. + +This opcode would be activated via a soft fork by redefining the tapscript opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexadecimal) to OP_CAT. ==Motivation== Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. @@ -37,13 +44,23 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu The opcode OP_CAT was available in early versions of Bitcoin. However, OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script. For example, a script that pushed a 1-byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 bytes. -==Specification== +==Rationale== + +Our decision to reenable OP_CAT by redefining a tapscript OP_SUCCESSx opcode to OP_CAT was motivated to leverage the tapscript softfork opcode upgrade path introduced in [[bip-0342.mediawiki|BIP342]]. + +We specifically choose to use OP_SUCCESS126 rather than another OP_SUCCESSx as OP_SUCCESS126 uses the same opcode value (126 in decimal and 0x7e in hexadecimal) that was used for OP_CAT prior to it being disabled in Bitcoin. This removes a potential source of confusion that would exist if we had a opcode value different from the one used in the original OP_CAT opcode. + +While the OP_SUCCESSx opcode upgrade path could enable us to increase the stack element size while reenabling OP_CAT, we wanted to separate the decision to change the stack element size limit from the decision to reenable OP_CAT. This BIP takes no position in favor or against increasing the stack element size limit. + +==Backwards Compatibility== -OP_CAT pops two elements off the stack, concatenates them together in stack order, and pushes the resulting element onto the stack. Given the stack ''[x1, x2]'', where ''x2'' is at the top of the stack, OP_CAT will push ''x1 || x2'' onto the stack. By ''||'' we denote concatenation. +OP_CAT usage in an non-tapscript script will continue to trigger the SCRIPT_ERR_DISABLED_OPCODE. The only change would be to OP_CAT usage in tapscript. This change to tapscript would be activated a soft fork that redefines an OP_SUCCESSx opcode (OP_SUCCESS126) to OP_CAT. + +==Reference implementation== -===Implementation===
-case OP_CAT: {
+case OP_CAT:
+{
   if (stack.size() < 2)
     return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
   valtype& vch1 = stacktop(-2);
@@ -55,29 +72,29 @@ case OP_CAT: {
 }
 break;
 
-This implementation is inspired by the original implementation of OP_CAT as shown below. An alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. -The value of MAX_SCRIPT_ELEMENT_SIZE is 520. -==Notes== +The value of MAX_SCRIPT_ELEMENT_SIZE is 520. -[https://github.com/bitcoin/bitcoin/blob/01cd2fdaf3ac6071304ceb80fb7436ac02b1059e/script.cpp#L381-L393 OP_CAT as it existed in the Bitcoin codebase] prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefR94 which disabled it: +This implementation is inspired by the original implementation of [https://github.com/bitcoin/bitcoin/blob/01cd2fdaf3ac6071304ceb80fb7436ac02b1059e/script.cpp#L381-L393 OP_CAT as it existed in the Bitcoin codebase] prior to the commit "misc changes" 4bd188cS. Nakamoto, "misc changes", Aug 25 2010, https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82#diff-27496895958ca30c47bbb873299a2ad7a7ea1003a9faa96b317250e3b7aa1fefR94 which disabled it:
-  // (x1 x2 -- out)
-  if (stack.size() < 2)
-    return false;
-  valtype& vch1 = stacktop(-2);
-  valtype& vch2 = stacktop(-1);
-  vch1.insert(vch1.end(), vch2.begin(), vch2.end());
-  stack.pop_back();
-  if (stacktop(-1).size() > 5000)
-    return false;
-  }
+case OP_CAT:
+{
+    // (x1 x2 -- out)
+    if (stack.size() < 2)
+        return false;
+    valtype& vch1 = stacktop(-2);
+    valtype& vch2 = stacktop(-1);
+    vch1.insert(vch1.end(), vch2.begin(), vch2.end());
+    stack.pop_back();
+    if (stacktop(-1).size() > 5000)
+        return false;
+}
+break;
 
-==Backwards Compatibility== -OP_CAT usage in any Non-SegWitV1 script will continue to trigger the SCRIPT_ERR_DISABLED_OPCODE. +An alternative implementation of OP_CAT can be found in Elements Roose S., Elements Project, "Re-enable several disabled opcodes", 2019, https://github.com/ElementsProject/elements/commit/13e1103abe3e328c5a4e2039b51a546f8be6c60a#diff-a0337ffd7259e8c7c9a7786d6dbd420c80abfa1afdb34ebae3261109d9ae3c19R740-R759. ==References== @@ -85,7 +102,4 @@ OP_CAT usage in any Non-SegWitV1 script will continue to trigger the SCRIPT_ERR_ ==Acknowledgements== -We wish to acknowledge Dan Gould for encouraging and helping review this effort. We also want to thank Madars Virza, Jeremy Rubin, Andrew Poelstra, Bob Summerwill for their feedback and helpful comments. - -== Copyright == -This document is licensed under the 3-clause BSD license. +We wish to acknowledge Dan Gould for encouraging and helping review this effort. We also want to thank Madars Virza, Jeremy Rubin, Andrew Poelstra, Bob Summerwill for their feedback, review and helpful comments. From ee0a17ef08924f4cbab5faf30202b03203722a04 Mon Sep 17 00:00:00 2001 From: Jason Dreyzehner Date: Mon, 15 Apr 2024 17:12:02 -0400 Subject: [PATCH 078/124] feat: add TypeScript BIP39 implementation --- bip-0039.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index 5170edd97a..1c4845e580 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -171,6 +171,9 @@ JavaScript: * https://github.com/dashhive/DashPhrase.js * https://github.com/hujiulong/web-bip39 +TypeScript: +* https://github.com/bitauth/libauth + Java: * https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/crypto/MnemonicCode.java From fa95e343886ee28e2c10b5bcbd93e15441bf55a4 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Mon, 22 Apr 2024 16:38:46 -0600 Subject: [PATCH 079/124] BIP2: update BIP editors --- bip-0002.mediawiki | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 71d3812cbe..0462a0069d 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -67,8 +67,12 @@ If you are interested in assuming ownership of a BIP, send a message asking to t The current BIP editors are: +* Bryan Bishop ([[mailto:kanzure@gmail.com|kanzure@gmail.com]]) +* Jon Atack ([[mailto:jon@atack.com|jon@atack.com]]) * Luke Dashjr ([[mailto:luke_bipeditor@dashjr.org|luke_bipeditor@dashjr.org]]) -* Kalle Alm ([[mailto:karljohan-alm@garage.co.jp|karljohan-alm@garage.co.jp]]) +* Mark "Murch" Erhardt ([[mailto:murch@murch.one|murch@murch.one]]) +* Olaoluwa Osuntokun ([[mailto:laolu32@gmail.com|laolu32@gmail.com]]) +* Ruben Somsen ([[mailto:rsomsen@gmail.com|rsomsen@gmail.com]]) ===BIP Editor Responsibilities & Workflow=== From 6ced7dbb5a79cc60ad342e788d998c73eb1ff978 Mon Sep 17 00:00:00 2001 From: Murch Date: Tue, 23 Apr 2024 15:31:27 -0400 Subject: [PATCH 080/124] Fix typos in BIP141 Co-authored-by: Greg Laun --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 2247ef6508..694c86e3a6 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -276,7 +276,7 @@ These commitments could be included in the extensible commitment structure throu Since a version byte is pushed before a witness program, and programs with unknown versions are always considered as anyone-can-spend script, it is possible to introduce any new script system with a soft fork. The witness as a structure is not restricted by any existing script semantics and constraints, the 520-byte push limit in particular, and therefore allows arbitrarily large scripts and signatures. -Examples of new script system include Schnorr signatures which reduce the size of multisig transactions dramatically, Lamport signature which is quantum computing resistance, and Merklized abstract syntax trees which allow very compact witness for conditional scripts with extreme complexity. +Examples of new script systems include Schnorr signatures, which reduce the size of multisig transactions dramatically; Lamport signatures, which are quantum computing resistant; and Merklized abstract syntax trees, which allow very compact witnesses for conditional scripts with extreme complexity. === Per-input lock-time and relative-lock-time === From 979ee894b8a4a2e9bd7c07093273588f0cd241d6 Mon Sep 17 00:00:00 2001 From: Lucas Cullen Date: Sun, 29 Apr 2018 19:52:59 +1000 Subject: [PATCH 081/124] Fix grammar --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 694c86e3a6..eb2fc74abd 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -303,7 +303,7 @@ As a soft fork, older software will continue to operate without modification. N This BIP will be deployed by "version bits" BIP9 with the name "segwit" and using bit 1. -For Bitcoin mainnet, the BIP9 starttime will be midnight 15 november 2016 UTC (Epoch timestamp 1479168000) and BIP9 timeout will be midnight 15 november 2017 UTC (Epoch timestamp 1510704000). +For Bitcoin mainnet, the BIP9 starttime will be midnight 15 November 2016 UTC (Epoch timestamp 1479168000) and BIP9 timeout will be midnight 15 November 2017 UTC (Epoch timestamp 1510704000). For Bitcoin testnet, the BIP9 starttime will be midnight 1 May 2016 UTC (Epoch timestamp 1462060800) and BIP9 timeout will be midnight 1 May 2017 UTC (Epoch timestamp 1493596800). From 632f143fadaed8c91bba12d096e62feb2a308054 Mon Sep 17 00:00:00 2001 From: glozow Date: Wed, 11 May 2022 15:53:37 -0400 Subject: [PATCH 082/124] specify BIP331 Ancestor Package Relay --- README.mediawiki | 7 + bip-0331.mediawiki | 430 ++++++++++++++++++++++++ bip-0331/no_package_info.png | Bin 0 -> 34994 bytes bip-0331/orphan_handling_flow.png | Bin 0 -> 65204 bytes bip-0331/package_cpfp_flow.png | Bin 0 -> 57377 bytes bip-0331/package_erlay.png | Bin 0 -> 45106 bytes bip-0331/package_info_only.png | Bin 0 -> 45150 bytes bip-0331/sender_init_future_version.png | Bin 0 -> 99293 bytes bip-0331/version_negotiation.png | Bin 0 -> 50918 bytes 9 files changed, 437 insertions(+) create mode 100644 bip-0331.mediawiki create mode 100644 bip-0331/no_package_info.png create mode 100644 bip-0331/orphan_handling_flow.png create mode 100644 bip-0331/package_cpfp_flow.png create mode 100644 bip-0331/package_erlay.png create mode 100644 bip-0331/package_info_only.png create mode 100644 bip-0331/sender_init_future_version.png create mode 100644 bip-0331/version_negotiation.png diff --git a/README.mediawiki b/README.mediawiki index 815e8c3c67..bc174cf350 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -1030,6 +1030,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0331.mediawiki|331]] +| Peer Services +| Ancestor Package Relay +| Gloria Zhao +| Standard +| Draft +|- | [[bip-0338.mediawiki|338]] | Peer Services | Disable transaction relay message diff --git a/bip-0331.mediawiki b/bip-0331.mediawiki new file mode 100644 index 0000000000..08927a23fb --- /dev/null +++ b/bip-0331.mediawiki @@ -0,0 +1,430 @@ +
+  BIP: 331
+  Layer: Peer Services
+  Title: Ancestor Package Relay
+  Author: Gloria Zhao 
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0331
+  Status: Draft
+  Type: Standards Track
+  Created: 2022-08-08
+  License: BSD-3-Clause
+  Post-History: 2022-05-17 https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html [bitcoin-dev] post
+
+ +==Abstract== + +Peer-to-peer protocol messages enabling nodes to request and relay the unconfirmed ancestor package +of a given transaction, and to request and relay transactions in batches. + +==Motivation== + +===Propagate High Feerate Transactions=== + +Since v0.13, Bitcoin Core has used ancestor packages instead of individual transactions to evaluate +the incentive compatibility of transactions in the mempool +[https://github.com/bitcoin/bitcoin/pull/7594 Add tracking of ancestor packages] and +selecting them for inclusion in blocks +[https://github.com/bitcoin/bitcoin/pull/7600 Select transactions using feerate-with-ancestors]. +Incentive-compatible mempool and miner policies help create a fair, fee-based market for block +space. While miners maximize transaction fees in order to earn higher block rewards, non-mining +users participating in transaction relay reap many benefits from employing policies that result in a +mempool with similar contents, including faster compact block relay and more accurate fee +estimation. Additionally, users may take advantage of mempool and miner policy to bump the priority +of their transactions by attaching high-fee descendants (Child Pays for Parent or CPFP). + +Only individually considering transactions for submission to the mempool creates a limitation in +the node's ability to determine which transactions to include in the mempool, since it cannot take +into account descendants until all the transactions are in the mempool. Similarly, it cannot use a +transaction's descendants when considering which of two conflicting transactions to keep (Replace by +Fee or RBF). + +When a user's transaction does not meet a mempool's minimum feerate and they cannot create a +replacement transaction directly, their transaction will simply be rejected by this mempool or +evicted if already included. They also cannot attach a descendant to pay for replacing a conflicting +transaction; it would be rejected for spending inputs that do not exist. + +This limitation harms users' ability to fee-bump their transactions. Further, it presents security and complexity +issues in contracting protocols which rely on presigned, time-sensitive transactions'''Examples of time-sensitive pre-signed transactions in L2 protocols.''' +* [https://github.com/lightning/bolts/blob/master/03-transactions.md#htlc-timeout-and-htlc-success-transactions HTCL-Timeout in LN Penalty] +* [https://github.com/revault/practical-revault/blob/master/transactions.md#cancel_tx Unvault Cancel in Revault] +* [https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md#refund-transaction Refund Transaction in Discreet Log Contracts] +* [https://gist.github.com/instagibbs/60264606e181451e977e439a49f69fe1 Updates in Eltoo] +* [https://github.com/ElementsProject/peerswap/blob/master/docs/peer-protocol.md#claim-transaction Claim Transactions in PeerSwap] + to prevent cheating. +In other words, a key security assumption of many contracting protocols is that all parties can +propagate and confirm transactions in a timely manner. Increasing attention has been brought to +"pinning attacks," a type of censorship in which the attacker uses mempool policy restrictions to +prevent a transaction from being relayed or getting mined. +'''Concerns for pinning attacks in L2 protocols''' +* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020458.html Greg Sanders, "Bringing a nuke to a knife fight: Transaction introspection to stop RBF pinning"] +* [https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-April/002639.html Matt Corallo, "RBF Pinning with Counterparties and Competing Interest"] +* [https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html Antoine Riard, "Pinning : The Good, The Bad, The Ugly"] +* [https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md Bastien Teinturier, "Pinning Attacks"] +* [https://gist.github.com/instagibbs/60264606e181451e977e439a49f69fe1 Greg Sanders, "Eltoo Pinning"] + + +These transactions must meet a certain confirmation target to be effective, but their feerates +are negotiated well ahead of broadcast time. If the forecast feerate was too low and no +fee-bumping options are available, attackers can steal money from their counterparties. Always +overestimating fees may sidestep this issue (but only while mempool traffic is low and +predictable), but this solution is not guaranteed to work and wastes users' money. For some attacks, +the available defenses require nodes to have a bird's-eye view of Bitcoin nodes' mempools, which is +an unreasonable security requirement. + +Part of the solution is to enable nodes to consider packages of transactions as a unit, e.g. one or +more low-fee ancestor transactions with a high-fee descendant, instead of separately. A package-aware +mempool policy can help determine if it would actually be economically rational to accept a +transaction to the mempool if it doesn't meet fee requirements individually. Network-wide adoption +of these policies would create a more purely-feerate-based market for block space and allow +contracting protocols to adjust fees (and therefore mining priority) at broadcast time. + +Theoretically, developing a safe and incentive-compatible package mempool acceptance policy is +sufficient to solve this issue. Nodes could opportunistically accept packages (e.g. by trying +combinations of transactions rejected from their mempools), but this practice would likely be +inefficient at best and open new Denial of Service attacks at worst. As such, this proposal +suggests adding new p2p messages enabling nodes to request and share package-validation-related +information with one another, resulting in a more efficient and reliable way to propagate packages. + +===Handle Orphans Better=== + +Txid-based transaction relay is problematic since a transaction's witness may be malleated without +changing its txid; a node cannot use txid to deduplicate transactions it has already downloaded +or validated. Ideally, two nodes that both support BIP339 wtxid-based transaction relay shouldn't +ever need to use txid-based transaction relay. + +A single use case of txid-based relay remains: handling "orphan" transactions that spend output(s) +from an unconfirmed transaction the receiving node is unaware of. Orphan transactions are very +common for new nodes that have just completed Initial Block Download and do not have an up-to-date +mempool. Nodes also download transactions from multiple peers. If the peer from which a child +transaction was requested responds faster than the peer from which its parent was requested, that +child is seen as an orphan transaction. + +Nodes may handle orphans by storing them in a cache and requesting any missing parent(s) by txid +(prevouts specify txid, not wtxid). These parents may end up being orphans as well, if they also +spend unconfirmed inputs that the node is unaware of. This method of handling orphans is problematic +for two reasons: it requires nodes to allocate memory for unvalidated data received on the p2p +network and it relies on txid-based relay between two wtxid-relay peers. + +This proposal makes orphan resolution more efficient and no longer require txid-based relay. + +==Definitions== + +Given any two transactions Tx0 and Tx1 where Tx1 spends an output of Tx0, Tx0 is a '''parent''' of +Tx1 and Tx1 is a '''child''' of Tx0. + +A transaction's '''ancestors''' include, recursively, its parents, the parents of its parents, etc. +A transaction's '''descendants''' include, recursively, its children, the children of its children, +etc. A transaction's parent is its ancestor, but an ancestor is not necessarily a parent. + +A '''package''' is a list of transactions, representable by a connected Directed Acyclic +Graph (a directed edge exists between a transaction that spends the output of another transaction). +In this proposal, a package is limited to unconfirmed transactions. + +An '''ancestor package''' consists of an unconfirmed transaction with all of its unconfirmed +ancestors. + +In a '''topologically sorted''' package, each parent appears somewhere in the list before its child. + +==Specification== + +Ancestor Package Relay includes two parts: a package information round and a transaction data +download round. +The package information round is used to help a receiver learn what transactions are in a package and +decide whether they want to download them. The transaction data round is used to help a node download +multiple transactions in one message instead of as separate messages. +'''Why are package information and transaction data rounds both necessary?''' + +Several alternative designs were considered. One should measure alternative solutions based on the +resources used to communicate (not necessarily trustworthy) information: We would like to minimize +network bandwidth, avoid downloading a transaction more than once, avoid downloading transactions +that are eventually rejected, and minimize storage allocated for not-yet-validated transactions. + +
+ +'''No Package Information Round:''' One proposal is to just use the child's wtxid to refer to the +package and always send the entire package together, skipping the package information round. +However, this protocol would make it very likely for honest nodes to redownload duplicate +transactions. See the following example, where the high-feerate ancestors were already downloaded +and accepted individually. + +[[File:./bip-0331/no_package_info.png|600px]] +
+ +'''Package Information Only:''' Just having package information gives enough information for the +receiver to accept the packages. That is, rather than using "getpkgtxns" and "pkgtxns" messages, +send "getdata" and download the transactions individually. While this option is a potential fallback +if batched transaction download fails for some reason, it shouldn't be used as the default because +it always requires storage of unvalidated transactions. +[[File:./bip-0331/package_info_only.png|1000px]] +
+ +Package relay is negotiated between two peers during the version handshake using a "sendpackages" +message. The versions field within "sendpackages" is interpreted as a bitfield; peers may relay +multiple versions of packages. Package relay requires both peers to support wtxid-based relay +because package transactions are referenced by their wtxids. +'''Why do we need multiple versions? Why can't we just support arbitrary packages?''' +Attempting to support arbitrary packages in mempool validation may result in very complex logic, new +Denial of Service attack vectors, and policy limitations that could be leveraged to censor +transactions (aka "pinning attacks"). This protocol is extensible to support other types of +packages based on future desired use cases. Future package information messages may describe +different types of packages and/or contain more information than a list of wtxids, e.g. feerate or +relationships between transactions. +'''Why use a bitfield instead of a numbering system?''' +It should be possible to support some subset of the existing package types. + +[[File:./bip-0331/version_negotiation.png|400px]] + +Nodes indicate support for batched transaction data round ("getpkgtxns", "pkgtxns", and +"MSG_PKGTXNS") using the PKG_RELAY_PKGTXNS = (1 << 0) bit in their "sendpackages" +messages during version handshake. They indicate support for the ancestor package information +round ("ancpkginfo", "MSG_ANCPKGINFO") using the PKG_RELAY_ANC = (1 << 1) bit in their +"sendpackages" messages during version handshake. + +===Protocol Flow Examples=== + +This package relay protocol satisfies both use cases (orphan transaction handling and high-feerate +transaction paying for low-feerate ancestors). + +====Orphan Transaction Handling==== + +Upon receiving an orphan transaction, a node may request ancestor package information delineating +the wtxids of the transaction's unconfirmed ancestors. This is done without using txid-based relay. +The package information can be used to request transaction data. As these transactions are dependent +upon one another to be valid, the transactions can be requested and sent as a batch. + +Contrast this protocol with legacy orphan handling, which requires requesting the missing +transactions by their txids and may require new round trips for each generation of missing parents. +[[File:./bip-0331/orphan_handling_flow.png|1000px]] + +====Fee-Bumped Transactions==== + +Too-low-feerate transactions (i.e. below the node's minimum mempool feerate) with high-feerate +descendants can also be relayed this way. If the peers are using BIP133 fee filters and a +low-feerate transaction is below the node's fee filter, the sender will not announce it. The +high-feerate transaction will be sent by the sender, and received and handled as an orphan by the +receiver, the transactions are validated as a package, and so the protocol naturally works for this +use case. + +This does not mean BIP133 is required for package relay to work, provided that nodes do not +immediately reject transactions previously found to be too low feerate. If the low-feerate +transaction was sent and rejected, the receiver should later re-request and accept it after learning +that it is the ancestor of another transaction, and that they meet the receiver's mempool policy +requirements when validated together. + +[[File:./bip-0331/package_cpfp_flow.png|600px]] + +This protocol is receiver-initiated only; nodes do not proactively announce packages to their peers. +'''Why no sender-initiated protocol?''' Sender-initiated package +relay can, theoretically, save a round trip by notifying the receiver ahead of time that they will +probably need to request and validate a group of transactions together in order for them to be +accepted. As with any proactive communication, there is a chance that the receiver already knows +this information, so this network bandwidth may be wasted. Shortened latency is less significant +than wasted bandwidth. + +The logic used to decide when to announce a package proactively determines whether it is a net +increase or decrease for overall bandwidth usage. However, it is difficult to design anything to +save bandwidth without any idea of what its bandwidth usage actually looks like in practice. No +historical data is available, as one of the primary goals of this protocol is to enable +currently-rejected transactions to propagate. After deploying receiver-initiated package relay, we +can observe its usage and then introduce a sender-initiated package relay protocol informed by data +collected from the p2p network. + +===Combined Hash=== + +A "combined hash" serves as a unique "package id" for some list of transactions and helps provide a +meaningful but short "notfound" response to "getpkgtxns." + +The combined hash of a package of transactions is equal to the sha256 hash of each transaction's +wtxid concatenated in lexicographical order. + +===New Messages=== + +Four new protocol messages and two inv types are added. + +====sendpackages==== + +{| +| Field Name || Type || Size || Purpose +|- +|versions || uint64_t || 4 || Bit field that is 64 bits wide, denoting the package versions supported by the sender. +|- +|} + +# The "sendpackages" message has the structure defined above, with pchCommand == "sendpackages". + +# During version handshake, nodes should send one "sendpackages" message indicating they support package relay, with the versions field indicating which versions they support. + +# The "sendpackages" message MUST be sent before sending a "verack" message. If a "sendpackages" message is received after "verack", the sender may be disconnected. + +# Upon successful connection ("verack" sent by both peers), a node may relay packages with the peer if they did not set "fRelay" to false in the "version" message, both peers sent "wtxidrelay", and both peers sent "sendpackages" for matching version bit(s). Unknown bits (including versions==0) should be ignored. Peers should relay packages corresponding to versions that both sent "sendpackages" for.'''Is it ok to send "sendpackages" to a peer that specified fRelay=false in their "version" message?''' +Yes, this is allowed in order to reduce the number of negotiation steps. This means nodes can +announce features without first checking what the other peer has sent, and then apply negotiation +logic at the end based on what was sent and received. See [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020510.html this discussion]. + + +====ancpkginfo==== +{| +| Field Name || Type || Size || Purpose +|- +|txns_length||CompactSize||1 or 3 bytes|| The number of transactions provided. +|- +|txns||List of wtxids||txns_length * 32|| The wtxids of each transaction in the package. +|} + +# The "ancpkginfo" message has the structure defined above, with pchCommand == "ancpkginfo". + +# The "txns" field should contain a list of wtxids which constitute the ancestor package of the last wtxid. For the receiver's convenience, the sender should - but is not required to - sort the wtxids in topological order. The topological sort can be achieved by sorting the transactions by mempool acceptance order (if parents are always accepted before children). Apart from the last wtxid which is used to learn which transaction the message corresponds to, there is no enforced ordering. Nodes should not disconnect or punish a peer who provides a list not sorted in topological order.'''Why not include feerate information to help the receiver decide whether these transactions are worth downloading?''' +A simple feerate is typically insufficient; the receiver must also know the dependency +relationships between transactions and their respective sizes. +'''Should a peer be punished if they provide incorrect package info, e.g. a list of unrelated transactions?''' +Ideally, there should be a way to enforce that peers are providing correct information to each +other. However, two peers may have different views of what a transaction's unconfirmed ancestors +are based on their chainstate. For example, during a reorg or when two blocks are found at the same +time, one peer may see a transaction as confirmed while the other peer does not. +As such, it is impossible to accurately enforce this without also knowing the peer's chainstate. +It was [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html originally proposed] +to include a block hash in "ancpkginfo" to avoid unwarranted disconnections. However, it does not +make much sense to stop or delay transaction data requests due to mismatched chainstates, and the +chainstate may change again between package information and transaction data rounds. Instead, +differences in chainstate should be handled at the validation level. The node has already spent +network bandwidth downloading these transactions; it should make a best effort to validate them. +See [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020558.html discussion]. +'''Why not require topological order?''' +It is not possible to determine whether a list of transactions is topologically sorted without first +establishing that the list contains a full ancestor package. It is not possible to determine whether +a list of transactions contains a full ancestor package without knowing what the chainstate is. + + +# Upon receipt of a "ancpkginfo" message, the node may use it to request the transactions it does not already have (e.g. using "getpkgtxns" or "tx"). + +# Upon receipt of a malformed "ancpkginfo" message, the sender may be disconnected. An "ancpkginfo" message is malformed if it contains duplicate wtxids or conflicting transactions (spending the same inputs). The receiver may learn that a package info was malformed after downloading the transactions. + +# A node MUST NOT send a "ancpkginfo" message that has not been requested by the recipient. Upon receipt of an unsolicited "ancpkginfo", a node may disconnect the sender. + +# This message must only be used if both peers set PKG_RELAY_ANC in their "sendpackages" message. If an "ancpkginfo" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected. + +====MSG_ANCPKGINFO==== + +# A new inv type (MSG_ANCPKGINFO == 0x7) is added, for use only in getdata requests pertaining to ancestor packages. + +# As a getdata request type, it indicates that the sender wants an "ancpkginfo" containing all of the unconfirmed ancestors of a transaction, referenced by wtxid. + +# Upon receipt of a "getdata(MSG_ANCPKGINFO)" request, the node should respond with an "ancpkginfo" message corresponding to the transaction's unconfirmed ancestor package, or with "notfound". The wtxid of the requested transaction must be the last item in the "ancpkginfo" response list, as the last item is used to determine which transaction the "ancpkginfo" pertains to. + +# The inv type must only be used in a "getdata" message. An "inv(MSG_ANCPKGINFO)" must never be sent. If an "inv(MSG_ANCPKGINFO)" is received, the sender may be disconnected. + +# This inv type must only be used if both peers set PKG_RELAY_ANC in their "sendpackages" message. If a "getdata" message with type MSG_ANCPKGINFO is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected. + +====getpkgtxns==== + +{| +| Field Name || Type || Size || Purpose +|- +|txns_length||CompactSize||1 or 3 bytes|| The number of transactions requested. +|- +|txns||List of wtxids||txns_length * 32|| The wtxids of each transaction in the package. +|} + +# The "getpkgtxns" message has the structure defined above, with pchCommand == "getpkgtxns". + +# A "getpkgtxns" message should be used to request some list of transactions specified by witness transaction id. It indicates that the node wants to receive either all the specified transactions or none of them. This message is intended to allow nodes to avoid downloading and storing transactions that cannot be validated without each other. The list of transactions does not need to correspond to a previously-received ancpkginfo message. + +# Upon receipt of a "getpkgtxns" message, a node should respond with either a "pkgtxns" containing all of the requested transactions in the same order specified in the "getpkgtxns" request or one "notfound" message of type MSG_PKGTXNS and combined hash of all of the wtxids in the "getpkgtxns" request (only one "notfound" message and nothing else), indicating one or more of the transactions is unavailable. + +# A "getpkgtxns" message must contain at most 100 wtxids. Upon receipt of a "getpkgtxns" message with more than 100 wtxids, a node may ignore the message (to avoid calculating the combined hash) and disconnect the sender. + +# This message must only be used if both peers set PKG_RELAY_PKGTXNS in their "sendpackages" message. If a "getpkgtxns" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected. + +====pkgtxns==== + +{| +| Field Name || Type || Size || Purpose +|- +|txns_length||CompactSize||1 or 3 bytes|| The number of transactions provided. +|- +|txns||List of transactions||variable|| The transactions in the package. +|} + +# The "pkgtxns" message has the structure defined above, with pchCommand == "pkgtxns". + +# A "pkgtxns" message should contain the transaction data requested using "getpkgtxns". + +# A "pkgtxns" message should only be sent to a peer that requested the package using "getpkgtxns". If a node receives an unsolicited package, it may choose to validate the transactions or not, and the sender may be disconnected. + +# This message must only be used if both peers set PKG_RELAY_PKGTXNS in their "sendpackages" message. If a "pkgtxns" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected. + +====MSG_PKGTXNS==== + +# A new inv type (MSG_PKGTXNS == 0x6) is added, for use only in "notfound" messages pertaining to package transactions. + +# As a "notfound" type, it indicates that the sender is unable to send all the transactions requested in a prior "getpkgtxns" message. The hash used is equal to the combined hash of the wtxids in the getpkgtxns request. + +# This inv type should only be used in "notfound" messages, i.e. "inv(MSG_PKGTXNS)" and "getdata(MSG_PKGTXNS)" must never be sent. Upon receipt of an "inv" or "getdata" message of this type, the sender may be disconnected. + +# This inv type must only be used if both peers set PKG_RELAY_PKGTXNS in their "sendpackages" message. + +==Compatibility== + +Older clients remain fully compatible and interoperable after this change. Clients implementing this +protocol will only attempt to send and request packages if agreed upon during the version handshake. +'''Will package relay cause non-package relay nodes to waste bandwidth on low-feerate transactions?''' +If a node supports package relay, it may accept low-feerate transactions (e.g. paying zero fees) +into its mempool, but non-package relay nodes would most likely reject them. To mitigate bandwidth +waste, a package relay node should not announce descendants of below-fee-filter transactions to +non-package relay peers. + +'''Is Package Erlay possible?''' +A client using BIP330 reconciliation-based transaction relay (Erlay) is able to use package relay +without interference. After reconciliation, any transaction with unconfirmed ancestors may have +those ancestors resolved using ancestor package relay. +[[File:./bip-0331/package_erlay.png|700px]] + + +==Extensibility== + +This protocol can be extended to include more types of package information in the future, while +continuing to use the same messages for transaction data download. One would define a new package +information message (named "*pkginfo" in the diagram below), allocate its corresponding inv +type (named "*PKGINFO" in the diagram below), and specify how to signal support using the +versions field of "sendpackages" (an additional bit named "PKG_RELAY_*" in the diagram below). A +future version of package relay may allow a sender-initiated dialogue by specifying that the package +info type inv type can be used in an "inv" message. +
+[[File:./bip-0331/sender_init_future_version.png|700px]] + +==Implementation== + +Sample implementation for Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/27742 + +A prerequisite for implementing a safe +package relay protocol is a mempool acceptance policy that safely validates packages of +transactions. +'''Package Mempool Acceptance Policy''' +Accepting packages from peers should not significantly increase a node's DoS attack surface; +processing packages should not permit waste or exhaustion of the node and network's resources. +Additionally, a sensible mempool acceptance policy should result in the most incentive-compatible +subset of the package in the mempool in order to avoid adding more pinning attacks or censorship +vectors. For example, It should not be assumed that packages are CPFPs. An ancestor package may +include a high-feerate parent and low-feerate child; the policy may choose to accept the parent but +not the child. If one or more transactions are policy-invalid, other transactions that are not +dependent upon them should still be considered. + + +==Acknowledgements== + +Thank you to Suhas Daftuar, John Newbery, Anthony Towns, Martin Zumsande, and others for input on the design. + +Thank you to Will Clark, Sergi Delgado, Fabian Jahr, John Newbery, Greg Sanders, Stéphan Vuylsteke, Pieter Wuille, and others for input on this document. + +Much of this work is inspired by ideas and code by Suhas Daftuar and Antoine Riard. +'''Prior Work on Package Relay''' +* [https://gist.github.com/sdaftuar/8756699bfcad4d3806ba9f3396d4e66a Strawman Proposal] +* [https://github.com/bitcoin/bitcoin/issues/14895 Package relay design questions] +* [https://github.com/bitcoin/bitcoin/pull/16401 Add package acceptance logic to mempool] +* [https://github.com/bitcoin/bitcoin/pull/19621 [RFC] Package-relay: sender-initiated] + + +==References and Rationale== + + + diff --git a/bip-0331/no_package_info.png b/bip-0331/no_package_info.png new file mode 100644 index 0000000000000000000000000000000000000000..54b20f97dde2883b82e2361a888d4e8facb45e42 GIT binary patch literal 34994 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 literal 0 HcmV?d00001 diff --git a/bip-0331/orphan_handling_flow.png b/bip-0331/orphan_handling_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..4588de84b1ffd05d90dda042f7c08201718003d7 GIT binary patch literal 65204 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 RMo9Rzc!8G2y?I*>{4a=Wa`FHG literal 0 HcmV?d00001 diff --git a/bip-0331/package_cpfp_flow.png b/bip-0331/package_cpfp_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..6b48c5da65be1ba4fd465b801b1a31b8e614b083 GIT binary patch literal 57377 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�TfQUtYf4_^!B^xH$1s zu$PmbCg?Qn;41MhNR9IWrs>0*~0qx{wOg)psweE~H`;X?5=0D~VvLtL3MxRM$ z08ZIXf=zj9T*@@*fU40`_S(J+rsJeap+obdKh-R4RC%wc$#VXaw&veYMZ2F ziCP!YUl6^BF(qbl3RLQ%|LPwJzC>pcOi&fP&UR5-%+y&2>OUIH}0Pq`7#!zN$*G z?{te*S1ghBv}&sK`tm<$f4?~9LWvM?Ux8XpOq zoyT=32Ld46{MkVphipu_6F)1kjaW?p&kAZU_MnjNTIzkiof)Z5g(5)BBg9h_nI#FY z&}DQHItp>Vj|rKlEyskq`2=8TD|e zlXihLEeLqth}8c?9$p92iFxCbhq@cs+4+xtd1~ZQl=phxYOw8f+>>ERKet1x?{Qx} z#`cMlQC^i5l2d>C_^@*Lvii%_f>k2Fm6OdwSS_jxkEnRd|A7agA&m>!SH7pi7?enwX}5@00`5|$-6 z5%zt?x4?kxpkZlJ0FTKCy=Um= zl$s^BiuR&=m8SPkX5umXD`S~K;#YL9Qt zg$$?!O(Wbi5cc7R?GmG5O|~7>Qv?hBIB-`G<-XY?fRB<&sPs!A4E4GFv_PB&yrl%& zpD^`YxD^V5+X@dN0BL~IW*mOnj>3VE^fQ6ye8%z$n&*d$VTE-VXgwR~Lv^AL6{hT} z?u_jy1fT!>MDB~bXcB@|xUD?*cBI)Mi|2L~_pyK6Qg3htl*^d|@DIEq@IrL`M)K}6r6*jXL(|I7Na zmKBGp7tFmi&IFgEg5~2`nE1^ljffe@BQf2dZP}Wa2{w^8`J6C4>*9+HI8swvuOqxR zz^Q(wM*=2MbxB1F7y?mR1_L zec_Qxx%1qJfeLBPw@ZRqj)#V4Ue(Ab7AL`Ey;9I-q)<|R;YeBH04Sgb3~S_kly*K2 z^e`>7?}ah zkY0Gt9PIxZ1wJB1ovnIhO7foMImB2;)awsGh{H{Lq}|!#=~Oc4s*2Lm{KONYh9tIqBJv^Z7Ol<_@uk0(HY*U?#rw5f?*?ITcu z%|U?$J_cvfjl6@Kojn5A1wVQakT3Vjd8e3Q1E#|1)0*I3*0ZraM#E!Md+%4C3Pf%SQrFO z@c-oik+2ah8;Nmo+i#;I2sER*Ya=wF9W=r-=!sAcTNx^C6#UcZrx)HN`mHQcT7_eJ z0P0H;21f@z>wq#)N8Rc+HV3PqC9oCh;ZQt)kke346&3zm>o@A7A`y;ABPuxX@$c#5o$3)9+XvPQiBdX8m z!U2HTt_mQYc~({(qfeC(Wy_pYq^>KAN=;7uUEj?smmDk4xJ+}jD%4g?U0}oWzV7{7 z$|@{tWUVNXvX37%Aw-LQ!~@lkXJfKVeR1&Ki0aCknlMb`%%n*xoh`hQ22q16xx=uv zoa5R_Jk$s#Vm9Az;qkSfnXq|yawm@8rU;Sx^+1FTS*BGvXsbrxs>-t#jliJVB#2ob zwG0qH3jk%X5zJf{-u4(cCSwt9)4;KmO)W~PGR_R1w(IZdvB;)Xk8YPbEcb~O!Pjuh z5q*QF;+)i@V+X&RT}X%*M8S!eTZiu79m(g!M{)NynMr_*tVR87Q(P_x68{#MIT`09}1-G-|Y zfVv{^GLX3uc%jdn2GNlMqauXoGr51;gekZ->rDAzoo&Rpc z&iy8L=1wN+avjE~=%d_K1E9lfmt@d-Ri8h9{$bcOG<3O;IV|lW{Pk&Ib@uj-BM?Er0E9W9{)zfOa*sB#$Vqp#+`0b6c~sL<0CKFZ>a zH_dnyCz7%^{D7Gs+669NSl@=`STxQFV6X=QW@yE^lwYn4tu66eKE{UcRPGWIY6LYwI(r^gpI@?cDacAK z=o8N^L|7jw>#RXmqAn{Tr%hq#!$|2y13JhpCT3<0DXAB$KdXdN4t7T-yV(+U#?&S1 z^=;Kth{CT&~07{ z1F^Ye8@Bh8_vp@UQ(QN_T)9&ZsdK(Hx8{TCS6*B_%UEz}B>$0@qRgT$x-QOsBzeS< z_IrF>6IOZO{x-+>MQUT?pR|jQ&q|iN1@&>bg57Ko@b{};+Dj{+`ZXiD+iKhbL z`R756-i$%(_qTIa<(hvwCS$y;_ZQ6sO@-%=bosdpIZuv;*^gGL?-0^X49-seZTUUn z#_OrRiX`5*9oDsz!Nbm1o3s*Q6vLPmbwpiBNV*sq{XkSdFxYON{K~GP^eCO9s@A8{ z7hPKY{=tfPhxzw&qA`Md_86?x*M59)zA1L5$mO>Es>WN%?H%WB*YzVOT5<(d@L+2i zxxDo9%2O=@ga|_PJY#5R=$qzI5WuZm3N$ny?ZH0tLTbs9XX>u{H#U?MY1y!xs$aHj zE>_O>2oJ6NxmfI%(fQ)$)>^rBiIVAw)e-!Y_V=`>u5QMzdduQyZ#NZ{@fo=ldnCAd z&3LcRcG`%H&)Jl}x>ZqQH9gH~ITL*7_8rIf4};8dzPfD`z|ZO{Mp~U|5%)@U*fk!= z;d&uBT=-(#=`qg6tdCzB^E-y8>VAK$&r(+uRCJbUcb&gA)6y1arXRVJX4(A2izj*L z?lFl&mvhif9hbZ!sH43vzF7QdW6rM{{-YUE+%W4U^E8$EMn1}Tek7eYh9hHat4wfo zXl&T|qTRe^N$h$x8U_S}QOc)2QAl^|*RGAjAR+cI0fTa zI6h>$an?mS%AW|Fo9N#nGHjimtMf(Vrux~*$tB^#t-7O|o8-Mis}H8LY#D3+C!mIT zYr~z#zRo5M#-shyIso_*1#ja6?nXOpm$o@QC(X6h!*?vnFQ(B?MyLL9au`of^t5wj zU23Mj+vw`+zb3<&3fo0uf!Mo)vKer!l zJ}p=k8lZADpuv`%MH$MB!&`Rx3mwH*Zx3$Vzk~Ma?8ea^-k6>nDl!7Almm0z#u?VL z%{=;G!=gUb`g3qlIVe&8-oQFjyJC5JM_O&bY02FDw%KQnn;BBn`ek;+%TJGU%zUcJ zygq!&!Mmtxxw7eW)tsb`+36jMfnz`0_OSThDY!ILEDCCrMfLLCD@R*cDouEp@B;6I z>voOU6&1Th@`nXQ#Ygr>va_fh-e{N8Tm9Vp%fM`9-jFZTO7C;IT0Arj#fq_?SlpAP zoo2b2O{>RF=rQ`Bn*Ux& iQ7uNgdoyxVCA*L_SAB30;7ldS-&KDKDUexeDK6d|s zIlJl__2w^{^OA}8Lygvthh0|*47T~UId{xT@XV6F80}{k>Io%=-mFXTqGYh}`;xW+ zNUM9^-e=Hd&*a8ed#^NAWXem$vLVqWkM4JKW>IO|K?SFLr|`g`;8%mo&v4suo0^$g zoyb_`b0u{CPRhMT_mC`&Sl?1(^$4Bj?izs&8WXPGp@NmU8J-ZIbanOke|D8m3-&s? zaY{%!UAR5?W$jf(+E0yCU0r@xj=tEGy9+PouGc;Ohf`O$Z`Mb%9M$;U!zSot7U2B3 zr7kbpaaT>EUXOiV$AO9v$*Lp=nnXp?8T)Hp_vFK8Tsu?U2AY#}T5>}wX1iX~!CcG$x%UEgPn~j=Dt{O!A8h=xnvNa;v@~nRa~yC!h}o#?Du2KMwjFQ(tC9o|mu6 zFcIQ11o3d6xE>Vk^tndx?YwkgN7ta4-E6!6g&IA}fzP_n9D3=agL8VfkFse@JSpTJ z42-ByN)6*xZ#Ed58>i>dwFK5`swabgW9FNlz7S#6r;#4UGn;7U*sd+(f2VSaCQj?E zo9Ect>?Rw-IrmXyIzLr@W2ataou43Qv+mItTYbb}tq{xGf^rM5>heKj+1_`B;#Ca| z>R#TV7E>#KWobQW&L8Ezs5`Eo9}xGKn~OF}xz7g=M$X2!@@~ARYswVF!_slzlpajw zg$s|?o~b!mUvze*ny%UtSH|hLmYKcvUUf{?UrvoP_ofPc-Yz`i=rP)?=pAgk^Y~}C z7Nwm*G>fjpatHqLt(J>PYssmV*=I6xcZEOwc-026ocX71x<$Ik1D`HT4D|^` z<@}y+YcSAwqJF~sDZB7x&GI2-39&h&i!DVm{>+@IAKE!o%bzN*U%$Smzvo;+B&}g4 zA>%~g)T%uBt*>Q9``4`yiwW1rDxJ(<>D*UyNr11T(bDbt=wGOQDJu7v(z0ZoMXm{@ zm-f8BdDu-g!_(EW`&(?cq>8hZUfg%NQ%@~g^7}GEa-2d!i$dx7d;U2i{gUN3VjYWw zXr=jqE8pWSf3_&3h8CyJJ6R?o701c(-3J_wNhMi2~4nKh|if6my%} zIzHX11@*1P_ncq7 zn>hIWU?Q4)CTnX#ct=N*xT&$jI2g|3cTXt{*=dC&n@<>d?JX z<6X~|me>Uh&9>sS55&I+JVs zt1$2}M0KoxolyTujQTnFL-6^3oNOwy&XV$O&bB@=d z%kG==&OCG1_(4HV;wdsdG7JpNQz=PNB^Ve;Hw+A{F5+YGiFJS>JorW2Ttq}cN<@T2 z!NK;Oxs?eF3{9+&zCMN&15KZSfxdpPOoGf~m3E z3Mw6KZJ!{<^hrrre$zyPHInF~ih}2aXgow63owS%Lemm$7Qz9k{(A(1HG&S}WTQ`d za0P4RFyh>}F$gS}5s%#AXz&PV>x^-5*C^C5>|W+)P*i_~6Xn^&RlzaIHI1j?gox0p zwzD#8$V;^Mwe^Mi!(wfqO{ClUb;c=1JR(h;L5v8V5NszxEO$bB9Q@_*IiA}+S=YFg zzpj*#KBtmmjCwqxE6gfK;>v3ya>Nu*o=1;%s~#Q%LRepxJzCv3JbQTXwS9PaIDGZ^ z@rKruCkQRDFhpg>t-oJTE`f$sGf|g%Co2m>2i_yXz=oK^z=3zL;0GW4z`#6;3x+`e z|6+h2(G18x-$J@G9{uwkRu{UVkg|xB6!=%!$ic+K#?j2yNs%lP2OMhBTt(eUUG@#P zk*zh8fw8Tj36q<(9ds8MUN>&=*4o6$fW*z(%Epn~jgRcl7Tn-H^kZf+l0Ta`S@Myo z%PNqF*gBYyura-6dP&BQOhQ7!>tOtjTS-*>@7=*~d}L-$PIlbP%&xAkOs=db%%r9Rtzk0<8wqSI0w{bFXW3+K3|LY+C97oi|(a6Ev&dJ=?h6H+C14CP9Cq6PV z=!yRQ^VfBnxS9WVCL71UZwuTYGxQr~7N(cX{~jCc$_xFJTfyAT#7bS%+!{0wI0rw+ zOD^6&+y8&x{CCE`_EdE=aS*Y!20J?O|JS~M@BF`C{=Yl^Ii<#br(|V&`M;<9pKt!& zlb0EK=l|0Ze>L-;PeD8LBl9x<`^@-}VX$*qU|vQs{(RQ)rm-igA z&*q7{=ce4R?o(xUlv^ca%-$|UY|`=@88LY8%e>wP^r0_s@Y3+py_QjDWV zkaVx(4^N2s=TYC`dn-p^)2p58M7%}Dg{A9W?&uL`5z8>>4E9psY1gZ^NKh%!o}o?3 zqY#Ar^)et8y!cQyYN&%j0{ibPokB2Yn%b70TI}zwpxdJ1Kvcpyg~Ofyy*_Z2UU4u9 zhUrbksaXFtbBv%mq5|zR6vj!){|k82K3fQC?JE0j31)~?l~o~ttw7`$_wt=aD&h3gyNQ+|}{ z30MZ~PL)m-umCY~B1-I3wcM&0lUCo{sZ_0;0v536;{+UuF_z8Mlg=(p;4xMTNMQ8BS z${muiED6*vi`i0`^a52a5|Q{ha}0Vd+LI+Z^d^Ie69;4*HuGiI`W>D~qe^?t7g6M{ zLQAEs_ZW3@g5ptxw2YcnqvlO=;h5A>a;v>xcwCK7x5g^We^S+ZT~+v8uC!kc^Bk%> zkK#-|=RB(mJ|;^38G7vkTW1`@k#9 z-O)^u4AZF(nAA=aL_99)XWY&^#*H3l1+vABWykR;L9${IWyzb2X}%|$BejfoCi%tI zb2aQa+6Z*Ltau}yIeVJkH1Jw_h2}qVxlz3ZV{FrM3e}2#xDNeYkHJ8TI+Zvb4ptIC^dDzJ`%;6L`I!efi9PD4A7ja^WcfyJUmYc2zZYq5=78 zPh=%SH7JcZXLgf?@rnnRvm@gnwy$(gzJK9)yTpnhw7B6slOgo}jp{F5J`(s6g5e+a zGN#tuYGLJj^YzM6!~#sxzb7ZR#*D-f3Z9{`@v~Ws$1F5^4$_x4VSG!ahL)oxbGW0T zjuY$=Cf-MzL&@aK&8KlMHqQ6wikDX+32>IX!*NFjIy=moq*yJ5S}s>m?&gctnm_xX zgxnJj{>+xjB9|e#hEK~!J6)Du;y2h?YCv-wO5rFy=X)lKW7I%X`}ss0uD0I2m* zud4Pqa}nE+VY}T{qg0pp0C<$0T2rc#qNgmIoGY>!=)59}J~!5m1<_IK z{>bA}prThRMQrj(lB-tV6XEEQD|8T1nheBG(tg!<+M6EZmLN0e z2=pJekK2N`xkiUWW(C!m_cM(4ce=MF3>L-j?~kLMYOH3Q+}K%NAJ!i*M6)awM!@y%Bak zQR~Y1NtaJ8a6g;JhHb(ZiI7&O*4Jng`FR;dI!W09zf4-JM!CCj^e9-SYmm9MXqWs{ zL%loj#NQdu26K94{PH=^`NSP&BlD~H-+NpYyO$|t(nhs>yi2ry2DddFp;2qf>$H3Y zFH%I$58bW`+y;EXkcds@vofRLZ^n540lVhy<-j2~0?FPr| zOV-3}l|{fww&_5Yk@`1m7KhK!n3Rhb%V?9>H_3Jh*Aai^&XX7M_68~iTj$ArsURJC zXDp*~8oAkU6?optP_fy0KTnQ^GBGauHO8+O?M7TRt;S%l1Z$GkA zxKY4jAfmw5aq4FhcKtH7R=>WuXoz~i?VDotC8!%6W<5laz!rjlF6l7Hfrpykcf1*7 zn_39(Sdtq6PetXESLm=2`wzeuWrm%K;uzz3tQ+|^H2w=98^*&Vtl)Kzgn#^JOHeJ` zAOQHL+2L|N{uj?;koeH+9yB|mPANleaQd_Oh2eW9ZEp8Ag=q63i*Tg zxL~aeWPkHQPHE4ZJUh_2&?VD&>y@9$|Am~%QUuR-CdeCQ&Nl;K?(^8pM%%=YDh)rw zxK@R4^R(@TNN4}AQET(-TiMML-$p#NJf#ap z5pu0fmm7Ix02r1CV4dfE2A6O&6_}%`cfBJ*pe7zeMy4b1_b- zIEpwnOSOEx)|Mv(>~HQbS5Xf?BTC4CIr$?TUfw?}WN8~NikOE71!emfWxr2%waIkUu!$Q?UDgcVptrlB! zKEF2qdIOy|wd?GJu1~kgS9_zA_&m@1j+Q$qWk0{>_U(_O43O2UFdboHvz#2aezOSx zUp#;SgC#nRYge1;NpX}i(%?=hUG}COmfB!7>K$?j`MuPUv1mx3;Nng4tL@x({CJzq zzK8ukOk~c^7CaC63VlyKw?;{m*{wg@ymwEaQ51fR`ho$>AuJ+GvCwX980;4bW@|Jm z2o!$E-c|2Jhw-E5))c*g1h*Ba7M>m|+}~amFH*0|>3d!tWfltuA*-cb=@774#M^kB zY{;gB`C)wHHUE))?KSpQtU<2au=}*0>udC267yXAE9*gU*)cUK?AAZ_0R%u#~30y8cN@lZ6EYheHk3Xg} z9ZroEc(_$Y-3M$9^9(DA*!NZud@hZin6I2C4e0SY09;HVs4}b!BcOFZ#?vbAG?cyS zY=~eld$G!C+=uqdXQ|CU;MnWxxF1j+6M(vpzjG}1IgapAGiue0JI5Q+0|qoTxeFzI zy~MtRTeE$Zy37P3-0$ zYP<9t_HsN|?u%yn_cT5&VqyUw2GGZ<@r2xi<~knkF9g24ZSit9pRLN5dpPPuon`DO zxMdh?@%Ai6OYzEbOXKrY)2uQxp#90?vNx)_^a^%+tU1KRa+G=p0ZWHwFlI#HVcsF+ za=&)5t7;->#3$l8t2p3-4l6-1=Ek%%KA=)CI6-azE{6 zCM>AgdU;;(O#6(gvEp>TkdC>*idmWO+M*!mFW zAUkTl?vN2Z5Gh3ejZ=t+ysWPyWLiVl_wGzkLm`;-ZK*EyDZJ3)@73NZbLBJ!_gCIF z0G=-s`r@Kpa*JfVG=lwtzRsVCZJ65m*}6*`b)X`PLNZ1$eZkjm@&CR)LL9WFv{Ms} zMweol9K3Lkqn(K)_?w@~wCC$Qd&!RUO4*?_i~8+0I#Fus>QSp*AIP7-G9G=@yGSxm z8;@E6$aB}au_1V_G*?wi&5h)rm9M=OT=h9v=0`+K$W z*F28DE^n=Q(VCbD(R=~CQMTcXVdmsX4RZHDZM-$lh38xumo71hLbZkJ{wm7D9LIv2 z$b#32Y;yu*8pjcHiE3e@*TpZ_YZNYqb_I5WVrL0_cB^j*hF+OLGVe8C7i1~KGwEpF zye7wZ9B&wJJ69un@T-y9jXoP^!2In~(MUge`}P2MlV1(a*Kwh2dnIl1vvt0o*h9@= z-MMZCslp}xJaTl1wizz@w7Vks&6j$~s+)~>X&7dT0XspMz63EpSj@5q8xm#-^eks* zns{}=%`Itz>vnXMHNqVClMT(x;6`|y6QTOxgy$%CB#6tC`O4J$=Vb<+kDFgULw;$z zH(efZt}q-a9ASUDGa-|Nz(I`l`4!D6s1`|pckHlV`j0x6iKeiq!@s#Cf@NUn4iSd1 zh>;v&vgV4n@5VuKc{;j+!Bo{vCjj>EhX`$+sbht>b<>25fL=;&=Pj6wY(!;e|BAmo zmk`IKj=}44IfQDEy9S62T0RD_!9mX@lu-xhar!|+$TV`bmAWr9xi>Jf&kL@hM8Gql z%BS;BFyZw$cT9MdQNgaNm+AW-bTU+Qb_n(XhU_$N0{%XL96P1}v|EmCrCOl4udqtZBexhNW4^(LhF>};b*y=ah zoc@~VS6E9mRicAgcf9ndmUyq@5)5JSeZlF*MGOEsYHQOlqpctcVdb13gdtIhwi+aG(Lrs)2DQK_O$hx!N+w3S#SWS%ycJFr$F*>1xgf509 zTw(p0to_R{Io*yj2)UgkIRanp)hS@bD(O?Qvov-t@My&dZh?UjG91b#*~SRPV;EjE zf1x1*YQG>CaeX4WSh66O1V6GjzJ?;fz2AT~$Vs%Ow$paI74hr_|KZDV6ruq!j$THVxH|#Z>Ut-GZ(kf9q+$$6!-@Sw(%g1 zigoZDrZ7i-PH}Z>|CRdtr*w7rIMHt9Qj+uW(!B^Xp8I9U<(#~zE}!rA?Q&l^YlY)TyI@ve!0kyvr2nzk zUA9s^hEjo>&$?0K^yi&~!m0Ja*q_CYRG^dn{UT|Cwr7&|>*^FX-)iTa4cP*%?c@_R z4Rc?~qErEC_M%TTwQ_e<)dejkvhIubS!$n={%uPPL}sXLONlGHzrk=l(eT6XfLQw4 ziFxP5WI)MlcTzwtS%C5tZMq?Oz7iFy)Qf)`SdwHOdRhXVagO=w%@{&H7fn4H+k?G0 zN=NQ|-EG<3juRhU(;RQU-|JJ#Ig7Z9Qr!(-)>EVeG=6%Q>blc^hx_O5fmodclO-Pr z?w~5AT0hb`0Y5=z+v$siZNIBB&i3ivm1VZ`Pfax5mU3am8cv?)xljskY;)7jo=+Jw#6Y@(m#8u!W9Xvn%a9efBVM*g$F!O-a zqKpsweLwvB{dAMe@RwGriQlzd(}x=aL+Q7JwX=%{ESm&^`k-X~$dx5XeoaflYb2QO znGYo0fojVsIIXP)@&jGR|G}O-zjnA?4;K<@7k#t8~#Q*QkE1q$9mU6LU zXPg^O_q0*!bE+zZNE$x(>y-ZVN|LtC>9wns-v?J`4mU%ZGmQqp$z^hx@vK6j+aj2R_tzNa zCPnXH@+p@ukU%i~CYFuXeemKD}> z>_Xf?2ZCxmyPro2BOUcK7b;A`jR)eTKC@XDg_c2589D+;sE~jlBz4`ceFFeRh28d{ntA4}dlyX*6=n%0n$Qxs!|+%f4@a>ayq zQDLWZ=-#^ddobL}Ia(@5KOZPPAH27IlyEaE6&|J6=lj4H`(5iH4l{39<7X#s@OXZl z*5;cSKMu@Koc3Q|_!MhaSFK|wYS2VQVeq(EZO_$~s)g!#{T3@8%9TlylS}8frtKi2~x3x^3{NN}!{$W;iUy(YsaI!#ib|7Hg>0+UCvYwg3u-E0T5J{{~eR(QJ_Jq4a zp0S}&o&8&B4)ajDe1?32&g#M@a56ak&fvl?rHOU6;~v>7gFXa~x*d@G#2pHFK3yxAVbRhb_>teYBz`&x_ zh-O;7>0;h-q#uw_sOp&8U}O7*SB9jBV4i5H!~c32`zOww!r!B>j=i^gE!52#T5pe( zAkDZy3vL|XQYJeNhA3@zZP z^h@E49QkzJq*ZQUCSqMadiza5XtO=?tDrxG+vVj>{qC?|kdL~PsquNyjE7?^u*9~C zfQ2Fjih?u#r0vj%{qmCkBZMl$$lr?pTN9dU^f3IGbAR`q%D|*LmBFEHx`JI^x$LPo z`#lR^Z+W=))DciCQumL_l8By^e(B|*Rb!Q3TyKVA0>ItF#H2}}MyDaSdKhV_9IQW? z#aCJV%sF6nzz^)Vc;CR`7|~2AD19l-ClI(X7$~DbYx&-D-Q>Ec>z^}Q=SULy(jLv~ zz@G&_hsgp3*Avl9{P-Y#sd4nqi#E>#oG=k8Rb3SnV%K<8X6s4Rt9A`8-tU zQA3HtyJfI2?5JQCHTSp?E`oq@#f{tO{EP#UCg+IO<>1i)RuYrWkI5Og-z)GtsFON0 zjXh^%3I;E!F9Q&Q@TIx6xtC0zBq4UG2Lq5R(P*d7fHppo%2g@Htkv+QVCq}RDzT9S zFEUbK5KK!GX&MJytLG(Ac8s7X;%FWx+39p5oG^)>ESi37XW{zp)P73o63@5tvY^p; zF`qXuC?lylR2^ZDeA>lnoo!GG?d|Rex+m&oB{vo9LY_STT09!+86oBh+?!{#rdWo1 zfm6U)F$ZWp29bbNC)(r>uTq8bDr}AO-CDQ|M8KA{q2fZIzhdaf7oNOgBO$t%@8Oza zU~q0oqgZ?{KGBS_-ro=z-W3&o^t~^q=wh|f>J83OVeu2ztw^e<8PP*7*VkC$*EQe&O2}Z zTM4Pe>eTE$HKCPkCfapN*El2UVUO!Ra#Jr|e&4j{PhIYndj^=uw z1zh$5JmFpFJDCjsg7;7iK0>;bez?pR;u}itZugLRdUMS4eDp-b{K7y-heNriN-5Xa zr~g`cP~*ER~YUHnb;qe+{nD6jtL`p`kz=7L>o>C>T1OVA4yZRp{?<{`-hk^zSp0&S$1M4~!@ZbMlPE;9V$0HD zW!$}&AzkL?=GOZl*g^O&QbDoQ4!6a>+|IE%R4)_9Buke>E_x4z(E=t?=M!dF_x!#| z9BIiEXi{)x38%KLcU04Ek9bB6M3O-%lKhH`A(hn=sja)7m+tceT@`rJ*;#o|?G2b) z%)m{nuKC#FdYA^Cn?RAvsVyi`EB;L4H3?jDcmw3}eJ7BlfHOe)%NLLW9nSN|FFX9f znUka(rw_Ms_2)mU%$2sfg2LZYI_5et?Yep9g4>-tBq6=$l%6ALe3NS&*0b5Q zerW(0Bya$qxflz4phCZ<=W~^#ilYfJdXvbI{Dg@6byWcaH59GBgr*p%w8!+Gr|<_- z$d9Y#w=jVA(QBzq)f&Pu1Hx7+5SuclgWqzy9uyUKC@~>TMkDmbMODpY2vxJI&QtS2(Oo6D8r3 zUS`lRX;g^XF2(VAy5wtAz9X6P565L505-h|;JUNe$UJ0Zxz0d!SO+PMV_@U-0kLa6 zCrKBB<|8~Z)~I^)-vaMIA|w69eKWO85@W(^^B;Y{_Q(C^YbC(%d+*g=7c-ndpY+;t z@(mDwvs_iZ@H=oVt=gZ^A0^PgJ*_ThiOk~lxmDM7U&sE%`~z_MsxaI6I#NWDI+uOT z?=bLo7ad-)s4~nO%0Q+rjO6*?us&ek?Ez9dDq+81d$>U_wSlr|_JXa_ONYsbHm(4m)KTn`dvTnhCA$Mp+Tcb0DiYAhtD!fE@5!}X~-O7~km z@0{X71t0k|URuzNT{4bAI6~?pm24GutxCRcQm zZ{H#=_qr~6=V2RGec^U4NRvUFsP4wcF(+3KL|8N;jBGQ!2Pqy+J;IL0>1QZsB-8v~ z{uth|VnAUqj*STLp=(iAIk@-K%N^Ez{_W!C;zi#m3v2cVRNHxfBv6_j{c=ikgZBqn z3JZF>-Y6nKD;N@gJYLkHsZ`J=g-W;*b#DYcoDL1HW;>9PS)7+b!p%_2nuIg7$-~}f zLB(7Brib>M*nNdOgiGC-{q|=0z>jE@?&=X0aj8W3bu#UkzuIts# z;P4OcHcod^MX!9t@_0fnAMqA^J`s$r=)CxqFc#j9Z_Q1uBLWuN6&K$~U~)JCkW!oa zOW#ePmfy4WQlJLrGWTLUwag1AYZ$Ls(qvYX$zD$T6|->Wctho2NF8~$vyg5KQX%)Mm96!l{8!IM^mPO9&Ahsld!UftdorVdNwTI z^j57H^?oD7w*7X+C1Ke14z8{fwsaupZ{1Gmddd=)OOAy878p)u%^RL=_^#|OBa}n#>Z#@V#bv}@gO9Fx%Le-bI@X7VgylJa@^C^qgcA=?Wza2kboxx4yx-XVot?#u}@EBAG zmWB$!MERLORcYY5bweM6*gP&f6^<1fe_Rf;Q2bN8-?b)`Cq0EffJeBzx2X&b6+-{|5|0wEaoOM}YS!!b z-+^^ibb#jn=mhaln6HqWiZ=|#r}z6DS~NZ$!YT)xVg8gA>EW|w4w?>r#U^~QJ^8us z)&{nF@Qj9(%mr_oI>Xi(E)jxM&kJ!PV#7@KOGCfxx}CU}A2XWF4d1Qoj66bqCTuRG z-`+t5kA;C4+4en!!#Q;U>K<)j440{D}gB@5(BLl6XE(Fu$+7LR_hUx0ri*=7v_oQ;uT*neV$ zw{RIpIdWfSbA%&w0qfaSB4sy0R}39Pz#1r{>oN-w^N%e?%hC(X>3sKsikE2P@EgqY zAUtPGYPq7`=+{M4q5Qvp_Y$whue^sV6U4H8)^c~Qbr%eymr6r{Mg)iFO~y@gg6|^) zQ+gjU(ZNhLBo!wJhtyWR+V3mhQ8nQR#FeuRDyn&HxRADu7ot$je9~-4i~BNZ^*!?& zfRV?D8O8x|P=Wfq*eWx5fT}4)y!8bb)Bhz#St~565xLrh38ZK0*ARNF^!eUQmcS7u zN4SbCS2P9Mb0~IyEOssg34>AFoGR8zVt`^wKOptOr2J^3dqU3=Z|ErcR-G^mk?x4q zC90PwN~RnMsScVnrNns`Cpe9?lo^To7aAqmgNwKcEXU|Hfv6c+xrrowC_6C@F9Y*3 zq02ifp}&DA1)3OO97ZU1qDdJsf=)m>C;U?7&iJpEngoXy{M5dIC@ZF}sP7F%C>d0g zhGkf}x-RsZ_bsA$e*Jz#_Mz`LD?bOd+@Ipbn+)R}#CLUY**gtxXNlhz@bv(BrvX6d z)$jgqgB88BX;DpPhx7jPnx)HY?gJ6WvgQ@=k~BXffD zoznhm7dMuCyj~106rcTh9mzoE$A$-Oc(9;uomN&)i2!)6Kh?&85;y?3C0tk~vm{_G zIcDWw177k`N+%u#(b_-z8+wDlqcp(kAq$^kf}xhQMhQyP86ox>Fx4H)Y1 zSPTQ%Y8G<bBW!uZG@8u z8xCwo>;E+A+xNioXKo%j+P0pl$XWQ^YmYn)y9He4BW}tcW879)o~)&0Vqu>sqW`@> z3N%XSxsWEeww*4ImgA^h(@1b{fLFRUkU%eV%*VF6HI}86??AcF6Tu=}?i&A@&5}Fq zmFz!VLJ$%w2P$JWdE~;g))!aR&O&>TQ;_f-1Zc|{<`fvY8YXF}eiNPmxiVpUMce?W zezvykX!Y+EfC#R1dD5cjR+ZQ<4( z1P%!Kbn6tB9?7^l1%Ez4RwtzRM@kpWhIZL)$*k5+ko4VoX)P8u>un45#b^H3RcC8$ znV;gnjsbxWv4^$}yKbOqL!$*}JrsN%r=uw!+akY8PtX}`1*!gz)b9n_C?q;XqB?*Q z+hCTE5@1Zo#Rou!`aq1Xng@R6&ZEF-Yg7p8CL1w{^b7dh);;5S+p6m=PxPwy-%$6G z2sqBo=y#_y>5f1o6Ob>4P@Vt~ssyNmMwMBtV>O;YFCIt;Fo3Tr4KYQ=dZXNXu8CIP zufhB^y20OGpTR>;Z)ra7Zzoy?38jRt5129_vyyE&RWd8vj+yIoFwb=bjPh#v*9^12 zSGrFE4ebBP+XzB@#6feX&mTck(Lf1IdblVsOKUY>r&x9c4Vi<-O*`h}{g;jS z*G&^5@gBN$IANiwSNAMzN2ZW9p2KPDU--moxk83xJLGIUIUWzA95ATis2mSsQ9DTOsB%45UF_KPuz*#{Huj5 zf7Yl%WSI?hchJjz^7I?v@-jFKrVF%Ux5$<(qDdup6c8kT0O9U_P}izoMOiBS`!FR* zazT`%;|q_S3Toie@0Zc{v0-x=Dz0kCO3PNG4`VoT?U%4Lft zZbubeJ?kV1$9zm}?W9yx|Lk!%BBIN*R)bT%N|Cza_4z)5f7*0BbVB&+MHUUi*gecp zYmKW>DYv#p8_Q==iDGJLSzjwg_twc~{oXydij0jmM}jk0e#$mWj5OmJ=ya#^p^3haej8( z6O6fSx&h}-rNq3MK|@OPD^K^blP>n*!_9JRZ*LQ=4hJcdqN_E-duB z^=@3fh^iTOAV9o&H$=nSbQDme)2QZiv(NDXn?CV?cp29oXsXxJfXx(H0;2d93{Xmt z7)eUlOciVe_~m11%e8c)da^^)RXf=)pkat%P)O=myys&A!es87FJz#kO*o^aG=cHy z5eYkAP`3JRzHUbr>(3N#=;!xvjkQbjM7sZ}+|q`^31ci1acI#eI){BRJ=&8;xJ)r7^lt}F`s1V{2dT3ylU%!9j$F~}to=UdVr{iC2Z{w$ntrdTvF}Oz ziG^`w3bCH6n$RlYuwBqTT*K2~$fyD~iw^xP)K39wc>nz!-N1L&c0*08FZ>sI^;9xt z_Rp{sX}YIJ5r}Cfz9j*!LyxLw3>F_T5__M<@_J-1V9`P?DQG}VZ-giaFO#@%>KhX@ z&?Fv-zm53X^%dIvs|?XrbKt>G~VaDtw9K+PClQj&f!5qx@j%xz1wfW}mCxb=k00 zEuZO;Et?r#7+eF2$q(MPY#==7vU@z^$VG}E7Ffu|GQ4v?TJpCB8UXj*dXnC3yd}u& zzb~hy9LvSho&z++3J3rdJMv$+C-7TlTXZ%-7I5}_tsheh%xcyN^o6FM<9_DJ?=C7< zd*-MLfNU818C72{!_NkOWDriz+Pwp^gjzFLxw6Y!&DN9<(v`@l<#Z30N?1#?Oit0O z6@8j`n=v3qEzLD$4I0B%`S;it>HRz?L0VNVQDYiRmVyk!fmB_IZ|M;OIBBIL%ZL=o z5S)scHgRn6oK?++wN;HemoyM-X2TEBaqxVU78CU2OBUmveL~JWHYg5qX?)w~IJp-EYhAoTAD5vJh^2wBCBs;Z*3#>!=37Q1mk~LRpe;bI~)UxtMe$+`%}3t%zfjLfm&Ez zNyzallL5s0o?o%;?-795p|J*>piv%!js7flLB-+mP@*g{YUBr=)x=w;0%{{Z9Cs$8ldrXlTY#ozxNH+^eSr*pqrPb&6+E-~_HQx~kYn4qIoEr?euTXf$f z5+VjRN*r*FEY@c%u%w0S9s7#4YMmG_A&vCW#36(jKTh9Y>1+QH%tMhN3t3nMg)iCT z{eHmh8lowpw3cz&1k>e-BEhN$k6X$qw)kHY)4OEzxG8iyx}a4?Is)rFz-INy?rmPP z*zh;JK?(NY43ffb-f-XAR@gRN5@e)HSXfabKS3_1cpwCRP>fFq4=hp%*C&l6;J~^4 zLc3^eZQ>j;53`O73Bn6Mh;J?DFICD3d)6Ep@mUp5+fS>O8W|@>ss}c z?nj^whC1LPm3shm<~-elMqmCX%=9(XZ@Xr|J|FnGr2Z&$pqTten2;<7>9g<`43yCH7XoA=i zzw0xs=fy>>?@|oagS7H}pH)5P`H1ZBj3cbEvlzB9;8`bD!WT&>q31c`~)(_(!r0ZQ$dD8O^$zDZI;6 zhsx`?&j(rLmgxM0oI<&tn9Lx?>tg>B_LX9D=j_mIGU|PXBt`2&DAVe52SRzl0_^I) zpg~06=i*id47qpPdFgOA7$tDtV3LsG2fDFh=0erVdk?(Iax!SHgQHk6E4Yy9)20O6 zk=Qe0Y$UOp{!VLV$BiK$Q9tEKT1YusJ6SH%!MSrIT{m7h&$Sb({nYE)o0E@WN0hHi zrM=w;#_s5!$V>vR%%+5$r!F3Wm-!Rqa3=H~dnL1NZq&m8Bv`0JpCMUSnJjKR4A;`3 z5DFgI)+8%}-semjYMI10#J@STE8odBCnK?wW?oXm7Rd_*V&C#FU33x(kt==`y^ciC zK0Y!*4&WduV-itGHT0K33xXpPZaZP@{`8CHAOI&eWxhy9`Kr!0Db#5>)_SpYQssRA zdXT?nmqS#Ee(+Rq-F2q*ZA8QcaE@n@amaBu#qQEzip&uw9thRPul7@-UhmMkptb1Qr7 zj21^mO@H!TxobxO#3>FB4;a|M-NGMlvfX84m)~dY58}RfM zoA3qieCm-TWSJV~?FUOOu?DzjS~;tl9NQMr&QFtw{#wHACxIboCKPxr8joG65h?L3 z{{68AWDFGO-LexVCk6dnugyw3u5vRf7-DCJfi5}stN62NMYP=peJ&e<{l36I`RF4O z$aLUi9xC7n=OT(0D?J&UpHux()M-(WJRT*cHBo3So)DUUb1*j*#M7;tgEvB$vyoqO z&mO>R(!CSz#oE3GF7sav;IrU3ZMQ9(tp7fVe0NW; zqo^feP%ckMC4%wAn}5w*Kf!UD?jzzJNS@#U#(-f+w?fsk6Aor>q&ABPW`pk*aN5|m zbogvfI8Fbo--VK)wnHS*7Nv-Udp9x00WwoKX+#E>F+z?>?X=!4%A>`s-eU#pn>|Iy zqVv97CYj2f27$G~EN>Vr!aoKq1sa3@=6gmY+xEzmf}Hol5%BVs2@fwhb`Y5rOU+yl z#x;^Tk3G4(mdXgZoK&K@z@!;Rt@k2dskTC;NKMzU_rtAT?aOw59(ex$3}p;EGPEmA z>E7tQB)`RX-)lt^hwK|D)?j>YJWCDSvHN35|uXNAC$2quC_oA_p)3#pj_+ukOn zy_f7%|7jI%ODO6$|NLJ7v4U&#-CIOq_BqF7N1NG~ufcTdS$k;toki*gg;Iu@50Tnt z+rlG<`#t!4&BltZaN@;+&i@G}y5akOQw(E~q3cR>Da|tGB}a&=x%TFgU{8K&nwtGR zW_Vz(#k?_lBspN@03Q5`sfI@KRWC@9GP#XPF+Yx@Phc#?e0b!m7?PyoLa`j-l08Mwi@BlCG?drtQUTl{6?+P!C?SBvv4Al3fe(a>Hr2sO zM_H&jVw9)_vQ`o@U^SgFSl9Ds`HRz5%)~Pzv4sqw0mk7!3r1OS2O@>%E&qG@|>K-V}4 znn9Hx@zC{l3{L00c-3GrXUYXSn=hW$kl)q2uQ4?0XD##E{5|<$X&V1dCra$-XExl$K)49_Ds$(F=3Xa#y2fAtCTtobospYhON~Q<}{W@_G^4br! z-v3>lL^C))A@H27d+yL2D-tXWxdD(B%X;1G_Oe{<0H~Fe$*iW6i8}Gj+I0%_p%h$jES-RBPU!f4g_Y%F{$3f0L4ObeP950(R@&=PN}Wq z8t7I1fFF?CHlHOz1C_N<3kjOiYS2?p1W$$@cdSvd#Z0A6o(|n24*1; zGQrVk^=Z!07NL~`bQ~)G>Ji-Ows>i1eKcs^2Oew-laCi*^-5r|$Q7`=i<^MQH~>`4 z^{i% ztcE3P55-ag<{*Ot(a>xKOE#gZm)gPc=34>+zK>ub>b45d9O0$eiqaH9Nr9uB#m{~J ziPbbpjX`z+Sez8ViH7D*{pmY_E$fV~jd7H(Ra>GKCSrkr8wEmXGVdQhtrCuSwuAwj zvry-H3+R@|-j**|$e}rN4^{!6Rc9Q9P$_(Cz1kq)O9NrfK2(8Q5@3eM0lz$GQiXmK zEc8zVYu_7HLdRfR2$%5jSQAzhVk^LUI>DE49h>|tW{7&s2#?0oD;ziaZDcP_Kd`FJ zT4LVm?@JTDyv=Vty5RMDtUQ89DBz+^-^IxX6wewzvZuRrSj`}dU>=0GS$2DWmFKaV z0jH+jv=M?@gsyIcO3YtWoM9*HC;VjH1_*LcD_i+HH#<-c6b?bSRP%X=lFv#Pk~g2a zJIJ4T>);N&yk?VjmE35#tRbCKUT? zx$R=VDd$DqSHN_G_3S?an9&XpH(>q4#qFS~@&0wWccaG~SVjme7CQ{Y#+=J7mRMM$ z{iMRXn!byHAIpOTj=bIlx>-U`#+zjw zHu?>oK4%G&rz2iXsxYlSZesFZTupv2`q}9zo<}-!J*E-N(_AcnPWwmqYRgpihYNh) zp{v)f&2YNgiy{Aqy|-+OvW?q*1?kWs1eBaX8l{ww?(Xger9-;AK{}25GU zQo4MOxvuNE@AV1Rdb8fR>4xZV&N;{VkA45`-mPNUCPH6E!IE`&YJ?eIdkCoa&TuMG z?IeA>b1{;UDVz0bO@`0>IcV$PHoDjTs?FeIxRgcoy!g)uLsg0yt`c{%ivY=fuM(Eu zmdB5A(uzAFx*%y(f(N*_BU#WbSiXiEv8=AfKLGhkAQf9y;i*3pK2#D2EzeSfN_$!V zIT*rxJ>=O2$y&KJmmuB^|>kUzs4mSj{%oB+T!2y6_;sw6jUR$=~$AQk3b_7wxhT zG&!W#ko!5}5DS~^8NwCzd{s=vZ&8Mv>JcG6^0O8`P?{@}gP&6W8g$R+sC*4q1_)Yq zMldmf7PhSvvA%G)n$jf{Fhw-M#0yfI8|p1&iJGMwnpgGuE`ntZe0+qpb8?D>e}#aH z@s=cFWySvUH|&|GS5mz+u3)LL)L^_&ZCFU#m!}!p1ZW75eLvKcf0eK8NJ0;L2P+Ka zef(8Vhk{NOT8z3|mx`=|zEgxi3g(sV5bXy%HJe z+AeKW-#I6nl5TC-s~mJUSpS=^G-;uv5@aYH&ljb`C@)zOWg zza3%Pdsir%1*Yz5OgWhrrgJsCQv+#O9DYF5@WIFE%(zdZj5M+L+fwSfFzp{P1W})A zf?mSsbGjPk&}QlcQ#`$|8VOE@X#55TVtv@nGM=ZyG+H@_^Ho_hW$H|yf|gVX2Y4St zx54JPFws%{+z#8=$whUX=bxJ-N??Jpf8CqBx$7x0GM~#OR@t3T3cba3y+i+%P`>J| zZ&I6c#F;V%{^{lYvrjSjM(&kblv5os5+O07-%ElN#l|!7p7Sf_cev}e*wqZN?T5T( zpXYYbqsxDs09#VuVIouuS@lS45!du*$*fr~{i`vu_lPj;>B2SiHR(hPkDx8pHSwtR%I;`4|J%TbkIIcM&p5e?w>ZUrHNP3|uLo+K{B|@97`t zluJ#f)9P1bc+ONrIZcidGL16*Ngla0rXH;g8dYVS+gD4Sf9YUC`0G@#+wSiIr9V?3 z4nFOh>SM!xUIH=2_T+A0Ydza|O2$JAg!{9TgpgH)a3)XNP0KdNA9AG1gyD__Qi=8C zuUU^j+5smO3=t2s z3R2H3=y=kCgXyT|;S-`R98Uyaa<(O?XF9jPJw+T!uC+k*F=T{OsBF`E3g8yrpk7IF zV+zefbCK_=zBn({e}FSwy!zJTar#)ie-$K;(fza5gP0*2Du)l!22J4Zh6EpE^ioE6 z<9t|@fB8W$R#56Xqa0s%NTlE+VJZD-LG2878ue*#t&s4Sw@OttwF_^bJ!jFT>$YI5 zxLKCY9y5ELi*H&W<5PB1IWO0N$Yk7foEzMksg%$5?Ah~N{I8p(N1o3_#Fo{)_vP#k z{P$)zis)@im2|kv)N?Kqlp-6m=%sUR%n8Bynf-HKRpxuS!nQWOQfcMTx2i<>+Ed~O zg|CFQ*S6?rdAi9+8r=|@!}swV#=)R~9S_few!Jm3k&NqTbDN^g z%P>1N4IR+fDp1p|$v&#_m7NKM&!$0L@zEp@D4x`{Lk%VSc|(HmIy;*$7a)%f$0D(a zm<4D~M2Gtx2RlS6m_nMVO(rsR+oU!~yxSD=arOxjsc@4f{T|P<$)m&61*%gj6rks0 z3W)uy8uH*ton;ir*2_aufHfye`^7U7H^z~+|C7ra`U7_I^QU{z+J2_4I~b){TpVEwa+Je@P+*3_X!* z=c^~ZZ9zxVZ>iLGIryT>IOl=tZnN67rsrM-V^8Xmd*jl7BF9EbN%B-N#{E?uamrkQ zNhiRxwKbXet(jOAbVqfnD&0dTROW+B*)vO%xf_PQRM@rRg=MLJHdiduZCn_YT`xQc zP%f3_IbWyg7($&DDU`+dIiDbCuO|4bLe!1v`!hFa<n0U6)_w=wcX|NkT{zBT6%@ko~l2Bj>=HT$u>`7?Z5E^ z2Jy3B$zh4gPHuy1*5xnvD*SGQ@{p36;%T1QQYo+>Ppm0!yr?msAhX6EfKj16jAhfN zP^#S+vmu6G;`kCj^0WY?4XOsq**UxvF3Z9vT*33V3jR^uswfdtN`*4d`~DI}>{OO8 zjnO*lw1=>3w438gOeb^opc2^-zW-6|ndU%JQ%2fX6Z2^ank&-geDLvQRLWIHpCg71 zjo9#fz|-%jI>K1wbyrU|e`b3EO{F5QBQDBx++wH5BU{L^=ybbNZ}3~YnjEAzw4;=YFtv<|4(RH01{7M_Cz565P;lBLjwkAtSBZ}ei&66?% zs`FlP=lO`osIxwWe-jd~l5RV!7E1Q$`-w4FUMh>lh6g1^Af1xtE2_2$MV7yl0wkKE z8zDOh(SFz79Hp_B`Vx2kCer1dD_8z+JhZ(uulxD%`d$SWkX1f|qLo{V89JAnB@jCH zmFW#ye%!$nS0xDE?mxU#4t)+)yjTLx%n?2F%h}PfZvNR(e28Mh2(p(S5BF?2^2(h^?!b zv0(2pW;vaD8$WW~{`~Kvy|-Qzk~s-W(^8tw2{5TIZ{m(q9U>jKnbPz$^(bMx39OxJ zbPE>gs&wiK_aQ1keJtJbO5COxS?>d)x_n-FPi}(c6$3GyN_YOT{z7IWR|0AR>oXk0 zU6KT&v&YHF3JFG6K}LqSdb_YYf^u(&F?5b*5A{`laNs5BN#UcaKLEQ^$e)7X8M?{6 z(&6E9l>V&_r&kN}5{a=e!iHs%r^iv(lg_WIMzfeGlW$?*7Oh)J2I@CNz0s-Eek9Y~ zP)CnxW+Gu#@aBbET_CTjFdb}LEN#WtSkM$%w^?rIlTwP~4~(JtlK|tAAV)CxM+zUp zKEGk^T5TFPkf;{E zyVt;jZ(v-r<|Lr1Nbue<8YNUqFw7khZDKAzq;;Il=XBj${b7xs3I7XXu1i7}72mN_ z;Cf!2Dv|arte&v{7Hy+*wp>$rU7I%6&R8JxPtw>L2U~Osd|!Q+F2Jmni-&J5scM5D zrWfw-^PMZP;PN`(!f%P^){MZ(l5YPPy)CG@&B3x*P4jw--n7N)aYOfS%(lP3$9ZA* z9%1d;f+mL+4V<>2r;@KLVQ;Y1DH}@A5N$e9#%@bXt5yiyJu5Pfv34y$%G9*>@Ch&ok2EWFDh4*RHT ztY0J6B1%iuQjx|+Wrh}cVExx?=)s{_%}D)m-=3#uH69VZi3kIy&qI4z>DV7u#P4hF zi`85@@Un`+&j78t2*1o)_OWEnou6E<*Qr&1{p`aEIm~umC1R3#iJ$hp!kXTlmR@Yu zK-inWsp152G=c#^y3Dhv)Ajp}ML7>+RX-&@R39t#e5ZZ|ZvztX1l-7=z=|85vhsw* zwXDFYZ#kUtwV7S&lA@U!rZL$FRBfiD4R(j-9#lGcc}mV*sZ>hMX-eK@%Y^$mGa7#D z>boH^#WnJ{*P=DP2KF1pIT!WUzs9hyYe>ou3&~<|Xdr87407th&v44FPQD27Y^!am zMEx(@kVT}s<0sz2WSLZ*FSIh{MM?T|q>p!uL0?(N^{bhv*)X?B7)qWkBa&pXGZ+m^I;{EX;iXD}pONn=g^=|=x6zAxAt7;j z$hGJf^T9UgaquQ-GKz>3e<+f9!BW125P)CJ#{Sitgo+@#YWM!ci$zP&4f9AcGFMRS zh|pbWhB28sby{@0?WrJq7{p%^6@iNB)0-7Na9$86y~$Mz#Bb^O{E)+F9{te&+Ax*+ zAH)5>{$yV!oDFUl{nqqJ&g9!m@}c-o1laE)kf%T|f>I&GUyV!`?kg74p%D~mjZCttti zoalj2+p)v*5}3S!am18ua8t;}@+*ye=Q$4we>5C#dc5zE@oy{w@ah<}YZHd4^uNrX zsg3ea+>2s7V|pK(%5R*r6n>%q{QBO`jn9VU^Lnl@TZ1!8QX@Mdld_BvDj~fLQoPVv^2I9N8`MqstQ6bm->-2)BQ+ zPFozwLV&CoqRGHz-A-@xE5@LOgg5W!1S<7fsF(fiTbR$`d-0KP0v>vS2Nt^aB6~lGz-~Bep0h~su*A% z)IW#S`C#y@o#2TkRbUMTsJhI)h&}WYdFRQ~j*gWMC31RqQZB&NEg+m?dGm+AMpzgQ;*+rCY-gSEBc^gTrfNhHiJu zt-pVIH+~IPqNlnXl-#(^ElVmj{;oo75D#zhIV@}PRRuM)-3ci6VxQpy^xr&oXpv7MAZDys8@C z2tyx~=!O(rt8{QAl?C$Wi(r4uODoc2=z`qhhmZ?0Za8h@ALfuvg0Pp}3A0o8gbyx{`mEtPJ@E-pXOelPQH)8D-Zt*n_a)1g;Lg zF0bvRm$EsXJePm0M|CHi3g?98%Shao9?yu_>}Frv{^ZMlIpK zv!G=-=b7Va{was-hpLaK_4ls76Hc2IMws(WY+{q^7N+?w{*3gGPL&F3yOm98Pt~a3 zQq)Q3cmm$dYh9-jd`j|&10J;v;wN2hl&jk5V5j`g+sr4^tq2{zRAL_{8CxPE7lY&} zb9)|UknsBO4Gcio3y6Akx?lq+`*T4Y4@}uh2>FTJq7UsC?XDKB;t5X6Lk;`%=Y1J; zO=za3dZ4`dW*EEDf_Pey;E>4KrWsVEZ1Ym|1+A$^)hSdh+~ovz;hg16SfcW!^dKTE zeeXbE^v0UXCx;_{U7-Q;ipUMDHo)G-b~u(sJo`lqIbU2I&BPFcn*++oWpO;8{yQuh zIRo;KA-Ml7Ts%X3^MrJG)NOug@E&U`tf!Xz7&jRYK4&S#=V!BYf1S-7^E)eDD(r(z z%nL=`YZPG%)jD!a`u&QPhT9ias-3;h_7?tpm9JZLuO>~3Nj#-*I@w_hPg58Wpvbsb1oWJm;{@SzK%#~=ZAMq_?Y!=fS zDQ%~V4%O)}o8W*Wbi@Podr_UNq=rTDF^BZie~bTdJQgsuS0krXNSNesuDtybU0e_k zo8Yg@7y8in8JEjZ?WLwt+i1{-A5??7+AgDhUe5Cg7(u1YBu?|*y7?_iuF!=Zw}rl{ zom-ap-GIHXyIISBCFuLxL_@xx3ND)ycqVuBDNqwcv8!ORk(%~%)Z=oW8Z2$2!`EWR zPx*j0_O(kEmJK4%-6Vk}($MMdXod4=((8CS<)WdrjuBZINkEv(2MR!ki{F}>Kn=>M zRWGqM5Jjw$JVt|1MIjKhz+j_Xk3H3tU?gt!icK_eV^PgK5$krvGo(oyR29k2A~ zn?>@(`QrKUdEE>F-%G<*8jG=5kzJC%cE*UdZp#AEE zR~sr;A67CFvVta59reOu9NfTF6ptbf0pQ?V1E}sw=N{3-0tc#P*=yEiAovD*j%0BB z!L5-_9e~gLf$B!|TntOi06uoF7t-nS_5us8=)P!cpKU+~q|l8f2NKtK#XK=dfbaP5 zsTh;xWA%-dV#(_$zsDZj`KxbBfz61a69e=v9B$o_MD|Nj*0nlZ#oSjT`#n zAFMV|hnIN;%)G;(0_&c5xc&<$iyEYnrogL7g7f%BnZ_qdzKO%-plY9p-@K;)JfJCS z^Rbki7(i`pD1hu^g^+_KXFT{ZM!{}u@6+f@bXQaa`o1;$EF+_Y*fRWi#fW(^Ipv(M zBZ@51VQs^f!CBpLTrj&-qOuiQ2a~5h{8o~PECLkKS~IQ2;@#Au;BqJT0_q!31e$^! zjJpUX0pq6^Z!LzvQnjJq74T=>9T91#ip`M@@vCXgNATO*)cp{VUjoiuEkKq`M*?R! z2KX#>Y_az*P*BR#*{q3~)L=NG_}NlFGv>y8I3q)}OZ|Bjdl{KbNrixl$mRIGe!QCY zFi~9(hj!GqJ;x~ga=&O)txBy@ND3&OUVI6j`xo^(U1QL;~`zizQ1f z%?H%jk3x`Uvz0a%rob1BFksn+=wh5KG9>r%{tB&ka+>rZUrE+>5qjWuo*mEn1Cytd zOBJ%#s+nsrioB}&cQfxtOL?5JXr!mRSt-nT26nfSz>ae6WVjks|9(=)iakA?^8x^tCNSku`{1%WksHC#l6y&IJ`OEne_2n z&)u*smZ*FB@~92_tl@B_i>767CMkeMUSr;w11Glei|%#=Ikj|~;U4yT{LyWizr%m! zNMg3iMC31Hi|~!xzt9c*qojbkoAs5!t5sie+-@PRD@0)kdj(h)y_*sN621Ce!a2jM zN4|Ho< z9e@N2ctqgyTDwtZAcmajID!LHoN~%V>R6wI_(FS-zh5! z`aIAuyq5|5MRM^v6AzV$s!w)b!mI=KTRq}0P2Y=qsHAS}iHJR@o!|ZBnB@4_KBO8h zIGFkO1naHWZ!umKQ< z7)B6b$TX4K4meAO;;0a~T?Ukh$>2&WFdEOxlNJyJue&^2GV%t3H-(LP3G_9KNY&_o zG3ar21h@XeUDEHCBsHq=o@3Osn4Pnln%so%epewcDwegf=)7-CyxjSP_v`k+wIzrB zn;+wPyW$%8aY-Zf{N9>uBU!c2bw;(F-^}kh)$q5r^j}fDsnu=PAcKt(c@HD}O%nZb zq-W;8+p~}eG>4Q``CLb0lv-sOR$X?-Ns+U|sAB95BGw`hvY&ls))V`h zNmZcLkbu(RF+4&1msz!7ki*zyv$a8~N?o3}@=0%qW+fr<*-7&<jvAe<@T1}s*1XLGMPH;e;ee*#?wmv#20@G)lOhd)#=A~u}W9zIKMuh z;NQ*HLR+q|$CJ!|xZoq>l{ziuU^~L6XH-sn>opbEU;F+ibBo8{PL;z2!OnwKafhxm zB?^MU@z06U7QLiHPUk_+^*6P*e=o)n^-6QGx0zO<*iy+95-vq=rl`1IQnJr@uhqZ2wE=PYJyxWS*zK`8a=(&!2thveWZuRea zJ>zpyxL<8laT{Q&yw$|*m#0|1I7&|4i%QCKKUZVgj-m=El1bv2#q|2_!za^J4~knxi` zS46{-XTQF%S%P&_gs0}xBX-vgqtUVsxk^W|R6&S3A3B{CGa?6b3)f3=`1Kr%$3`b4T}bUsDD z@RlmGuB1u2Glfc{nvBz1#?6y_)GLwg&Q$g9E(wB(o`tT($bwcKuWt~pr9!%@j1PaOuNd*AGyzc?R-Bc+Y(Le=(MfG zZ2p=q@vo`*td~ufhri*0L)mv&e?+*7qR`dMHBChccl%a<&l2l?8&pAO6=!RbHtsiS zsbS$ATcK^=P3h_gw^c)9yHlpfDiEaX$!=Zx(c+uJ zO>q%Z!)QXhamDxuaR90$#xC?BTi4@*N=taJnN;z~3+b|lwaED_+7FikRsxE}3|%tuyRVKq(XcCAQn|O4Ip}i4C z6oI_x$<-nL!-dR!(;*?umCBVF?FF@5k?DW)GP)c@EfQZ-wmn=AKGZiJl=g>9&zAHf z9xh7r9exuG_Td+{C^?Sa9#xlES=jq)MBbDVyVO;JC-R`vQynG|M20OF ztbi`FRX%&6DX1g3Yu?e$(1UFMCVLF}5AH4yPa^JRSc1al6A9wbX6L@)5HU!4v=C9R zv8R04JG5}*L*+}dSTMU&aol)( zM%1Ksa*3yM5jt-68!oo;fG;tSN8D8dIDO>Z8LXWa2$m z-PpW{GJm!R`!7#aQC~Hb>S~YFTQZ~|rO;?Q(`C?9^|{9pca*kTW8y;sag zdWT*zcnfmAElr>oCUXX8Du>C9mwq(vEpWrga*B18c8@IIxN^!~-TAD)0 zN;#-1r_J|)h%J(cr6(g*`ri$K1kAS@BmSfabPB8%GqlO(Vw_MRx~;(|;@2z#ujLD$ zz?_!)%hajDMpzMY-eYBIm;^|a=rtUUEL)9eCm(m4RcMQQE2Pqll!m!i$B$TM6xj=N z)dIVmBkRe;QgEJAzPx1->&JS9%yVsvxQslzNDqrC(ppK*cfstjTCZD9&nRWK#_v5G zlpEr|x8OqqoAMmBFTY+}2QVsM&s2PXRSZ(P^E&j>v_Hq*5|*AL9L_z=9*Djyq#hL` zMAXN^;F`L5Ci@0^?vaZVxpiy>CQvB?;V@xT;pmOfPRsSwfD zthQie>#=dq?cL?cww5al-*_q9bSVHcmQ+nRDGW}_>a(|^ybaLlPyf@Q?65m zkcJo>&2<-17HXL9UpB za)B*wcVCI_ps-#-Ht`-6R$hR9-?z#_iNAXI0#J0(iC1WbFa9$lyGnGwFvc?Ep&*%R zaC6c~}h&#cmp%91|nr4|qG4 zz$)@O8Nw^j*7k7kPM`Kg!GdREU)_k#FeH(XZu05Bd<2a|Pe`0$V1x$Zya-4qF?Qu; zvvt72e*LfT80PyZ$R0`He4F}S7@xTNtv-6DjFX$b-TR)P1G(6d0?|@cH72~O!>^i}bHs>fmVy@$ zaTMr^M9tBX-=YY~$tK@_pF`*)L#$p*zB?8M(R=}n~CMHQECg=)XafjG-0i~oBA!cu)z ziF}y7v|eU?E{d=~oRr7^TT1qon~gFq_P(1a(4k-Hi>)NvZSFEIlxDdxqFk4$);MN} zV?cnh4Up-BA(O8`zK~!{$m7ZQ5poEFm)B9-_=Xdd}222k>D@l zGCafU7o-t6#`yJCYU93E(xfTHZD0tn-8 z$54f)=B@VGW7DcoyOfAGUk+jT5hJ<;yT8FbHb#U?Aa#J!m#lccv$YnG3H9MRXt;+^ z=NYE`Z{U`70P`BiEzjZ=(7qM`+LOcGmA$roy)v*0f0)b-vd+?c&h1?O8n`Uu6{=}a znc3^>Ou}}5CBJL*Ty*#Vz+P}+j}OI}dZkLdc4C9=y577XZ>T?DEDpn!nJk{0IzSv; zZEbA2*%Q?IBxyhnP^N$)u?5ij)iZq_+=fB;&>P#el>u9j$J06vB-BpN>Q+H+*L0xu zVvD2sHNc&mU4ZeI^}R6pSM#mDu*TD_hnuqY^EvG_!tvz-X+k)}{h+ysVVqMIfXu*T zX8VF;`b6-4-^{v9y zXfZ07sZdup8%u!#3*VD@n} zg6?lI`ZK4!(8Jvy`B!>Slj#CwmOFW@TOblQU^fN90j#da26S5W#r0N;N=AJ^=lu7s z?hbU2tz)1ES7GmCm;ws?FE^l*5F_+;Zmm!@y}mnm!x{k9)_i~x z8ZPGtz5?x1wF-KmcyH8c{V0iPoAK27d{1@t2Qh~~&1RbQ86m6#*z8+LI^iG&E+bMQ za?|cckucnag0Iy*8g_EWes*4mEkEG#VIcR%RkPExWu~&iAF?}_Pv#kYGpO!Fs*!C{Q<=3i?1@15}zd;Q~mCfw#kev{*47ibH9&Kdwe$wz(LDx~OUe z?X%9}^AdXVc!CGX5>9sjg-#r&y^$BmoxK+@%2R>TM)k-|>F+=rvplEM!ICOG;ON(S zS65#Y@w})dj|foVb0E#|8`K{I2TM|Rw#yBY4@LquMvu5dsrWyk5H`xaKh z)B5x5?8Gu2CgLb*a2vdpxcA$a2lRnF7W8$ZR$Q?gE!vak`GGkHOZfCEv=VN*0epAI z!pnS)s|j`(?%>4ubjr@>_#3cc(UtVRLabBWHA*1}ymnM6StVsix}Q!>Q0Q!T*#^IH zq?EaHMt9Od!&KAhVk&HG!6;P_oIsc(02Im>L-(!C#a355OikBjamw@tG7!pFHhAy8 zT&?84uHt1@!ZRc&g|vLZa8kAGdem`w#+QL|A?XiLV$mfw3z{@VuxPKdz{w02IBt3kdfV`1MOw=`) zBlx3z^qAt9V{1Uno+ljlSRc0XbGzveP0P)>uAJL%a%6btb>#p&2++# zAe=A`aGmJ%+M8)N3p$#MwSkj@3s`YzCtm`|;(QLO6p>{WLwh?|R}cj9W4(Aoi}aXE zjtZPKN?=lOU@yvv*!~H)Zzf|dCdB|nM-*K{QAoz4aMHKT9nA|kG}AKfRI^_au=;m2<6=XvF#98Pn7g>+sTqX z=S;PX*@knffotbiE=Y!%VpD}EAp~5KW!kELN2fW%oHqgKW@I4%9841fSQa9@2;o~p z?I>K1fn%fl6=aTQ>@OP%fvH~bVU?g!WL4BB@u zw96?Bif8a-h9^ybEzMnBT?zF}2JzB2vX>TM4 z|G-Qh#avdH4cM&ycu(3xcF!Ix84TG`W5YvBq|pQJAv10hqrfjHC^a@w+Xo9Zc?P*@ zYyqxfDacE3*0kv|``fNwKd1=O{hQ$QTp&c>lf6|S{M~mR1nukj>^6c9W%x0{KiqX# zsYnJ`n#XR4EMA=1jf1U!70(U|gO1Bwqo6-hBd3}2+T@fjFPgRnU}sv*#y&%|{|c_+bf%qaKF$PI zOf^n+V~<4vkiom(fyQl8PiMad9K4p)(R-Ss&uA3{2tah?5SkylUCM&F?J>l-hm5*P zQ?&Br_u(p@r!fLMr0gnX-*`Rgo*n5e&)M-_^ozG6P;J)>=-5}(=PZyItlJ+)KEKmv z=E=BKucp}sf4jJjpmV5%Di?uw9tj1!^WDwSBtcma-xNV9rtPq^c$?dg9I}PTGGxR6 z&X}2PD)K^zDiUgpSWCC@STJP9nAtVKP|e=Bz1`>TBxKzA(NX2BahQ`M_GXkACkpkU z<}0-^1NpL9kAq6G_Bu#3;FZ+94U%*^b|6#RRR8|?3q}C5v&n|9^Tvk;tyq}o8Fh49 zEr@=yn6Lw*{RWN|MNJta;bxQ``cJIbP*mnnXCi9mv^Oramed`;0?0g}>Bu~X02hQ2 z%iF7}YSQi-MaHJ3&ta*#^0J#5{TuwPoFBe>SZNsE1`GO5dEZUEPM@d+VSbuNM;jpB z(@CoYKt6v?YA8!yUmxeT--fCO2_|gTa0Jq{2TO3E*ayfUg+32w4u!e%Iu*qQov0#>hT zjW)y(ygokLx3nHC-wsC1Aw4dK)ji${!_mJ3*r^YK(Z_hM)0@0vX&iU2T#cJs1WVrr zMs<4}jNAS3jl_rC6ETcO$-Hd-AQ;KzKtU|e!kR=egXAT8!(HaqgHHF|&a1o&*^*cX zet+{Lp5foFzcr4z4}26zghcGnE)*yTNgo#TW<|<6q86z>5r8ETlBx8i8Tk{pryQ@r zUJ>y`hjI;IlG%|64Y)e1sv#e!26YS4K5FlweQJ-~>m(A+ipEG3NYR&!zU zhzyxt=p3*>{(J|PcJn>c@$Qg{p|S|blO43+)Mm4elO4?4PgR8XjwXP5@C0Wxg7qiy zk_eeezE*DwMevCc79OS52$#k5Bp;eosPu|J%5Z23E$Uo~Nl3Df!6`|PHb@BBiEV!S z;|q2VsJ;x@d9`5Wh)}}j$uALdcE-NUkb2{&nt}C~)ZYOId<>muGjPVO8o-`XEp$Nj zf5qiTG*q$q!`R?bl0pexKw)zii5ZR3@=z6xVMo1x(6xUoD+Nco7}fR#&&T>|9ADbN zZ+<`hi*SVq=TU5xdZmds4&DauKRTifOuZLjBnhAuxhs1+N3^D^BW^yAF$f{^+yBtf z`8`8pi<9qoEseEuZIWXx8I2zQ1%5_04*18ou(gw>?bA&U6}2C0R-1bpH`7_m|ZbYdzBxpU`Ii*wO*gvLuzi#QO8vlgg=Fx?KRl;JzrjI=}_%33eb^C=1*;_qI<5Zyoeh$+`G>g!vNV{rRe_{`Wl|3;5Bxkt~Kx_Ytk^h5faSp*}?y21^G z2{mcQ0-5V#q}QPavZ+6~JB;K(hub6No6A{_q?v`Z0_hH9@C46LKP#h+6_ss6CNzp5 zBEC2OsrJxbfm8HboG~x%aoi(n7wB$c(}${d9_;@O84UD)q+A<>_~M^6=f9FnaQG6y z58u{I672s=e*<3;phZ)_5BdN9=KrV{|G&OUeha{n7yS?Y^)8|txNUX-^hYU22zmH3 zchmf5cqW7?DAASLoUJ8Om~#ft0lnfMx*UMXN`sJ;0$?;In>Q7N-z#V$pdIsbRpp`v zf9it%gKdTQ8~|5^X8$ z`E(s>dhydj12AxS`;X5Wh(zLe+#FItzM)MUs6*g^*1u*-;@9}C7MNXhx9x$_`@KMS zosVfQ0@{;*Sh9DqkC5m^^Z_i6_wWH+4yQ%1t{(;%OOtQef@HG?AmXK)O&9cBE#CL7 z1b^Ux5}-f}E(TOV*F|8shBJ`;{r!bV92*c~E`b{uv|#k7TMwp$Gv=iwkU3BMsCM9_4DIjeW=z^XZp1=TC2=Eq*hT~6W4iCnVkAlXP z7U1oYb44Qn!B2SyG_ljLdeA7cA5jTGyzfrL;Rwbj;=b7dkJ{XKOJ!2u!I#IC!o=Sv zvY3ubodG@(XcK>Z`U~JprZdHgS~Bdw2mXz4X1UouuUk2t&&wU8#$RO}%Jbi=0PuA& z@7T}BSY$r{LrWSMwzqQ}$b0_cAYO=9r2si-Ulm)@@VJ=Vm0Hh^T3y7*r z0I|IF3Ut38m%$h3emKnz0Mgc3%9m%`fJ89M*3Uw%W2vJ~#IpmU(vl|lZe>EMc$EFP z!AY1)h~Pvh55}Cw{sI6%s?)C*Jh>ID1Pg(c?gRbYGn24LA)i!tl~6F{ze z1lrw6u$sHn@30;yw4pw0yk^~H=5vb20jN|4$DspUV^nElPC^YjdmCpiU3!+PTMpv^ ztRho8fmISDzY3OTVmbSCEVj<}zi5zVuoDhIdV0#0WYwaqK6Upo`gs>3h>)dl#|;JX z^D+Pn2PfXOxcw>Y{(}+FG;4wO%(nRp#Glw~|Qb zNBbD{$&4s~RMH<88i7HNTZjDW%!evw>LuvRqhN(dka_-|iC*Zrj0|)8#!nC6xc$gw zuD@p{I4?R@gWH#ex8QEUDc@i*i=?*-?q`db8vsIGRTI}hEe8W7n^7%HBBpCVC@ODj zkptRmY;+|4fQaD7KR&@H;@uE|pS?f^=TwYv0nP7OOBhs32vIziAdlI=v3LXkU+H?F zs#DpU!6q1UeQ9eO8WDv<8O#WDHX+Ya&`k?Tw%oy?$N;A<9MFK|NAhscNb0SD`B#LN z^4e-&9Z>Y`e?vi2s>g;tQT)uL&j+9Q*r31&pEFT-%V%)rT;^D1^0=M7GjjZTHU62K z21FLI7P&Ovf!5Omv=mc7W6|LWOrsyU`d+z!JZ(eL+s`SGqV|nkp5xZ6X2Wa1aJAlA z>ug^XBSIewOiH;wOlmy-V%rXi z`#BZIb%OU&ClnUC7$i8x#ny)-4C(!Zjerts`4-KHsILS=vzpYOgD^P3vd{;T0x}|M z6YcB$(ao7DeMu8pZYf-&Oo!t{tJ2&dW6e0e$%~2^l_eomMwN!4+`&bJsVoMeuP$aN zrdY1A=aKL>Hmm_1K%|yI*${feOug@B{Qdj(A@BTw$29dQyiBD*2sirMZu9#sC=fUy z%$h{Znpk9t`NWQ9CtCxU_CqpOY(~$as40P{0YibG-k>lY0IA;jcW_vq0s;A10&o+AFkRV0R_Wq@H{w&+tP7K$SF(R=vF?NeaLti_O;A0vJ! ze{iaMp$w2ye#Br4HFb@M?LaU){VSv*TwT580khDI^ zE7a$3t>c!h#pA#@@}Nn!>+`EvWg;PxwRic70q2LS+5k#iG{1>3z!EtTE9ePp@AcM! zOD{8BLz)d-zp+eCL=G!*he}pzGjU$B*idZri(_$EEzeos6e7-##TqJ62yv*)VR*f= zr}VdU-x=OpM(=VxWDK=erj9@$F!xq^>WDP~AfssxtWm$;_2l=qZH|gxh*6+y2R&I)W`L z5*_t+YRz*ND{7?Hy{AH~@a)<;yM;lswo>zGXc_9bW&5~UR~}W*tK%=SXs*UO5FL;V zTth~<<{q*ionjg}+Q-jr5pfG5B!vP1E%I)yyo=uiCOB@hQ^W34)SSxlT=N*0IB*=? ztc*ys;k`mJPI*)a=D9>MhN_kG?}q~e;LAn7Pzr-PXEnb_$wXIG4xuR8a7usoGwXP| z#oVKYA49#VkH|?jO+&DQzsdQ_EuNX+9nkFA8=gB`#}rHV>ENS_NAaFVi?gNYWskt#=?bEDeH^i5govv<-?{yvrLcXYQGlB>hsP_vY zKaO8}t<#(x#3F>i%=Il_8dEi(Tm+F%>d{Frq<`)k`Z!#gK)6I&=_r`=!ekUgG^Fh2={MXST>78y1;0TM z0N?TGH7w-+I%eQsgs_7$`TwQA=@$NY1LlAR{#!rcjk90V@NgQ*4BDD{t65e%lz~`y zAL1JWhRzFvOprEURodu60!uY2Aiex!@dy;z@gOxw@`$gaqtyJBCx{hq@w~1@LPpkf z5x)XVo37X7p2vQ0^*g9=O>ar~y;q!Vj%hWjvw{4!r*R@a5tIi@OAN||k#MYA=hYS_ zJe#j_4H##aPZsOUFc;KIRV2NyHc{o%%%8)rDC0eq6x{Zrcm6 zIZOus2w<|9XAolipagYgGT3~*ufbq}N1jN58GnKGawELhUtTnu$b1D)-2}|&5pd^P z->y~wVx>?M*oHiVuWjI~DtKZgP`iCowQN@s&cgh`>-D`Jo|!0>{Q4D~f7B^xH_sOX zr%XNSrMV&ouZ;qM1_{1cgxI4#A^8Ry4Q&J3RtX^g-UV!&TGtb!#Tw%fcre7?d=(Qs zL7?J`Hh2Yck|4+EB9mG&P6VED1KJ^cw01b18`Ldl?|8D{eGS0ObN)te{|t%a^Z}cm zU4Z_E*S#H2^%emr=U1z%tPPN!n*i`^>u0c9kOZHw0`NxFS}n46Q~}*HJdk7&4CLW{ zf+OKB3Th6kh3ueRK!e}$`FooM7Ag{H?AG*vO*OjUXq7TdtEW5Hn zm-BN!_Kn$9o{X7nE8+F&)oXY$WeOCjoth@i(A+CNbiV&UvK)rl;pD(~Z}! z=xWMh7$!?%7&c3rKo{eot^J;`kf)%LwU95#w)48MqTHzqcSaB%p)?3$SxEAG82mx! zQPPz7e%6|vrKIWLHi+c`Y^enS5gDu2f%yPjz}FH%ojF(aw0i-2(%l*VY9A4%nWi^yYUQNJHIcfyW+uM1sX$#br8E z^!}+wmqa9q5~~BKO*cpt-RdrmX{h!{h!yB%( z{VEf^jEEK`Lqr!X(TUzm2qHx9og^5YXhYPHXd%&qA&A~0N{A9Idha2KQASPt-f_Qs z@Av%!KWo;qmSfH_=Q!_q_TJC4x2rK>0RFAaUqItcPv(B81?Ev%iu%6SV!T}T%)&kGP^FgOLIXoG+CUud^beHCpkah3=Q1r z9h*r%r-NQ(pT%&R123du#WUy9y~<6O{VO_#HO`MPf>HnNinj^2Y`L+t0&?qQ^o`PU9AVvBvB66R0#cC;Ge4Iv%m;?VMYR$r%Nid8csHrzQFu1UUWEbOvX67Sn{wo;&c{8B7rP3c$5XSy&QPbT)L^P z54=tBKiMN(@|CIp=D(Yk;J>=5R8*l%0G^2o`Mm5zvMu5;tl*YohA0UqJ$;s7+Hfk! z0{l3Fws}EfO^t~X#0vkkL{2`>akThUbSZm?33A(&;Xd`8v0cQSr_chf895N)%EOf> z8&6KT1Et(5A_XjgQXE6kayIiOh&H?Z={GuKWV22-Hf<nek4?fui=6tvS@Em3)x5xGLFoh>p z#NEe-H&l?%Sy<=Dh<1WSes$XI(<@M>r;mu6>`Yaw+r`Rg@GWI){;`Rn7a`}LVQ9s5 zc01nYGilK4vauUTob{spNq~|;Rz!_NjL+)3F0S^z?rm2lug0IZo|HjW3rz!FiF(_h z=3CE`djKUJ02Y{``NKWs8=oNyQtiF8yA{6MEXP&O(hLL(zRYB_Ii8@0qJ}!rm*gZ! zK$dLof%DC9Iue}gd~?CFTe9C-y!krV;~tTsItY}5i~68~cHbD9UGF)NRCI~nQ@GQ{ z2IWcsgpL%7bo+X{&wV`0-@v4A_;)a@1D|qw!81Y@Vh8Y__O&g*g~191bZgS~)AJo@ z)VJi-#3n$)$iY=J^WX;l81juFhA7Ji_ ziscd=$?tmqjY{;U5&QZ^X!d!V+e8y5IUl~jC%Ze5UwsfXO6NjsXp3P+QP~6*rb(l* zp^eYb=kW7mR1KkjT#wjvwBGC9J^o!)nw?qLQ%Ey{k#wrEX!k{ehW|j82{b0K1;y*qQ`e9tVFInY#_im3%nh1`cpZhR`D@5Ph3&3b z+%`d&R-bhfXoMn`hVJfI`cj+`>%`C_24iGbQAr^b^r zBn>Ylnp9dxl@=lf0@gFV52m-AC7K`0p7W4Y)WOf*)JE{*tx$YXkP>=Cj;bV(=T8%8 zauI6kxv6!6%I(7BJ7wZZKh|$<>IfY5nD)wMQUH=6!VS&uuAD>}y%*o6Mv7v9ZL0omx1RgTQcQtH7 z%iBFalE?3QUE3t}6u&~Z_orb$OWcwEx2{{+2#_ZYxL2)36BhL691|Rpl9|Wh6%~p9k6~^OE;a!O zI>+yxZS>AQW6EG1#KOgH5!ASp6AaI`UvE{$XqY zz}UOoIKb2NC4f*H1D(V)@}u4aKY=Z5FJP(V^zT)@0$~}qz=P!FyLYe+(9)62rLPtQ z+IVPlzJjSs6~Ke90*Z?n-8ePTwseM5{>azx!f@G66U6{rlvpv;gH<9zG0zot0#o(wqUVIo(Od5sM)Eq@r( z?seDcno=-t*EJRoI9W_$k_})W_u9$tO`sc%>wOQ4&%yfmQo`Gn)2yWl^nE>K(@2GZ zM51Ki$NwX3Nt7lGjp?U+3Y`aIt0`c;95vaO)WRVnybqNC%_q?q_;gtdg4{Gi@UVBD zD3^sz)VR(Thnvia|({gfplGw=3<3Sa^l!{eDTQf{;1t*C0z9)S6`~0IdOo z&V`^H(0}MccY1PvmP~v^S)K}Vq1?-i)b)qrONWL+e} zcX!Ol1pt+X$Doe`@^gE-wwB4OaSo_gykR=-U=DW}^pEzJ2mU^tI&1PjdEx`?cwGxY ziKYwU=1;ah4&;I41J`L=?5pKh-@$5z7aBk(lBFNZ%w=ykA0ftDUl6EJj3WN1rIB3( zAn`!dt8tbCsi`(X0x=FqPAA!z1T2CnASkFd!BHJm58mHrJ^@JBW~5+&hDZjslmu`e zuRA6baavi|7nEG~*iE&O@eE^26sW!escTGk>=PJ3@(pYTTo=z15SS-_fC5>)djN|# z4v~dyX-wn}gUe&|;mM9%Aw~&_=?F1&htN_+( z^`fu{4Z+nlc5t7i01!tsr!4?;-$03QpjjZ}c5F^dFOuE+_vs1(WJe_EuDzT_k%N5<)+W zmKgke0%}uggg$N4$lQdnTk|d8NIlGQgJ}UsYYiHeZjv3qP=RnafWapTsZ2MBCr%I=w&1?SH`TX{B2aL%%&CwAun8R3JW-p z#$UwBCbv0`mz65s9!uP22C*iFo{pRk3X%bXGUvsxNDUn}2p!aT#r0~=rlU$s8kB__ zgV~{Tk3p($+(`KN)WP(3q194#>-Jzf1`8O1T?ripZb(fKan5Yt`yjOI9HiL|&i&L3 zavol~PPy}j4kEg>Bh?Z&PIq&MoXwoFBmRae>{F`M$vIVJ!2ZP>Q*;;kjSUjPg4Rr9 z?-g|awC%|1RhtiH^=#uGOlhi?OHD-mOtqM#IOCZl^+bB(S5dhOC)jf}lys}|e|qWY z>{i4u%Q{Sk5LQ6LIg-Hp+1jx?gWU}=L4cnREB8eSr z2Am864MhjX7ifrY_#Ccp8`>D4~%)e1ozjMe^eWBs$mN*C`>uD{gdy?#yAn3OghDQP=AuCA{_jv5i!aItOE zdnGh_zm@KPV&L6hS*tW3|pzIbb@!PxQI2VTI(dl>Ml9X+_F%o&*V z2AqQg0+}C{ZS;}_yIFD!uQ})#vdq6sA{~STQ0=Mwc5)m*O3!}*BfZWx8US<$L9Z>t zObQ%)4cc}fq+`e=BYyed^e9hoJxjk$1y^?eS#W4Ehvy72?NQuJx7CDkyJ{B#nCo4m-+SVdC_LC4_c@Tz|6YRR&=XVZIV-Ki8CYL&Mr;BAWu zzlxNTNE>+6ICJAJWVZ@CTV&B;kr~04^@%lw@6VY=t-HL>c{kx_j}qCwEO9TcFlFi` z)K<~LebxumOb;jON7m)wPK%0}yQ8d=wN9TNpB)u*mNl2yk0(Y_xisz_=fpz`)rD`r zytASEQeR1Key;TZKcv-fjPriO?OT-ShcBlump3&Wkoz~{(TvzuJnqO- zO?u{P@sk)Nm&Y*IKV2Eip)TrAh${t>dJPFV;_xo2rJD#_M;tT-n2;r*2ZcNC3?nU` zFp@Bt<~@>sBe=;R<*TQ?@bnf>qBm{CcQ^Y1Ljc)4H3a7xB5AD&UW4@^qrGMofJn&F zwYJ&0gbganux_XWZE5SpWDO0E;X8Jwh75>(Nh{S` zHg^D+KI1=n2z?Qsp%!)?Hr6H&^>&#wDJx3AKHp~3b)YKbO+${b?;JmkJlGsm9?sLg zd12bZLb(>3l(*?UU2P*m_2ikEWzk^%+IEKe#~MxRsk#lp<>_CyX7@LqNhGanCtGvA zbc%OcL#8D!wD6?7k|`ajifa<-M{&Sj#_f=-4tlP%vwFJQ6wwj z)msUQPgA;$e>bEpxuy_a?MTrpdhlLanrb_atDpAXgY+s_p3a_Y9~r+)SQxTtzSi3* zd6qC1I7y_mNTld-t!=#s)RZ_cT0zh{kC1KOU>lX?2(77_MH^M0bO-S=ZYVsgi#ClF zYWzagyBmp>_~P*wXye1ej_ zKQM7feayTKi-(GI@Ky^bp~@tBSe;Kwi0uJ|PguW?00q=xR^vF5Gc@1lL6+xRPsWWo z=yXhe5jh?vkO5>Y&Ko8F#FkkAb<}gc=f?}RZ$#Woe@h5u%Vv=XNJ0d@?XRv-;9wJ! zJgf=XnyWD;qUPfWXl&uT5l0K7GAnu?zgY5i>S2?!$HpPbuO?uZHAuuZ8XYGGA=?yE zD2U5o{zXFY?Ig2S#&lz@w&ZdB!G}9#Ga5$CLywKT9dF&^Jyo4M`(eUqRE%&f392Qx z9(=Ezr}0W~Z)8bd(0{=_t$NSzk)&PJN>7qJ8(%8N!&iv1hqp!dUzFl%8@SHZxzOW# zE&h74_@;AjQbe9L`?}fq_}t5~W^r}oM8#G~#6(1^S^X}%71X*S-$)E^YJpkRvD>SS;7R>7jXIRN`5Wt zvwjzR#COL^=12I~?3gHjdt3_^Ab`Kg3Z_jLHaSe`@(;xdqjw!nSf;-rY167nTbbON zvDM=`*HE-%@=LAhxU9F{5f{uxNOBnqyC&fVZKoKIyA^A&)2!s2wh9?%`-VeDkG5vG z&0;PjJ6f8#{IP`V=I=L4dY*$FIU$|%hkfrVZYCQ!yFLD-dcB!icY=ihcRdtgf^2FO zahtjJhPcM#x6+2h`&zVVZmjxQ>-^dMy%JopXR9#XvIZu2Dn2O*t*iHw}+J)YB!jF z;~gaqQ>lw_Q*WGcM&D!<)26kDEZBTJ`gUcCR*Y#JqH%uvj}TeE8@5oR`!*acrmxI`aI$KEXKSeZS!oy5@lCyL$0x z84K>bViWPLw9O+SjZ!cuMXPSHwi?R1*S=7tu_w0Kq^?F)LoGT-Za&IX{i3T>_} zopWX;q{J_@_V<<{H|duY6L6VuvkF4bOtJ=L`&T+m-!7VO%DUZPKE_gHR1%G*U0%x# z+jEzH)=1eo`PAm4&xhrbKY@2woB&*UIQOQ~@61fMR7-!P6RI8-evR8iPtb-?>jUkQ z`88J{h%@_ViSrY{Tu1b`Y|Ud{=DI6l@s-M;@j7JF2|dbsB*Y_9;0rFU2>dV0mMcr0 zH?6M|Ld3C!Ca*1r-50W?{U9Al5D__%0VUGd3R^6avkya^j?(AdkCM~fAHD9&GIde2 zm0-J_UM#v)_0k{!`sIF!tfsMVC61!$>&~YsYSOo4hP*Y(xb=|lFqt(wv-O2ipHmgQ z)x!m8+gC(7rcHkzMLYivD3LjCg9Q#`inHguDNLnJ(TV!5vU4S&g{sn$%sNDoH+ zq5>jcc}uFy#uzRKdouUZux*q+t}?2$9zY(+&4?H8JMNzj7X(Uh-aoJ@Ldt1cc1D%5 zL)g@=`dgK2`XFgsQ{6Jo?Zgz5%LLC9l9$%MVpif1EWx|xm5=SOR9GYkyBJ}j>*DhB zV8VKJFzU(_K9?T18@I4yPl}+|ajouye5w+Ix`;QTfx4%~eI&}S-XZs%+|7LMJes5blGzH6 zPTUJ|urs5bQfjn7bz(D$XDq=U_vZT{y}mOSss4n*pSF|3iiX&q-S|>?#iGjvM$h82 z#C2bDd^RZ^XY~&-^*=`Xiv!vF3GCs`Zie9`g3?3b(iXR4)w(L26UV}r%&0N@ir>%z8_R^oo^^@XL28W#MogLRK#|L<$I3Y zAFhVCypAolPUPGkJORWWFd`Al_l=eBI3(|BYvKedW1$jLIZ4}zX+W6RqPLZKAVUu6$C z&HM2>nmw+lXR0=q#;HS_R$EgcfGbc_!f*-x^^MKSblSYi*S%X+U1Pp84P=S;+zxqo zlS|J`O8s>4AMY-aS$~JaFG7%Jhc8Gr&(h8t*6mV$dw80<#cQ5hR_qwREb-chr5%_v#QQ%SyX{MBMj{wk`FRH(mTwyvwn+Xa$z4rj7Q-M>RBLn7#*WmW)fu4D+dXU2s}hV*)bt4z?K;Jr0`D3}XM; zg91002_M>g;wNSJzdT>?r>pPy(c|1SsNV$~aqusaxPKorn4AJ^$$qgYZ<5UczJD(J zhsaYP!zNnpUfj~Q16vA9I$MCe^4G>Nda%V^o(@VXpzR^^ScwcINc}~k!R|m{F&6NB zMpMGscbWmJ_D6d$gH^raE%FPWXU|S!y>@&RbhhFynft%?1-XM=!k;C9iVS9Qdd4{O zRP{j}qqt&)u>#LOG$Hf{*eTG)d4MAw;X$@iFA6js&u-UoM$fWXVzl?mSI7^Ucc6>+ zIXSQI)dhvdA3n2Uj(=~%{01?$Z!|A|of=LSG*#Fo9i%xZ(;TjN#IU;e$J4ugVw3DRz-7~|D31GALqOVI@|x#PFpXqo%{wmnqu(vvA~zAqLxCLocZ(r1Ad@+ A*#H0l literal 0 HcmV?d00001 diff --git a/bip-0331/package_info_only.png b/bip-0331/package_info_only.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd02726064c9481ee53723039319124ff49fdd6 GIT binary patch literal 45150 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%0A(3NVW~}ceMaXZ5HN5@0 z=P%8sj+Wwbefb9Q{{)y8X^Aj(oZP;m_&Ow=^(mzSooNO3;VexgSaRX<0q)@z{}cS{ zZ+1H8?AtzMLiabPJp@?-JFLpGeEpe9Tb~e8=PNqowb|V5t@JwDRXq;X2Gtwt&u$u3 zr7`Kq5!VIcP_M=rJvd}E>cYxR@~;j}75m*U&iflHSQk8`(fM4rVHCdkJo%Vy@L4Cc z%Q2W~J4(tS7(>7<|6PPll_QVqn%ck)YBjUwJY zLhvwgm6LlRTd{0zbn%_wE4PI_dTbRfuV>1NM_A&U!8j zdN|$3*4ls~hV&{y*j2NspJK=t1fmE;8qbC>Q=t5tG)#9K4bIPz$0=mHIHG^_6xd=? zSLO8Cfa1kF$&W;Nk==9BLa1`}?|=%zw$dvvMq-mf%WJJVH!7av?k`%i5;S_sbH7~)qEo!1x= zaOsjGSmldf6$m~;L@F4&PEt9N1VR1jWc^5cyCTmUEitKQ9LSPlKtc2gmRgw?;fvPa zDpCwlF;BDBhzJLiD)Wckf9p?wD6ue{H|N-pP8u@9VA5dQps6@fE6Or8%7A&)2uu1o z;nxbHx|PL0aa;!&bWx-`-(j|QaA9Vt0dORMOSXY|7wi1k>fHmcrpp0;{P&HbPhyBc zb8y$z#Y4%FleU(uX#5&HDt;tTu>sk7Xtc4)EDD)^MJ-fsKRgbpDVPrPLWfgaUKsb@8BSa(mOWZ)AIbM9?f-1HvdaInRS9UuO@PvLPdXT;)~G4lcGpyVKTerDF| zOc)7MVbW|Fw1Qs_YCTV3h2Qzk&9ISx0qkK@jc+eFl7he-aSVbWo0`c4K;f5Y>%Bey zRV+MAO(L9H(RIdy>+rRb#rX5BfeGRzFx$4r84B)uJsmfqYW}6#5(EZ z@7u-&TsKQ)(`qJ_?+=kd7Zm~_i(_H`bvot((CQN% z7)&bPh1ybF$fV^J@>}0TBu@&>4*l}qlSKx6z)33Wn)2@jUU`tqe<(pb?GG~7TQ(z( zZ*hX9piD>(2Di2XQ8E4I{du)BjSioZ6Z~NQ`vQ!R3z*eZD?=`@8UxiEDngeOk@v3)WKx0)00J`$GFeJR04T|A zhaMlNnB5cjY6>#xu%I=12L;@pPHBlsUqHU)h86q<@y`4BBM-G=>v+05xYeHlI`%o9 zh80_S%py%PjxLd0f4*Azy4Suw)pn_Uw*ELW;~a-UCN-Vibml3^bHl9_{_my8p*4C! zvHsl0e;eCtCwlPN_P!)H*xQ~gpE7Ln*b7srmyku4^M9qHEGq$8e-5jQPSqckl{Cxq zGGRibd7v!5W6v6&LSF3Y%#C>CYsdkMT_a*KY?I>D_vom3WrqPBN7_4^jPAsQ@=A%FR zm3i`niYN)I%HnN}<0e6uSxcq#iXWDi#gG9mpXL7QOo)%VX?i!EfrHV4Ti zuIQ@W9Gw{9$sd44cJxQ5Ns^m#mNd%J+>)cH0QuW@oj?0oO$5e5B!1 z42wMd@M{W%@&gw8Ij?H3V-l-b&(HD>PZp!Z3yE)<$r&38$>i|W;zOr6!;Hs2L!K~y znblZML>DV`aoWpU%fXIo!bAc0L!8#tKm6W7t(e+V75K?8y%lL+5&=iu`KkEtLU3jG zMIBi_?Ok1|!DHlN<9nSmOoz8}^A|sbDU7-Tm8m~6ylfVggr-qu(mYmBCL{PXjWAGB zhQB)ztMJ@4VUQJP{x!KxQUr^qZnA2bs&Zs=Uc9Hw%z#SDluR^(-R7?@&%A4|ih*^k z{R_#6!>|237>OrVQ>{_t(g~7?+0R+*u8eQ5zdyS(<%K+;{(j_W*w3AuM;!imv#rZG zT*Ol{UQZVE?M)WMrK(Baya)Z(o2wjmDh*arHFVaGlE=2*sAiXQ0 z69iFu5eP*<0Z~DEmC&UIQHr2+X^QkJoo~Xs>%RN`fsb_-D=RtKXL4qrnLT^|_8u`M zxi5L@r$TwU6|SChpWSCGr(AgTj*2zRIKU7lhRMlcXO^`u4cj405-PYhTyV$Nn&UC9 zMQZNQ?VLt=Q8H@nBzIwKF%UO#v(|e*y_&J(B&~vRhlL@!mYqxcxuRQ)f>b#wMU*?L z>j`~QG*84>+Nnjcn!{$-jak33zPJow^+x?%K02Q3T;pK2B()~&!j}M&;PJnA>LtSe zOgb*ZVrrMSvUzILn@wx%e3>`C*Mu^fDDfJ~CVXV$w4a%$dfz1th94CTcF9|%47?h^ zCBTW=f48Fl+Q-{-tq~qdHEG$B>3ERIEp65~F17s;&2n^XTEwNBX!?5yt$Qvulhem_ zDmkM^z`5(q;y}(L)xels1&PAv2{9Irx_hOx=0S7(@OAF-UIDMsJN zr)yZgu~H>}?r<%=H!AQ#;mba+j-&gZ3f-EAy)A$us6+6reH#CzgQoF;#mU?1t8c%Co|P=`S8 z(DR!7+WPbhBF5IdoCZmQ+3AaZxPC~W#r@D=^ z+L*Ozy#UV@$;j&>8UT&ZK`9epm%U2%$Y96??Zs^Bs~s!Tixfe>KXITU=V(4Y+rM-F zka?iMmovL-Ks4(N|6uooJV8E-sbf4m>Zf7}uvBE*%RHU*O3+CM(U^5ntOAA~koKu?$3`BolKj|C5XaS%UXmbj;VuH>0 z*Y{e^rk53P_IT`&Ewe!mno>{<3>si*N5|XvMN z=y+I_@zLPDfCO+&q3TO`z&j{H%HWC#Fd5gZ#z_8d|8(Ikf|Vi#ZjgvcW|QwyEST12 zymp>CU_M)YU>M9J%(h@PqTWo+yFmZb$>`dG&yF~s_pdH9+mUh$aytC=3lwTVky3%- zi5ksJ_AsL>nULW@#gDAEUq15&B$IxNdj56E$KoxT_%;Li^AIOb6L4SIUjy5=18^qz zRH3*W<)5IyUN92n38G`e;Qj!YBHhn}~n`COp5aah96j|7uHIYz*&9646) za<@BlgkX^ZON10GD|Yuirc5)r*#5XQ!w6#jb;u$VF|8$#|9LMy1VyTsWBQuclp5&5 zzYlV{p!0;@{MR9%45%bgotDslO9ij>a@J+eR2ST(zYl9>2pvy~135$3|42ZFK*Fc~ z=Q0EhBycd=hNbNP{rZ_4I#5&hqZ9_f2wi}{$-LHy6|v0&8zMGy8+$=RZa4?CMq40?C~Rk$UIth|KT`QS7};i zlOiYpR%IC-rxewm^O_D5ud9lG0jdSn70+SrjXOO#EVu9HR637INK6xZpjl}09=c%W zGFF{T;Qq=6aK2s|K>L*S2*E)L#%uOJ{_20Mm#;}5cm#@tkds6zJ4aW--PfCy76)tM z#v232R-=Pi&;7iZGA-M3VkR}*1B0$kHt++qB^5+(m-^SR4CIIgpzkA}&qb%ho5h)q z{aQjv=0SOy3e*nRWC9;bLa|Np?&CAsv6(t$hzQ3zz<+u`9uaF&o_w}la|kgE2D9n* z16o^d2FcaKifw`{B0Ts$KcVh~fJL=7j9W8L0k9OwGwo3XuqKDij`}K-2D8kgBCvAO z?t39qz^1vI=Qv!%>$5tZAmKD@FCyx{>pZ4R?c2uXJlheoo4SF8X0cl{T&+@e>M@im zmrdxf;;b&3;FGzrmI79fhg!*|R8cUn$7c;Iu|m*M?R}65p_VVM?RTDv)p_Z&$B!bj zitQ)?TyJX~2n#PA3Hwb}Jh;Uy?fqtZZAwAyk2NQZh*&w3PSDs?(}d?ojh-%>0vsPy zUX3CmiJS^LF0v{Ec+huNJu(!zU}!f50y>0Dignjg{V0mK((&AL#fMXs5lp@@m@U4~UTOY(e&OPS?Jb zc3M3G4?fFt6d=`|i%L?53>0X+0-OiV5`bl-MoX~gG&F*cPAmLpkancGognPB=# zku#n>2y*wXvNzMi2p11P!fbOO+Tb`qAdTjidITJ7J6vI#VAD>#(F$<#%C}e#5U0h0 z#Ua+gJsUc%PK2m-|Kl2FTxik_%pg#bSlf@rdSL90K3r}}SUSlvI;*)(6DUf)PR8}o zq**{^z1nKY28#D<>+*Hy(sqxCzwsRI)ma|BnZ^r{577P1pMyIQ?jcdrn#p{Nv&DDo z$!CNeL(fyPs$h+P4x#0&NS-}f9e+ERekuT9nOiv#$0CSej^>YeQjjp2I@gnomz+z1 zIs?$gnWt76!padZG?jb8n)dTk#_f!qo3%`chNm?*7TdjuTAT->`kAniErGHJ-m+}# zX@I!WbvkOn3!s14vSYeP^)gk|5Uaq8{-3s?ku7435Gbk2dD$xMjO#j`O7U~OX@&>8 zD}`|)EwEgEcgAQb#O}*`xldr1F7ct^x8LY-eE;yUFsmli8*5Kh5yE(>$vT)hPEec3 zGFbKskFKl^c0WmR2->?~g=9|FSOd>uRqk_oev@Abi2w=$et_0-ysQmCVLa;|E}0D7 zSoj{ot>|I1@*1!;j}G?&7pJemY@n`JH(pcnHz@~LKST#iKcpZoj_~+jwnlgnM(lMf z+Nl)qW<{3utw&!78)8>po>hyvyy&#od4qKN{V#w(RyA*{Jmb}sRZ8|vY)*pCbe^tV z?F7`OGg+p@VtW`G8*=4aaPzK+rKu7?tn8Z2%J)kC$mM2@OWy)+0AIVw#+jzc)-j)j zV`Q@m(NY>A1=J=eBu!VLEJ{MpairKKqhM17QvVcWvs%P_zvRWG@Vt;7N^!^Ozn$50zJqClZA6389mT&hk^TpxCOCOG)yXy0#=YrC2-jr}Kn7a%{`Mg@GasK{FN5;mGA~NYLATWK2*!C_AJJy=XxMUz@ zI}jD_Ph$yoti4JeS_>YkrT*ddb@xElq*Z2QGdt*+_|lW%tK*cm#}pr)RGp+gAdub8_>{D{6Zk8-FN<>(ifrUkYjJBglhJwqZ zd_6)nk=ufS*LbptF+F;dqBSW64l)j~T1ga^(EHHT{*FyZnV@UVQ`+F)TeiC@aVs}kbw)g%4(qU|T_D?ICoVeYa*;`njGTNR zs&T$MNxhy?B0J7;3iybsFN|?H#TIaRnfyc?xtiB&kTVD(F|e{fAEJfFs{54zC}=G}6N zQt&krlzq2}j9>2$EjS1}@cO;StMQ_vE~3`M<&GOrbN`iop<;Z?A#f#s6eMn|WDMlT zHQv(^4*=Y4j=Hgpfwa$4+TDE-j+GN}fOJ0SVF8x-I5Nk&C3G|lPw#)<=UGzh`^jYf z)Z#9%y%C&u=yJo`ErdgV*~4R##S=BE?rkGP-J7t^k*VOfDr%04-+o^~W%=EP@%(uw z)NqnmiQZ97JD3+wlRvR=@e2`r)U%xCcF@a?PRPaSnKEcU-Fkj+;!USDUC@(82jH#3T5k>z6x7Do1E$rqB` z`arq3O&WPQqixpgM`y%F+sD}(vloD&C7?PDQVMLEc9ZKAklFGLma~+(Kl@3}esRD4 z?zk^G-RCk?A24cN+4TT+oeK5}D3K35>{=PC$@f@#V(`vj`KN7wv_l@iT#Zr-^xF~T zwu2YRcxgH1WOh@6;D^ZMQDbM+O8!ibkpO(+Jnli%WVW}pHHU=6S9K!j=B)g^Ij@y@0d8Yc%{apSdq zcl+KXM0)*xOcV9fNsjFYgG|jzB8^objKg(g_{9NQujHkl|52Am3r_?MpGlzZ+G{-4 zk|JAze?(*OI*sZ%?GE>*?8Xd!ucmCFk&?TN;}rKk^+*hOO`rFJLVW4Sc#CHDBM3{3 zfM+2hO01K(te^vjf~ZD^K}4X=>QUW`#^C_s!vL`hYpaGi=+ql)V4XINf}jttqrX^_ zEzu&j?5=(BiTlLU(>QTBH*x*N{A0{SzTNTfff}b%d#BCmmdB(HGu%&wn8i@>k6u_+ zv=?aa+ZU5@f?|aaqHbk!l}QH;JoLov#Vur1x=tA+7HAg_`Ya8qx~(uuS1DAZ`p&rV zQg-6n@FzUHAg-pBZ=1aalh?Y_8-7W!pHct{7O#NNu5yqqO+@ItQ|(!ps*wz=PsW>Q zY?Qa>uTsQm_f}rGz>GUA^18`;7xL38_gCZqMto z%HT$-L+=Dye|0ofKAkSHYD~a=FVB^=swj`?!**x)Ft&ASO^EK~+dY%^-0l)t-1qR2 z%F}Lrr(j|Dj{ZG|R$HoLoP}}|lK>m;t5(5#{i5ol58law*}3QA7MC(i9In0WsVuaA z_UhnHo81MjA}uQkq5L`qHrs;eL|@ILApuK^0yZ&prtXOLU9X)Ui7O)?R`CYNIwq4{ z%jzSrasUq==4MD>qg#!)EGlD#b=LWYNAvG8zy=T0f%E|_q2bxrMPL+<4`HM2N)^gp zo@%lhp{Do%Lbbot>jRU2^iwQYu9vMX=lOc4jy#u{HtM-j`n@9BBhE>a#TpjKiONES z0aSQt0vN{3`hNb#zJF=G?5&3(bo1gk0@!8Cz42=E^TOe^gZ zh6-`JgWo42ZC?D?QJ7Z9!QMf;e;%5a%}VXw@=>mdDij0^o%~Bi)}g18MVs z12}+f-3;lQ!&C-XOKJ7)Zv#BQviSSzy5Ysmzl9HyKAXj&@o%uJ8X7;nYquuoi7ObJt+Bi2_f0&BW$G zvDKg$4&c!CgYs#m2&BBbN)nl${x}>o|7=7#`;TcxSd-FyV7|D#M(lJJ9VT?u*^$Dj zh_QLQV119^&G_eFF9m)k=%d4m-G5Fbys+jaIGP+U65969xgb|CgNQ`ax<=vuQ}lW; XA~c2Aa4IO92>fZN>Z%mqv=040N2XRQ literal 0 HcmV?d00001 diff --git a/bip-0331/sender_init_future_version.png b/bip-0331/sender_init_future_version.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a21050ecb880e4291de1807b722a84f7f8f98e GIT binary patch literal 99293 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

U&L2sxXDrPb;>LQOo|3pBokjH#WH2 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 z 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 literal 0 HcmV?d00001 diff --git a/bip-0331/version_negotiation.png b/bip-0331/version_negotiation.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2f48cb60fc52a93671762eb1e243d8cc9abdde GIT binary patch literal 50918 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 literal 0 HcmV?d00001 From 7be25f9fb20631c8c62d268c7f25ebe564a7a8e6 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 19:06:23 -0400 Subject: [PATCH 083/124] ci: Fetch depth 2 for diffchecks --- .github/workflows/github-action-checks.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/github-action-checks.yml b/.github/workflows/github-action-checks.yml index bfc014ba5a..0b723e1b93 100644 --- a/.github/workflows/github-action-checks.yml +++ b/.github/workflows/github-action-checks.yml @@ -16,4 +16,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + with: + fetch-depth: 2 - run: scripts/diffcheck.sh From eb9007c8690436ea4a60189ab32e36686007e32c Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 19:13:48 -0400 Subject: [PATCH 084/124] diffchecks.sh: Build table first --- scripts/diffcheck.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/diffcheck.sh b/scripts/diffcheck.sh index 4e4c4592f3..3d8a9e557d 100755 --- a/scripts/diffcheck.sh +++ b/scripts/diffcheck.sh @@ -1,5 +1,6 @@ #!/bin/bash +scripts/buildtable.pl >/tmp/table.mediawiki 2> /dev/null diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/after.diff || true if git checkout HEAD^ && scripts/buildtable.pl >/tmp/table.mediawiki 2>/dev/null; then diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/before.diff || true From dd88f24eebe7a42c285fd4d71ad32f6bf763f754 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 24 Apr 2024 23:20:48 +0000 Subject: [PATCH 085/124] Fix README --- README.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index b5ae7bba14..41a93476b7 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -237,7 +237,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Marek Palatinus, Pavol Rusnak | Standard | Final -|- style="background-color: #ffffcf" +|- style="background-color: #cfffcf" | [[bip-0044.mediawiki|44]] | Applications | Multi-Account Hierarchy for Deterministic Wallets @@ -251,13 +251,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia | Standard | Proposed -|- +|- style="background-color: #cfffcf" | [[bip-0047.mediawiki|47]] | Applications | Reusable Payment Codes for Hierarchical Deterministic Wallets | Justus Ranvier | Informational -| Draft +| Final |- style="background-color: #ffffcf" | [[bip-0048.mediawiki|48]] | Applications From fd5d424f551bf740f6f651b0158667d1fd052193 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 16:27:24 -0400 Subject: [PATCH 086/124] 39: Remove other implementation sections --- bip-0039.mediawiki | 69 ---------------------------------------------- 1 file changed, 69 deletions(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index 1c4845e580..51fe33d834 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -138,72 +138,3 @@ Also see https://github.com/bip32JP/bip32JP.github.io/blob/master/test_JP_BIP39. Reference implementation including wordlists is available from http://github.com/trezor/python-mnemonic - -==Other Implementations== - -Go: -* https://github.com/tyler-smith/go-bip39 - -Python: -* https://github.com/meherett/python-hdwallet - -Elixir: -* https://github.com/aerosol/mnemo - -Objective-C: -* https://github.com/nybex/NYMnemonic - -Haskell: -* https://github.com/haskoin/haskoin - -.NET (Standard): -* https://www.nuget.org/packages/dotnetstandard-bip39/ - -.NET C# (PCL): -* https://github.com/Thashiznets/BIP39.NET - -.NET C# (PCL): -* https://github.com/NicolasDorier/NBitcoin - -JavaScript: -* https://github.com/bitpay/bitcore/tree/master/packages/bitcore-mnemonic -* https://github.com/bitcoinjs/bip39 (used by [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/hd-wallet.js#L121-L146|blockchain.info]]) -* https://github.com/dashhive/DashPhrase.js -* https://github.com/hujiulong/web-bip39 - -TypeScript: -* https://github.com/bitauth/libauth - -Java: -* https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/crypto/MnemonicCode.java - -Ruby: -* https://github.com/sreekanthgs/bip_mnemonic - -Rust: -* https://github.com/maciejhirsz/tiny-bip39/ -* https://github.com/koushiro/bip0039-rs - -Smalltalk: -* https://github.com/eMaringolo/pharo-bip39mnemonic - -Swift: -* https://github.com/CikeQiu/CKMnemonic -* https://github.com/yuzushioh/WalletKit -* https://github.com/pengpengliu/BIP39 -* https://github.com/matter-labs/web3swift/blob/develop/Sources/web3swift/KeystoreManager/BIP39.swift -* https://github.com/zcash-hackworks/MnemonicSwift -* https://github.com/ShenghaiWang/BIP39 -* https://github.com/anquii/BIP39 - -C++: -* https://github.com/libbitcoin/libbitcoin-system/blob/master/include/bitcoin/system/wallet/mnemonic.hpp - -C (with Python/Java/Javascript bindings): -* https://github.com/ElementsProject/libwally-core - -Python: -* https://github.com/scgbckbone/btc-hd-wallet - -Dart: -* https://github.com/dart-bitcoin/bip39 From 448de3cafd1c52f2e4b72c608f518e7cd261ca9c Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Thu, 25 Apr 2024 10:23:28 -0400 Subject: [PATCH 087/124] 21: Remove other libraries from reference implementations --- bip-0021.mediawiki | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index cdc37baae7..9fa4823256 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -120,11 +120,6 @@ Some future version that has variables which are (currently) not understood but Characters must be URI encoded properly. -== Reference Implementations == -=== Bitcoin clients === -* Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858. - -=== Libraries === -* Javascript - https://github.com/bitcoinjs/bip21 -* Java - https://github.com/SandroMachado/BitcoinPaymentURI -* Swift - https://github.com/SandroMachado/BitcoinPaymentURISwift +== Reference Implementation == + +Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858. From 6c729c4b418006def78caad0d921f1841c4db1ee Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 25 Apr 2024 13:03:00 -0400 Subject: [PATCH 088/124] Renamed to use BIP-0347 --- bip-???-cat.mediawiki => bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename bip-???-cat.mediawiki => bip-0347.mediawiki (99%) diff --git a/bip-???-cat.mediawiki b/bip-0347.mediawiki similarity index 99% rename from bip-???-cat.mediawiki rename to bip-0347.mediawiki index d7746fe4c0..f85b2e9f34 100644 --- a/bip-???-cat.mediawiki +++ b/bip-0347.mediawiki @@ -1,5 +1,5 @@

-  BIP: ?
+  BIP: 347
   Layer: Consensus (soft fork)
   Title: OP_CAT
   Author: Ethan Heilman 

From 0a3869d1021bfc0e4c5e8779d1ff33fe67846af8 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Thu, 25 Apr 2024 13:16:55 -0400
Subject: [PATCH 089/124] Fixes comment URI

---
 bip-0347.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index f85b2e9f34..a05c2100e8 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -4,7 +4,7 @@
   Title: OP_CAT
   Author: Ethan Heilman 
           Armin Sabouri 
-  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-op-cat
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0347
   Status: Draft
   Type: Standards Track
   Created: 2023-10-21

From 7ed8f6f38c67ede30e38114632b3fa6bbe396800 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Thu, 25 Apr 2024 13:42:24 -0400
Subject: [PATCH 090/124] Better quantum resistant section based Tim's comments

Adds additional acks
---
 bip-0347.mediawiki | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index a05c2100e8..1e75ffc144 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -36,7 +36,7 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu
 
 * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf
 * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
-* Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if the quantum resistance of Lamport signatures can be preserved when used in a taproot output.
+* Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot.
 * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.
@@ -102,4 +102,5 @@ An alternative implementation of OP_CAT can be found in Elements Roose S.,
 
 ==Acknowledgements==
 
-We wish to acknowledge Dan Gould for encouraging and helping review this effort. We also want to thank Madars Virza, Jeremy Rubin, Andrew Poelstra, Bob Summerwill for their feedback, review and helpful comments.
+We wish to acknowledge Dan Gould for encouraging and helping review this effort. We also want to thank Madars Virza, Jeremy Rubin, Andrew Poelstra, Bob Summerwill, 
+Tim Ruffing and Johan T. Halseth for their feedback, review and helpful comments.

From 7a104491862379e88662a39d1a2b613c907e503e Mon Sep 17 00:00:00 2001
From: Murch 
Date: Thu, 25 Apr 2024 14:10:10 -0400
Subject: [PATCH 091/124] Mention that BIP350 reduces scope of bech32 to v0

---
 bip-0173.mediawiki | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/bip-0173.mediawiki b/bip-0173.mediawiki
index 1fdd8bed3c..7087fffa20 100644
--- a/bip-0173.mediawiki
+++ b/bip-0173.mediawiki
@@ -11,6 +11,7 @@
   Created: 2017-03-20
   License: BSD-2-Clause
   Replaces: 142
+  Superseded-By: 350
 
==Introduction== @@ -403,3 +404,12 @@ separator). This document is inspired by the [https://rusty.ozlabs.org/?p=578 address proposal] by Rusty Russell, the [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2014-February/004402.html base32] proposal by Mark Friedenbach, and had input from Luke Dashjr, Johnson Lau, Eric Lombrozo, Peter Todd, and various other reviewers. + +==Disclosures (added 2024)== + +Due to an oversight in the design of bech32, this checksum scheme is not always +robust against +[[https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb|the insertion +and deletion of fewer than 5 consecutive characters]]. Due to this weakness, +[[bip-0350.mediawiki|BIP-350]] proposes using the scheme described in this BIP +only for Native Segwit v0 outputs. From 852502b9cf0568dc4c75d93aaaaee3d102002ec7 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 25 Apr 2024 20:32:52 -0400 Subject: [PATCH 092/124] Specifies exact tree signature limit (suggested by Ali Sherief) --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 1e75ffc144..e43bd72f0f 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -35,7 +35,7 @@ Bitcoin tapscript lacks a general purpose way of combining objects on the stack OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modular, and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf -* Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with a thousand public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ +* Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with up to 4,294,967,296 public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ * Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot. * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin. From 50e750a882f525cc9a297b75ca35682f3deb1f95 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 8 Jan 2024 13:08:46 -0500 Subject: [PATCH 093/124] Clarify exactly which scripts are witness outputs --- bip-0141.mediawiki | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index eb2fc74abd..117ca59df6 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -83,19 +83,23 @@ If all transactions in a block do not have witness data, the commitment is optio === Witness program === -A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a select subset of opcodes (OP_0,OP_1,OP_2,...,OP_16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". +A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a 1-byte push opcode (one of OP_0,OP_1,OP_2,...,OP_16) followed by a direct data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program". +In more detail, this means a scriptPubKey or redeemScript which consists of (in order): +* First, byte 0x00 (OP_0) or any byte between 0x51 (OP_1) and 0x60 (OP_16) inclusive (the version byte). +* Then, a byte ''L'' between 0x02 (push of 2 bytes) and 0x28 (push of 40 bytes) inclusive. +* Finally, ''L'' arbitrary bytes (the witness program). There are two cases in which witness validation logic are triggered. Each case determines the location of the witness version byte and program, as well as the form of the scriptSig: # Triggered by a scriptPubKey that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails. (''"native witness program"'') # Triggered when a scriptPubKey is a P2SH script, and the BIP16 redeemScript pushed in the scriptSig is exactly a push of a version byte plus a push of a witness program. The scriptSig must be exactly a push of the BIP16 redeemScript or validation fails. (''"P2SH witness program"'') -If the version byte is 0, and the witness program is 20 bytes: +If the version byte is 0, and the witness program is 20 bytes (''L = 20''): * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program. * The witness must consist of exactly 2 items (≤ 520 bytes each). The first one a signature, and the second one a public key. * The HASH160 of the public key must match the 20-byte witness program. * After normal script evaluation, the signature is verified against the public key with CHECKSIG operation. The verification must result in a single TRUE on the stack. -If the version byte is 0, and the witness program is 32 bytes: +If the version byte is 0, and the witness program is 32 bytes (''L = 32''): * It is interpreted as a pay-to-witness-script-hash (P2WSH) program. * The witness must consist of an input stack to feed to the script, followed by a serialized script (witnessScript). * The witnessScript (≤ 10,000 bytes) is popped off the initial witness stack. SHA256 of the witnessScript must match the 32-byte witness program. From c10870a390a7141eb223ed8141cab48668239536 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 26 Apr 2024 13:59:28 -0400 Subject: [PATCH 094/124] Adds comma Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index e43bd72f0f..24df645625 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -20,7 +20,7 @@ This document is licensed under the 3-clause BSD license. ==Specification== -When evaluated the OP_CAT instruction: +When evaluated, the OP_CAT instruction: # Pops the top two values off the stack, # concatenates the popped values together in stack order, # and then pushes the concatenated value on the top of the stack. From 5413e18fd93c078d4c12d4845a08b7c9a9b24ada Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 26 Apr 2024 14:01:59 -0400 Subject: [PATCH 095/124] Consistent formatting for Section Headings Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 24df645625..dca210006d 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -30,6 +30,7 @@ Given the stack ''[x1, x2]'', where ''x2'' is at the top of the This opcode would be activated via a soft fork by redefining the tapscript opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexadecimal) to OP_CAT. ==Motivation== + Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modular, and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: From dbc612edfa137ce1f1cbcb9d40f58773758315ae Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 26 Apr 2024 14:02:13 -0400 Subject: [PATCH 096/124] Consistent formatting for Section Headings Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index dca210006d..e825284c22 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -16,6 +16,7 @@ This BIP introduces OP_CAT as a tapscript opcode which allows the concatenation of two values on the stack. OP_CAT would be activated via a soft fork by redefining the opcode OP_SUCCESS126 (126 in decimal and 0x7e in hexadecimal). This is the same opcode value used by the original OP_CAT. == Copyright == + This document is licensed under the 3-clause BSD license. ==Specification== From a05543cc588ebcb266aa3251472324671e384afe Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 29 Apr 2024 18:44:24 -0400 Subject: [PATCH 097/124] Changes title of BIP to "Enable OP_CAT in Tapscript" --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index e825284c22..1a0feb8896 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -1,7 +1,7 @@
   BIP: 347
   Layer: Consensus (soft fork)
-  Title: OP_CAT
+  Title: Enable OP_CAT in Tapscript
   Author: Ethan Heilman 
           Armin Sabouri 
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0347

From 1d5530443dd660dc090145061bc146d4c64ffab3 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Mon, 29 Apr 2024 19:36:26 -0400
Subject: [PATCH 098/124] OP_CAT in Tapscript
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
---
 bip-0347.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index 1a0feb8896..3070d14e48 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -1,7 +1,7 @@
 
   BIP: 347
   Layer: Consensus (soft fork)
-  Title: Enable OP_CAT in Tapscript
+  Title: OP_CAT in Tapscript
   Author: Ethan Heilman 
           Armin Sabouri 
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0347

From 3d78cc08863864d7caea85a229fb223dea25540f Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Mon, 29 Apr 2024 21:04:15 -0400
Subject: [PATCH 099/124] Fixes typos

Co-authored-by: Mark "Murch" Erhardt 
---
 bip-0347.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index 3070d14e48..622d7b46ec 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -56,7 +56,7 @@ While the OP_SUCCESSx opcode upgrade path could enable us to increase the stack
 
 ==Backwards Compatibility==
 
-OP_CAT usage in an non-tapscript script will continue to trigger the SCRIPT_ERR_DISABLED_OPCODE. The only change would be to OP_CAT usage in tapscript. This change to tapscript would be activated a soft fork that redefines an OP_SUCCESSx opcode (OP_SUCCESS126) to OP_CAT.
+OP_CAT usage in a non-tapscript script will continue to trigger the SCRIPT_ERR_DISABLED_OPCODE. The only change would be to OP_CAT usage in tapscript. This change to tapscript would be activated as a soft fork that redefines an OP_SUCCESSx opcode (OP_SUCCESS126) to OP_CAT.
 
 ==Reference implementation==
 

From f75184b8d8c8b723d8efb0a02916f9d874226efc Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Tue, 30 Apr 2024 11:34:30 +0200
Subject: [PATCH 100/124] updating info on multi-, threshold, and blind
 signatures

---
 bip-0340.mediawiki | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index c94191670b..7746018bb7 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -62,7 +62,7 @@ Since we would like to avoid the fragility that comes with short hashes, the ''e
 
 '''Key prefixing''' Using the verification rule above directly makes Schnorr signatures vulnerable to "related-key attacks" in which a third party can convert a signature ''(R, s)'' for public key ''P'' into a signature ''(R, s + a⋅hash(R || m))'' for public key ''P + a⋅G'' and the same message ''m'', for any given additive tweak ''a'' to the signing key. This would render signatures insecure when keys are generated using [[bip-0032.mediawiki#public-parent-key--public-child-key|BIP32's unhardened derivation]] and other methods that rely on additive tweaks to existing keys such as Taproot.
 
-To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving the MuSig multisignature scheme secure (see Applications below).
+To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving the MuSig2 multisignature scheme secure (see Applications below).
 
 We note that key prefixing is not strictly necessary for transaction signatures as used in Bitcoin currently, because signed transactions indirectly commit to the public keys already, i.e., ''m'' contains a commitment to ''pk''. However, this indirect commitment should not be relied upon because it may change with proposals such as SIGHASH_NOINPUT ([[bip-0118.mediawiki|BIP118]]), and would render the signature scheme unsuitable for other purposes than signing transactions, e.g., [https://bitcoin.org/en/developer-reference#signmessage signing ordinary messages].
 
@@ -165,7 +165,7 @@ It should be noted that various alternative signing algorithms can be used to pr
 
 '''Nonce exfiltration protection''' It is possible to strengthen the nonce generation algorithm using a second device. In this case, the second device contributes randomness which the actual signer provably incorporates into its nonce. This prevents certain attacks where the signer device is compromised and intentionally tries to leak the secret key through its nonce selection.
 
-'''Multisignatures''' This signature scheme is compatible with various types of multisignature and threshold schemes such as [https://eprint.iacr.org/2018/068 MuSig], where a single public key requires holders of multiple secret keys to participate in signing (see Applications below).
+'''Multisignatures''' This signature scheme is compatible with various types of multisignature and threshold schemes such as [https://eprint.iacr.org/2020/1261.pdf MuSig2], where a single public key requires holders of multiple secret keys to participate in signing (see Applications below).
 '''It is important to note that multisignature signing schemes in general are insecure with the ''rand'' generation from the default signing algorithm above (or any other deterministic method).'''
 
 '''Precomputed public key data''' For many uses the compressed 33-byte encoding of the public key corresponding to the secret key may already be known, making it easy to evaluate ''has_even_y(P)'' and ''bytes(P)''. As such, having signers supply this directly may be more efficient than recalculating the public key from the secret key. However, if this optimization is used and additionally the signature verification at the end of the signing algorithm is dropped for increased efficiency, signers must ensure the public key is correctly calculated and not taken from untrusted sources.
@@ -264,9 +264,9 @@ While recent academic papers claim that they are also possible with ECDSA, conse
 
 === Multisignatures and Threshold Signatures ===
 
-By means of an interactive scheme such as [https://eprint.iacr.org/2018/068 MuSig], participants can aggregate their public keys into a single public key which they can jointly sign for. This allows ''n''-of-''n'' multisignatures which, from a verifier's perspective, are no different from ordinary signatures, giving improved privacy and efficiency versus ''CHECKMULTISIG'' or other means.
+By means of an interactive scheme such as [https://eprint.iacr.org/2020/1261.pdf MuSig2], participants can aggregate their public keys into a single public key which they can jointly sign for. This allows ''n''-of-''n'' multisignatures which, from a verifier's perspective, are no different from ordinary signatures, giving improved privacy and efficiency versus ''CHECKMULTISIG'' or other means.
 
-Moreover, Schnorr signatures are compatible with [https://web.archive.org/web/20031003232851/http://www.research.ibm.com/security/dkg.ps distributed key generation], which enables interactive threshold signatures schemes, e.g., the schemes described by [http://cacr.uwaterloo.ca/techreports/2001/corr2001-13.ps Stinson and Strobl (2001)] or [https://web.archive.org/web/20060911151529/http://theory.lcs.mit.edu/~stasio/Papers/gjkr03.pdf Gennaro, Jarecki and Krawczyk (2003)]. These protocols make it possible to realize ''k''-of-''n'' threshold signatures, which ensure that any subset of size ''k'' of the set of ''n'' signers can sign but no subset of size less than ''k'' can produce a valid Schnorr signature. However, the practicality of the existing schemes is limited: most schemes in the literature have been proven secure only for the case ''k-1 < n/2'', are not secure when used concurrently in multiple sessions, or require a reliable broadcast mechanism to be secure. Further research is necessary to improve this situation.
+Moreover, Schnorr signatures are compatible with [https://en.wikipedia.org/wiki/Distributed_key_generation distributed key generation], which enables interactive threshold signatures schemes, e.g., the schemes described by [http://cacr.uwaterloo.ca/techreports/2001/corr2001-13.ps Stinson and Strobl (2001)], [https://link.springer.com/content/pdf/10.1007/s00145-006-0347-3.pdf Gennaro, Jarecki, Krawczyk, and Rabin (2007)], [https://eprint.iacr.org/2020/852.pdf Komlo and Goldberg (2020)], or [https://eprint.iacr.org/2023/899.pdf Chu, Gerhart, Ruffing, and Schröder (2023)]. These protocols make it possible to realize ''k''-of-''n'' threshold signatures, which ensure that any subset of size ''k'' of the set of ''n'' signers can sign but no subset of size less than ''k'' can produce a valid Schnorr signature.
 
 === Adaptor Signatures ===
 
@@ -278,7 +278,7 @@ Adaptor signatures, beyond the efficiency and privacy benefits of encoding scrip
 
 === Blind Signatures ===
 
-A blind signature protocol is an interactive protocol that enables a signer to sign a message at the behest of another party without learning any information about the signed message or the signature. Schnorr signatures admit a very [http://publikationen.ub.uni-frankfurt.de/files/4292/schnorr.blind_sigs_attack.2001.pdf simple blind signature scheme] which is however insecure because it's vulnerable to [https://www.iacr.org/archive/crypto2002/24420288/24420288.pdf Wagner's attack]. A known mitigation is to let the signer abort a signing session with a certain probability, and the resulting scheme can be [https://eprint.iacr.org/2019/877 proven secure under non-standard cryptographic assumptions].
+A blind signature protocol is an interactive protocol that enables a signer to sign a message at the behest of another party without learning any information about the signed message or the signature. Schnorr signatures admit a very [http://publikationen.ub.uni-frankfurt.de/files/4292/schnorr.blind_sigs_attack.2001.pdf simple blind signature scheme] which is however insecure because it's vulnerable to [https://www.iacr.org/archive/crypto2002/24420288/24420288.pdf Wagner's attack]. Known mitigations are to let the signer abort a signing session with a certain probability, which can be [https://eprint.iacr.org/2019/877 proven secure under non-standard cryptographic assumptions], or [https://eprint.iacr.org/2022/1676.pdf to use zero-knowledge proofs].
 
 Blind Schnorr signatures could for example be used in [https://github.com/ElementsProject/scriptless-scripts/blob/master/md/partially-blind-swap.md Partially Blind Atomic Swaps], a construction to enable transferring of coins, mediated by an untrusted escrow agent, without connecting the transactors in the public blockchain transaction graph.
 

From 2c017b0c0b1259a6a7f5716439b9a58dbe26f0ee Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Tue, 30 Apr 2024 11:42:38 +0200
Subject: [PATCH 101/124] link to BIP327

---
 bip-0340.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index 7746018bb7..1aeb1c2978 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -264,7 +264,7 @@ While recent academic papers claim that they are also possible with ECDSA, conse
 
 === Multisignatures and Threshold Signatures ===
 
-By means of an interactive scheme such as [https://eprint.iacr.org/2020/1261.pdf MuSig2], participants can aggregate their public keys into a single public key which they can jointly sign for. This allows ''n''-of-''n'' multisignatures which, from a verifier's perspective, are no different from ordinary signatures, giving improved privacy and efficiency versus ''CHECKMULTISIG'' or other means.
+By means of an interactive scheme such as [https://eprint.iacr.org/2020/1261.pdf MuSig2] ([[bip-0327.mediawiki|BIP327]]), participants can aggregate their public keys into a single public key which they can jointly sign for. This allows ''n''-of-''n'' multisignatures which, from a verifier's perspective, are no different from ordinary signatures, giving improved privacy and efficiency versus ''CHECKMULTISIG'' or other means.
 
 Moreover, Schnorr signatures are compatible with [https://en.wikipedia.org/wiki/Distributed_key_generation distributed key generation], which enables interactive threshold signatures schemes, e.g., the schemes described by [http://cacr.uwaterloo.ca/techreports/2001/corr2001-13.ps Stinson and Strobl (2001)], [https://link.springer.com/content/pdf/10.1007/s00145-006-0347-3.pdf Gennaro, Jarecki, Krawczyk, and Rabin (2007)], [https://eprint.iacr.org/2020/852.pdf Komlo and Goldberg (2020)], or [https://eprint.iacr.org/2023/899.pdf Chu, Gerhart, Ruffing, and Schröder (2023)]. These protocols make it possible to realize ''k''-of-''n'' threshold signatures, which ensure that any subset of size ''k'' of the set of ''n'' signers can sign but no subset of size less than ''k'' can produce a valid Schnorr signature.
 

From 2d9e431fbe654640b55bca3bf8c4b17462890109 Mon Sep 17 00:00:00 2001
From: Varunram Ganesh 
Date: Tue, 30 Apr 2024 14:51:39 -0400
Subject: [PATCH 102/124] [trivial]: Correct spellings across bips (#675)

Co-authored-by: Mark "Murch" Erhardt 
---
 bip-0035.mediawiki | 2 +-
 bip-0080.mediawiki | 2 +-
 bip-0081.mediawiki | 2 +-
 bip-0174.mediawiki | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/bip-0035.mediawiki b/bip-0035.mediawiki
index 64edaf5d7a..eccd381559 100644
--- a/bip-0035.mediawiki
+++ b/bip-0035.mediawiki
@@ -16,7 +16,7 @@ Make a network node's transaction memory pool accessible via a new "mempool" mes
 
 ==Motivation==
 
-Several use cases make it desireable to expose a network node's transaction memory pool:
+Several use cases make it desirable to expose a network node's transaction memory pool:
 # SPV clients, wishing to obtain zero-confirmation transactions sent or received.
 # Miners, to avoid missing lucrative fees, downloading existing network transactions after a restart.
 # Remote network diagnostics.
diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki
index 0cade1994b..f367c71a70 100644
--- a/bip-0080.mediawiki
+++ b/bip-0080.mediawiki
@@ -35,7 +35,7 @@ Each level has a special meaning, described in the chapters below.
 
 ===Purpose===
 
-Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "80" with the most signifigant bit set to indicate hardened derivation (0x80000050). It indicates that the subtree of this node is used according to this specification.
+Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "80" with the most significant bit set to indicate hardened derivation (0x80000050). It indicates that the subtree of this node is used according to this specification.
 
 Hardened derivation is used at this level.
 
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki
index 96ac8d1bb0..923917c550 100644
--- a/bip-0081.mediawiki
+++ b/bip-0081.mediawiki
@@ -35,7 +35,7 @@ Each level has a special meaning, described in the chapters below.
 
 ===Purpose===
 
-Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "81" with the most signifigant bit set to indicate hardened derivation (0x80000051). It indicates that the subtree of this node is used according to this specification.
+Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "81" with the most significant bit set to indicate hardened derivation (0x80000051). It indicates that the subtree of this node is used according to this specification.
 
 Hardened derivation is used at this level.
 
diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index 5e70a110f7..c192f19e48 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -800,7 +800,7 @@ A MIME type name will be added to this document once one has been registered.
 ==Extensibility==
 
 The Partially Signed Transaction format can be extended in the future by adding
-new types for key-value pairs. Backwards compatibilty will still be maintained as those new
+new types for key-value pairs. Backwards compatibility will still be maintained as those new
 types will be ignored and passed-through by signers which do not know about them.
 
 ===Version Numbers===

From f61885edcf5e63ac205b1ca5f08173f1336bff74 Mon Sep 17 00:00:00 2001
From: John Bampton 
Date: Wed, 1 May 2024 06:54:05 +1000
Subject: [PATCH 103/124] docs: fix spelling (#1117)

Co-authored-by: Mark "Murch" Erhardt 
---
 bip-0014.mediawiki         |  2 +-
 bip-0015.mediawiki         |  4 ++--
 bip-0061.mediawiki         |  2 +-
 bip-0067.mediawiki         |  6 +++---
 bip-0078.mediawiki         | 14 +++++++-------
 bip-0083.mediawiki         |  2 +-
 bip-0099.mediawiki         |  2 +-
 bip-0109.mediawiki         |  2 +-
 bip-0126.mediawiki         | 16 ++++++++--------
 bip-0127.mediawiki         |  2 +-
 bip-0132.mediawiki         |  2 +-
 bip-0137.mediawiki         |  2 +-
 bip-0143.mediawiki         |  4 ++--
 bip-0151.mediawiki         |  2 +-
 bip-0158/gentestvectors.go |  2 +-
 bip-0174.mediawiki         |  2 +-
 bip-0310.mediawiki         |  2 +-
 bip-0330/minisketch.py     |  2 +-
 bip-0370.mediawiki         |  2 +-
 19 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki
index abd575ce9b..fded42036a 100644
--- a/bip-0014.mediawiki
+++ b/bip-0014.mediawiki
@@ -28,7 +28,7 @@ Version bumping can also introduce incompatibilities and fracture the network. I
 
 By using a protocol version, we set all implementations on the network to a common standard. Everybody is able to agree within their confines what is protocol and what is implementation-dependent. A user agent string is offered as a 'vanity-plate' for clients to distinguish themselves in the network.
 
-Separation of the network protocol from the implemention, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
+Separation of the network protocol from the implementation, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
 
 User agents provide extra tracking information that is useful for keeping tabs on network data such as client implementations used or common architectures/operating-systems. In the rare case they may even provide an emergency method of shunning faulty clients that threaten network health- although this is strongly unrecommended and extremely bad form. The user agent does not provide a method for clients to work around and behave differently to different implementations, as this will lead to protocol fracturing.
 
diff --git a/bip-0015.mediawiki b/bip-0015.mediawiki
index a6e4426a81..52a698f235 100644
--- a/bip-0015.mediawiki
+++ b/bip-0015.mediawiki
@@ -348,7 +348,7 @@ By using DNS lookups, the MITM problem with IP transactions could be mitigated b
 
 === Namecoin ID ===
 
-This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retreives the structured data containing the bitcoin address(es) associated with this alias.
+This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retrieves the structured data containing the bitcoin address(es) associated with this alias.
 
 Using a decentralised domain name system like Namecoin, means no external server or entity needs to be trusted unlike the other proposals listed here. This indicates a system with the advantage of having a high availability and ease of entry (no restrictions for users to create aliases).
 
@@ -401,4 +401,4 @@ Any text can be put into the brackets, allowing merchants to adapt it to all the
 New features can be added later to support uncovered cases.
 
 
-See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more informations.
+See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more information.
diff --git a/bip-0061.mediawiki b/bip-0061.mediawiki
index b08739ddc1..384c0ff7ae 100644
--- a/bip-0061.mediawiki
+++ b/bip-0061.mediawiki
@@ -57,7 +57,7 @@ Every reject message begins with the following fields. Some messages append extr
 |}
 
 The human-readable string is intended only for debugging purposes; in particular, different implementations may
-use different strings. The string should not be shown to users or used for anthing besides diagnosing
+use different strings. The string should not be shown to users or used for anything besides diagnosing
 interoperability problems.
 
 The following reject code categories are used; in the descriptions below, "server" is the peer generating
diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki
index 793039d248..a31cc3d0ca 100644
--- a/bip-0067.mediawiki
+++ b/bip-0067.mediawiki
@@ -53,10 +53,10 @@ Hash the redeem script according to BIP-0016 to get the P2SH address.
     3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba
     
 ==Compatibility==
-* Uncompressed keys are incompatible with this specificiation. A compatible implementation should not automatically compress keys.  Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
-* P2SH addressses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network.  Also, it would cause a hard fork.
+* Uncompressed keys are incompatible with this specification. A compatible implementation should not automatically compress keys.  Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
+* P2SH addresses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network.  Also, it would cause a hard fork.
 * Implementations that do not conform with this BIP will have compatibility issues with strictly-compliant wallets.
-* Implementations which do adopt this standard will be cross-compatible when choosing multisig addressses. 
+* Implementations which do adopt this standard will be cross-compatible when choosing multisig addresses.
 * If a group of users were not entirely compliant, there is the possibility that a participant will derive an address that the others will not recognize as part of the common multisig account.
 
 ==Test vectors==
diff --git a/bip-0078.mediawiki b/bip-0078.mediawiki
index 1893f0e7a2..352872562c 100644
--- a/bip-0078.mediawiki
+++ b/bip-0078.mediawiki
@@ -143,7 +143,7 @@ If the receiver does not support the version of the sender, they should send an
 }
 
-* additionalfeeoutputindex=, if the sender is willing to pay for increased fee, this indicate output can have its value substracted to pay for it. +* additionalfeeoutputindex=, if the sender is willing to pay for increased fee, this indicate output can have its value subtracted to pay for it. If the additionalfeeoutputindex is out of bounds or pointing to the payment output meant for the receiver, the receiver should ignore the parameter. See [[#fee-output|fee output]] for more information. @@ -198,7 +198,7 @@ It is advised to hard code the description of the well known error codes into th ===Fee output=== In some situation, the sender might want to pay some additional fee in the payjoin proposal. -If such is the case, the sender must use both [[#optional-params|optional parameters]] additionalfeeoutputindex= and maxadditionalfeecontribution= to indicate which output and how much the receiver can substract fee. +If such is the case, the sender must use both [[#optional-params|optional parameters]] additionalfeeoutputindex= and maxadditionalfeecontribution= to indicate which output and how much the receiver can subtract fee. There is several cases where a fee output is useful: @@ -273,7 +273,7 @@ The sender should check the payjoin proposal before signing it to prevent a mali * For each outputs in the proposal: ** Verify that no keypaths is in the PSBT output ** If the output is the [[#fee-output|fee output]]: -*** The amount that was substracted from the output's value is less than or equal to maxadditionalfeecontribution. Let's call this amount actual contribution. +*** The amount that was subtracted from the output's value is less than or equal to maxadditionalfeecontribution. Let's call this amount actual contribution. *** Make sure the actual contribution is only paying fee: The actual contribution is less than or equals to the difference of absolute fee between the payjoin proposal and the original PSBT. *** Make sure the actual contribution is only paying for fee incurred by additional inputs: actual contribution is less than or equals to originalPSBTFeeRate * vsize(sender_input_type) * (count(payjoin_proposal_inputs) - count(original_psbt_inputs)). (see [[#fee-output|Fee output]] section) ** If the output is the payment output and payment output substitution is allowed. @@ -344,7 +344,7 @@ On top of this the receiver can poison analysis by randomly faking a round amoun ===Payment output substitution=== -Unless disallowed by sender explicitely via `disableoutputsubstitution=true` or by the BIP21 url via query parameter the `pjos=0`, the receiver is free to decrease the amount, remove, or change the scriptPubKey output paying to himself. +Unless disallowed by sender explicitly via `disableoutputsubstitution=true` or by the BIP21 url via query parameter the `pjos=0`, the receiver is free to decrease the amount, remove, or change the scriptPubKey output paying to himself. Note that if payment output substitution is disallowed, the reveiver can still increase the amount of the output. (See [[#reference-impl|the reference implementation]]) For example, if the sender's scriptPubKey type is P2WPKH while the receiver's payment output in the original PSBT is P2SH, then the receiver can substitute the payment output to be P2WPKH to match the sender's scriptPubKey type. @@ -413,7 +413,7 @@ Here is pseudo code of a sender implementation. The signedPSBT represents a PSBT which has been fully signed, but not yet finalized. We then prepare originalPSBT from the signedPSBT via the CreateOriginalPSBT function and get back the proposal. -While we verify the proposal, we also import into it informations about our own inputs and outputs from the signedPSBT. +While we verify the proposal, we also import into it information about our own inputs and outputs from the signedPSBT. At the end of this RequestPayjoin, the proposal is verified and ready to be signed. We logged the different PSBT involved, and show the result in our [[#test-vectors|test vectors]]. @@ -557,7 +557,7 @@ public async Task RequestPayjoin( if (output.OriginalTxOut == feeOutput) { var actualContribution = feeOutput.Value - proposedPSBTOutput.Value; - // The amount that was substracted from the output's value is less than or equal to maxadditionalfeecontribution + // The amount that was subtracted from the output's value is less than or equal to maxadditionalfeecontribution if (actualContribution > optionalParameters.MaxAdditionalFeeContribution) throw new PayjoinSenderException("The actual contribution is more than maxadditionalfeecontribution"); // Make sure the actual contribution is only paying fee @@ -642,7 +642,7 @@ A successful exchange with: {| class="wikitable" !InputScriptType -!Orginal PSBT Fee rate +!Original PSBT Fee rate !maxadditionalfeecontribution !additionalfeeoutputindex |- diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki index d7bbe8ea82..c6690015be 100644 --- a/bip-0083.mediawiki +++ b/bip-0083.mediawiki @@ -53,7 +53,7 @@ p //' n instead of p / 0' / n Rather than specifying upfront which path is to be used for a specific purpose (i.e. external invoicing vs. internal change), different applications can specify arbitrary parent nodes and derivation paths. This allows for nesting of sublevels to arbitrary depth with application-specified semantics. Rather than trying to specify use cases upfront, we leave the design completely open-ended. Different applications can exchange these mappings for interoperability. Eventually, if certain mappings become popular, application user interfaces can provide convenient shortcuts or use them as defaults. -Note that BIP32 suggests reserving child 0 for the derivation of signing keys rather than sublevels. It is not really necessary to reserve signing key parents, however, as each key's parent's path can be explicitly stated. But unless we reserve a child for sublevel derivation, we lose the ability to nest deeper levels into the hierarchy. While we could reserve any arbitrary index for nesting sublevels, reserving child 0 seems simplest to implement, leaving all indices > 0 for contiguously indexed signing keys. We could also use MAX_INDEX (231 - 1) for this purpose. However, we believe doing so introduces more ideosyncracies into the semantics and will present a problem if we ever decide to extend the scheme to use indices larger than 31 bits. +Note that BIP32 suggests reserving child 0 for the derivation of signing keys rather than sublevels. It is not really necessary to reserve signing key parents, however, as each key's parent's path can be explicitly stated. But unless we reserve a child for sublevel derivation, we lose the ability to nest deeper levels into the hierarchy. While we could reserve any arbitrary index for nesting sublevels, reserving child 0 seems simplest to implement, leaving all indices > 0 for contiguously indexed signing keys. We could also use MAX_INDEX (231 - 1) for this purpose. However, we believe doing so introduces more idiosyncrasies into the semantics and will present a problem if we ever decide to extend the scheme to use indices larger than 31 bits. ==Use Cases== diff --git a/bip-0099.mediawiki b/bip-0099.mediawiki index 8882e0036b..156eec02c5 100644 --- a/bip-0099.mediawiki +++ b/bip-0099.mediawiki @@ -56,7 +56,7 @@ development, diversity, etc) to fork the Bitcoin Core software and it's good that there's many alternative implementations of the protocol (forks of Bitcoin Core or written from scratch). -But sometimes a bug in the reimplementaion of the consensus +But sometimes a bug in the reimplementation of the consensus validation rules can prevent users of alternative implementation from following the longest (most work) valid chain. This can result in those users losing coins or being defrauded, making reimplementations diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki index 69b265b1c9..4822d4a25d 100644 --- a/bip-0109.mediawiki +++ b/bip-0109.mediawiki @@ -37,7 +37,7 @@ In particular: * The coinbase scriptSig is not counted * Signature operations in un-executed branches of a Script are not counted -* OP_CHECKMULTISIG evaluations are counted accurately; if the signature for a 1-of-20 OP_CHECKMULTISIG is satisified by the public key nearest the top of the execution stack, it is counted as one signature operation. If it is satisfied by the public key nearest the bottom of the execution stack, it is counted as twenty signature operations. +* OP_CHECKMULTISIG evaluations are counted accurately; if the signature for a 1-of-20 OP_CHECKMULTISIG is satisfied by the public key nearest the top of the execution stack, it is counted as one signature operation. If it is satisfied by the public key nearest the bottom of the execution stack, it is counted as twenty signature operations. * Signature operations involving invalidly encoded signatures or public keys are not counted towards the limit === Add a new limit of 1,300,000,000 bytes hashed to compute transaction signatures per block === diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index 4cfa2929a7..2c04eb4551 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -14,7 +14,7 @@ When a Bitcoin transaction contains inputs that reference previous transaction outputs sent to different Bitcoin addresses, personally identifiable information of the user will leak into the blockchain in an uncontrolled manner. While undesirable, these transactions are frequently unavoidable due to the natural fragmentation of wallet balances over time. -This document proposes a set of best practice guidelines which minimize the uncontrolled disclosure of personally identifiable information by defining standard forms for transactions containing heterogenous input scripts. +This document proposes a set of best practice guidelines which minimize the uncontrolled disclosure of personally identifiable information by defining standard forms for transactions containing heterogeneous input scripts. ==Copyright== @@ -23,8 +23,8 @@ This BIP is in the public domain. ==Definitions== * '''Heterogenous input script transaction (HIT)''': A transaction containing multiple inputs where the scripts of the previous transaction outputs being consumed are not identical (e.g. a transaction spending outputs which were sent to more than one Bitcoin address) -* '''Unavoidable heterogenous input script transaction''': A HIT created as a result of a user’s desire to create a new output with a value larger than the value of his wallet's largest existing unspent output -* '''Intentional heterogenous input script transaction''': A HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII) +* '''Unavoidable heterogeneous input script transaction''': A HIT created as a result of a user’s desire to create a new output with a value larger than the value of his wallet's largest existing unspent output +* '''Intentional heterogeneous input script transaction''': A HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII) Throughout this procedure, when input scripts are evaluated for uniqueness, "input script" should be interpreted to mean, "the script of the previous output referenced by an input to a transaction". @@ -33,10 +33,10 @@ Throughout this procedure, when input scripts are evaluated for uniqueness, "inp The recommendations in this document are designed to accomplish three goals: # Maximise the effectiveness of user-protecting protocols: Users may find that protection protocols are counterproductive if such transactions have a distinctive fingerprint which renders them ineffective. -# Minimise the adverse consequences of unavoidable heterogenous input transactions: If unavoidable HITs are indistinguishable from intentional HITs, a user creating an unavoidable HIT benefits from ambiguity with respect to graph analysis. +# Minimise the adverse consequences of unavoidable heterogeneous input transactions: If unavoidable HITs are indistinguishable from intentional HITs, a user creating an unavoidable HIT benefits from ambiguity with respect to graph analysis. # Limiting the effect on UTXO set growth: To date, non-standardized intentional HITs tend to increase the network's UTXO set with each transaction; this standard attempts to minimize this effect by standardizing unavoidable and intentional HITs to limit UTXO set growth. -In order to achieve these goals, this specification proposes a set of best practices for heterogenous input script transaction creation. These practices accommodate all applicable requirements of both intentional and unavoidable HITs while maximising the effectiveness of both in terms of preventing uncontrolled disclosure of PII. +In order to achieve these goals, this specification proposes a set of best practices for heterogeneous input script transaction creation. These practices accommodate all applicable requirements of both intentional and unavoidable HITs while maximising the effectiveness of both in terms of preventing uncontrolled disclosure of PII. In order to achieve this, two forms of HIT are proposed: Standard form and alternate form. @@ -44,7 +44,7 @@ In order to achieve this, two forms of HIT are proposed: Standard form and alter Applications which wish to comply both with this procedure and BIP69 should apply this procedure prior to applying BIP69. -==Standard form heterogenous input script transaction== +==Standard form heterogeneous input script transaction== ===Rules=== @@ -63,7 +63,7 @@ The requirement that all output scripts are unique prevents address reuse. Restr The requirement for at least one pair of outputs in an intentional HIT to be of equal value results in optimal behavior, and causes intentional HITs to resemble unavoidable HITs. -==Alternate form heterogenous input script transactions== +==Alternate form heterogeneous input script transactions== The formation of a standard form HIT is not possible in the following cases: @@ -100,7 +100,7 @@ An HIT formed via the preceding procedure will adhere to the following condition ## The sum of the inputs in the set minus the value of the change output is equal to the standard value with a tolerance equal to the transaction fee. ## Change outputs with a value of zero (virtual change outputs) are permitted. The are defined for the purpose of testing whether or not a HIT adheres to this specification but are not present in the version of the transaction which is broadcast to the network. -==Non-compliant heterogenous input script transactions== +==Non-compliant heterogeneous input script transactions== If a user wishes to create an output that is larger than half the total size of their spendable outputs, or if their inputs are not distributed in a manner in which the alternate form procedure can be completed, then the user can not create a transaction which is compliant with this procedure. diff --git a/bip-0127.mediawiki b/bip-0127.mediawiki index 44a90d7991..87071d8eaf 100644 --- a/bip-0127.mediawiki +++ b/bip-0127.mediawiki @@ -124,7 +124,7 @@ message FinalProof { // Bitcoin transaction. bytes proof_tx = 1; - // The metadata of the ouputs used in the proof transaction. + // The metadata of the outputs used in the proof transaction. repeated OutputMeta output_metadata = 2; } diff --git a/bip-0132.mediawiki b/bip-0132.mediawiki index e7aed29248..173c919818 100644 --- a/bip-0132.mediawiki +++ b/bip-0132.mediawiki @@ -48,7 +48,7 @@ The author doesn't believe this is a problem because a BIP cannot be forced on c == Process == -* '''Submit for Comments.''' The first BIP champion named in the proposal can call a "submit for comments" at any time by posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Dev Mailing List] mailling with the BIP number and a statement that the champion intends to immediately submit the BIP for comments. +* '''Submit for Comments.''' The first BIP champion named in the proposal can call a "submit for comments" at any time by posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Dev Mailing List] mailing with the BIP number and a statement that the champion intends to immediately submit the BIP for comments. ** The BIP must have been assigned BIP-number (i.e. been approved by the BIP editor) to be submitted for comments. * '''Comments.''' ** After a BIP has been submitted for comments, a two-week waiting period begins in which the community should transition from making suggestions about a proposal to publishing their opinions or concerns on the proposal. diff --git a/bip-0137.mediawiki b/bip-0137.mediawiki index 43addbab4c..575440b181 100644 --- a/bip-0137.mediawiki +++ b/bip-0137.mediawiki @@ -116,7 +116,7 @@ Since this format includes P2PKH keys, it is backwards compatible, but keep in m ==Implications== -Message signing is an important use case and potentially underused due to the fact that, up until now, there has not been a formal specification for how wallets can sign messages using Bitcoin private keys. Bitcoin wallets should be interoperable and use the same conventions for determing a signature's validity. This BIP can also be updated as new signature formats emerge. +Message signing is an important use case and potentially underused due to the fact that, up until now, there has not been a formal specification for how wallets can sign messages using Bitcoin private keys. Bitcoin wallets should be interoperable and use the same conventions for determining a signature's validity. This BIP can also be updated as new signature formats emerge. ==Acknowledgements== diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index ebf0d7c612..9935eaa2b7 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -39,12 +39,12 @@ A new transaction digest algorithm is defined, but only applicable to sigops in 9. nLocktime of the transaction (4-byte little endian) 10. sighash type of the signature (4-byte little endian) -Semantics of the original sighash types remain unchanged, except the followings: +Semantics of the original sighash types remain unchanged, except the following: # The way of serialization is changed; # All sighash types commit to the amount being spent by the signed input; # FindAndDelete of the signature is not applied to the scriptCode; # OP_CODESEPARATOR(s) after the last executed OP_CODESEPARATOR are not removed from the scriptCode (the last executed OP_CODESEPARATOR and any script before it are always removed); -# SINGLE does not commit to the input index. When ANYONECANPAY is not set, the semantics are unchanged since hashPrevouts and outpoint together implictly commit to the input index. When SINGLE is used with ANYONECANPAY, omission of the index commitment allows permutation of the input-output pairs, as long as each pair is located at an equivalent index. +# SINGLE does not commit to the input index. When ANYONECANPAY is not set, the semantics are unchanged since hashPrevouts and outpoint together implicitly commit to the input index. When SINGLE is used with ANYONECANPAY, omission of the index commitment allows permutation of the input-output pairs, as long as each pair is located at an equivalent index. The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index 793c24411c..8bc119785b 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -85,7 +85,7 @@ a 64 bit nonce and a 64 bit counter into 64 bytes of output. This output is used Poly1305, also by Daniel Bernstein [4], is a one-time Carter-Wegman MAC that computes a 128 bit integrity tag given a message and a single-use 256 bit secret key. -The chacha20-poly1305@openssh.com specified and defined by openssh [5] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [6], but differs in the layout of data passed to the MAC and in the addition of encyption of the packet lengths. +The chacha20-poly1305@openssh.com specified and defined by openssh [5] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [6], but differs in the layout of data passed to the MAC and in the addition of encryption of the packet lengths. K_1 must be used to only encrypt the payload size of the encrypted message to avoid leaking information by revealing the message size. diff --git a/bip-0158/gentestvectors.go b/bip-0158/gentestvectors.go index 3435eb3cf7..e51b9842c6 100644 --- a/bip-0158/gentestvectors.go +++ b/bip-0158/gentestvectors.go @@ -207,7 +207,7 @@ func main() { prevOutputScripts, err := fetchPrevOutputScripts(client, block) if err != nil { - fmt.Println("Couldn't fetch prev output scipts: ", err) + fmt.Println("Couldn't fetch prev output scripts: ", err) return } diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index c192f19e48..95a5573b45 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -633,7 +633,7 @@ values are valid, then it does not matter which is chosen as either way the tran ===Proprietary Use Type=== For all global, per-input, and per-output maps, the type 0xFC is reserved for proprietary use. -The proprietary use type requires keys that follow the type with a compact size unsigned integer representing the length of the string identifer, followed by the string identifier, then a subtype, and finally any key data. +The proprietary use type requires keys that follow the type with a compact size unsigned integer representing the length of the string identifier, followed by the string identifier, then a subtype, and finally any key data. The identifier can be any variable length string that software can use to identify whether the particular data in the proprietary type can be used by it. It can also be the empty string although this is not recommended. diff --git a/bip-0310.mediawiki b/bip-0310.mediawiki index 257e92ad1c..6104015f1c 100644 --- a/bip-0310.mediawiki +++ b/bip-0310.mediawiki @@ -276,7 +276,7 @@ Miner provides additional text-based information. Currently, there is a similar protocol feature '''mining.capabilities''' that was intended for various protocol extensions. However, '''mining.configure''' is incompatible with this feature as it requires a server response confirming -all accepted/negotatied extensions. The reason why we made it incompatible is +all accepted/negotiated extensions. The reason why we made it incompatible is that '''mining.capabilities''' request has no associated response. diff --git a/bip-0330/minisketch.py b/bip-0330/minisketch.py index f64286fd8b..5e3977935d 100755 --- a/bip-0330/minisketch.py +++ b/bip-0330/minisketch.py @@ -120,7 +120,7 @@ def find_roots_inner(p, a): return [] elif len(p) == 2: return [p[0]] - # Otherwise, split p in left*right using paramater a_vals[0]. + # Otherwise, split p in left*right using parameter a_vals[0]. t = poly_monic(poly_trace(p, a)) left = poly_gcd(list(p), t) right = poly_divmod(list(left), p) diff --git a/bip-0370.mediawiki b/bip-0370.mediawiki index cd448cc0b0..98f1800256 100644 --- a/bip-0370.mediawiki +++ b/bip-0370.mediawiki @@ -248,7 +248,7 @@ Before any input or output may be added, the constructor must check the PSBT_GLO Inputs may only be added if the Inputs Modifiable flag is True. Outputs may only be added if the Outputs Modifiable flag is True. -When an input or output is added, the corresponding PSBT_GLOBAL_INPUT_COUNT or PSBT_GLOBAL_OUTPUT_COUNT must be incremeted to reflect the number of inputs and outputs in the PSBT. +When an input or output is added, the corresponding PSBT_GLOBAL_INPUT_COUNT or PSBT_GLOBAL_OUTPUT_COUNT must be incremented to reflect the number of inputs and outputs in the PSBT. When an input is added, it must have PSBT_IN_PREVIOUS_TXID and PSBT_IN_OUTPUT_INDEX set. When an output is added, it must have PSBT_OUT_VALUE and PSBT_OUT_OUTPUT_SCRIPT set. If the input has a required timelock, Constructors must set the requisite timelock field. From 696cc1713b931589d01c544d3016f3cf57be0058 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Tue, 30 Apr 2024 21:13:43 -0400 Subject: [PATCH 104/124] Adds post history, fixes created date --- bip-0347.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 622d7b46ec..88dad57ae9 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -7,8 +7,9 @@ Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0347 Status: Draft Type: Standards Track - Created: 2023-10-21 + Created: 2023-12-11 License: BSD-3-Clause + Post-History: 2023-10-21: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-October/022049.html [bitcoin-dev] Proposed BIP for OP_CAT
==Abstract== From 6fc75b1b2153df40f1ff8312d7086b69bfb091de Mon Sep 17 00:00:00 2001 From: Ali Sherief Date: Wed, 1 May 2024 13:44:03 +0000 Subject: [PATCH 105/124] [BIP322] remove empty message requirement for full (proof-of-funds) proofs (#1352) * add bip-notatether-signedmessage * minor heading correction * minor formatting correction * minor formatting correction * minor formatting correction * minor formatting correction * minor formatting correction * minor formatting correction * fix some consistency errors * Remove empty message for UTXO proofs * Delete bip-notatether-signedmessage.mediawiki --- bip-0322.mediawiki | 2 -- 1 file changed, 2 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index 55a751f13f..911d3c80f9 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -80,8 +80,6 @@ A full signature consists of the base64-encoding of the to_sign tra A signer may construct a proof of funds, demonstrating control of a set of UTXOs, by constructing a full signature as above, with the following modifications. -* message_challenge is unused and shall be set to OP_TRUE -* Similarly, message_signature is then empty. * All outputs that the signer wishes to demonstrate control of are included as additional inputs of to_sign, and their witness and scriptSig data should be set as though these outputs were actually being spent. Unlike an ordinary signature, validators of a proof of funds need access to the current UTXO set, to learn that the claimed inputs exist on the blockchain, and to learn their scriptPubKeys. From d670035b0c0ef60c10e9e818f3fbf6f11779257f Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 1 May 2024 16:30:38 -0400 Subject: [PATCH 106/124] Adds sentence suggested by murchandamus to quantum paragraph Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 88dad57ae9..29d9219e97 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -39,7 +39,7 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with up to 4,294,967,296 public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ -* Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot. +* Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It has been proposed that if ECDSA is broken or a powerful computer was on the horizon, there might be an effort to protect ownership of bitcoins by allowing people to mark their taproot outputs as "script-path only" and then move their coins into such outputs with a leaf in the script tree requiring a Lamport signature. It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot. * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin. * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md. From e9e7636f7e7d5454c2993394518b48f6b4f0833a Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 1 May 2024 16:31:49 -0400 Subject: [PATCH 107/124] Increases commas and capital letters This improves readability, thanks! Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 29d9219e97..2d4ab05ebc 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -33,7 +33,7 @@ This opcode would be activated via a soft fork by redefining the tapscript opcod ==Motivation== -Bitcoin tapscript lacks a general purpose way of combining objects on the stack restricting the expressiveness and power of tapscript. This prevents among many other things the ability to construct and evaluate merkle trees and other hashed data structures in tapscript. OP_CAT by adding a general purpose way to concatenate stack values would overcome this limitation and greatly increase the functionality of tapscript. +Bitcoin Tapscript lacks a general purpose way of combining objects on the stack, restricting the expressiveness and power of Tapscript. This prevents, among many other things, the ability to construct and evaluate merkle trees and other hashed data structures in Tapscript. OP_CAT, by adding a general purpose way to concatenate stack values, would overcome this limitation and greatly increase the functionality of Tapscript. OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modular, and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: From 6815c39f93a7f26f509fb4e3dedf4c0d654ae857 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 1 May 2024 16:32:28 -0400 Subject: [PATCH 108/124] Adds commas Co-authored-by: Mark "Murch" Erhardt --- bip-0347.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki index 2d4ab05ebc..8d7bf32e2d 100644 --- a/bip-0347.mediawiki +++ b/bip-0347.mediawiki @@ -37,7 +37,7 @@ Bitcoin Tapscript lacks a general purpose way of combining objects on the stack, OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modular, and useful opcode in the spirit of Unix R. Pike and B. Kernighan, "Program design in the UNIX environment", 1983, https://harmful.cat-v.org/cat-v/unix_prog_design.pdf. To demonstrate the usefulness of OP_CAT below we provide a non-exhaustive list of some usecases that OP_CAT would enable: -* Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf +* Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT, they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with up to 4,294,967,296 public keys. This also enables generalized logical spend conditions. P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/ * Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It has been proposed that if ECDSA is broken or a powerful computer was on the horizon, there might be an effort to protect ownership of bitcoins by allowing people to mark their taproot outputs as "script-path only" and then move their coins into such outputs with a leaf in the script tree requiring a Lamport signature. It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot. * Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols. From 98f000a6fb330ec8afa87bcb6ba0cad20c7552f2 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 19:11:06 -0400 Subject: [PATCH 109/124] diffchecks.sh: Make success clear and exit with failure on error --- scripts/diffcheck.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/diffcheck.sh b/scripts/diffcheck.sh index 3d8a9e557d..aa9f557cf2 100755 --- a/scripts/diffcheck.sh +++ b/scripts/diffcheck.sh @@ -9,6 +9,8 @@ if git checkout HEAD^ && scripts/buildtable.pl >/tmp/table.mediawiki 2>/dev/null echo "$newdiff" exit 1 fi + echo "README table matches expected table from BIP files" else echo 'Cannot build previous commit table for comparison' + exit 1 fi From 94ca14f34eaa776411365eb87c1f5e32b453b8c2 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 19:14:34 -0400 Subject: [PATCH 110/124] ci: Use actions/checkout@v4 v3 is deprecated --- .github/workflows/github-action-checks.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/github-action-checks.yml b/.github/workflows/github-action-checks.yml index 0b723e1b93..b18267e325 100644 --- a/.github/workflows/github-action-checks.yml +++ b/.github/workflows/github-action-checks.yml @@ -5,17 +5,17 @@ jobs: Link-Format-Checks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: scripts/link-format-chk.sh Build-Table-Checks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: scripts/buildtable.pl >/tmp/table.mediawiki || exit 1 Diff-Checks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 2 - run: scripts/diffcheck.sh From 09439bb6626305c0bf146069cf8ea467d05b87c5 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 24 Apr 2024 19:16:30 -0400 Subject: [PATCH 111/124] ci: Clarify that diffchecks fails until a number is assigned --- .github/workflows/github-action-checks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/github-action-checks.yml b/.github/workflows/github-action-checks.yml index b18267e325..8a7d2ac84f 100644 --- a/.github/workflows/github-action-checks.yml +++ b/.github/workflows/github-action-checks.yml @@ -13,6 +13,7 @@ jobs: - uses: actions/checkout@v4 - run: scripts/buildtable.pl >/tmp/table.mediawiki || exit 1 Diff-Checks: + name: "Diff Checks (fails until number assignment)" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 602cd676cd4ec95d1143aa6f2c39d661e95a2897 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 1 May 2024 17:02:36 -0400 Subject: [PATCH 112/124] buildtable.pl: Also check .md files (#1577) --- scripts/buildtable.pl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index 292f1ee5b0..4923a9ed4f 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -96,6 +96,9 @@ my $bipnum = 0; while (++$bipnum <= $topbip) { my $fn = sprintf "bip-%04d.mediawiki", $bipnum; + if (!-e $fn) { + $fn = sprintf "bip-%04d.md", $bipnum; + } -e $fn || next; open my $F, "<$fn"; while (<$F> !~ m[^(?:\xef\xbb\xbf)?
$]) {

From e155b58f1370dd90f0b2020862dff7dd43d891f2 Mon Sep 17 00:00:00 2001
From: Ava Chow 
Date: Wed, 1 May 2024 17:59:53 -0400
Subject: [PATCH 113/124] 197: Fix incorrectly formatted links

---
 bip-0197.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0197.mediawiki b/bip-0197.mediawiki
index 427ff22000..2cac042c3d 100644
--- a/bip-0197.mediawiki
+++ b/bip-0197.mediawiki
@@ -79,7 +79,7 @@ The Seizable Collateral script takes the following form:
 
 ==Compatibility==
 
-BIP 197 is compatible with [ERC 1850](https://github.com/ethereum/EIPs/pull/1850) for [atomic loans](https://arxiv.org/pdf/1901.05117.pdf) with Ethereum. Can be extended in the future to be compatible with other HTLC and smart contract compatible chains.
+BIP 197 is compatible with [https://github.com/ethereum/EIPs/pull/1850 ERC 1850] for [https://arxiv.org/pdf/1901.05117.pdf atomic loans] with Ethereum. Can be extended in the future to be compatible with other HTLC and smart contract compatible chains.
 
 ==Motivation==
 

From 3bd457c595a9a24ce9fedb38f0df2df659eb9974 Mon Sep 17 00:00:00 2001
From: Ava Chow 
Date: Wed, 1 May 2024 18:00:38 -0400
Subject: [PATCH 114/124] 310: Fix incorrectly formatted link

---
 bip-0310.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0310.mediawiki b/bip-0310.mediawiki
index 6104015f1c..34522bea3f 100644
--- a/bip-0310.mediawiki
+++ b/bip-0310.mediawiki
@@ -190,7 +190,7 @@ send the mask, in this case a default full mask is used.
 
 * '''"version-rolling.mask"''' (REQUIRED, ''TMask'')
 ::- Bits set to 1 are allowed to be changed by the miner. If a miner changes bits with mask value 0, the server will reject the submit.
-::- The server SHOULD return the largest mask possible (as many bits set to 1 as possible). This can be useful in a mining proxy setup when a proxy needs to negotiate the best mask for its future clients. There is a [Draft BIP](https://github.com/bitcoin/bips/pull/661/files) describing available nVersion bits. The server SHOULD pick a mask that preferably covers all bits specified in the BIP.
+::- The server SHOULD return the largest mask possible (as many bits set to 1 as possible). This can be useful in a mining proxy setup when a proxy needs to negotiate the best mask for its future clients. There is a [https://github.com/bitcoin/bips/pull/661/files Draft BIP] describing available nVersion bits. The server SHOULD pick a mask that preferably covers all bits specified in the BIP.
 
 * '''"version-rolling.min-bit-count"''' (REQUIRED, ''TMask'')
 ::- The miner also provides a minimum number of bits that it needs for efficient version rolling in hardware. Note that this parameter provides important diagnostic information to the pool server. If the requested bit count exceeds the limit of the pool server, the miner always has the chance to operate in a degraded mode without using full hashing power. The pool server SHOULD NOT terminate miner connection if this rare mismatch case occurs.

From 3a2031380d55217eb19871f9e954131837ec205c Mon Sep 17 00:00:00 2001
From: Ava Chow 
Date: Wed, 1 May 2024 18:00:54 -0400
Subject: [PATCH 115/124] ci: Run link format check on all mediawiki documents

---
 scripts/link-format-chk.sh | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/scripts/link-format-chk.sh b/scripts/link-format-chk.sh
index e3f0f6d770..9493765d99 100755
--- a/scripts/link-format-chk.sh
+++ b/scripts/link-format-chk.sh
@@ -8,16 +8,14 @@
 
 ECODE=0
 FILES=""
-for fname in $(git diff --name-only HEAD $(git merge-base HEAD master)); do
-    if [[ $fname == *.mediawiki ]]; then
-        GRES=$(grep -n '](http' $fname)
-        if [ "$GRES" != "" ]; then
-            if [ $ECODE -eq 0 ]; then
-                >&2 echo "Github Mediawiki format writes link as [URL text], not as [text](url):"
-            fi
-            ECODE=1
-            echo "- $fname:$GRES"
+for fname in *.mediawiki; do
+    GRES=$(grep -n '](http' $fname)
+    if [ "$GRES" != "" ]; then
+        if [ $ECODE -eq 0 ]; then
+            >&2 echo "Github Mediawiki format writes link as [URL text], not as [text](url):"
         fi
+        ECODE=1
+        echo "- $fname:$GRES"
     fi
 done
 exit $ECODE

From e2547df1cd2317e7db86b9d519df8dc02a16d102 Mon Sep 17 00:00:00 2001
From: Janus 
Date: Sun, 11 Oct 2020 16:59:38 -0500
Subject: [PATCH 116/124] Final BIP-0133

---
 README.mediawiki   | 4 ++--
 bip-0133.mediawiki | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index 41a93476b7..94ecb8bcb3 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -714,13 +714,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Andy Chase
 | Process
 | Withdrawn
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0133.mediawiki|133]]
 | Peer Services
 | feefilter message
 | Alex Morcos
 | Standard
-| Draft
+| Final
 |- style="background-color: #ffcfcf"
 | [[bip-0134.mediawiki|134]]
 | Consensus (hard fork)
diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki
index c109f12ff9..b37370d9b4 100644
--- a/bip-0133.mediawiki
+++ b/bip-0133.mediawiki
@@ -5,7 +5,7 @@
   Author: Alex Morcos 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0133
-  Status: Draft
+  Status: Final
   Type: Standards Track
   Created: 2016-02-13
   License: PD

From 6ea9fda9aca437778d8162f6dbf80d7a5aca6b99 Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Thu, 2 May 2024 18:39:58 -0400
Subject: [PATCH 117/124] Fixes link to liar liar

---
 bip-0347.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index 8d7bf32e2d..0e198958e1 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -40,7 +40,7 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu
 * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT, they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf
 * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with up to 4,294,967,296 public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
 * Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It has been proposed that if ECDSA is broken or a powerful computer was on the horizon, there might be an effort to protect ownership of bitcoins by allowing people to mark their taproot outputs as "script-path only" and then move their coins into such outputs with a leaf in the script tree requiring a Lamport signature. It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot.
-* Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.727.6262&rep=rep1&type=pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
+* Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://dl.acm.org/doi/10.1145/2810103.2813686 in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.
 

From 31f51927f12906678e9e710c2871eccc0fc2dd40 Mon Sep 17 00:00:00 2001
From: Murch 
Date: Thu, 2 May 2024 21:57:31 -0400
Subject: [PATCH 118/124] Add BIP-347 OP_CAT to table

---
 README.mediawiki | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.mediawiki b/README.mediawiki
index 96b8df3372..ed7df0c9de 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -1072,6 +1072,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Final
 |-
+| [[bip-0347.mediawiki|347]]
+| Consensus (soft fork)
+| OP_CAT in Tapscript
+| Ethan Heilman, Armin Sabouri
+| Standard
+| Draft
+|-
 | [[bip-0350.mediawiki|350]]
 | Applications
 | Bech32m format for v1+ witness addresses

From 1ed7d03393988facec21bfb1cabdf11685c78aea Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Fri, 3 May 2024 10:31:27 +0200
Subject: [PATCH 119/124] more precise wording for key-prefixing justification

---
 bip-0340.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index 1aeb1c2978..3fd491fb6d 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -62,7 +62,7 @@ Since we would like to avoid the fragility that comes with short hashes, the ''e
 
 '''Key prefixing''' Using the verification rule above directly makes Schnorr signatures vulnerable to "related-key attacks" in which a third party can convert a signature ''(R, s)'' for public key ''P'' into a signature ''(R, s + a⋅hash(R || m))'' for public key ''P + a⋅G'' and the same message ''m'', for any given additive tweak ''a'' to the signing key. This would render signatures insecure when keys are generated using [[bip-0032.mediawiki#public-parent-key--public-child-key|BIP32's unhardened derivation]] and other methods that rely on additive tweaks to existing keys such as Taproot.
 
-To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving the MuSig2 multisignature scheme secure (see Applications below).
+To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving multiparty signature protocols (such as MuSig, MuSig2, and FROST) secure (see Applications below).
 
 We note that key prefixing is not strictly necessary for transaction signatures as used in Bitcoin currently, because signed transactions indirectly commit to the public keys already, i.e., ''m'' contains a commitment to ''pk''. However, this indirect commitment should not be relied upon because it may change with proposals such as SIGHASH_NOINPUT ([[bip-0118.mediawiki|BIP118]]), and would render the signature scheme unsuitable for other purposes than signing transactions, e.g., [https://bitcoin.org/en/developer-reference#signmessage signing ordinary messages].
 

From 4dcdadee675db63e241cda71cdfca9ebe96ce0bf Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Fri, 3 May 2024 10:32:42 +0200
Subject: [PATCH 120/124] update changelog

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

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index 3fd491fb6d..03ec45d75b 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -293,6 +293,7 @@ To help implementors understand updates to this BIP, we keep a list of substanti
 
 * 2022-08: Fix function signature of lift_x in reference code
 * 2023-04: Allow messages of arbitrary size
+* 2024-05: Update "Applications" section with more recent references
 
 == Footnotes ==
 

From cda34eef1c2543ece1205240f27e8d1cfffb336d Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Sun, 5 May 2024 17:57:27 -0400
Subject: [PATCH 121/124] Improved accuracy of paragraph on OP_CAT's removal in
 2010

---
 bip-0347.mediawiki | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index 0e198958e1..545ffbb6fa 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -44,8 +44,12 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.
 
-The opcode OP_CAT was available in early versions of Bitcoin. However, OP_CAT was removed because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script.
-For example, a script that pushed a 1-byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack value whose size was greater than 1 terabyte. This is no longer an issue because tapscript enforces a maximum stack element size of 520 bytes.
+OP_CAT was available in early versions of Bitcoin. 
+In 2010, a single commit disabled OP_CAT, along with another 15 opcodes.
+Folklore states that OP_CAT was removed in this commit because it enabled the construction of a script whose evaluation could have memory usage exponential in the size of the script.
+For example, a script that pushed a 1-byte value on the stack and then repeated the opcodes OP_DUP, OP_CAT 40 times would result in a stack element whose size was greater than 1 terabyte assuming no maximum stack element size. As Bitcoin at that time had a maximum stack element size of 5000 bytes, the effect of this expansion was limited to 5000 bytes.
+This is no longer an issue because tapscript enforces a maximum stack element size of 520 bytes.
+
 
 ==Rationale==
 

From 1f1f24f0efad7604c57b3570d7cd0ccee68b4984 Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Mon, 6 May 2024 11:39:15 +0200
Subject: [PATCH 122/124] spelling out FROST

Co-authored-by: Tim Ruffing 
---
 bip-0340.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index 03ec45d75b..1d9aa29d6a 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -266,7 +266,7 @@ While recent academic papers claim that they are also possible with ECDSA, conse
 
 By means of an interactive scheme such as [https://eprint.iacr.org/2020/1261.pdf MuSig2] ([[bip-0327.mediawiki|BIP327]]), participants can aggregate their public keys into a single public key which they can jointly sign for. This allows ''n''-of-''n'' multisignatures which, from a verifier's perspective, are no different from ordinary signatures, giving improved privacy and efficiency versus ''CHECKMULTISIG'' or other means.
 
-Moreover, Schnorr signatures are compatible with [https://en.wikipedia.org/wiki/Distributed_key_generation distributed key generation], which enables interactive threshold signatures schemes, e.g., the schemes described by [http://cacr.uwaterloo.ca/techreports/2001/corr2001-13.ps Stinson and Strobl (2001)], [https://link.springer.com/content/pdf/10.1007/s00145-006-0347-3.pdf Gennaro, Jarecki, Krawczyk, and Rabin (2007)], [https://eprint.iacr.org/2020/852.pdf Komlo and Goldberg (2020)], or [https://eprint.iacr.org/2023/899.pdf Chu, Gerhart, Ruffing, and Schröder (2023)]. These protocols make it possible to realize ''k''-of-''n'' threshold signatures, which ensure that any subset of size ''k'' of the set of ''n'' signers can sign but no subset of size less than ''k'' can produce a valid Schnorr signature.
+Moreover, Schnorr signatures are compatible with [https://en.wikipedia.org/wiki/Distributed_key_generation distributed key generation], which enables interactive threshold signatures schemes, e.g., the schemes by [http://cacr.uwaterloo.ca/techreports/2001/corr2001-13.ps Stinson and Strobl (2001)], by [https://link.springer.com/content/pdf/10.1007/s00145-006-0347-3.pdf Gennaro, Jarecki, Krawczyk, and Rabin (2007)], or the [https://eprint.iacr.org/2020/852.pdf FROST] scheme including its variants such as [https://eprint.iacr.org/2023/899.pdf FROST3]. These protocols make it possible to realize ''k''-of-''n'' threshold signatures, which ensure that any subset of size ''k'' of the set of ''n'' signers can sign but no subset of size less than ''k'' can produce a valid Schnorr signature.
 
 === Adaptor Signatures ===
 

From 5d10163efc36331eba5426dd854d91f0f68170f4 Mon Sep 17 00:00:00 2001
From: Yannick Seurin 
Date: Mon, 6 May 2024 11:40:02 +0200
Subject: [PATCH 123/124] more precise wording

Co-authored-by: Tim Ruffing 
---
 bip-0340.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki
index 1d9aa29d6a..85b7bac4dc 100644
--- a/bip-0340.mediawiki
+++ b/bip-0340.mediawiki
@@ -62,7 +62,7 @@ Since we would like to avoid the fragility that comes with short hashes, the ''e
 
 '''Key prefixing''' Using the verification rule above directly makes Schnorr signatures vulnerable to "related-key attacks" in which a third party can convert a signature ''(R, s)'' for public key ''P'' into a signature ''(R, s + a⋅hash(R || m))'' for public key ''P + a⋅G'' and the same message ''m'', for any given additive tweak ''a'' to the signing key. This would render signatures insecure when keys are generated using [[bip-0032.mediawiki#public-parent-key--public-child-key|BIP32's unhardened derivation]] and other methods that rely on additive tweaks to existing keys such as Taproot.
 
-To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving multiparty signature protocols (such as MuSig, MuSig2, and FROST) secure (see Applications below).
+To protect against these attacks, we choose ''key prefixed''A limitation of committing to the public key (rather than to a short hash of it, or not at all) is that it removes the ability for public key recovery or verifying signatures against a short public key hash. These constructions are generally incompatible with batch verification. Schnorr signatures which means that the public key is prefixed to the message in the challenge hash input. This changes the equation to ''s⋅G = R + hash(R || P || m)⋅P''. [https://eprint.iacr.org/2015/1135.pdf It can be shown] that key prefixing protects against related-key attacks with additive tweaks. In general, key prefixing increases robustness in multi-user settings, e.g., it seems to be a requirement for proving multiparty signing protocols (such as MuSig, MuSig2, and FROST) secure (see Applications below).
 
 We note that key prefixing is not strictly necessary for transaction signatures as used in Bitcoin currently, because signed transactions indirectly commit to the public keys already, i.e., ''m'' contains a commitment to ''pk''. However, this indirect commitment should not be relied upon because it may change with proposals such as SIGHASH_NOINPUT ([[bip-0118.mediawiki|BIP118]]), and would render the signature scheme unsuitable for other purposes than signing transactions, e.g., [https://bitcoin.org/en/developer-reference#signmessage signing ordinary messages].
 

From 7ad0f821ddc60366e98344a1e3019114ae46c80f Mon Sep 17 00:00:00 2001
From: Ethan Heilman 
Date: Mon, 6 May 2024 13:12:47 -0400
Subject: [PATCH 124/124] Adds stable URL for Liar, Liar, Coins on Fire!

---
 bip-0347.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0347.mediawiki b/bip-0347.mediawiki
index 545ffbb6fa..981af8127b 100644
--- a/bip-0347.mediawiki
+++ b/bip-0347.mediawiki
@@ -40,7 +40,7 @@ OP_CAT aims to expand the toolbox of the tapscript developer with a simple, modu
 * Bitstream, a protocol for the atomic swap (fair exchange) of bitcoins for decryption keys, that enables decentralized file hosting systems paid in Bitcoin. While such swaps are currently possible on Bitcoin without OP_CAT, they require the use of complex and computationally expensive Verifiable Computation cryptographic techniques. OP_CAT would remove this requirement on Verifiable Computation, making such protocols far more practical to build in Bitcoin. R. Linus, "BitStream: Decentralized File Hosting Incentivised via Bitcoin Payments", 2023, https://robinlinus.com/bitstream.pdf
 * Tree signatures provide a multisignature script whose size can be logarithmic in the number of public keys and can encode spend conditions beyond n-of-m. For instance a transaction less than 1KB in size could support tree signatures with up to 4,294,967,296 public keys. This also enables generalized logical spend conditions.  P. Wuille, "Multisig on steroids using tree signatures", 2015, https://blog.blockstream.com/en-treesignatures/
 * Post-Quantum Lamport signatures in Bitcoin transactions. Lamport signatures merely require the ability to hash and concatenate values on the stack. J. Rubin, "[bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values]", 2021, https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019233.html It has been proposed that if ECDSA is broken or a powerful computer was on the horizon, there might be an effort to protect ownership of bitcoins by allowing people to mark their taproot outputs as "script-path only" and then move their coins into such outputs with a leaf in the script tree requiring a Lamport signature. It is an open question if a tapscript commitment would preserve the quantum resistance of Lamport signatures. Beyond this question, the use of Lamport Signatures in taproot outputs is unlikely to be quantum resistant even if the script spend-path is made quantum resistant. This is because taproot outputs can also be spent with a key. An attacker with a sufficiently powerful quantum computer could bypass the taproot script spend-path by finding the discrete log of the taproot output and thus spending the output using the key spend-path. The use of "Nothing Up My Sleeve" (NUMS) points as described in [[bip-0341.mediawiki|BIP341]] to disable the key spend-path does not disable the key spend-path against a quantum attacker as NUMS relies on the hardness of finding discrete logs. We are not aware of any mechanism which could disable the key spend-path in a taproot output without a softfork change to taproot.
-* Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://dl.acm.org/doi/10.1145/2810103.2813686 in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
+* Non-equivocation contracts T. Ruffing, A. Kate, D. Schröder, "Liar, Liar, Coins on Fire: Penalizing Equivocation by Loss of Bitcoins", 2015, https://web.archive.org/web/20221023121048/https://publications.cispa.saarland/565/1/penalizing.pdf in tapscript provide a mechanism to punish equivocation/double spending in Bitcoin payment channels. OP_CAT enables this by enforcing rules on the spending transaction's nonce. The capability is a useful building block for payment channels and other Bitcoin protocols.
 * Vaults M. Moser, I. Eyal, and E. G. Sirer, Bitcoin Covenants, http://fc16.ifca.ai/bitcoin/papers/MES16.pdf which are a specialized covenant that allows a user to block a malicious party who has compromised the user's secret key from stealing the funds in that output. As shown in A. Poelstra, "CAT and Schnorr Tricks II", 2021, https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html OP_CAT is sufficient to build vaults in Bitcoin.
 * Replicating CheckSigFromStack A. Poelstra, "CAT and Schnorr Tricks I", 2021, https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298 which would allow the creation of simple covenants and other advanced contracts without having to presign spending transactions, possibly reducing complexity and the amount of data that needs to be stored. Originally shown to work with Schnorr signatures, this result has been extended to ECDSA signatures R. Linus, "Covenants with CAT and ECDSA", 2023, https://gist.github.com/RobinLinus/9a69f5552be94d13170ec79bf34d5e85#file-covenants_cat_ecdsa-md.