From 6d97bf5c98e636dfb902f9accc88a62ac348897e Mon Sep 17 00:00:00 2001 From: Dr Washington Sanchez Date: Sun, 13 Sep 2015 22:00:11 +1000 Subject: [PATCH 0001/2326] Dynamic block size proposal Will update with BIP number if/when assigned one. --- dynamicblocksize.mediawiki | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 dynamicblocksize.mediawiki diff --git a/dynamicblocksize.mediawiki b/dynamicblocksize.mediawiki new file mode 100644 index 0000000000..7431a1c124 --- /dev/null +++ b/dynamicblocksize.mediawiki @@ -0,0 +1,83 @@ +
+  BIP: XXX
+  Title: Dynamic limit on the block size
+  Author: Dr Washington Y. Sanchez 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-09-11
+
+ +==Abstract== + +This BIP proposes a dynamic limit to the block size based on transaction volume. + +==Motivation== + +Over the next few years, large infrastructure investments will be made into: + +# Improving global network connectivity +# Improving block propogation across the Bitcoin network +# Layer 2 services and networks for off-chain transactions +# General efficiency improvements to transactions and the blockchain + +* While there is a consensus between Bitcoin developers, miners, businesses and users that the block size needs to be increased, there is a lingering concern over the potential unintended consequences that may agument the trend towards network and mining centralization (largely driven by mining hardware such as ASICs) and thereby threaten the security of the network. +* In contrast, failing to respond to elevated on-chain transaction volume may lead to a consumer-failure of Bitcoin, where ordinary users - having enjoyed over 6 years of submitting transactions on-chain at relatively low cost - will be priced out of blockchain with the emergence of a prohibitive 'fee market'. +* These two concerns must be delicately balanced so that all users can benefit from a robust, scalable, and neutral network. + +==Specification== + +* Increases in the block size will occur in 2 phases +* '''Phase 1''' +** The block size will be increased similar to [[https://twitter.com/adam3us/status/636410827969421312|Adam Back's proposal]], as a safe runway prior to switching to Phase 2, while network and protocol infrastructure is improved +** The schedule: +*** ''2016-2017:'' 2 MB +*** ''2018-2019:'' 4 MB +*** ''2020:'' 6 MB +* '''Phase 2''' +** In 2020, the maximum block size will be increased dynamically according to sustained increases in transaction volume +** Every 4032 blocks (~4 weeks), a CHECK will be performed to determine if a raise in the maximum block size should occur +*** This calculates to a theoretical maximum of 13 increases per year +** IF of the last >= 3025 blocks were >=60% full, the maximum block size will be increased by 10% +** The maximum block size can only ever be increased, not decreased +* The default limitfreerelay will also be raised in proportion to maximum block size increases +** Transactions without fees can continue to be submitted and relayed on the network as per normal +** limitfreerelay also helps counter attempts to trigger a block size increase by 'penny-flooding' + +For example: +* When the dynamic rules for increasing the block size go live on January 1st 2020, the starting maximum block size wil be 6 MB +* IF >=3025 blocks are >= 3.6 MB, the new maximum block size become 6.6 MB. +* The theoretical maximum block size at the end of 2020 would be ~20.7 MB, assuming all 13 increases are triggered every 4 weeks by the end of the year. + +==Rationale== + +* '''Phase 1''' +** This runway has a schedule for conservative increases to the block size in order to relieve transaction volume pressure while allowing network and protocol infrastructure improvements to be made, as well as layer 2 services to emerge +* '''Phase 2''' +** Why 60% full blocks? +*** IF blocks are 60% full, they count as a ''vote'' towards increasing the block size +*** If this parameter is too low, the trigger sensitivity may be too high and vulnerable to spam attacks or miner collusion +*** Setting the parameter too high may set the trigger sensitivity too low, causing transaction delays that are trying to be avoided in the first place +*** Between September 2013-2015, the standard deviation measured from average block size (n=730 data points from blockchain.info) was ~ 0.13 MB or 13% of the maximum block size +**** If blocks needed to be 90% full before an increase were triggered, normal variance in the average block size would mean some blocks would be full before an increase could be triggered +*** Therefore, we need a ''safe distance'' away from the maximum block size to avoid normal block size variance hitting the limit. The 60% level represents a 3 standard deviation distrance from the limit. +** Why 3025 blocks? +*** The assessment period is 4032 blocks or ~ 4 weeks, with the threshold set as 4032 blocks/0.75 + 1 +*** Increases in the maximum block size should only occur after a sustained trend can be observed in order to: +***# Demonstrate a market-driven secular elevation in the transaction volume +***# Increase the cost to trigger an increase by spam attacks or miner collusion with zero fee transactions +*** In other words, increases to the maximum block size must be conservative but meaningful to relieve transaction volume pressure in response to true market demand +** Why 10% increase in the block size? +*** Increases in the block size are designed to be conservative and in balance with the number of theoretical opportunitites to increase the block size per year +*** Makes any resources spent for spam attacks or miner collusion relatively expensive to achieve a minor increase in the block size. A sustained attack would need to be launched that may be too costly, and ideally detectable by the community + +==Deployment== +''From BIP66:'' +We reuse the double-threshold switchover mechanism from BIP 34, with the same thresholds, but for nVersion = ''n''. The new rules are in effect for every block (at height H) with nVersion = ''n'' and at least 750 out of 1000 blocks preceding it (with heights H-1000..H-1) also have nVersion = ''n''. Furthermore, when 950 out of the 1000 blocks preceding a block do have nVersion = ''n'', nVersion = ''n-1'' blocks become invalid, and all further blocks enforce the new rules. + +==Acknowledgements== + +Thanks to Austin Hill, Brian Hoffman, Angel Leon, Bulukani Mlalazi, Chris Pacia, and Ryan Shea for their comments. + +==Copyright== + +This work is placed in the public domain. From 38ea34dee5a1f029d3346176f1eed6a2b1adff16 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 9 Oct 2015 15:59:07 -0400 Subject: [PATCH 0002/2326] Updated C++ library link and added acknowledgement. --- bip-0032.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index 902a5eb2fd..b5ab1452ab 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -259,7 +259,7 @@ PyCoin (https://github.com/richardkiss/pycoin) is a suite of utilities for deali A Java implementation is available at https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java -A C++ implementation is available at https://github.com/CodeShark/CoinClasses/tree/master/tests/hdwallets +A C++ implementation is available at https://github.com/ciphrex/mSIGNA/blob/master/deps/CoinCore/src/hdkeys.h An Objective-C implementation is available at https://github.com/oleganza/CoreBitcoin/blob/master/CoreBitcoin/BTCKeychain.h @@ -281,4 +281,5 @@ A Haskell implementation is available at https://github.com/haskoin/haskoin toge * Gregory Maxwell for the original idea of type-2 deterministic wallets, and many discussions about it. * Alan Reiner for the implementation of this scheme in Armory, and the suggestions that followed from that. +* Eric Lombrozo for reviewing and revising this BIP. * Mike Caldwell for the version bytes to obtain human-recognizable Base58 strings. From 46d25f86298fc70b4e00f06b3068f2c81231eb61 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Wed, 13 May 2015 11:16:55 +0200 Subject: [PATCH 0003/2326] Draft of the normalized transaction ID BIP --- bip-00nn.mediawiki | 120 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 bip-00nn.mediawiki diff --git a/bip-00nn.mediawiki b/bip-00nn.mediawiki new file mode 100644 index 0000000000..923b9e72fb --- /dev/null +++ b/bip-00nn.mediawiki @@ -0,0 +1,120 @@ +
+  BIP: NN
+  Title: Normalized TXID
+  Author: Christian Decker 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-10-14
+
+== Abstract == + +This BIP describes the use of normalized transaction IDs (TXIDs) in order to eliminate transaction malleability, both in the third-party modification scenario as well as the participant modification scenario. The transaction ID is normalized by removing the signature scripts from transactions before computing its hash. The normalized transaction hashes are then used during the signature creation and signature verification of dependent transactions. + +== Motivation == + +Transaction malleability refers to the fact that transactions can be modified, either by one of the signers by re-signing the transaction or a third-party by modifying the signature representation. This is a problem since any modification to the serialized representation also changes the hash of the transaction, which is used by spending transaction to reference the funds that are being transferred. If a transaction is modified and later confirmed by ending up in the blockchain all transactions that depended on the original transaction are no longer valid, and thus orphaned. + +BIPs 62[[https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki|BIP 62 - Dealing with malleability]] and 66[[https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki|BIP 66 - Strict DER signatures]] alleviate the problem of third-party modification by defining a canonical representation of the signatures. However, the checking the canonical representation is complex and may not eliminate all sources of third-party malleability. Furthermore, these BIPs do not address modifications by one of the signers, i.e., re-signing the transaction, because signers can produce any number of signatures due to the random parameter in ECDSA. + +This proposal eliminates malleability altogether by removing the malleable signatures from the hash used to reference the outputs spent by a transaction. The new hash used to reference an output is called the ''normalized transaction ID''. The integrity of all data that is used to reference the output is guaranteed by the signature itself, and any modification that would change the normalized transaction ID would also invalidate the signature itself. + +Besides eliminating transaction malleability as a source of problems it also allows the use of transaction templates. Transaction templates simplify higher level protocols and allows new uses. They allow an unsigned template transaction to be used as a basis for a sequence of transaction and only once the sequence matches the signers' expectations they provide the necessary signatures for the template to become valid, thus opting in to the sequence. + +== Specification == + +The use of normalized transaction IDs is introduced as a softfork. The specification is divided into three parts: + + - Computation of the normalized transaction ID + - Introduction of a new extensible signature verification opcode to enable softfork deployment + - Changes to the UTXO tracking to enable normalized transaction ID lookup + +=== Normalized Transaction ID computation === + +In order to calculate the normalized transaction ID, the signature script is stripped from each input of the transaction of non-coinbase transactions. Stripping the signature script is achieved by setting the script's length to 0 and removing the uchar[] array from the TxIn.[[https://en.bitcoin.it/wiki/Protocol_Specification#tx|Protocol Specification: TX]] +The normalized transaction ID is then computed as the SHA 256 hash of the stripped transaction matching the existing transaction ID computation. The normalized transaction ID remains unchanged even if the signatures of the transaction are replaced/malleated and describe a class of semantically identical transactions. In the following we use ''transaction instance ID'' to refer to the transaction ID computed on the transaction including signatures. Normalized transaction IDs for coinbase transactions are computed with the signature script in the coinbase input, in order to avoid hash collisions. + +=== OP_CHECKSIGEX === +This BIP introduces a new opcode OP_CHECKSIGEX which replaces OP_NOP4. OP_CHECKSIGEX subsumes OP_CHECKSIG(VERIFY) and OP_CHECKMULTISIG(VERIFY) and extends their semantics by allowing additional parameters. + +When executed OP_CHECKSIGEX pops an integer from the top of the stack. This integer encodes the binary options which determine how OP_CHECKSIGEX verifies signatures. The following table shows the possible flags at the time of writing: + +{| class="wikitable" +!colspan="6"|OP_CHECKSIGEX flags +|- +! Name +! Value +! Description +|- +| SCRIPT_CHECKSIGEX_VERIFY +| 2^0 +| Verify after checking validity and fail script if verification failed +|- +| SCRIPT_CHECKSIGEX_MULTI +| 2^1 +| Mimic OP_CHECKMULTISIG if set otherwise mimic OP_CHECKSIG +|- +| SCRIPT_CHECKSIGEX_NORMALIZE +| 2^2 +| Normalize input hashes before checking signature +|} + +A combination of SCRIPT_CHECKSIGEX_VERIFY and SCRIPT_CHECKSIGEX_MULTI recreates the semantics of OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. Refer to the developer documentation[[https://bitcoin.org/en/developer-guide#p2pkh-script-validation|Developer Documentation - P2PKH Script Validation]] for their semantics. + +The existing OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY have a bug[[https://bitcoin.org/en/developer-guide#multisig|Developer Documentation - Multisig]] that pops one argument too many from the stack. This bug is not reproduced in the implementation of OP_CHECKSIGEX, so the canonical solution of pushing a dummy value onto the stack is not necessary. + +SCRIPT_CHECKSIGEX_NORMALIZE indicates that before computing the signaturehash, i.e., the hash that is signed, the transaction should be normalized by replacing all transaction IDs in the inputs by their normalized variants. The normalized transction IDs are computed as described in the next section. This normalization step is performed both when creating the signatures as well as when checking the signatures. + +In order to make use of the normalization feature, this BIP introduces two new standard transaction types + + OP_DUP OP_HASH160 OP_EQUALVERIFY OP_4 OP_CHECKSIGEX + +and + + OP_6 OP_CHECKSIGEX + +The first is the equivalent of the pay-to-pubkeyhash script with normalization (OP_4 = SCRIPT_CHECKSIGEX_NORMALIZE), while the second is the equivalent of the pay-to-multisig also with normalization (OP_6 = SCRIPT_CHECKSIGEX_NORMALIZE | SCRIPT_CHECKSIGEX_MULTI). The format of the scriptSig corresponds to the original version, with exception of omitting the dummy OP_0 in the multisig case. + +=== Tracking Normalized Transaction IDs === + +The transaction version is bumped to 2. The new version signals to clients receiving the transaction that they should track the normalized transaction ID along with the transaction instance ID in the unspent transaction output (UTXO) set. Upon receiving a version 2 transaction the client computes the normalized transaction ID, annotates the outputs with it, and adds them into the UTXO set indexed by the transaction instance ID as before. Transactions continue using the transaction instance ID to reference the outputs, but while checking the signature they may get normalized. All network messages continue to use the transaction instance ID to reference the transaction, specifically inv, getdata, tx and block messages still use transaction instance IDs, not the normalized transaction IDs. + +Outputs created by version 1 transactions are not annotated with the normalized transaction ID, and when normalizing the hashes in transaction inputs referencing version 1 outputs are not modified. + +== Rationale == + +Normalized transaction IDs are provably non-malleable since no data is included in the signaturehash whose integrity is not also proven in the signature, thus any modification causing the hash to change will also invalidate the signature. +Normalized transactions are secure as they still use cryptographic hashes over all the semantic information of the transaction, i.e., the inputs, outputs and metadata, thus it is still computationally infeasible to cause a hash collision between transactions. + +There are a number of advantages to using normalized transaction IDs: + +* Like BIP 62 and BIP 66 it solves the problem of third-parties picking transactions out of the network, modifying them and reinjecting them, as was allegedly done to defraud MtGox[[http://www.tik.ee.ethz.ch/file/7e4a7f3f2991784786037285f4876f5c/malleability.pdf|Bitcoin Transaction Malleability and MtGox]]. +* ''m-of-n'' multisig outputs are often used in higher level protocols[[http://www.tik.ee.ethz.ch/file/716b955c130e6c703fac336ea17b1670/duplex-micropayment-channels.pdf|A Fast and Scalable Payment Network with Bitcoin Duplex Micropayment Channels ]][[http://lightning.network/lightning-network-paper.pdf|The Bitcoin Lightning Network: +Scalable Off-Chain Instant Payments]] in which several parties sign a transaction. Without normalized transaction IDs it is trivial for one party to re-sign a transaction, hence changing the transaction hash and invalidating any transaction built on top of its outputs. Normalized transaction IDs force the ID not to change, even if a party replaces its signature. +* Many higher level protocols build structures of transactions on top of multisig outputs that are not completely signed. This is currently not possible without one party holding a fully signed transaction and then calculating the ID. It is desirable to be able to build successive transactions without one party collecting all signatures, and thus possibly lock in funds unilaterally. Normalized transaction IDs allow the use of transaction templates, i.e., completely unsigned transactions upon which further transactions can be built, and only once every party is assured the structure matches its expectations it signs the template, thus validating the template. + +The only occurence in which transactions can still be modified unilaterally is in the case SIGHASH_NONE, SIGHASH_SINGLE or SIGHASH_ANYONECANPAY is used. This however is not problematic since in these cases the creator of the transaction explicitly allows modification. + +In case of a transaction becoming invalid due to one of the inputs being malleated it is necessary to modify the spending transaction to reference the modified transaction ID. However, the signatures, which only use the normalized IDs, remain valid as long as the semantics of the funding transaction remain unchanged. An observer in the network may fix the transaction and reinject a corrected version. + +Using version 2 for transactions is an explicit optin to the normalized ID tracking and a simple upgrade for existing clients. It avoids having to reprocess the entire blockchain and computing the normalized transaction IDs for existing outputs in the UTXO. This would be further complicated by having to recursively compute normalized transaction IDs down to the coinbase transactions which created the coins. + +The new opcode OP_CHECKSIGEX was introduced in order to allow the use of normalized transaction IDs as a softfork and in order to keep the number of OP_NOPs needed to a bare minimum. The additional argument containing the flags can be pushed on the stack using a single byte as long as only the least significant 4 bits are set (OP_1 - OP_16), resulting in one byte overhead for this script type. Furthermore it removes the bug requiring a dummy push in the multisig scenario, resulting in the same size in this scenario. + +Tracking the normalized transaction IDs in the UTXO requires the storage of an additional hash per transaction whose outputs are not completely spent, which at 7,000,000 transactions with unspent outputs amounts to 224MB additional storage on disk. + +The coinbase transactions have been checked for hash-collisions and no collisions were found except for the coinbase transactions in blocks at heights 91842 and 91880, which are known to be identical[[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP 30 - Duplicate transactions]], and motivated the introduction of BIP 34.[[https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki|Block v2, Height in Coinbase]] Since coinbase transactions are invalid if transmitted outside of a block it is not possible to modify them on the fly and since they only mature after being included for a long time in the blockchain they are considered safe. + +=== Impact === + +This is a softfork which replaces OP_NOP4 with the new implementation of OP_CHECKSIGEX, as such the impact on the network is minimal. Wallets that do not implement this opcode will not be able to verify the validity of the scripts, however if transactions using OP_CHECKSIGEX are included in blocks they will accept them and track the inputs correctly. This is guaranteed since the transaction inputs still use the non-normalized transaction ID to reference the outputs to be claimed, hence non-upgraded wallets can still lookup the outputs and mark them as spent. Furthermore, clients that do not implement this BIP are unable to identify outputs using this script as their own, however upgrading and rescanning the blockchain will make them available. + +== See also == + +* [[bip-0062.mediawiki|BIP 62: Dealing with malleability]] +* [[bip-0066.mediawiki|BIP 66: Strict DER Signatures]] + +== References == + + +==Copyright== +This document is placed in the public domain. \ No newline at end of file From 451260d6d906a8372675d39cd36e9a97aec089ce Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 16 Oct 2015 20:10:54 -0700 Subject: [PATCH 0004/2326] added bip122 --- bip-0122.mediawiki | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 bip-0122.mediawiki diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki new file mode 100644 index 0000000000..dc1c6d7b52 --- /dev/null +++ b/bip-0122.mediawiki @@ -0,0 +1,47 @@ +
+  BIP: 122
+  Title: Creation of new testnet for scaling experiments
+  Author: Chris Priest 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-10-16
+
+ +==Abstract== + +This BIP defines the creation of a new parallel text network called "ScaleNet", +which will be used to test the effects of massive scale upon the bitcoin +consensus protocol. + +==Motivation== + +Bitcoin was originally designed to be an experiment. With the increase in the market +cap, this experimental nature is decreased. There is considerable doubt whether +the Bitcoin consensus protocol can handle transaction rates orders of magnitude +higher than the network sees today. + +==Specification== + +The code for ScaleNet will resemble the current Bitcoin testnet code in every way possible. +The only difference will be the elimination of the blocksize limit. + +ScaleNet coins will have 0 monetary value, just like TestNet coins. + +There will also be a ScaleNet faucet that wil be used to automatically get free ScaleNet coins. + +==ScaleNet spammer== + +Along with the creation of the ScaleNet client, there will also be a piece of software +called the "ScaleNet Spammer Client". The purpose of this software is to simply send large amounts +of transactions to the network. This software works very much like how software used to "stress test" +the main Bitcoin network. + +==Lessons Hopefully learned== + +* What happens when the blockchain get too large to fit entirely onto a consumer grade hard drive? +* How will it be possible to run a full node when there are hundreds of GB of unconfirmed transactions in the mempool? +* What kind of special attention needs to go into mining gigantic blocks (>100MB) without through the roof orphan tares. + +Each of these questions will be answered by ScaleNet. At some point in time +bitcoin will need to face these problems. Hopefully the insights learned +from ScaleNet will help drive a more data-driven approach to Bitcoin Development. From 029bd7d178fb3f163de17cd1a1b16286190ec696 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 16 Oct 2015 20:11:56 -0700 Subject: [PATCH 0005/2326] typos --- bip-0122.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index dc1c6d7b52..b1576e7b02 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -40,7 +40,7 @@ the main Bitcoin network. * What happens when the blockchain get too large to fit entirely onto a consumer grade hard drive? * How will it be possible to run a full node when there are hundreds of GB of unconfirmed transactions in the mempool? -* What kind of special attention needs to go into mining gigantic blocks (>100MB) without through the roof orphan tares. +* What kind of special attention needs to go into mining gigantic blocks (>100MB) without through the roof orphan rates? Each of these questions will be answered by ScaleNet. At some point in time bitcoin will need to face these problems. Hopefully the insights learned From 6447c8df9e25df04e0e1b233a2fc69d61bb9fb4f Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 16 Oct 2015 20:14:09 -0700 Subject: [PATCH 0006/2326] more typos --- bip-0122.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index b1576e7b02..ea9c903c67 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -22,12 +22,12 @@ higher than the network sees today. ==Specification== -The code for ScaleNet will resemble the current Bitcoin testnet code in every way possible. +The code for ScaleNet will resemble the current Bitcoin TestNet code in every way possible. The only difference will be the elimination of the blocksize limit. ScaleNet coins will have 0 monetary value, just like TestNet coins. -There will also be a ScaleNet faucet that wil be used to automatically get free ScaleNet coins. +There will also be a ScaleNet faucet that will be used to automatically get free ScaleNet coins. ==ScaleNet spammer== From 478c14dc171a448bc5f216d34b4a39e3ad6ac1ed Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 16 Oct 2015 20:14:57 -0700 Subject: [PATCH 0007/2326] more typos --- bip-0122.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index ea9c903c67..7dceb073a5 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -29,14 +29,14 @@ ScaleNet coins will have 0 monetary value, just like TestNet coins. There will also be a ScaleNet faucet that will be used to automatically get free ScaleNet coins. -==ScaleNet spammer== +==ScaleNet Spammer== Along with the creation of the ScaleNet client, there will also be a piece of software called the "ScaleNet Spammer Client". The purpose of this software is to simply send large amounts of transactions to the network. This software works very much like how software used to "stress test" the main Bitcoin network. -==Lessons Hopefully learned== +==Lessons Hopefully Learned== * What happens when the blockchain get too large to fit entirely onto a consumer grade hard drive? * How will it be possible to run a full node when there are hundreds of GB of unconfirmed transactions in the mempool? From 53c9fa273dd440658f5c62949efac8c4b0292fdb Mon Sep 17 00:00:00 2001 From: tx Date: Tue, 27 Oct 2015 01:15:47 -0700 Subject: [PATCH 0008/2326] add link to btcsuite implementation of bip 0069 --- bip-0069.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki index e23ff04205..f556a44138 100644 --- a/bip-0069.mediawiki +++ b/bip-0069.mediawiki @@ -162,6 +162,7 @@ Outputs: * [[https://github.com/bitcoinjs/bip69/blob/master/index.js|BitcoinJS]] * [[https://github.com/bitcoinjs/bip69/blob/master/test/fixtures.json|BitcoinJS Test Fixtures]] * [[https://www.npmjs.com/package/bip69|NodeJS]] +* [[https://github.com/btcsuite/btcutil/blob/master/txsort/txsort.go|Btcsuite]] ==Acknowledgements== From 694a073e15577b45fdbd679e43ff8ae76f46b7ba Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Sat, 31 Oct 2015 23:38:23 +1100 Subject: [PATCH 0009/2326] bip65: accepted status --- bip-0065.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index ed8747821e..2cbadb98e5 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -2,7 +2,7 @@ BIP: 65 Title: OP_CHECKLOCKTIMEVERIFY Author: Peter Todd - Status: Draft + Status: Accepted Type: Standards Track Created: 2014-10-01 From 893a4ff584e57bf431dcc12708c812c9153005e9 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Mon, 2 Nov 2015 18:09:35 +0100 Subject: [PATCH 0010/2326] Replaced binary flags with version, added migration to Schnorr, specified recursive computation and fixed a few minor things. --- bip-00nn.mediawiki | 81 +++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/bip-00nn.mediawiki b/bip-00nn.mediawiki index 923b9e72fb..dfe48a531e 100644 --- a/bip-00nn.mediawiki +++ b/bip-00nn.mediawiki @@ -8,15 +8,15 @@ == Abstract == -This BIP describes the use of normalized transaction IDs (TXIDs) in order to eliminate transaction malleability, both in the third-party modification scenario as well as the participant modification scenario. The transaction ID is normalized by removing the signature scripts from transactions before computing its hash. The normalized transaction hashes are then used during the signature creation and signature verification of dependent transactions. +This BIP describes the use of normalized transaction IDs (NTXIDs) in order to eliminate transaction malleability, both in the third-party modification scenario as well as the participant modification scenario. The transaction ID is normalized by removing the signature scripts from transactions before computing its hash. The normalized transaction hashes are then used during the signature creation and signature verification of dependent transactions. == Motivation == Transaction malleability refers to the fact that transactions can be modified, either by one of the signers by re-signing the transaction or a third-party by modifying the signature representation. This is a problem since any modification to the serialized representation also changes the hash of the transaction, which is used by spending transaction to reference the funds that are being transferred. If a transaction is modified and later confirmed by ending up in the blockchain all transactions that depended on the original transaction are no longer valid, and thus orphaned. -BIPs 62[[https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki|BIP 62 - Dealing with malleability]] and 66[[https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki|BIP 66 - Strict DER signatures]] alleviate the problem of third-party modification by defining a canonical representation of the signatures. However, the checking the canonical representation is complex and may not eliminate all sources of third-party malleability. Furthermore, these BIPs do not address modifications by one of the signers, i.e., re-signing the transaction, because signers can produce any number of signatures due to the random parameter in ECDSA. +BIPs 62[[https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki|BIP 62 - Dealing with malleability]] and 66[[https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki|BIP 66 - Strict DER signatures]] alleviate the problem of third-party modification by defining a canonical representation of the signatures. However, checking the canonical representation is complex and may not eliminate all sources of third-party malleability. Furthermore, these BIPs do not address modifications by one of the signers, i.e., re-signing the transaction, because signers can produce any number of signatures due to the random parameter in ECDSA. -This proposal eliminates malleability altogether by removing the malleable signatures from the hash used to reference the outputs spent by a transaction. The new hash used to reference an output is called the ''normalized transaction ID''. The integrity of all data that is used to reference the output is guaranteed by the signature itself, and any modification that would change the normalized transaction ID would also invalidate the signature itself. +This proposal eliminates malleability by removing the malleable signatures from the hash used to reference the outputs spent by a transaction. The new hash used to reference an output is called the ''normalized transaction ID''. The integrity of all data that is used to reference the output is guaranteed by the signature itself, and any modification that would change the normalized transaction ID would also invalidate the signature itself. Besides eliminating transaction malleability as a source of problems it also allows the use of transaction templates. Transaction templates simplify higher level protocols and allows new uses. They allow an unsigned template transaction to be used as a basis for a sequence of transaction and only once the sequence matches the signers' expectations they provide the necessary signatures for the template to become valid, thus opting in to the sequence. @@ -24,55 +24,40 @@ Besides eliminating transaction malleability as a source of problems it also all The use of normalized transaction IDs is introduced as a softfork. The specification is divided into three parts: - - Computation of the normalized transaction ID - - Introduction of a new extensible signature verification opcode to enable softfork deployment - - Changes to the UTXO tracking to enable normalized transaction ID lookup +* Computation of the normalized transaction ID +* Introduction of a new extensible signature verification opcode to enable softfork deployment +* Changes to the UTXO tracking to enable normalized transaction ID lookup === Normalized Transaction ID computation === -In order to calculate the normalized transaction ID, the signature script is stripped from each input of the transaction of non-coinbase transactions. Stripping the signature script is achieved by setting the script's length to 0 and removing the uchar[] array from the TxIn.[[https://en.bitcoin.it/wiki/Protocol_Specification#tx|Protocol Specification: TX]] -The normalized transaction ID is then computed as the SHA 256 hash of the stripped transaction matching the existing transaction ID computation. The normalized transaction ID remains unchanged even if the signatures of the transaction are replaced/malleated and describe a class of semantically identical transactions. In the following we use ''transaction instance ID'' to refer to the transaction ID computed on the transaction including signatures. Normalized transaction IDs for coinbase transactions are computed with the signature script in the coinbase input, in order to avoid hash collisions. +In order to calculate the normalized transaction ID, the signature script is stripped from each input of the transaction of non-coinbase transactions and each input is normalized. Stripping the signature script is achieved by setting the script's length to 0 and removing the uchar[] array from the TxIn.[[https://en.bitcoin.it/wiki/Protocol_Specification#tx|Protocol Specification: TX]] +Inputs are then normalized by replacing the hash of each previous transaction with its normalized version if available, i.e., the normalized hash of the previous transaction that created the output being spent in the current transaction. Version 1 transactions do not have a normalized transaction ID hence the non-normalized transaction ID is used for input normalization. + +The normalized transaction ID is then computed as the double SHA 256 hash of the normalized transaction matching the existing transaction ID computation. The normalized transaction ID remains unchanged even if the signatures of the transaction are replaced/malleated and describe a class of semantically identical transactions. In the following we use ''transaction instance ID'' to refer to the transaction ID computed on the transaction including signatures. Normalized transaction IDs for coinbase transactions are computed with the signature script in the coinbase input, in order to avoid hash collisions. === OP_CHECKSIGEX === -This BIP introduces a new opcode OP_CHECKSIGEX which replaces OP_NOP4. OP_CHECKSIGEX subsumes OP_CHECKSIG(VERIFY) and OP_CHECKMULTISIG(VERIFY) and extends their semantics by allowing additional parameters. - -When executed OP_CHECKSIGEX pops an integer from the top of the stack. This integer encodes the binary options which determine how OP_CHECKSIGEX verifies signatures. The following table shows the possible flags at the time of writing: - -{| class="wikitable" -!colspan="6"|OP_CHECKSIGEX flags -|- -! Name -! Value -! Description -|- -| SCRIPT_CHECKSIGEX_VERIFY -| 2^0 -| Verify after checking validity and fail script if verification failed -|- -| SCRIPT_CHECKSIGEX_MULTI -| 2^1 -| Mimic OP_CHECKMULTISIG if set otherwise mimic OP_CHECKSIG -|- -| SCRIPT_CHECKSIGEX_NORMALIZE -| 2^2 -| Normalize input hashes before checking signature -|} - -A combination of SCRIPT_CHECKSIGEX_VERIFY and SCRIPT_CHECKSIGEX_MULTI recreates the semantics of OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. Refer to the developer documentation[[https://bitcoin.org/en/developer-guide#p2pkh-script-validation|Developer Documentation - P2PKH Script Validation]] for their semantics. +This BIP introduces a new opcode OP_CHECKSIGEX which replaces OP_NOP4. OP_CHECKSIGEX subsumes OP_CHECKSIGVERIFY and OP_CHECKMULTISIGVERIFY, and extends them by accepting a new VERSION parameter. The version parameter is a single integer pushed onto the stack before invoking OP_CHECKSIGEX and is used to group and evolve future versions of signature checking opcodes. -The existing OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY have a bug[[https://bitcoin.org/en/developer-guide#multisig|Developer Documentation - Multisig]] that pops one argument too many from the stack. This bug is not reproduced in the implementation of OP_CHECKSIGEX, so the canonical solution of pushing a dummy value onto the stack is not necessary. +When executed OP_CHECKSIGEX pops the version from the stack and then performs the signature check according to the specified version. If the verifying client does not support the specified version, i.e., the version was defined after the release of the client, the client must treat the OP_CHECKSIGEX as an OP_NOP. + +==== Version 1 ==== -SCRIPT_CHECKSIGEX_NORMALIZE indicates that before computing the signaturehash, i.e., the hash that is signed, the transaction should be normalized by replacing all transaction IDs in the inputs by their normalized variants. The normalized transction IDs are computed as described in the next section. This normalization step is performed both when creating the signatures as well as when checking the signatures. +The first version of OP_CHECKSIGEX (VERSION=1) implements normalized transaction IDs and uses Schnorr signatures instead of the current ECDSA signatures. -In order to make use of the normalization feature, this BIP introduces two new standard transaction types +Version 1 introduces the following new standard script format: - OP_DUP OP_HASH160 OP_EQUALVERIFY OP_4 OP_CHECKSIGEX + m {pubkey}...{pubkey} n v OP_CHECKSIGEX -and +with matching scriptSig format: - OP_6 OP_CHECKSIGEX + {signature}...{signature} + +This is the standard ''m-of-n'' script defined in [https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki BIP 11] with an additional version parameter v and the new opcode. Singlesig transactions are encoded as ''1-of-1'' transactions. + +The existing OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY have a bug[[https://bitcoin.org/en/developer-guide#multisig|Developer Documentation - Multisig]] that pops one argument too many from the stack. This bug is not reproduced in the implementation of OP_CHECKSIGEX, so the canonical solution of pushing a dummy value onto the stack is not necessary. -The first is the equivalent of the pay-to-pubkeyhash script with normalization (OP_4 = SCRIPT_CHECKSIGEX_NORMALIZE), while the second is the equivalent of the pay-to-multisig also with normalization (OP_6 = SCRIPT_CHECKSIGEX_NORMALIZE | SCRIPT_CHECKSIGEX_MULTI). The format of the scriptSig corresponds to the original version, with exception of omitting the dummy OP_0 in the multisig case. +The normalization is achieved by normalizing the transaction before computing the signaturehash, i.e., the hash that is signed. +The transaction must be normalized by replacing all transaction IDs in the inputs by their normalized variants and stripping the signature scripts. The normalized transction IDs are computed as described in the previous section. This normalization step is performed both when creating the signatures as well as when checking the signatures. === Tracking Normalized Transaction IDs === @@ -82,12 +67,13 @@ Outputs created by version 1 transactions are not annotated with the normalized == Rationale == +=== Normalization === Normalized transaction IDs are provably non-malleable since no data is included in the signaturehash whose integrity is not also proven in the signature, thus any modification causing the hash to change will also invalidate the signature. Normalized transactions are secure as they still use cryptographic hashes over all the semantic information of the transaction, i.e., the inputs, outputs and metadata, thus it is still computationally infeasible to cause a hash collision between transactions. There are a number of advantages to using normalized transaction IDs: -* Like BIP 62 and BIP 66 it solves the problem of third-parties picking transactions out of the network, modifying them and reinjecting them, as was allegedly done to defraud MtGox[[http://www.tik.ee.ethz.ch/file/7e4a7f3f2991784786037285f4876f5c/malleability.pdf|Bitcoin Transaction Malleability and MtGox]]. +* Like BIP 62 and BIP 66 it solves the problem of third-parties picking transactions out of the network, modifying them and reinjecting them. * ''m-of-n'' multisig outputs are often used in higher level protocols[[http://www.tik.ee.ethz.ch/file/716b955c130e6c703fac336ea17b1670/duplex-micropayment-channels.pdf|A Fast and Scalable Payment Network with Bitcoin Duplex Micropayment Channels ]][[http://lightning.network/lightning-network-paper.pdf|The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments]] in which several parties sign a transaction. Without normalized transaction IDs it is trivial for one party to re-sign a transaction, hence changing the transaction hash and invalidating any transaction built on top of its outputs. Normalized transaction IDs force the ID not to change, even if a party replaces its signature. * Many higher level protocols build structures of transactions on top of multisig outputs that are not completely signed. This is currently not possible without one party holding a fully signed transaction and then calculating the ID. It is desirable to be able to build successive transactions without one party collecting all signatures, and thus possibly lock in funds unilaterally. Normalized transaction IDs allow the use of transaction templates, i.e., completely unsigned transactions upon which further transactions can be built, and only once every party is assured the structure matches its expectations it signs the template, thus validating the template. @@ -96,14 +82,21 @@ The only occurence in which transactions can still be modified unilaterally is i In case of a transaction becoming invalid due to one of the inputs being malleated it is necessary to modify the spending transaction to reference the modified transaction ID. However, the signatures, which only use the normalized IDs, remain valid as long as the semantics of the funding transaction remain unchanged. An observer in the network may fix the transaction and reinject a corrected version. -Using version 2 for transactions is an explicit optin to the normalized ID tracking and a simple upgrade for existing clients. It avoids having to reprocess the entire blockchain and computing the normalized transaction IDs for existing outputs in the UTXO. This would be further complicated by having to recursively compute normalized transaction IDs down to the coinbase transactions which created the coins. - -The new opcode OP_CHECKSIGEX was introduced in order to allow the use of normalized transaction IDs as a softfork and in order to keep the number of OP_NOPs needed to a bare minimum. The additional argument containing the flags can be pushed on the stack using a single byte as long as only the least significant 4 bits are set (OP_1 - OP_16), resulting in one byte overhead for this script type. Furthermore it removes the bug requiring a dummy push in the multisig scenario, resulting in the same size in this scenario. +Using version 2 for transactions is an explicit opt-in to the normalized ID tracking and a simple upgrade for existing clients. It avoids having to reprocess the entire blockchain and computing the normalized transaction IDs for existing outputs in the UTXO. This would be further complicated by having to recursively compute normalized transaction IDs down to the coinbase transactions which created the coins. Tracking the normalized transaction IDs in the UTXO requires the storage of an additional hash per transaction whose outputs are not completely spent, which at 7,000,000 transactions with unspent outputs amounts to 224MB additional storage on disk. The coinbase transactions have been checked for hash-collisions and no collisions were found except for the coinbase transactions in blocks at heights 91842 and 91880, which are known to be identical[[https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki|BIP 30 - Duplicate transactions]], and motivated the introduction of BIP 34.[[https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki|Block v2, Height in Coinbase]] Since coinbase transactions are invalid if transmitted outside of a block it is not possible to modify them on the fly and since they only mature after being included for a long time in the blockchain they are considered safe. +=== OP_CHECKSIGEX === + +The new opcode OP_CHECKSIGEX was introduced in order to allow the use of normalized transaction IDs as a softfork and in order to keep the number of OP_NOPs needed to a bare minimum, while enabling future soft-fork updates to the signing algorithms. + +The additional argument containing the version can be pushed on the stack using a single byte up to version 16 (OP_1 - OP_16), resulting in one byte overhead for this script type. Using the standard multisig format also for 1-of-1 transactions add an additional 2 bytes, however it also removes the bug requiring a dummy push, resulting in a single byte overhead. +Furthermore, using Schnorr signatures instead of ECDSA brings a number of improvements that reduce the size of transactions (''m-of-m'' is the same size as ''1-of-1'') and increase verification speed (batch signature validation by summing up keys and signatures). The code is already in bitcoin/secp256k1 and can be merged in. We limited the description of this BIP to re-using BIP 11 style ''m-of-n'' scripts to keep it short, however Schnorr also allows a number of more complex applications which we defer to future BIPs. + +Version 0 was intentionally skipped in order to guarantee that the top-most element before OP_CHECKSIGEX is non-zero. This is necessary to guarantee that non-upgraded clients, which interpret OP_CHECKSIGEX as OP_NOP4, do not end up with a zero value on top of the stack after execution, which would be interpreted as script failure. + === Impact === This is a softfork which replaces OP_NOP4 with the new implementation of OP_CHECKSIGEX, as such the impact on the network is minimal. Wallets that do not implement this opcode will not be able to verify the validity of the scripts, however if transactions using OP_CHECKSIGEX are included in blocks they will accept them and track the inputs correctly. This is guaranteed since the transaction inputs still use the non-normalized transaction ID to reference the outputs to be claimed, hence non-upgraded wallets can still lookup the outputs and mark them as spent. Furthermore, clients that do not implement this BIP are unable to identify outputs using this script as their own, however upgrading and rescanning the blockchain will make them available. From 64fda4ea054314a188899cfc6aef25ddd1ad3676 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 17 Nov 2015 06:02:55 -0500 Subject: [PATCH 0011/2326] Added parameters for specification to BIP0009. --- bip-0009.mediawiki | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index b160810f06..8cd71aed30 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -19,6 +19,13 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule ==Specification== +Each soft fork deployment is specified by the following parameters (further elaborated below): + +# The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. +# The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. +# The '''deploytime''' specifies a time at which the bit starts counting towards lock-in. +# The '''timeout''' specifies a time at which the deployment is considered failed. If the median time of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. + ===Mechanism=== '''Bit flags''' From 421c88ca2ee105e042c7e5eadb8b0012ffe7196b Mon Sep 17 00:00:00 2001 From: XBTdev Date: Tue, 24 Nov 2015 00:54:04 -0800 Subject: [PATCH 0012/2326] add copay link to bip44 compatible wallets list add copay link to bip44 compatible wallets list --- bip-0044.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 847eb9ebc0..f9d12549f4 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -265,6 +265,7 @@ is required. This can be done [[https://github.com/satoshilabs/docs/blob/master/ * [[https://mytrezor.com|myTREZOR web wallet]] ([[https://github.com/trezor/webwallet|source]]) * [[https://play.google.com/store/apps/details?id=com.bonsai.wallet32|Wallet32 @ Android]] ([[https://github.com/ksedgwic/Wallet32|source]]) * [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]]) +* [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]]) * [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]]) ==Reference== From 7abd7509887e5d0420eb28bf7e02542bfc5c02fc Mon Sep 17 00:00:00 2001 From: Dionysis Zindros Date: Sat, 28 Nov 2015 04:27:46 +0200 Subject: [PATCH 0013/2326] Fix small typo in BIP 0016 --- bip-0016.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0016.mediawiki b/bip-0016.mediawiki index 0a539fc294..4c2a524ee7 100644 --- a/bip-0016.mediawiki +++ b/bip-0016.mediawiki @@ -98,7 +98,7 @@ If a majority of hashing power does not support the new validation rules, then r ===520-byte limitation on serialized script size=== -As a consequence of the requirement for backwards compatiblity the serialized script is itself subject to the same rules as any other PUSHDATA operation, including the rule that no data greater than 520 bytes may be pushed to the stack. Thus is it not possible to spend a P2SH output if the redemption script it refers to is >520 bytes in length. For instance while the OP_CHECKMULTISIG opcode can itself accept up to 20 pubkeys, with 33-byte compressed pubkeys it is only possible to spend a P2SH output requiring a maximum of 15 pubkeys to redeem: 3 bytes + 15 pubkeys * 34 bytes/pubkey = 513 bytes. +As a consequence of the requirement for backwards compatiblity the serialized script is itself subject to the same rules as any other PUSHDATA operation, including the rule that no data greater than 520 bytes may be pushed to the stack. Thus it is not possible to spend a P2SH output if the redemption script it refers to is >520 bytes in length. For instance while the OP_CHECKMULTISIG opcode can itself accept up to 20 pubkeys, with 33-byte compressed pubkeys it is only possible to spend a P2SH output requiring a maximum of 15 pubkeys to redeem: 3 bytes + 15 pubkeys * 34 bytes/pubkey = 513 bytes. ==Reference Implementation== From 94820a96b5cefc06c1bb05493a111c47faf778b9 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Sat, 28 Nov 2015 16:32:08 -0500 Subject: [PATCH 0014/2326] Removed deploytime parameter. --- bip-0009.mediawiki | 1 - 1 file changed, 1 deletion(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 8cd71aed30..98f3f9e627 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -23,7 +23,6 @@ Each soft fork deployment is specified by the following parameters (further elab # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. # The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. -# The '''deploytime''' specifies a time at which the bit starts counting towards lock-in. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. ===Mechanism=== From ac4cd1d46cf64b67f6d2d4376119a7d18728ce4b Mon Sep 17 00:00:00 2001 From: jl2012 Date: Tue, 1 Dec 2015 01:47:16 +0800 Subject: [PATCH 0015/2326] Corrections with the conditions for script failure --- bip-0112.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index c7ee45e8a8..643c617676 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -22,10 +22,11 @@ being spent. CHECKSEQUENCEVERIFY redefines the existing NOP3 opcode. When executed, if any of the following conditions are true, the script interpreter will terminate with an error: +* the stack is empty; or * the top item on the stack is less than 0; or * the top item on the stack has the disable flag (1 << 31) unset; and ** the transaction version is less than 2; or -** the transaction input sequence number disable flag (1 << 31) is set; and +** the transaction input sequence number disable flag (1 << 31) is set; or ** the relative lock-time type is not the same; or ** the top stack item is greater than the transaction sequence (when masked according to the BIP68); From bd5e1ead70eed7aa3cb9398be73e761e96b36678 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Mon, 30 Nov 2015 16:40:31 -0800 Subject: [PATCH 0016/2326] added txver2 --- bip-tx-ver2.mediawiki | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 bip-tx-ver2.mediawiki diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki new file mode 100644 index 0000000000..10517232b4 --- /dev/null +++ b/bip-tx-ver2.mediawiki @@ -0,0 +1,32 @@ +
+  BIP: 122
+  Title: Transaction Version 2 Specification (wildcard inputs)
+  Author: Chris Priest 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-11-30
+
+ +==Abstract== + +This specification defines a new type of transaction that supplements (not replaces) +version 1 transactions. + +==Motivation== + +Version 1 Bitcoin Transactions have one large inefficiency: When you want to spend +from multiple inputs with the exact same scriptPubKey, you have to list the same +signature multiple times. This bloats the transaction size and makes it expensive to spend +from small value inputs. + +Because small value inputs are expensive to send, they remain in the UTXO pool +which full nodes have to keep around. It is believed that long term increase of the UTXO +set can have negative scaling consequences on the network. + +==Specification== + +A version 2 transaction is formulated the exact same way as a version 1 transaction +with one exception: each input is treated as a "wildcard input". + +A wildcard input beings the value of all inputs with the exact same scriptPubKey +in a block lower or equal to the block the wildcard input is confirmed into. From 71dd5c44e831bf2c87633455291592ef2decae24 Mon Sep 17 00:00:00 2001 From: jl2012 Date: Wed, 2 Dec 2015 02:03:30 +0800 Subject: [PATCH 0017/2326] Full description of the behavior of the OP_CLTV --- bip-0065.mediawiki | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index b48fa759aa..a960e5431c 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -16,11 +16,17 @@ some point in the future. ==Summary== -CHECKLOCKTIMEVERIFY redefines the existing NOP2 opcode. When executed it -compares the top item on the stack to the nLockTime field of the transaction -containing the scriptSig. If that top stack item is greater than the transaction's -nLockTime field the script fails immediately, otherwise script evaluation continues -as though a NOP was executed. +CHECKLOCKTIMEVERIFY redefines the existing NOP2 opcode. When executed, if +any of the following conditions are true, the script interpreter will terminate +with an error: + +* the stake is empty; or +* the top item on the stack is less than 0; or +* the lock-time type (height vs. timestamp) of the top stake item and the nLockTime field are not the same; or +* the top stack item is greater than the transaction's nLockTime field; or +* the nLockTime feature is disabled by setting the nSequence field of the txin to 0xffffffff; + +Otherwise, script execution will continue as if a NOP had been executed. The nLockTime field in a transaction prevents the transaction from being mined until either a certain block height, or block time, has been reached. By From a5093f1c4ab36a396644e4a12b64c344a9b95998 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Tue, 1 Dec 2015 13:14:55 -0800 Subject: [PATCH 0018/2326] added more stuff --- bip-tx-ver2.mediawiki | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki index 10517232b4..71cfa692b7 100644 --- a/bip-tx-ver2.mediawiki +++ b/bip-tx-ver2.mediawiki @@ -15,18 +15,21 @@ version 1 transactions. ==Motivation== Version 1 Bitcoin Transactions have one large inefficiency: When you want to spend -from multiple inputs with the exact same scriptPubKey, you have to list the same -signature multiple times. This bloats the transaction size and makes it expensive to spend -from small value inputs. +from multiple inputs with the exact same scriptSig, you have to list each +input separately, along with the same signature multiple times. +This bloats the transaction size and makes it expensive to spend from small value inputs. Because small value inputs are expensive to send, they remain in the UTXO pool which full nodes have to keep around. It is believed that long term increase of the UTXO set can have negative scaling consequences on the network. +If maximum blocksize is made to increase *slower* than the actual number of transactins bitcoin users are sending +to the network, this problem is projected to get worse. + ==Specification== A version 2 transaction is formulated the exact same way as a version 1 transaction with one exception: each input is treated as a "wildcard input". -A wildcard input beings the value of all inputs with the exact same scriptPubKey +A wildcard input beings the value of all inputs with the exact same scriptSig in a block lower or equal to the block the wildcard input is confirmed into. From bec0d9e8f64d0194eccca8a38f7a7aba7af913f2 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Wed, 2 Dec 2015 14:44:26 -0800 Subject: [PATCH 0019/2326] added 'needed to implement' section --- bip-tx-ver2.mediawiki | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki index 71cfa692b7..1478922162 100644 --- a/bip-tx-ver2.mediawiki +++ b/bip-tx-ver2.mediawiki @@ -1,5 +1,5 @@
-  BIP: 122
+  BIP: (no number)
   Title: Transaction Version 2 Specification (wildcard inputs)
   Author: Chris Priest 
   Status: Draft
@@ -15,7 +15,7 @@ version 1 transactions.
 ==Motivation==
 
 Version 1 Bitcoin Transactions have one large inefficiency: When you want to spend
-from multiple inputs with the exact same scriptSig, you have to list each
+from multiple inputs with the exact same scriptPubKey, you have to list each
 input separately, along with the same signature multiple times.
 This bloats the transaction size and makes it expensive to spend from small value inputs.
 
@@ -23,13 +23,32 @@ Because small value inputs are expensive to send, they remain in the UTXO pool
 which full nodes have to keep around. It is believed that long term increase of the UTXO
 set can have negative scaling consequences on the network.
 
-If maximum blocksize is made to increase *slower* than the actual number of transactins bitcoin users are sending
-to the network, this problem is projected to get worse.
+If maximum blocksize is made to increase *slower* than the actual number of transactions bitcoin users are sending
+to the network, this problem is projected to get worse. In other words, as transaction
+fees increase, the minimum economical value of a spending a UTXO will increase.
 
 ==Specification==
 
 A version 2 transaction is formulated the exact same way as a version 1 transaction
 with one exception: each input is treated as a "wildcard input".
 
-A wildcard input beings the value of all inputs with the exact same scriptSig
+A wildcard input beings the value of all inputs with the exact same scriptPubKey
 in a block lower or equal to the block the wildcard input is confirmed into.
+
+== Changes needed to implement ==
+
+The bitcoin code needs to be modified in three places in order to handle Version 2 Transactions.
+
+1. **Full Node V2 validation** - When a full node receives a V2 transaction, it has to
+   aggregate the value of all the UTXOs in the blockchain older than the input
+   with the same scriptPubKey. If this value is greater than or equal to the
+   amount of all outputs, then that V2 transaction is valid and can be propagated.
+
+2. **Full Node V1 validation** - When a V1 transaction comes in, the code needs to be modified
+   to check if each inut has not been spent by a V2 transaction. If there exist any
+   V2 transaction in the blockchain with the same scriptPubKey *after* that input,
+   then the UTXO has been spent and the transaction is invalid.
+
+3. **Wallet** - The user facing wallet portion of the reference client should notify
+   the user when their wallet contains many UTXOs that qualify it to benefit from
+   a V2 transaction. Wallets should not simply replace V1 transactions with V2 transactions.

From 94c23ddffdc603d6c709749d013fd41764db3440 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Thu, 3 Dec 2015 17:24:29 -0800
Subject: [PATCH 0020/2326] Initial version of invoicerequest extension BIP

---
 bip-invoicerequest-extension.mediawiki | 167 +++++++++++++++++++++++++
 1 file changed, 167 insertions(+)
 create mode 100644 bip-invoicerequest-extension.mediawiki

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
new file mode 100644
index 0000000000..e10355d473
--- /dev/null
+++ b/bip-invoicerequest-extension.mediawiki
@@ -0,0 +1,167 @@
+
+  BIP:     XXX
+  Title:   Out of Band Address Exchange using Encrypted PaymentRequests
+  Authors: Matt David 
+           Justin Newton 
+           Aaron Voisine 
+  Status:  Draft
+  Type:    Informational
+  Created: 2015-11-20
+
+ +==Abstract== + +This BIP is an extension to BIP70 the extends the payment protocol to prevent PaymentRequet interception / modification +during transmission using ephemeral key encryption, allow permissioned release of PaymentRequests to PaymentRequest requestors +and, allow a requestor to supply a certificate and signature to the PaymentRequest creator. + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and +"OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +==Motivation== + +The motiviation for defining this extension to the BIP-70 Payment Protocol is to allow 2 parties to exchange payment +information in a permissioned and encrypted way such that wallet address communication can become a more automated process. +Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order +to facilitate identification for address release. + +==Definitions== +{| +| Requestor || Entity Requesting ReturnPaymentRequest +- +| Responder || Entity Creating and Returning ReturnPaymentRequest +- +| Sender || Entity wishes to transfer value that they control (NOTE: This can be used interchangeably with requestor) +- +| Receiver || Entity receiving a value transfer (NOTE: This can be used interchangeably with responder) +|} + +===Acronyms=== +{| +| Acronym || Expanded || Description +- +| IR || InvoiceRequest || A request to create a PaymentRequest +- +| RPR || ReturnPaymentRequest || A ReturnPaymentRequest returned based on a submitted InvoiceRequest +|} + +===New Messages=== + +====InvoiceRequest==== +The new InvoiceRequest message allows a requestor to send information to the responder such that they can return a ReturnPaymentRequest. + +
+message InvoiceRequest {
+        required bytes  sender_public_key = 1;              // Sender's EC Public Key
+        optional uint64 amount = 2 [default = 0];           // amount is integer-number-of-satoshis
+        optional string pki_type = 3 [default = "none"];    // none / x509+sha256
+        optional bytes  pki_data = 4;                       // Depends on pki_type
+        optional string notification_url = 5;               // URL to notify on ReturnPaymentRequest ready
+        optional bytes  signature = 6;                      // PKI-dependent signature
+}
+
+ +{| +| Field Name || Description +- +| sender_public_key || Sender's EC Public Key +- +| amount || amount is integer-number-of-satoshis (default: 0) +- +| pki_type || none / x509+sha256 (default: "none") +- +| pki_data || Depends on pki_type +- +| notification_url || URL to notify on ReturnPaymentRequest ready +- +| signature || PKI-dependent signature +|} + +====ReturnPaymentRequest==== + +The new ReturnPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest. + +
+ message ReturnPaymentRequest {
+         required bytes encrypted_payment_request = 1;
+         required bytes receiver_public_key = 2;
+         required bytes ephemeral_public_key = 3;
+         required bytes payment_request_hash = 4;
+ }
+
+{| +| Field Name || Description +- +| encrypted_payment_request || AES-256-CBC Encrypted PaymentRequest +- +| receiver_public_key || Receiver's EC Public Key (SECP256K1) +- +| ephemeral_public_key || Ephemeral EC Public Key Derived from ECDH Key Exchange where X value used as exponent for Private Key creation (SECP256K1) +- +| payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for validation) +|} + +==InvoiceRequest / ReturnPaymentRequest Process== + +# NOTE: The sender is the entity wishing to send value to the receiver. + +===Overview=== + +1. Sender creates InvoiceRequest message +2. Sender sends InvocieRequest to Receiver +3. Receiver validates InvoiceRequest +4. Receiver creates return PaymentRequest message +5. Receiver encrypts the PaymentRequest message +6. Receiver creates ReturnPaymentRequest +7. Receiver returns ReturnPaymentRequest message to Sender +8. Sender validates ReturnPaymentRequest +9. Sender decrypts and validates encrypted PaymentRequest + +===InvoiceRequest Message Creation=== + +* Create an InvoiceRequest message +* REQUIRED: Set sender_public_key. This is the public key of an EC keypair using secp256k1. +* Set amount if desired +* Set notification_url to URL that will accept ReturnPaymentRequest from Receiver +* If NOT including certificate, set pki_type to "none" +* If including certificate: +** Set pki_type to "x509+sha256" +** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) +** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key + +===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== + +* Generate EC secret point using [ECDH](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman) with the Sender's EC public key and the Receiver's EC private key. +* Generate Symmetric Encryption Key and Initialization vector using [HMAC_DRBG](http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf) also referenced in [RFC6979](https://tools.ietf.org/html/rfc6979) in the following way: +** HMAC_DRBG Initialization Entropy is set to the EC secret point's X value +** HMAC_DRBG Initialization Nonce is set to the InvoiceRequest's sender_public_key +** Encryption Key = HMAC_DRBG.GENERATE(32) - 256 bits +** IV = HMAC_DRBG.GENERATE(16) - 128 bits +* Encrypt the serialized PaymentRequest using AES-256-CBC using the Encryption Key and IV previously generated + +* Create ReturnPaymentRequest message +* Set encrypted_payment_request to be the encrypted value of the PaymentRequest +* Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) +* Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. +* Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) + + +===ReturnPaymentRequest Validation and Decryption=== + +* Generate EC secret point using [ECDH](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman) with the Sender's EC private key and the Receiver's EC public key. +* Generate Symmetric Decryption Key and Initialization vector using [HMAC_DRBG](http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf) also referenced in [RFC6979](https://tools.ietf.org/html/rfc6979) in the following way: +** HMAC_DRBG Initialization Entropy is set to the EC secret point's X value +** HMAC_DRBG Initialization Nonce is set to the InvoiceRequest's sender_public_key +** Encryption Key = HMAC_DRBG.GENERATE(32) - 256 bits +** IV = HMAC_DRBG.GENERATE(16) - 128 bits +* Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. +* Decrypt the serialized PaymentRequest using AES-256-CBC using the Encryption Key and IV previously generated +* Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest +* Deserialize the serialized PaymentRequest + +==Reference== + +* [[bip-0070.mediawiki|BIP70 - Payment Protocol]] +* [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] +* [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] +* [https://tools.ietf.org/html/rfc6979 RFC6979] \ No newline at end of file From 4e3b9a5b069e6b53a2fc1c397638bd8cb3647a04 Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 3 Dec 2015 17:30:04 -0800 Subject: [PATCH 0021/2326] Fix mediawiki table formatting --- bip-invoicerequest-extension.mediawiki | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index e10355d473..3a916b6ca6 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -26,7 +26,7 @@ Additionally, this extension allows for the requestor of a PaymentRequest to sup to facilitate identification for address release. ==Definitions== -{| +{| class="wikitable" | Requestor || Entity Requesting ReturnPaymentRequest - | Responder || Entity Creating and Returning ReturnPaymentRequest @@ -37,8 +37,8 @@ to facilitate identification for address release. |} ===Acronyms=== -{| -| Acronym || Expanded || Description +{| class="wikitable" +! Acronym !! Expanded !! Description - | IR || InvoiceRequest || A request to create a PaymentRequest - @@ -61,8 +61,8 @@ message InvoiceRequest { }
-{| -| Field Name || Description +{| class="wikitable" +! Field Name !! Description - | sender_public_key || Sender's EC Public Key - @@ -89,8 +89,8 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the required bytes payment_request_hash = 4; } -{| -| Field Name || Description +{| class="wikitable" +! Field Name !! Description - | encrypted_payment_request || AES-256-CBC Encrypted PaymentRequest - From d698201463bdc840db9db435e12e9ec45c21d475 Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 3 Dec 2015 17:31:09 -0800 Subject: [PATCH 0022/2326] Fix mediawiki table formatting --- bip-invoicerequest-extension.mediawiki | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 3a916b6ca6..d40a96c873 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -28,20 +28,20 @@ to facilitate identification for address release. ==Definitions== {| class="wikitable" | Requestor || Entity Requesting ReturnPaymentRequest -- +|- | Responder || Entity Creating and Returning ReturnPaymentRequest -- +|- | Sender || Entity wishes to transfer value that they control (NOTE: This can be used interchangeably with requestor) -- +|- | Receiver || Entity receiving a value transfer (NOTE: This can be used interchangeably with responder) |} ===Acronyms=== {| class="wikitable" ! Acronym !! Expanded !! Description -- +|- | IR || InvoiceRequest || A request to create a PaymentRequest -- +|- | RPR || ReturnPaymentRequest || A ReturnPaymentRequest returned based on a submitted InvoiceRequest |} @@ -65,15 +65,15 @@ message InvoiceRequest { ! Field Name !! Description - | sender_public_key || Sender's EC Public Key -- +|- | amount || amount is integer-number-of-satoshis (default: 0) -- +|- | pki_type || none / x509+sha256 (default: "none") -- +|- | pki_data || Depends on pki_type -- +|- | notification_url || URL to notify on ReturnPaymentRequest ready -- +|- | signature || PKI-dependent signature |} @@ -91,13 +91,13 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the {| class="wikitable" ! Field Name !! Description -- +|- | encrypted_payment_request || AES-256-CBC Encrypted PaymentRequest -- +|- | receiver_public_key || Receiver's EC Public Key (SECP256K1) -- +|- | ephemeral_public_key || Ephemeral EC Public Key Derived from ECDH Key Exchange where X value used as exponent for Private Key creation (SECP256K1) -- +|- | payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for validation) |} From a876e47bd10354a4fb1f2174f3563cb3a9c90a26 Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 3 Dec 2015 17:32:01 -0800 Subject: [PATCH 0023/2326] Fix mediawiki table formatting --- bip-invoicerequest-extension.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index d40a96c873..daca407592 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -63,7 +63,7 @@ message InvoiceRequest { {| class="wikitable" ! Field Name !! Description -- +|- | sender_public_key || Sender's EC Public Key |- | amount || amount is integer-number-of-satoshis (default: 0) From 6f0c335b184f7dce4ac2caee87553f3b8df26112 Mon Sep 17 00:00:00 2001 From: Andy Chase Date: Fri, 4 Dec 2015 02:48:43 -0800 Subject: [PATCH 0024/2326] BIP-0001 Should be labeled as "Process" Type Previously BIP-0001 listed in its header preamble that is was a "Standards Track" type proposal. This conflicts with both its own definition of "Standards Track" proposal as well as the type listed in PEP-0001 of which BIP-0001 is based on. Defitions of each type of proposal: A Standards Track BIP describes any change that affects most or all Bitcoin implementations. An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. A Process BIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Specifically: "Any meta-BIP is also considered a Process BIP." Based on these definitions BIP-0001 should have always been labeled as a "Process" BIP and this patch corrects this. --- README.mediawiki | 2 +- bip-0001.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 7fb4174410..b45c17a06d 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -16,7 +16,7 @@ Those proposing changes should consider that ultimately consent may rest with th | [[bip-0001.mediawiki|1]] | BIP Purpose and Guidelines | Amir Taaki -| Standard +| Process | Active |- | [[bip-0009.mediawiki|9]] diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 7af25cde84..faa80290f7 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -2,7 +2,7 @@ BIP: 1 Title: BIP Purpose and Guidelines Status: Active - Type: Standards Track + Type: Process Created: 2011-08-19 From 8dcddf5267417d928fa84831f497eb9074f8deaa Mon Sep 17 00:00:00 2001 From: T Dev D Date: Fri, 4 Dec 2015 15:27:39 +0000 Subject: [PATCH 0025/2326] Add link to BIP47 test vectors Results obtained upon implementing BIP47 for Samourai Wallet. Payment codes are calculated assuming v1 specification without use of BitMessage. Also assumes notification transaction from Alice to Bob has been sent. --- bip-0047.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index e460a12d81..4b68d5d52f 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -247,6 +247,10 @@ The sender transmits their payment code in base58 form to the calculated Bitmess In order to use Bitmessage notification, the recipient must have a Bitmessage client which listens at the address which the senders will derive and is capable of relaying received payment codes to the Bitcoin wallet. +==Test Vectors== + +* [[https://gist.github.com/SamouraiDev/6aad669604c5930864bd|BIP47 Reusable Payment Codes Test Vectors]] + ==Reference== * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] From 2c8bc2392b6034c5948f6bb9048136239d6bb120 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:10:01 -0800 Subject: [PATCH 0026/2326] Updated BIP based on colleague feedback - Removed Requestor/Responder definitions - Seperated ECDH secret point generation and AES-256 (CBC Mode) setup from individual steps (listed twice) and created it's own section - Added InvoiceRequest Validation section --- bip-invoicerequest-extension.mediawiki | 84 +++++++++++++------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index daca407592..90c417f457 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -27,13 +27,9 @@ to facilitate identification for address release. ==Definitions== {| class="wikitable" -| Requestor || Entity Requesting ReturnPaymentRequest +| Sender || Entity wishes to transfer value that they control |- -| Responder || Entity Creating and Returning ReturnPaymentRequest -|- -| Sender || Entity wishes to transfer value that they control (NOTE: This can be used interchangeably with requestor) -|- -| Receiver || Entity receiving a value transfer (NOTE: This can be used interchangeably with responder) +| Receiver || Entity receiving a value transfer |} ===Acronyms=== @@ -92,73 +88,79 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the {| class="wikitable" ! Field Name !! Description |- -| encrypted_payment_request || AES-256-CBC Encrypted PaymentRequest +| encrypted_payment_request || AES-256-CBC Encrypted Serialized PaymentRequest |- -| receiver_public_key || Receiver's EC Public Key (SECP256K1) +| receiver_public_key || Receiver's EC Public Key |- -| ephemeral_public_key || Ephemeral EC Public Key Derived from ECDH Key Exchange where X value used as exponent for Private Key creation (SECP256K1) +| ephemeral_public_key || Ephemeral EC Public Key |- -| payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for validation) +| payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest |} -==InvoiceRequest / ReturnPaymentRequest Process== - -# NOTE: The sender is the entity wishing to send value to the receiver. +==InvoiceRequest / ReturnPaymentRequest Process== ===Overview=== -1. Sender creates InvoiceRequest message -2. Sender sends InvocieRequest to Receiver -3. Receiver validates InvoiceRequest -4. Receiver creates return PaymentRequest message -5. Receiver encrypts the PaymentRequest message -6. Receiver creates ReturnPaymentRequest -7. Receiver returns ReturnPaymentRequest message to Sender -8. Sender validates ReturnPaymentRequest -9. Sender decrypts and validates encrypted PaymentRequest - +# Sender [[#ir-creation creates]] InvoiceRequest +# Sender transmits InvoiceRequest to Receiver +# Receiver [[#ir-validation validates]] InvoiceRequest +# Receiver creates PaymentRequest +# Receiver [[#rpr-creation-encryption encrypts]] the PaymentRequest +# Receiver [[#rpr-creation-encryption creates]] ReturnPaymentRequest (containing an encrypted PaymentRequest) +# Receiver transmits ReturnPaymentRequest to Sender +# Sender validates ReturnPaymentRequest +# Sender [[#rpr-validation-pr-decryption decrypts and validates]] encrypted PaymentRequest + + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message -* REQUIRED: Set sender_public_key. This is the public key of an EC keypair using secp256k1. +* sender_public_key MUST be set. This is the public key of an EC keypair using secp256k1. * Set amount if desired -* Set notification_url to URL that will accept ReturnPaymentRequest from Receiver +* Set notification_url to URL that Receiver will submit completed ReturnPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: ** Set pki_type to "x509+sha256" ** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) ** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key -===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== + +===InvoiceRequest Validation=== -* Generate EC secret point using [ECDH](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman) with the Sender's EC public key and the Receiver's EC private key. -* Generate Symmetric Encryption Key and Initialization vector using [HMAC_DRBG](http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf) also referenced in [RFC6979](https://tools.ietf.org/html/rfc6979) in the following way: -** HMAC_DRBG Initialization Entropy is set to the EC secret point's X value -** HMAC_DRBG Initialization Nonce is set to the InvoiceRequest's sender_public_key -** Encryption Key = HMAC_DRBG.GENERATE(32) - 256 bits -** IV = HMAC_DRBG.GENERATE(16) - 128 bits -* Encrypt the serialized PaymentRequest using AES-256-CBC using the Encryption Key and IV previously generated +* Validate sender_public_key is a valid EC public key +* Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). +* If pki_type is None, InvoiceRequest is VALID +* If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID + +===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== + +* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] * Create ReturnPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) * Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) - + ===ReturnPaymentRequest Validation and Decryption=== -* Generate EC secret point using [ECDH](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman) with the Sender's EC private key and the Receiver's EC public key. -* Generate Symmetric Decryption Key and Initialization vector using [HMAC_DRBG](http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf) also referenced in [RFC6979](https://tools.ietf.org/html/rfc6979) in the following way: -** HMAC_DRBG Initialization Entropy is set to the EC secret point's X value -** HMAC_DRBG Initialization Nonce is set to the InvoiceRequest's sender_public_key -** Encryption Key = HMAC_DRBG.GENERATE(32) - 256 bits -** IV = HMAC_DRBG.GENERATE(16) - 128 bits * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. -* Decrypt the serialized PaymentRequest using AES-256-CBC using the Encryption Key and IV previously generated +* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest + +===ECDH Point Generation and AES-256 (CBC Mode) Setup=== + +* Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. +* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] +** Use '''secret point's''' X value for Entropy +** Use Sender's public key for Nonce +* Initialize AES-256 in CBC Mode +** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) +** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) + ==Reference== * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] From 543409c7f7b9bef8179f9627204e26ef3e8f0f00 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:26:32 -0800 Subject: [PATCH 0027/2326] Fix local anchors and links --- bip-invoicerequest-extension.mediawiki | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 90c417f457..c82cacd3e9 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -101,17 +101,17 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ===Overview=== -# Sender [[#ir-creation creates]] InvoiceRequest +# Sender [[#ir-creation|creates]] InvoiceRequest # Sender transmits InvoiceRequest to Receiver -# Receiver [[#ir-validation validates]] InvoiceRequest +# Receiver [[#ir-validation|validates]] InvoiceRequest # Receiver creates PaymentRequest -# Receiver [[#rpr-creation-encryption encrypts]] the PaymentRequest -# Receiver [[#rpr-creation-encryption creates]] ReturnPaymentRequest (containing an encrypted PaymentRequest) +# Receiver [[#rpr-creation-encryption|encrypts]] the PaymentRequest +# Receiver [[#rpr-creation-encryption|creates]] ReturnPaymentRequest (containing an encrypted PaymentRequest) # Receiver transmits ReturnPaymentRequest to Sender # Sender validates ReturnPaymentRequest -# Sender [[#rpr-validation-pr-decryption decrypts and validates]] encrypted PaymentRequest +# Sender [[#rpr-validation-pr-decryption|decrypts and validates]] encrypted PaymentRequest - +{{anchor|ir-creation}} ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message @@ -124,7 +124,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) ** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key - +{{anchor|ir-validation}} ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key @@ -132,7 +132,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID - +{{anchor|rpr-creation-encryption}} ===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== * Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] @@ -142,7 +142,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) - +{{anchor|rpr-validation-pr-decryption}} ===ReturnPaymentRequest Validation and Decryption=== * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. @@ -150,7 +150,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest - +{{anchor|ECDH-AES-Setup}} ===ECDH Point Generation and AES-256 (CBC Mode) Setup=== * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. From 61cfbaefa7031a2534f152fac294c751c30f91f3 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:29:44 -0800 Subject: [PATCH 0028/2326] Remove anchor template and use spans for anchors instead --- bip-invoicerequest-extension.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index c82cacd3e9..b3fbcbe8ec 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -111,7 +111,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the # Sender validates ReturnPaymentRequest # Sender [[#rpr-validation-pr-decryption|decrypts and validates]] encrypted PaymentRequest -{{anchor|ir-creation}} + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message @@ -124,7 +124,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) ** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key -{{anchor|ir-validation}} + ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key @@ -132,7 +132,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID -{{anchor|rpr-creation-encryption}} + ===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== * Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] @@ -142,7 +142,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) -{{anchor|rpr-validation-pr-decryption}} + ===ReturnPaymentRequest Validation and Decryption=== * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. From 2d9b626d6cc3682c1bc3c6daee0dbd1ff3c79a0a Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:31:38 -0800 Subject: [PATCH 0029/2326] Test anchor --- bip-invoicerequest-extension.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index b3fbcbe8ec..bd82a6c520 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -101,7 +101,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ===Overview=== -# Sender [[#ir-creation|creates]] InvoiceRequest +# Sender [[#invoicerequest-message-creation|creates]] InvoiceRequest # Sender transmits InvoiceRequest to Receiver # Receiver [[#ir-validation|validates]] InvoiceRequest # Receiver creates PaymentRequest From c91ec76f41448982a5ab2fb74677e8306b985e14 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:33:06 -0800 Subject: [PATCH 0030/2326] Remove anchors --- bip-invoicerequest-extension.mediawiki | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index bd82a6c520..d11d5f8ebf 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -101,17 +101,16 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ===Overview=== -# Sender [[#invoicerequest-message-creation|creates]] InvoiceRequest +# Sender creates InvoiceRequest # Sender transmits InvoiceRequest to Receiver -# Receiver [[#ir-validation|validates]] InvoiceRequest +# Receiver validates InvoiceRequest # Receiver creates PaymentRequest -# Receiver [[#rpr-creation-encryption|encrypts]] the PaymentRequest -# Receiver [[#rpr-creation-encryption|creates]] ReturnPaymentRequest (containing an encrypted PaymentRequest) +# Receiver encrypts the PaymentRequest +# Receiver creates ReturnPaymentRequest (containing an encrypted PaymentRequest) # Receiver transmits ReturnPaymentRequest to Sender # Sender validates ReturnPaymentRequest -# Sender [[#rpr-validation-pr-decryption|decrypts and validates]] encrypted PaymentRequest +# Sender decrypts and validates encrypted PaymentRequest - ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message @@ -124,17 +123,13 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) ** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key - ===InvoiceRequest Validation=== - * Validate sender_public_key is a valid EC public key * Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID - ===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== - * Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] * Create ReturnPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest @@ -142,17 +137,13 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) - ===ReturnPaymentRequest Validation and Decryption=== - * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. * Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest -{{anchor|ECDH-AES-Setup}} ===ECDH Point Generation and AES-256 (CBC Mode) Setup=== - * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''secret point's''' X value for Entropy From 845f24069b46d0ef5a68f30ab695d9cd52cbf909 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 11:40:43 -0800 Subject: [PATCH 0031/2326] Fix last links --- bip-invoicerequest-extension.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index d11d5f8ebf..19cccba17f 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -120,7 +120,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * If NOT including certificate, set pki_type to "none" * If including certificate: ** Set pki_type to "x509+sha256" -** Set pki_data as it would be set in BIP-0070 (see [Certificates](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates) section) +** Set pki_data as it would be set in BIP-0070 (see [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) section) ** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key ===InvoiceRequest Validation=== @@ -130,7 +130,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID ===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== -* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] +* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup * Create ReturnPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) @@ -139,7 +139,7 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the ===ReturnPaymentRequest Validation and Decryption=== * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. -* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH-AES-Setup ECDH Point Generation and AES-256 (CBC Mode) Setup]] +* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest From e71e57216b355c414e1452deb0a752e318799c40 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 4 Dec 2015 13:26:50 -0800 Subject: [PATCH 0032/2326] - Fix section levels - Add Message Interaction Details + new mimetypes --- bip-invoicerequest-extension.mediawiki | 32 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 19cccba17f..ad750b1313 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -32,7 +32,7 @@ to facilitate identification for address release. | Receiver || Entity receiving a value transfer |} -===Acronyms=== +==Acronyms== {| class="wikitable" ! Acronym !! Expanded !! Description |- @@ -41,9 +41,9 @@ to facilitate identification for address release. | RPR || ReturnPaymentRequest || A ReturnPaymentRequest returned based on a submitted InvoiceRequest |} -===New Messages=== +==New Messages== -====InvoiceRequest==== +===InvoiceRequest=== The new InvoiceRequest message allows a requestor to send information to the responder such that they can return a ReturnPaymentRequest.
@@ -68,12 +68,12 @@ message InvoiceRequest {
 |-
 | pki_data              || Depends on pki_type
 |-
-| notification_url      || URL to notify on ReturnPaymentRequest ready
+| notification_url      || Secure (usually HTTPS) location where a ReturnPaymentRequest (see below) may be sent when ready
 |-
 | signature             || PKI-dependent signature
 |}
 
-====ReturnPaymentRequest====
+===ReturnPaymentRequest===
 
 The new ReturnPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest.
 
@@ -111,12 +111,28 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the
 # Sender validates ReturnPaymentRequest
 # Sender decrypts and validates encrypted PaymentRequest
 
+===Message Interaction Details===
+
+====InvoiceRequest====
+Sender must transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting InvoiceRequest 
+messages must set appropriate Content-Type headers as specified here:
+
Content-Type: application/bitcoin-invoicerequest
+ +====ReturnPaymentRequest==== +Receiver must transmit ReturnPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting +ReturnPaymentRequest messages must set appropritate Content-Type headers as specified here: +
Content-Type: application/bitcoin-returnpaymentrequest
+ +====Message or Communication Errors==== +An invalid or unparsable message or communications error must be communicated to the party that initiated the communication. This +should be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message -* sender_public_key MUST be set. This is the public key of an EC keypair using secp256k1. -* Set amount if desired -* Set notification_url to URL that Receiver will submit completed ReturnPaymentRequest to +* sender_public_key MUST be set to the public key of an EC keypair. +* Amount is optional +* Set notification_url to URL that the Receiver will submit completed ReturnPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: ** Set pki_type to "x509+sha256" From 3ff75f1ad20ecea54d2db998a9f3218d7baf311e Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 4 Dec 2015 14:32:24 -0800 Subject: [PATCH 0033/2326] added part about version field --- bip-tx-ver2.mediawiki | 46 ++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki index 1478922162..f0a6811699 100644 --- a/bip-tx-ver2.mediawiki +++ b/bip-tx-ver2.mediawiki @@ -1,6 +1,6 @@
   BIP: (no number)
-  Title: Transaction Version 2 Specification (wildcard inputs)
+  Title: "Coalescing Transaction" Specification (wildcard inputs)
   Author: Chris Priest 
   Status: Draft
   Type: Standards Track
@@ -10,13 +10,13 @@
 ==Abstract==
 
 This specification defines a new type of transaction that supplements (not replaces)
-version 1 transactions.
+normal "non coalescing" bitcoin transactions.
 
 ==Motivation==
 
-Version 1 Bitcoin Transactions have one large inefficiency: When you want to spend
+Normal "non-coalescing" Bitcoin Transactions have one large inefficiency: When you want to spend
 from multiple inputs with the exact same scriptPubKey, you have to list each
-input separately, along with the same signature multiple times.
+input separately, along with the same signature multiple times, even though the signature expresses the same information.
 This bloats the transaction size and makes it expensive to spend from small value inputs.
 
 Because small value inputs are expensive to send, they remain in the UTXO pool
@@ -29,7 +29,30 @@ fees increase, the minimum economical value of a spending a UTXO will increase.
 
 ==Specification==
 
-A version 2 transaction is formulated the exact same way as a version 1 transaction
+=== Redefinition of Transaction version ===
+
+First, this bips redefines the version field on transactions. The first four bytes
+are defined as the version number, while the last four bytes are defined as the
+transaction type. Type "0000" denotes normal transactions, and "0001" defines
+coalescing transaction.
+
+Examples:
+
+version 1 transaction with normal inputs:
+`version: 10000000`
+
+version 2 transaction with normal inputs:
+`version: 20000000`
+
+version 2 transaction with coalescing inputs:
+`version: 20000001`
+
+Essentially the last bit in the version field is set to 1 to enable wildcard inputs for all
+inputs present in the transaction.
+
+=== Wildcard inputs ====
+
+A coalescing transaction is formulated the exact same way as a version 1 transaction
 with one exception: each input is treated as a "wildcard input".
 
 A wildcard input beings the value of all inputs with the exact same scriptPubKey
@@ -39,16 +62,17 @@ in a block lower or equal to the block the wildcard input is confirmed into.
 
 The bitcoin code needs to be modified in three places in order to handle Version 2 Transactions.
 
-1. **Full Node V2 validation** - When a full node receives a V2 transaction, it has to
+1. **Full Node Coalescing validation** - When a full node receives a coalescing transaction, it has to
    aggregate the value of all the UTXOs in the blockchain older than the input
    with the same scriptPubKey. If this value is greater than or equal to the
-   amount of all outputs, then that V2 transaction is valid and can be propagated.
+   amount of all outputs, then that coalescing transaction is valid and can be propagated.
 
-2. **Full Node V1 validation** - When a V1 transaction comes in, the code needs to be modified
-   to check if each inut has not been spent by a V2 transaction. If there exist any
-   V2 transaction in the blockchain with the same scriptPubKey *after* that input,
+2. **Full Node Non-Coalescing validation** - When a non-coalescing transaction comes in, the code needs to be modified
+   to check if each input has not been spent by a coalescing transaction. If there exist any
+   coalescing transaction in the blockchain with the same scriptPubKey found in a block *after* that input,
    then the UTXO has been spent and the transaction is invalid.
 
 3. **Wallet** - The user facing wallet portion of the reference client should notify
    the user when their wallet contains many UTXOs that qualify it to benefit from
-   a V2 transaction. Wallets should not simply replace V1 transactions with V2 transactions.
+   a coalescing transaction. Wallets should not simply replace non-coalescing transactions
+   with coalescing transactions in all instances.

From 632bf072521efd394106ff6cb9a13e2210077611 Mon Sep 17 00:00:00 2001
From: Chris Priest 
Date: Fri, 4 Dec 2015 14:34:53 -0800
Subject: [PATCH 0034/2326] typo

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

diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki
index f0a6811699..101842d316 100644
--- a/bip-tx-ver2.mediawiki
+++ b/bip-tx-ver2.mediawiki
@@ -31,7 +31,7 @@ fees increase, the minimum economical value of a spending a UTXO will increase.
 
 === Redefinition of Transaction version ===
 
-First, this bips redefines the version field on transactions. The first four bytes
+First, this BIP redefines the version field on transactions. The first four bytes
 are defined as the version number, while the last four bytes are defined as the
 transaction type. Type "0000" denotes normal transactions, and "0001" defines
 coalescing transaction.

From d982c11f87bfd5fa97b8456c9f98d9c7909a9c00 Mon Sep 17 00:00:00 2001
From: Chris Priest 
Date: Fri, 4 Dec 2015 14:37:51 -0800
Subject: [PATCH 0035/2326] fixed formatting

---
 bip-tx-ver2.mediawiki | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki
index 101842d316..b033954736 100644
--- a/bip-tx-ver2.mediawiki
+++ b/bip-tx-ver2.mediawiki
@@ -63,16 +63,16 @@ in a block lower or equal to the block the wildcard input is confirmed into.
 The bitcoin code needs to be modified in three places in order to handle Version 2 Transactions.
 
 1. **Full Node Coalescing validation** - When a full node receives a coalescing transaction, it has to
-   aggregate the value of all the UTXOs in the blockchain older than the input
-   with the same scriptPubKey. If this value is greater than or equal to the
-   amount of all outputs, then that coalescing transaction is valid and can be propagated.
+aggregate the value of all the UTXOs in the blockchain older than the input
+with the same scriptPubKey. If this value is greater than or equal to the
+amount of all outputs, then that coalescing transaction is valid and can be propagated.
 
 2. **Full Node Non-Coalescing validation** - When a non-coalescing transaction comes in, the code needs to be modified
-   to check if each input has not been spent by a coalescing transaction. If there exist any
-   coalescing transaction in the blockchain with the same scriptPubKey found in a block *after* that input,
-   then the UTXO has been spent and the transaction is invalid.
+to check if each input has not been spent by a coalescing transaction. If there exist any
+coalescing transaction in the blockchain with the same scriptPubKey found in a block *after* that input,
+then the UTXO has been spent and the transaction is invalid.
 
 3. **Wallet** - The user facing wallet portion of the reference client should notify
-   the user when their wallet contains many UTXOs that qualify it to benefit from
-   a coalescing transaction. Wallets should not simply replace non-coalescing transactions
-   with coalescing transactions in all instances.
+the user when their wallet contains many UTXOs that qualify it to benefit from
+a coalescing transaction. Wallets should not simply replace non-coalescing transactions
+with coalescing transactions in all instances.

From e97833688dc31c747ff0c3a9105fece26fbfa6e9 Mon Sep 17 00:00:00 2001
From: Chris Priest 
Date: Fri, 4 Dec 2015 14:40:01 -0800
Subject: [PATCH 0036/2326] removed reference to version 2

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

diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki
index b033954736..f7b59429cc 100644
--- a/bip-tx-ver2.mediawiki
+++ b/bip-tx-ver2.mediawiki
@@ -60,7 +60,7 @@ in a block lower or equal to the block the wildcard input is confirmed into.
 
 == Changes needed to implement ==
 
-The bitcoin code needs to be modified in three places in order to handle Version 2 Transactions.
+The bitcoin code needs to be modified in three places in order to handle Coalescing Transactions.
 
 1. **Full Node Coalescing validation** - When a full node receives a coalescing transaction, it has to
 aggregate the value of all the UTXOs in the blockchain older than the input

From a07c8b62b30d501efcfee147bf1e69d4619b698d Mon Sep 17 00:00:00 2001
From: Chris Priest 
Date: Fri, 4 Dec 2015 14:40:38 -0800
Subject: [PATCH 0037/2326] formatting changes

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

diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki
index f7b59429cc..ca4cf90048 100644
--- a/bip-tx-ver2.mediawiki
+++ b/bip-tx-ver2.mediawiki
@@ -39,18 +39,18 @@ coalescing transaction.
 Examples:
 
 version 1 transaction with normal inputs:
-`version: 10000000`
+``version: 10000000``
 
 version 2 transaction with normal inputs:
-`version: 20000000`
+``version: 20000000``
 
 version 2 transaction with coalescing inputs:
-`version: 20000001`
+``version: 20000001``
 
 Essentially the last bit in the version field is set to 1 to enable wildcard inputs for all
 inputs present in the transaction.
 
-=== Wildcard inputs ====
+=== Wildcard inputs ===
 
 A coalescing transaction is formulated the exact same way as a version 1 transaction
 with one exception: each input is treated as a "wildcard input".

From f9d64e782b6ec5b8a8cfed4556791e7dbabf83d5 Mon Sep 17 00:00:00 2001
From: Chris Priest 
Date: Fri, 4 Dec 2015 14:41:46 -0800
Subject: [PATCH 0038/2326] formatting changes

---
 bip-tx-ver2.mediawiki | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/bip-tx-ver2.mediawiki b/bip-tx-ver2.mediawiki
index ca4cf90048..b4ca8e8134 100644
--- a/bip-tx-ver2.mediawiki
+++ b/bip-tx-ver2.mediawiki
@@ -39,13 +39,13 @@ coalescing transaction.
 Examples:
 
 version 1 transaction with normal inputs:
-``version: 10000000``
+    version: 10000000
 
 version 2 transaction with normal inputs:
-``version: 20000000``
+    version: 20000000
 
 version 2 transaction with coalescing inputs:
-``version: 20000001``
+    version: 20000001
 
 Essentially the last bit in the version field is set to 1 to enable wildcard inputs for all
 inputs present in the transaction.

From b2db2eba416113d723d7fe99deedfe6dcc4e2680 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Fri, 4 Dec 2015 15:16:32 -0800
Subject: [PATCH 0039/2326] - Add flow overview image - Make Abstract more
 readable - Update Sender definition and acronym descriptions - Added comments
 to ReturnPaymentRequest definition - Bold ECDH and AES Setup notes and added
 "(see below)" for reference

---
 bip-invoicerequest-extension.mediawiki |  36 ++++++++++++++-----------
 bip-ir/overview_flow.png               | Bin 0 -> 67368 bytes
 2 files changed, 20 insertions(+), 16 deletions(-)
 create mode 100644 bip-ir/overview_flow.png

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index ad750b1313..578b70bf10 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -11,9 +11,9 @@
 
 ==Abstract==
 
-This BIP is an extension to BIP70 the extends the payment protocol to prevent PaymentRequet interception / modification 
-during transmission using ephemeral key encryption, allow permissioned release of PaymentRequests to PaymentRequest requestors 
-and, allow a requestor to supply a certificate and signature to the PaymentRequest creator.
+This BIP is an extension to BIP70 that extends the payment protocol to prevent PaymentRequet interception / modification 
+during transmission using ephemeral key encryption. This also allows permissioned release of a PaymentRequest to a requestor 
+and allows a requestor to supply a certificate and signature to the PaymentRequest creator.
 
 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and 
 "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
@@ -27,7 +27,7 @@ to facilitate identification for address release.
 
 ==Definitions==
 {| class="wikitable"
-| Sender    || Entity wishes to transfer value that they control
+| Sender    || Entity wishing to transfer value that they control
 |-
 | Receiver  || Entity receiving a value transfer
 |}
@@ -36,15 +36,15 @@ to facilitate identification for address release.
 {| class="wikitable"
 ! Acronym !! Expanded !! Description
 |-
-| IR || InvoiceRequest || A request to create a PaymentRequest
+| IR || InvoiceRequest || A request to create and return an encrypted PaymentRequest
 |-
-| RPR || ReturnPaymentRequest  || A ReturnPaymentRequest returned based on a submitted InvoiceRequest
+| RPR || ReturnPaymentRequest  || A message returned based on a submitted InvoiceRequest containing an encrypted PaymentRequest
 |}
 
 ==New Messages==
 
 ===InvoiceRequest===
-The new InvoiceRequest message allows a requestor to send information to the responder such that they can return a ReturnPaymentRequest.
+The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a ReturnPaymentRequest.
 
 
 message InvoiceRequest {
@@ -75,15 +75,15 @@ message InvoiceRequest {
 
 ===ReturnPaymentRequest===
 
-The new ReturnPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest.
+The ReturnPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest.
 
 
- message ReturnPaymentRequest {
-         required bytes encrypted_payment_request = 1;
-         required bytes receiver_public_key = 2;
-         required bytes ephemeral_public_key = 3;
-         required bytes payment_request_hash = 4;
- }
+message ReturnPaymentRequest {
+        required bytes encrypted_payment_request = 1;      // Encrypted, Serialized PaymentRequest
+        required bytes receiver_public_key = 2;            // Receiver's EC Public Key
+        required bytes ephemeral_public_key = 3;           // Public Key of keypair created with ECDH-derived secret point
+        required bytes payment_request_hash = 4;           // SHA256 of Serialized PaymentRequest
+}
 
{| class="wikitable" ! Field Name !! Description @@ -111,6 +111,10 @@ The new ReturnPaymentRequest message is an encapsulating message that allows the # Sender validates ReturnPaymentRequest # Sender decrypts and validates encrypted PaymentRequest +This overview flow is illustrated below: + + + ===Message Interaction Details=== ====InvoiceRequest==== @@ -146,7 +150,7 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID ===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== -* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup +* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * Create ReturnPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) @@ -155,7 +159,7 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. ===ReturnPaymentRequest Validation and Decryption=== * Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. -* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup +* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest diff --git a/bip-ir/overview_flow.png b/bip-ir/overview_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..c90b8c4c0e24083bd23ee6728af6ffbb931d0b21 GIT binary patch literal 67368 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 literal 0 HcmV?d00001 From bdd7c9ff76405b265af1f1822736cc95b0a44228 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Fri, 4 Dec 2015 15:48:37 -0800 Subject: [PATCH 0040/2326] renamed file --- bip-tx-ver2.mediawiki => bip-coalesc-wildcard.mediawiki | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bip-tx-ver2.mediawiki => bip-coalesc-wildcard.mediawiki (100%) diff --git a/bip-tx-ver2.mediawiki b/bip-coalesc-wildcard.mediawiki similarity index 100% rename from bip-tx-ver2.mediawiki rename to bip-coalesc-wildcard.mediawiki From aa7cbf77a6f741ef7753ea86990baf4fc3d08b41 Mon Sep 17 00:00:00 2001 From: Peter Todd Date: Sat, 5 Dec 2015 17:57:04 +0800 Subject: [PATCH 0041/2326] Minor: fix capitalisation --- bip-0065.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index b48fa759aa..cd0b0ae59f 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -92,7 +92,7 @@ making transaction malleability a non-issue. ====Two-factor wallets==== -Services like GreenAddress store Bitcoins with 2-of-2 multisig scriptPubKey's +Services like GreenAddress store bitcoins with 2-of-2 multisig scriptPubKey's such that one keypair is controlled by the user, and the other keypair is controlled by the service. To spend funds the user uses locally installed wallet software that generates one of the required signatures, and then uses a From 0feb1209d0d224b9465532db55b9bf19b9b42e04 Mon Sep 17 00:00:00 2001 From: Peter Todd Date: Sat, 5 Dec 2015 17:57:43 +0800 Subject: [PATCH 0042/2326] Remove space in BIP66 Seems to be how people are writing BIP's these days. --- bip-0065.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index cd0b0ae59f..57b3d0256f 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -270,7 +270,7 @@ https://github.com/petertodd/bitcoin/commit/ab0f54f38e08ee1e50ff72f801680ee84d0f ==Deployment== We reuse the double-threshold IsSuperMajority() switchover mechanism used in -BIP 66 with the same thresholds, but for nVersion = 4. The new rules are +BIP66 with the same thresholds, but for nVersion = 4. The new rules are in effect for every block (at height H) with nVersion = 4 and at least 750 out of 1000 blocks preceding it (with heights H-1000..H-1) also have nVersion >= 4. Furthermore, when 950 out of the 1000 blocks From 7cd2a7bdbbb46e2803855f13e2e39ec20d4f96a1 Mon Sep 17 00:00:00 2001 From: Peter Todd Date: Sat, 5 Dec 2015 17:58:33 +0800 Subject: [PATCH 0043/2326] Fix missing case statement at beginning of specification Wasn't being displayed on github; adding an empty line prior to the spec seems to fix this. --- bip-0065.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index 57b3d0256f..f5144ebe74 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -195,6 +195,7 @@ transaction output ''can'' be spent. Refer to the reference implementation, reproduced below, for the precise semantics and detailed rationale for those semantics. + case OP_NOP2: { // CHECKLOCKTIMEVERIFY From 004be2e8225d582fa1bfd27f08b856996c981586 Mon Sep 17 00:00:00 2001 From: jl2012 Date: Sun, 6 Dec 2015 23:52:42 +0800 Subject: [PATCH 0044/2326] Update bip-0065.mediawiki --- bip-0065.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index a960e5431c..a90be6232e 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -20,9 +20,9 @@ CHECKLOCKTIMEVERIFY redefines the existing NOP2 opcode. When executed, if any of the following conditions are true, the script interpreter will terminate with an error: -* the stake is empty; or +* the stack is empty; or * the top item on the stack is less than 0; or -* the lock-time type (height vs. timestamp) of the top stake item and the nLockTime field are not the same; or +* the lock-time type (height vs. timestamp) of the top stack item and the nLockTime field are not the same; or * the top stack item is greater than the transaction's nLockTime field; or * the nLockTime feature is disabled by setting the nSequence field of the txin to 0xffffffff; From d14e2054771ffbeb89fa15d0b76556c0fcf00344 Mon Sep 17 00:00:00 2001 From: Aaron Voisine Date: Mon, 7 Dec 2015 09:42:25 -0800 Subject: [PATCH 0045/2326] use same email for voisine as in other BIPs --- bip-invoicerequest-extension.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 578b70bf10..6b80467eb2 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -3,7 +3,7 @@ Title: Out of Band Address Exchange using Encrypted PaymentRequests Authors: Matt David Justin Newton - Aaron Voisine + Aaron Voisine Status: Draft Type: Informational Created: 2015-11-20 @@ -177,4 +177,4 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] -* [https://tools.ietf.org/html/rfc6979 RFC6979] \ No newline at end of file +* [https://tools.ietf.org/html/rfc6979 RFC6979] From e994fa264a7a9a854b4450d3e84f03a7858598c6 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Mon, 7 Dec 2015 15:55:42 -0800 Subject: [PATCH 0046/2326] fixed bolding --- bip-coalesc-wildcard.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-coalesc-wildcard.mediawiki b/bip-coalesc-wildcard.mediawiki index b4ca8e8134..c729d069fc 100644 --- a/bip-coalesc-wildcard.mediawiki +++ b/bip-coalesc-wildcard.mediawiki @@ -62,17 +62,17 @@ in a block lower or equal to the block the wildcard input is confirmed into. The bitcoin code needs to be modified in three places in order to handle Coalescing Transactions. -1. **Full Node Coalescing validation** - When a full node receives a coalescing transaction, it has to +1. Full Node Coalescing validation - When a full node receives a coalescing transaction, it has to aggregate the value of all the UTXOs in the blockchain older than the input with the same scriptPubKey. If this value is greater than or equal to the amount of all outputs, then that coalescing transaction is valid and can be propagated. -2. **Full Node Non-Coalescing validation** - When a non-coalescing transaction comes in, the code needs to be modified +2. Full Node Non-Coalescing validation - When a non-coalescing transaction comes in, the code needs to be modified to check if each input has not been spent by a coalescing transaction. If there exist any coalescing transaction in the blockchain with the same scriptPubKey found in a block *after* that input, then the UTXO has been spent and the transaction is invalid. -3. **Wallet** - The user facing wallet portion of the reference client should notify +3. Wallet - The user facing wallet portion of the reference client should notify the user when their wallet contains many UTXOs that qualify it to benefit from a coalescing transaction. Wallets should not simply replace non-coalescing transactions with coalescing transactions in all instances. From abc7ae83a0ae3f31e83bf7933bcf26ed4f6b529d Mon Sep 17 00:00:00 2001 From: jl2012 Date: Wed, 9 Dec 2015 00:37:25 +0800 Subject: [PATCH 0047/2326] Update bip-0065.mediawiki the nLockTime feature may still be active as other inputs may not be final --- bip-0065.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index a90be6232e..84bad65718 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -24,7 +24,7 @@ with an error: * the top item on the stack is less than 0; or * the lock-time type (height vs. timestamp) of the top stack item and the nLockTime field are not the same; or * the top stack item is greater than the transaction's nLockTime field; or -* the nLockTime feature is disabled by setting the nSequence field of the txin to 0xffffffff; +* the nSequence field of the txin is 0xffffffff; Otherwise, script execution will continue as if a NOP had been executed. From 385e3d73437c0be164d74ff34fd19c7aede96343 Mon Sep 17 00:00:00 2001 From: Kristov Atlas Date: Wed, 9 Dec 2015 15:32:00 -0500 Subject: [PATCH 0048/2326] fix typo in block height of P2SH validation --- bip-0016.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0016.mediawiki b/bip-0016.mediawiki index 0a539fc294..18ef2f4081 100644 --- a/bip-0016.mediawiki +++ b/bip-0016.mediawiki @@ -37,7 +37,7 @@ The rules for validating these outpoints when relaying transactions or consideri # Normal validation is done: an initial stack is created from the signatures and {serialized script}, and the hash of the script is computed and validation fails immediately if it does not match the hash in the outpoint. # {serialized script} is popped off the initial stack, and the transaction is validated again using the popped stack and the deserialized script as the scriptPubKey. -These new rules should only be applied when validating transactions in blocks with timestamps >= 1333238400 (Apr 1 2012) [https://github.com/bitcoin/bitcoin/commit/8f188ece3c82c4cf5d52a3363e7643c23169c0ff Remove -bip16 and -paytoscripthashtime command-line arguments]. There are transaction earlier than 13333238400 in the block chain that fail these new validation rules. [http://blockexplorer.com/tx/6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192 Transaction 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192]. Older transactions must be validated under the old rules. (see the Backwards Compatibility section for details). +These new rules should only be applied when validating transactions in blocks with timestamps >= 1333238400 (Apr 1 2012) [https://github.com/bitcoin/bitcoin/commit/8f188ece3c82c4cf5d52a3363e7643c23169c0ff Remove -bip16 and -paytoscripthashtime command-line arguments]. There are transaction earlier than 1333238400 in the block chain that fail these new validation rules. [http://blockexplorer.com/tx/6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192 Transaction 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192]. Older transactions must be validated under the old rules. (see the Backwards Compatibility section for details). For example, the scriptPubKey and corresponding scriptSig for a one-signature-required transaction is: From 7239c330c77310865deea6ea0d45ca9dda68e411 Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Thu, 10 Dec 2015 20:01:35 +0000 Subject: [PATCH 0049/2326] BIP68 now assume MTP in all instances --- bip-0068.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 02bc2a4e91..58974ec3ac 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -30,7 +30,7 @@ If bit (1 << 31) of the sequence number is not set, then the sequence number is The sequence number encoding is interpreted as follows: -Bit (1 << 22) determines if the relative lock-time is time-based or block based: If the bit is set, the relative lock-time specifies a timespan in units of 512 seconds granularity. The timespan starts from the median-time-past (MTP) of the output’s previous block, and ends either at the MTP of the previous block or at the nTime of the transaction’s block (depending on the enforcement status of BIP113). If the bit is not set, the relative lock-time specifies a number of blocks. +Bit (1 << 22) determines if the relative lock-time is time-based or block based: If the bit is set, the relative lock-time specifies a timespan in units of 512 seconds granularity. The timespan starts from the median-time-past (MTP) of the output’s previous block, and ends either at the MTP of the previous block or at the nTime of the transaction’s block as defined by BIP113. If the bit is not set, the relative lock-time specifies a number of blocks. The flag (1<<22) is the highest order bit in a 3-byte signed integer for use in bitcoin scripts as a 3-byte PUSHDATA with OP_CHECKSEQUENCEVERIFY (BIP 112). @@ -43,7 +43,7 @@ For time based relative lock-time, 512 second granularity was chosen because bit When the relative lock-time is time-based, it is interpreted as a minimum block-time constraint over the input's age. A relative time-based lock-time of zero indicates an input which can be included in any block. More generally, a relative time-based lock-time n can be included into any block produced 512 * n seconds after the mining date of the output it is spending, or any block thereafter. The mining date of the output is equals to the median-time-past of the previous block which mined it. -The block produced time is either equals to median time past of its parent or to its nTime field, depending on the state of BIP113 median-time-past. +The block produced time is equal to the median-time-past of its parent according to BIP113. When the relative lock-time is block-based, it is interpreted as a minimum block-height constraint over the input's age. A relative block-based lock-time of zero indicates an input which can be included in any block. More generally, a relative block lock-time n can be included n blocks after the mining date of the output it is spending, or any block thereafter. From df9d34d5375751aa49f10f4e6abfe5a4a333e588 Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Thu, 10 Dec 2015 20:03:28 +0000 Subject: [PATCH 0050/2326] Update deployment specification BIP68 must be deployed with BIP113 because MTP calculations are used by this BIP. --- bip-0068.mediawiki | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 58974ec3ac..55905afcf7 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -24,13 +24,15 @@ The transaction nLockTime is used to prevent the mining of a transaction until a This specification defines the meaning of sequence numbers for transactions with an nVersion greater than or equal to 2 for which the rest of this specification relies on. +All references to median-time-past (MTP) are as defined by BIP113. + If bit (1 << 31) of the sequence number is set, then no consensus meaning is applied to the sequence number and can be included in any block under all currently possible circumstances. If bit (1 << 31) of the sequence number is not set, then the sequence number is interpreted as an encoded relative lock-time. The sequence number encoding is interpreted as follows: -Bit (1 << 22) determines if the relative lock-time is time-based or block based: If the bit is set, the relative lock-time specifies a timespan in units of 512 seconds granularity. The timespan starts from the median-time-past (MTP) of the output’s previous block, and ends either at the MTP of the previous block or at the nTime of the transaction’s block as defined by BIP113. If the bit is not set, the relative lock-time specifies a number of blocks. +Bit (1 << 22) determines if the relative lock-time is time-based or block based: If the bit is set, the relative lock-time specifies a timespan in units of 512 seconds granularity. The timespan starts from the median-time-past of the output’s previous block, and ends at the MTP of the previous block. If the bit is not set, the relative lock-time specifies a number of blocks. The flag (1<<22) is the highest order bit in a 3-byte signed integer for use in bitcoin scripts as a 3-byte PUSHDATA with OP_CHECKSEQUENCEVERIFY (BIP 112). @@ -43,7 +45,7 @@ For time based relative lock-time, 512 second granularity was chosen because bit When the relative lock-time is time-based, it is interpreted as a minimum block-time constraint over the input's age. A relative time-based lock-time of zero indicates an input which can be included in any block. More generally, a relative time-based lock-time n can be included into any block produced 512 * n seconds after the mining date of the output it is spending, or any block thereafter. The mining date of the output is equals to the median-time-past of the previous block which mined it. -The block produced time is equal to the median-time-past of its parent according to BIP113. +The block produced time is equal to the median-time-past of its previous block. When the relative lock-time is block-based, it is interpreted as a minimum block-height constraint over the input's age. A relative block-based lock-time of zero indicates an input which can be included in any block. More generally, a relative block lock-time n can be included n blocks after the mining date of the output it is spending, or any block thereafter. @@ -191,7 +193,7 @@ This BIP was edited by BtcDrak, Nicolas Dorier and kinoshitajona. This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). Exact details TDB. -It is recommended to deploy BIP112 and BIP113 at the same time as this BIP. +BIP68 MUST be deployed together with BIP113. It is also recommended to deploy BIP112 at the same time. ==Compatibility== From b57eea446cbd99088da1a9badc2fb85396982b9f Mon Sep 17 00:00:00 2001 From: "David A. Harding" Date: Fri, 4 Dec 2015 20:24:33 -0500 Subject: [PATCH 0051/2326] Add opt-in full-RBF signaling BIP --- README.mediawiki | 6 ++ bip-opt-in-rbf.mediawiki | 187 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 bip-opt-in-rbf.mediawiki diff --git a/README.mediawiki b/README.mediawiki index b45c17a06d..14d8a06cd5 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -379,6 +379,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Suhas Daftuar | Standard | Draft +|- +| [[bip-opt-in-rbf.mediawiki|FIXME]] +| Opt-in Full Replace-by-Fee Signaling +| David Harding, Peter Todd +| Standard +| Draft |} diff --git a/bip-opt-in-rbf.mediawiki b/bip-opt-in-rbf.mediawiki new file mode 100644 index 0000000000..5bd24729c8 --- /dev/null +++ b/bip-opt-in-rbf.mediawiki @@ -0,0 +1,187 @@ +
+  BIP: bip-harding-opt-in-replace-by-fee
+  Title: Opt-in Full Replace-by-Fee Signaling
+  Author: David A. Harding , Peter Todd 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-12-04
+
+ +==Abstract== + +Many nodes today will not replace any transaction in their mempool with +another transaction that spends the same inputs, making it difficult for +spenders to adjust their previously-sent transactions to deal with +unexpected confirmation delays or to perform other useful replacements. + +The opt-in full Replace-by-Fee (opt-in full-RBF) signaling policy +described here allows spenders to add a signal to a transaction indicating +that they want to be able to replace that transaction in the future. +In response to this signal, + +* Nodes may allow transactions containing this signal to be replaced in their mempools. + +* The recipient or recipients of a transaction containing this signal may choose not to treat it as payment until it has been confirmed, eliminating the risk that the spender will use allowed replacements to defraud them. + +Nodes and recipients may continue to treat transactions without the +signal the same way they treated them before, preserving the existing +status quo. + +==Summary== + +This policy specifies two ways a transaction can signal that it is +replaceable. + +* '''Explicit signaling:''' A transaction is considered to have opted in to allowing replacement of itself if any of its inputs have an nSequence number less than (0xffffffff - 1). + +* '''Inherited signaling:''' Transactions that don't explicitly signal replaceability are replaceable under this policy for as long as any one of their ancestors signals replaceability and remains unconfirmed. + +===Implementation Details=== + +The initial implementation expected in Bitcoin Core 0.12.0 uses the following rules: + +One or more transactions currently in the mempool (original +transactions) will be replaced by a new transaction (replacement +transaction) that spends one or more of the same inputs if, + +# The original transactions signal replaceability explicitly or through inheritance as described in the above Summary section. + +# The replacement transaction pays an absolute higher fee than the sum paid by the original transactions. + +# The replacement transaction does not contain any new unconfirmed inputs that did not previously appear in the mempool. (Unconfirmed inputs are inputs spending outputs from currently unconfirmed transactions.) + +# The replacement transaction must pay for its own bandwidth in addition to the amount paid by the original transactions at or above the rate set by the node's minimum relay fee setting. For example, if the minimum relay fee is 1 satoshi/byte and the replacement transaction is 500 bytes total, then the replacement must pay a fee at least 500 satoshis higher than the sum of the originals. + +# The number of original transactions to be replaced and their descendant transactions which will be evicted from the mempool must not exceed a total of 100 transactions. + +The initial implementation may be seen in +[https://github.com/bitcoin/bitcoin/pull/6871 Bitcoin Core PR#6871] +and specifically the master branch commits from +5891f870d68d90408aa5ce5b597fb574f2d2cbca to +16a2f93629f75d182871f288f0396afe6cdc8504 (inclusive). + +===Receiving wallet policy=== + +Wallets that display unconfirmed transactions to users or that provide +data about unconfirmed transactions to automated systems should consider +doing one of the following: + +# Conveying additional suspicion about opt-in full-RBF transactions to the user or data consumer. + +# Ignoring the opt-in transaction until it has been confirmed. + +Because descendant transactions may also be replaceable under this +policy through inherited signaling, any method used to process opt-in +full-RBF transactions should be inherited by any descendant transactions +for as long as any ancestor opt-in full-RBF transactions remain +unconfirmed. + +===Spending wallet policy=== + +Wallets that don't want to signal replaceability should use either a max +sequence number (0xffffffff) or a sequence number of (0xffffffff-1) when +then also want to use locktime; all known wallets currently do this. +They should also take care not to spend any unconfirmed transaction that +signals replaceability explicitly or through inherited signaling; most wallets also +currently do this by not spending any unconfirmed transactions except +for those they created themselves. + +Wallets that do want to make replacements should use explicit signaling +and meet the criteria described above in the Implementation Details +section. A +[https://en.bitcoin.it/wiki/Transaction_replacement Bitcoin Wiki page] +has been created to help wallet authors track deployed mempool policies +relating to transaction replacement. + +The initial implementation makes use of P2P protocol reject messages for +rejected replacements, allowing P2P clients to determine whether their +replacements were initially accepted by their peers. Standard P2P +lightweight client practice of sending to some peers while listening for +relays from other peers should allow clients to determine whether the +replacement has propagated. + +==Motivation== + +Satoshi Nakamoto's original Bitcoin implementation provided the +nSequence number field in each input to +[https://github.com/trottier/original-bitcoin/blob/master/src/main.cpp#L434 allow replacement] +of transactions containing that input within the +mempool. When receiving replacements, nodes were supposed to replace +transactions whose inputs had lower sequence numbers with transactions +that had higher sequence numbers. + +In that implementation, replacement transactions did not have to pay +additional fees, so there was no direct incentive for miners to +include the replacement and no built-in rate limiting that prevented +overuse of relay node bandwidth. Nakamoto +[https://github.com/bitcoin/bitcoin/commit/05454818dc7ed92f577a1a1ef6798049f17a52e7#diff-118fcbaaba162ba17933c7893247df3aR522 removed replacement] +from Bitcoin version 0.3.12, leaving only the +comment, "Disable replacement feature for now". + +Replacing transactions with higher-fee transactions provided a way for +spenders to align their desires with miners, but by the time a +Replace-by-Fee (RBF) patch was available to re-enable replacement, some +receivers had begun to expect that the first version of a transaction +they saw was highly likely to be the version of the transaction to be +confirmed, and so some users advocated that replacement should be +disallowed. + +To address those concerns, a variation on RBF was created that +required that the replacement transaction pay all of same outputs as +the original transaction in equal or greater amount. This was called +RBF First Seen Safe (RBF-FSS), and the original RBF became known as +full-RBF. Although agreeable to recipients who relied on the +first-seen version of a transaction, each use of RBF-FSS required +adding an extra input to a transaction, resulting in wallets being +unable to use it if they had no spare inputs, a loss of privacy when +inputs from different origins get used in the same transaction, and a +wasteful increase in transaction byte size. + +Opt-in full-RBF uses Nakamoto's original semantics (with a slight +tweak to allow locktime users to opt-out) to signal that replacement +is possible, providing first-seen users with the ability to ignore +those transactions while also allowing for the efficiency benefits +of full-RBF. + +There are no known problematic interactions between opt-in full-RBF and +other uses of nSequence. Specifically, opt-in full-RBF is compatible +with consensus-enforced locktime as provided in the Bitcoin 0.1 +implementation, draft BIP68 (Relative lock-time using consensus-enforced +sequence numbers), and draft BIP112 (CHECKSEQUENCEVERIFY). + +==Deployment== + +Now, and since Bitcoin's first release, 100% of the network hash rate +mines transactions using opt-in full-RBF semantics (sequence less than +(0xffffffff - 1)). + +Opt-in full-RBF as a default mempool replacement policy among nodes +and miners is expected to become widespread as they upgrade to Bitcoin +Core 0.12.0 (release expected Jan/Feb 2016) and similar node software +such as Bitcoin LJR. + +Actual replacement may be unreliable until two conditions have been satisfied: + +# Enough nodes have upgraded to support it, providing a relay path for replacements to go from spending wallets to miners controlling significant amounts of hash rate. + +# Enough hash rate has upgraded to support replacement, allowing for reasonable probability that a replacement can be mined. + +==Client support== + +No known wallet currently creates transactions by default with +nSequence set below (0xffffffff - 1), so no known existing wallet +explicitly signals replaceability by default. No known popular wallet +spends other users' unconfirmed transactions by default, so no known +existing wallets signals inherited replaceability. + +==See also== + +# [https://en.bitcoin.it/wiki/Transaction_replacement Transaction Replaceability on Bitcoin Wiki] targeted at helping wallet authors use RBF + +# Tools for creating opt-in full-RBF transactions: https://github.com/petertodd/replace-by-fee-tools#replace-by-fee-tools + +# [https://www.reddit.com/r/Bitcoin/comments/3urm8o/optin_rbf_is_misunderstood_ask_questions_about_it/ Reddit: Questions about opt-in RBF] targeted at helping community members understand opt-in full-RBF + +==Copyright== + +This document is placed in the public domain. From 097983d2563ea0a11ad3bc0add9946c8232e3e17 Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Thu, 17 Dec 2015 23:21:13 -0500 Subject: [PATCH 0052/2326] BIP 102: update to match implementation --- bip-0102.mediawiki | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/bip-0102.mediawiki b/bip-0102.mediawiki index b75f7984be..a84d8007de 100644 --- a/bip-0102.mediawiki +++ b/bip-0102.mediawiki @@ -13,28 +13,30 @@ Simple, one-time increase in total amount of transaction data permitted in a blo ==Motivation== -# Enable network growth. -# Continue current economic policy of low fee pressure on average. -# Exercise network upgrade procedure. +# Continue current economic policy. +# Exercise hard fork network upgrade. ==Specification== -# Maximum block size permitted to be valid is 1MB. -# Increase this maximum to 2MB as soon as 75% of the last 1,000 blocks have signaled support. +# MAX_BLOCK_SIZE increased to 2,000,000 bytes at trigger point. # Increase maximum block sigops by similar factor, preserving SIZE/50 formula. +# Each 10-minute segment thereafter increases MAX_BLOCK_SIZE by 20 bytes. +# Trigger: (1) Block time 00:00:00 on flag day, AND (2) 75% of the last 1,000 blocks have signaled support. ==Backward compatibility== -Older clients are not compatible with this change. The first block exceeding 1,000,000 bytes will partition older clients off the new network. +Fully validating older clients are not compatible with this change. +The first block exceeding 1,000,000 bytes will partition older clients +off the new network. ==Discussion== -In the short term, an increase is needed to continue to facilitate -network growth, and buy time for more comprehensive solutions to be -developed. This continues the current economic policies with regards to -fees, matching market expectations and preventing market disruption. +In the short term, an increase is needed to continue to current +economic policies with regards to fees and block space, matching +market expectations and preventing market disruption. -In the long term, continued direct management of this limit is a moral hazard that clouds free market input and prevents a healthy fee market from developing. This area of code should be transitioned away from direct management. +In the long term, this limit should focus on reflecting the maximum +network engineering limit. ==Implementation== From 32112987af3ba178661e3f1f1f2616ecab547f8f Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Fri, 18 Dec 2015 08:01:30 -0500 Subject: [PATCH 0053/2326] BIP 102: remove dynamic adjustment --- bip-0102.mediawiki | 1 - 1 file changed, 1 deletion(-) diff --git a/bip-0102.mediawiki b/bip-0102.mediawiki index a84d8007de..ea25979f22 100644 --- a/bip-0102.mediawiki +++ b/bip-0102.mediawiki @@ -20,7 +20,6 @@ Simple, one-time increase in total amount of transaction data permitted in a blo # MAX_BLOCK_SIZE increased to 2,000,000 bytes at trigger point. # Increase maximum block sigops by similar factor, preserving SIZE/50 formula. -# Each 10-minute segment thereafter increases MAX_BLOCK_SIZE by 20 bytes. # Trigger: (1) Block time 00:00:00 on flag day, AND (2) 75% of the last 1,000 blocks have signaled support. ==Backward compatibility== From 5cdae758f3941272962beb28897b2ae03189712e Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Fri, 18 Dec 2015 08:39:00 -0500 Subject: [PATCH 0054/2326] BIP 102: 95% update req --- bip-0102.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0102.mediawiki b/bip-0102.mediawiki index ea25979f22..fc909f75aa 100644 --- a/bip-0102.mediawiki +++ b/bip-0102.mediawiki @@ -20,7 +20,7 @@ Simple, one-time increase in total amount of transaction data permitted in a blo # MAX_BLOCK_SIZE increased to 2,000,000 bytes at trigger point. # Increase maximum block sigops by similar factor, preserving SIZE/50 formula. -# Trigger: (1) Block time 00:00:00 on flag day, AND (2) 75% of the last 1,000 blocks have signaled support. +# Trigger: (1) Block time 00:00:00 on flag day, AND (2) 95% of the last 1,000 blocks have signaled support. ==Backward compatibility== From 876af7fa87945870eaf4ec5bf4b4ec5a01f1f715 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 10:14:13 -0600 Subject: [PATCH 0055/2326] add missing change notification and minor corrections --- bip-0047.mediawiki | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index e460a12d81..31190403df 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,5 +1,7 @@ RECENT CHANGES: +* (12 Oct 2015) Revise blinding method for notification transactions + * (21 Sep 2015) Correct base58check version byte * (18 Sep 2015) Clarify decoding of notification transactions @@ -57,11 +59,15 @@ Hardened derivation is used at this level. Except where noted, all keys derived from a payment code use the public derivation method. +==Standard Payment Codes (v1)== + +===Representation=== + ====Binary Serialization==== A payment code contains the following elements: -* Byte 0: type. required value: 0x01 +* Byte 0: version. required value: 0x01 * Byte 1: features bit field. All bits must be zero except where specified elsewhere in this specification ** Bit 0: Bitmessage notification ** Bits 1-7: reserved @@ -233,7 +239,7 @@ A recipient prefers to receive notifications via Bitmessage indiates this prefer * Setting bit 0 of the features byte to 1 * Setting byte 67 of the serialized payment code to the desired Bitmessage address version -* Setting byte 67 of the serialized payment code to the desired Bitmessage stream number +* Setting byte 68 of the serialized payment code to the desired Bitmessage stream number The sender uses this information to construct a valid notification Bitmessage address: From 07ab320513843bf75b55def318d60ced47434548 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 10:47:44 -0600 Subject: [PATCH 0056/2326] clarify the various types of child keys derived from an identity --- bip-0047.mediawiki | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 31190403df..650c0959ef 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -31,9 +31,29 @@ Payment codes add identity information to transactions which is useful in a merc We define the following 3 levels in BIP32 path: -
+
 m / purpose' / coin_type' / identity'
-
+ + +The child keys derived from an identity are used in different ways: + + +m / purpose' / coin_type' / identity' / 0 + + +The 0th (non-hardened) child is the notification key. + + +m / purpose' / coin_type' / identity' / 0 through 2147483647 + + +These (non-hardened) keypairs are used for ECDH to generate deposit addresses. + + +m / purpose' / coin_type' / identity' / 0' through 2147483647' + + +These (hardened) keypairs are ephemeral payment codes. Apostrophe in the path indicates that BIP32 hardened derivation is used. From a6f4ae5b5d3a247b6a8f2a8baec7e5b8ed165051 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 10:28:27 -0600 Subject: [PATCH 0057/2326] clarify wallet recovery procedure --- bip-0047.mediawiki | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 650c0959ef..066878bbde 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -220,7 +220,9 @@ When querying a public blockchain explorer, wallets SHOULD connect to the explor Previously-spendable funds will generally not be lost or become inaccessible after a recovery from a seed, but all information regarding previous outgoing payments will be lost. -The metadata which a wallet must store regarding the state an identity consists of: +In order to recover received funds from a seed, the wallet must obtain every notification it has ever received to its notification address, including all spent transactions. It then re-establishes its lookahead window for each subchain by scanning every derived address sequentially until it locates a contiguous block of unused addresses of a user-specified length. + +The metadata which a wallet must store to properly process outgoing transactions consists of: # A list of every payment code to which the identity has sent a notification transaction. ## This list is lost if a wallet must be recovered from a seed. From 650fa601ad0fb7b928dbc7c34fb4abe3388e2e5d Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 10:37:43 -0600 Subject: [PATCH 0058/2326] enumerate the list of script forms which can convey a notification pubkey --- bip-0047.mediawiki | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 066878bbde..99b0be21f1 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -161,6 +161,17 @@ Bitcoins received via notification transactions require special handling in orde # Outputs received to notification addresses MAY be passed through a mixing service before being added to the user's spendable balance. # Outputs received to notification addresses MAY be donated to miners using dust-b-gone or an equivalent procedure. +=====Standard Notification Transaction Scripts===== + +Alice SHOULD use an input script in one of the following standard forms to expose a public key, and compliant applications SHOULD recognize all of these forms. + +* P2PK (pay to pubkey) +* P2PKH (pay to pubkey hash) +* Multisig (bare multisig, without P2SH) +* a script which spends any of the above script forms via P2SH (pay to script hash) + +Compatible wallets MAY provide a method for a user to manually specify the public key associated with a notification transaction in order to recover payment codes sent via non-standard notification transactions. + ====Sending==== # Each time Alice wants to initiate a transaction to Bob, Alice derives a unique P2PKH address for the transaction using ECDH follows: From 27848f7d6bfa1152c80fb16e8c235a38644e0680 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 13:40:54 -0600 Subject: [PATCH 0059/2326] Clarify the definition of identity and the relationship to BIP-44 --- bip-0047.mediawiki | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 99b0be21f1..50baaac6d1 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -71,9 +71,17 @@ Hardened derivation is used at this level. ===Identity=== -Identity is a particular extended public/private key pair. The extended public key is a payment code. +The identity derivation level produces an extended public key and its associated extended private key. -Identities SHOULD have 1:1 correspondence with a BIP44 account, as in each BIP44 account in an HD wallet should be assigned exactly one payment code which shares the same index value. +When the extended public key at this level is combined with the metadata specified in the Representation section below, the resulting entity is called a "payment code." + +This derivation level is equivalent to the Account level in BIP-44. Wallets SHOULD treat payment codes as intrinsically part of the BIP-44 account at the same index and create payment codes and accounts as pairs. + +For example, the payment code created represented by (m / 47' / 0' / 0') is part of the account represented by (m / 44' / 0' / 0'). + +The second account in a wallet consists of the new account/payment code pair created by using an index of 1 in as the account/identity level of both paths. + +Incoming payments received via this specification are equivalent to payments received to BIP-44 addresses, and unspent outputs from both types of addresses can be used as inputs in the same outgoing transaction. Hardened derivation is used at this level. @@ -111,7 +119,7 @@ It is assumed that Alice can easily obtain Bob's payment code via a suitable met ====Definitions==== -* Payment code: an extended public key which is associated with a particular identity +* Payment code: an extended public key and associated metadata which is associated with a particular identity/account * Notification address: the P2PKH address associated with the 0th public key derived from a payment code * Notification transaction: a transaction which sends an output to a notification address which includes an embedded payment code From 2f566884f488056c666bdd52805422517254401f Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 18 Dec 2015 13:48:13 -0600 Subject: [PATCH 0060/2326] update recent changes --- bip-0047.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 50baaac6d1..c3c5058603 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,11 +1,11 @@ RECENT CHANGES: +* (18 Dec 2015) Update explanations to resolve FAQs + * (12 Oct 2015) Revise blinding method for notification transactions * (21 Sep 2015) Correct base58check version byte -* (18 Sep 2015) Clarify decoding of notification transactions -
   BIP:     47
   Title:   Reusable Payment Codes for Hierarchical Deterministic Wallets

From 01201d6ce58d7df1d48034bb434a577cceb507fe Mon Sep 17 00:00:00 2001
From: MarcoPon 
Date: Sat, 19 Sep 2015 19:24:35 +0200
Subject: [PATCH 0061/2326] Created bip-MarcoPon-01.mediawiki URI scheme for
 Blockchain references / exploration

---
 README.mediawiki          |  6 ++++
 bip-MarcoPon-01.mediawiki | 67 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)
 create mode 100644 bip-MarcoPon-01.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index 925910c256..4d90c2398b 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -373,6 +373,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
+|-
+| [[bip-MarcoPon-01.mediawiki| xx]]
+| URI scheme for Blockchain references / exploration
+| Marco Pontello
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-MarcoPon-01.mediawiki b/bip-MarcoPon-01.mediawiki
new file mode 100644
index 0000000000..9c0fe4a23c
--- /dev/null
+++ b/bip-MarcoPon-01.mediawiki
@@ -0,0 +1,67 @@
+
+  BIP: MarcoPon-01
+  Title: URI scheme for Blockchain references / exploration
+  Author: Marco Pontello 
+  Status: Draft
+  Type: Standards Track
+  Created: 29 August 2015
+
+ +==Abstract== + +This BIP propose an URI scheme for looking up blocks, transactions, addresses on a Blockchain explorer, or in general to make proper Blockchain references + +==Motivation== + +The purpose of this URI scheme is to enable users to handle all the requests for details about blocks, transactions, etc. with their preferred tool (being that a web service or a local application). +Currently a Bitcoin client usually point to an arbitrary blockchain explorer when the user look for the details of a transaction (es. Bitcoin Wallet use BitEasy, Mycelium or Electrum use Blockchain.info, etc.). +Other times resorting to cut&paste is needed. +The same happens with posts and messages that reference some particular txs or blocks, if they provide links at all. + +==Specification== + +The URI follow this simple form: + + blockchain:[//chain] + +Where: + +;chain: +: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (see [http://https://github.com/jtimon/bitcoin/commit/3191d5e8e75687a27cf466b7a4c70bdc04809d39 Bitcoin src/chainparams.cpp]). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. + +;type: +: '''tx''': for transactions. +: '''block''': for blocks (supports both hash or height). +: '''address''': for addresses. + +;hash: +: the relevant hash (or height) to refer to. + +==Examples== + +A transaction on Bitcoin's mainnet: + blockchain:/tx/b462ae6eb8bdae2e060239a2a3ea5d9c3e0f9ef34d9717beb2dcf0ed42cee7da + +A block on Bitcoin's mainnet: + blockchain:/block/00000000000000000119af5bcae2926df54ae262e9071a94a99c913cc217cc72 +or + blockchain:/block/372338 + +An address on Bitcoin's mainnet: + blockchain:/address/16EW6Rv9P9AxFDBrZV816dD4sj1EAYUX3f + +A transaction on Bitcoin's testnet: + blockchain://000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943/tx/3b95a766d7a99b87188d6875c8484cb2b310b78459b7816d4dfc3f0f7e04281a + +==Rationale== + +From the point of view of a wallet developer (or other tool that need to show any kind of Blockchain references), using this scheme mean that he can simply make it a blockchain: link and be done with it, without having to worry about any specific Blockchain explorer or provide a means for the user to select one. + +Blockchain explorers in turn will simply offer to handle the blockchain: URI, the first time the user visit their website, or launch/install the application, or even set themselves if there isn't already one. + +Users get the convenience of using always their preferred explorer, which can be especially handy on mobile devices, where juggling with cut&paste is far from ideal. + +==Copyright== + +This document is placed in the public domain. + From e84e2d5c38910dce8cb5508eceee9a946b8b2bb6 Mon Sep 17 00:00:00 2001 From: Dionysis Zindros Date: Sun, 15 Nov 2015 13:50:43 +0200 Subject: [PATCH 0062/2326] Fix broken GitHub https URL --- bip-MarcoPon-01.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-MarcoPon-01.mediawiki b/bip-MarcoPon-01.mediawiki index 9c0fe4a23c..c919fe98bb 100644 --- a/bip-MarcoPon-01.mediawiki +++ b/bip-MarcoPon-01.mediawiki @@ -27,7 +27,7 @@ The URI follow this simple form: Where: ;chain: -: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (see [http://https://github.com/jtimon/bitcoin/commit/3191d5e8e75687a27cf466b7a4c70bdc04809d39 Bitcoin src/chainparams.cpp]). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. +: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (see [https://github.com/jtimon/bitcoin/commit/3191d5e8e75687a27cf466b7a4c70bdc04809d39 Bitcoin src/chainparams.cpp]). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. ;type: : '''tx''': for transactions. From 29b8eaef022d1e34d57f8cdcde08e72530f2082f Mon Sep 17 00:00:00 2001 From: MarcoPon Date: Mon, 16 Nov 2015 00:44:34 +0100 Subject: [PATCH 0063/2326] Some clarifications, typos --- bip-MarcoPon-01.mediawiki | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/bip-MarcoPon-01.mediawiki b/bip-MarcoPon-01.mediawiki index c919fe98bb..b8483c2260 100644 --- a/bip-MarcoPon-01.mediawiki +++ b/bip-MarcoPon-01.mediawiki @@ -14,7 +14,7 @@ This BIP propose an URI scheme for looking up blocks, transactions, addresses on ==Motivation== The purpose of this URI scheme is to enable users to handle all the requests for details about blocks, transactions, etc. with their preferred tool (being that a web service or a local application). -Currently a Bitcoin client usually point to an arbitrary blockchain explorer when the user look for the details of a transaction (es. Bitcoin Wallet use BitEasy, Mycelium or Electrum use Blockchain.info, etc.). +Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction (es. Bitcoin Wallet uses BitEasy, Mycelium or Electrum uses Blockchain.info, etc.). Other times resorting to cut&paste is needed. The same happens with posts and messages that reference some particular txs or blocks, if they provide links at all. @@ -27,7 +27,15 @@ The URI follow this simple form: Where: ;chain: -: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (see [https://github.com/jtimon/bitcoin/commit/3191d5e8e75687a27cf466b7a4c70bdc04809d39 Bitcoin src/chainparams.cpp]). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. +: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (leading zeros included). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. If omitted (which would be the usual case), Bitcoin's mainnet is assumed. As a reference, see for example this code fragment from Bitcoin chainparams.cpp source: + const std::map CChainParams::supportedChains = + boost::assign::map_list_of + ( "main", uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")) + ( "test", uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")) + ( "regtest", uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")) + ; + + ;type: : '''tx''': for transactions. @@ -35,7 +43,7 @@ Where: : '''address''': for addresses. ;hash: -: the relevant hash (or height) to refer to. +: the relevant hash to refer to (leading zeros included), or block height. ==Examples== @@ -55,12 +63,17 @@ A transaction on Bitcoin's testnet: ==Rationale== -From the point of view of a wallet developer (or other tool that need to show any kind of Blockchain references), using this scheme mean that he can simply make it a blockchain: link and be done with it, without having to worry about any specific Blockchain explorer or provide a means for the user to select one. +From the point of view of a wallet (or other Blockchain related tool) developer that need to show any kind of Blockchain references, using this scheme mean that he can simply make it a blockchain: link and be done with it, without having to worry about any specific Blockchain explorer or provide a means for the user to select one. Blockchain explorers in turn will simply offer to handle the blockchain: URI, the first time the user visit their website, or launch/install the application, or even set themselves if there isn't already one. Users get the convenience of using always their preferred explorer, which can be especially handy on mobile devices, where juggling with cut&paste is far from ideal. +==Acknowledgements== +Thanks to Btc Drak for suggesting to provide support for different networks. +Thanks to Jorge Timon for the idea of using genesis blocks hashes to identify them. +Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for suggestions about the structure and hierarchy of the URI scheme. + ==Copyright== This document is placed in the public domain. From 7bce321a18dac4a1be114eeb03fa71da9c1469ed Mon Sep 17 00:00:00 2001 From: jl2012 Date: Sat, 19 Dec 2015 03:52:06 +0800 Subject: [PATCH 0064/2326] Create bip-segwit.mediawiki --- bip-codeshark-jl2012-segwit.mediawiki | 277 ++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 bip-codeshark-jl2012-segwit.mediawiki diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki new file mode 100644 index 0000000000..1fc711d8e6 --- /dev/null +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -0,0 +1,277 @@ +
+  BIP: x
+  Title: Segregated Witness (Consensus layer)
+  Author: 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-12
+
+ +==Abstract== + +This BIP defines a new structure called a "witness" that is committed to blocks separately from the transaction merkle tree. This structure contains data required to check transaction validity but not required to determine transaction effects. In particular, scripts and signatures are moved into this new structure. + +The witness is committed in a tree that is nested into the block's existing merkle root via the coinbase transaction for the purpose of making this BIP soft fork compatible. A future hard fork can place this tree in its own branch. + +==Motivation== + +The entirety of the transaction's effects are determined by output consumption (spends) and new output creation. Other transaction data, and signatures in particular, are only required to validate the blockchain state, not to determine it. + +By removing this data from the transaction structure committed to the transaction merkle tree, several problems are fixed: + +# '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was authorized is no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach (BIP62): +#* It prevents involuntary transaction malleability for any type of scripts, as long as all inputs are signed (with at least one CHECKSIG or MULTICHECKSIG operation) +#* In the case of a n-of-m MULTICHECKSIG script, a transaction is malleable only with agreement of n private key holders (as opposed to only 1 private key holder with BIP62) +#* It prevents involuntary transaction malleability due to unknown ECDSA signature malleability +#* It allows creation of unconfirmed transaction dependency chains without counterparty risk +# '''Transmission of signature data becomes optional'''. It is needed only if a peer is trying to validate a transaction, instead of just to prove its existence. This also improves prviacy of SPV clients as using the same bandwidth they could request for more transactions for obscuration. +# '''Some constriants could be bypassed with a soft fork''' by moving part of the transaction data to a structure unknown to current protocol, for example: +#* Size of witness could be ignored / discounted when calculating the block size, effectively increasing the block size to some extent +#* Hard coded constants, such as maximum data push size (520 bytes) or sigops limit could be reevaluated or removed +#* New script system could be introduced without any limitation from the existing script semantic + +==Specification== + +Maybe a seperate BIP +
+* CTransaction gets, in addition to vin and vout, a vwit, which
+contains a CTxInWitness object for each input. A CTxInWitness contains a CScriptWitness object
+and can potentially be extended to contain other kinds of witness data.
+A CScriptWitness is a vector of byte vectors (nominally: the input stack to the program, no longer
+encoded as a CScript, but just the resulting stack directly).
+
+* A new serialization for CTransaction is defined: http://blockhawk.net/diagrams/witnesstx.png
+(int32 nVersion,
+0x00 marker, 0x01 flag, vector, vector,
+vector, int32 nLockTime) instead of (int32 nVersion,
+vector, vector, int32 nLockTime). This will never parse
+as a valid transaction (even if parsing succeeds, it means it's
+interpreted as a transaction with no inputs and 1 output). If all
+witnesses are empty, the old serialization format is used.
+- Rationale for not having an independent CWitnessTransaction with
+its own serialization: this would require separate "tx" and "block"
+messages, and all RPC calls operating on raw transactions would need
+to be duplicated, or need inefficinent or nondeterministic guesswork
+to know which type is to be used.
+- Rationale for not using just a single 0x00 byte as marker: that
+would lead to empty transactions (no inputs, no outputs, which are
+used in some tests) to be interpreted as new serialized data.
+- Rationale for the 0x01 flag byte in between: this will allow us to
+easily add more extra non-committed data to transactions (like txouts
+being spent, ...). It can be interpreted as a bitvector.
+
+* A new message 'havewitness' is sent after receiving 'verack' to
+indicate that a node can provide witness if requested (similar to
+'sendheaders')
+
+* New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
+for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK,
+similar to MSG_FILTERED_BLOCK.
+- Rationale for not advertizing witnessness in invs: we don't always
+use invs anymore (with 'sendheaders' BIP 130), plus it's not useful:
+implicitly, every transaction and block have a witness, old ones just
+have empty ones.
+
+* Transactions' GetHash is always computed on the old non-witness
+serialization. A new CTransaction::GetWitnessHash is added which is
+computed from the witness-serialization (this means that transactions
+with an empty witness have witness hash equal to normal hash).
+
+ +=== Commitment structure === + +UPDATE NEEDED +A new block rule is added which requires a commitment (a merkle root +computed similarly to the normal transaction one) to the witness +hashes to be present as the last 32 bytes of +block.vtx[0].vin[0].scriptSig (it doesn't need to be a push). This +hopefully does not conflict with any other existing commitment +schemes. To make it extensible, an extra merkle path can be provided +(in the coinbase's "witness" field) so that coinbase commitment can be +used for multiple things. +
+    // Validation for witness commitments.
+    // * We compute the witness hash (which is the hash including witnesses) of all the block's transactions, except the
+    //   coinbase (where 0x0000....0000 is used instead).
+    // * We build a merkle tree with all those witness hashes as leaves (similar to the hashMerkleRoot in the block header).
+    // * The first coinbase scriptSig minimal push of 41 bytes for which the first 4 bytes are {0xaa, 0x21, 0xa9, 0xed} is
+    //   treated as a commitment header. If no such push is present, the block is invalid. If multiple are present, the first
+    //   is used.
+    //   * The first 4 bytes of the commitment header are just magic identifier bytes, and have no further meaning.
+    //   * The next 4 bytes describe a nonce.
+    //   * The next 1 byte describes the number of levels in a Merkle tree.
+    //   * locator = SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce). The first levels bits of locator, interpreted
+    //     in little endian, are assumed to be the position in the leaves of this Merkle tree where the witness commitment
+    //     goes.
+    //   * The last 32 bytes of the commitment header are its root hash.
+    //   * The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be
+    //     the Merkle path to connect the witness root hash to the commitment root hash.
+    
+    // No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam.
+
+ +=== Block size limit === +2-4-8? Discount for witness data? + +=== Witness program === + +* A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a single push of 2 to 41 bytes gets a new special meaning. The byte vector pushed by it is called the "witness program". +** In case the scriptPubKey pushes a witness program directly, the scriptSig must be exactly empty. +** In case the redeemScript pushes a witness program, the scriptSig must be exactly the single push of the redeemScript. + +* The first byte of a witness program is the "version byte", an unsigned integer. +** If the version byte is 0, the rest of the witness program is the actual script. +*** The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. +*** The program must not fail, and result in exactly a single TRUE on the stack. +** If the version byte is 1, the rest of the witness program must be 32 bytes, as a SHA256 hash of the actual script. +*** The witness must consist of an input stack to feed to the program, followed by the serialized program. +*** The serialized program is popped off the initial witness stack. Hash of the serialized program must match the hash pushed in the witness program. +*** The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. +*** The script must not fail, and result in exactly a single TRUE on the stack. +** If the witness version byte is 2 or above, no further interpretation of the witness program or witness happens. + +=== Other consensus critical constraints === + +== Block size analysis == +Definitions: +
+ Core block size (CBS): The block size as seen by a non-upgrading full node
+ Witness size (WS): The total size of witness in a block
+ Total block size (TBS): CBS + WS
+ Witness discount (WD): A discount factor for witness for calculationg of VBS (1 = no discount)
+ Virtual block size (VBS): CBS + (WS * WD)
+ Witness adoption (WA): Proportion of new format transactions among all transactions
+ Prunable ratio (PR): Proportion of signature data size in a transaction
+
+ +With some transformation it could be shown that: +
+ TBS = CBS / (1 - WA * PR)
+     = VBS / (1 - WA * PR * (1 - WD))
+
+ +In order to keep the proposal as a soft fork, the CBS must not have a upper limit higher than 1MB. + +TBS is a function of only CBS, PR, and WA. + +The PR heavily depends on the transaction script type and input-output ratio. For example, the PR of 1-in 2-out P2PKH and 1-in 1-out 2-of-2 multisig P2SH are about 47% and 72% respectively. According to the data presented by Pieter Wuille on 7 December 2015, the current average PR on the blockchain is about 60%. + + + +== Examples == + +=== Version 0 witness program === + +The following example is a version 0 witness program, equivalent to the existing Pay-to-Pubkey-Hash (P2PKH) output. + + witness: + scriptSig: (empty) + scriptPubKey: <0x0076A914{20-byte-hash-value}88AC> + +The version byte 0x00 is removed. The rest of the witness program is deserialized and becomes: + + DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + +The script is executed with the data from witness + + DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + +Comparing with a P2PKH output, the witness program equivalent occupies 2 more bytes in the scriptPubKey, while moving the signature and public key from scriptSig to witness. + +=== Version 1 witness program === + +The following example is an 1-of-2 multi-signature version 1 witness program. + + witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> + scriptSig: (empty) + scriptPubKey: <0x01{32-byte-hash-value}> + +The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: + + 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + +The script is executed with the remaining data from witness: + + 0 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + +Since the actual program is larger than 40 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. + +The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 2^80 work is not infeasible anymore (By the end of 2015, 2^84 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. + +=== Witness program nested in Pay-to-Script-Hash === + +The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. + + witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> + scriptSig: <0x2101{32-byte-hash-value}> + scriptPubKey: HASH160 <20-byte-hash-value> EQUAL + +The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as a single push of: + + <0x01{32-byte-hash-value}> + +The version 1 witness program is then executed as described in the last example + +Comparing with the last example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. + +=== Trust-free unconfirmed transaction dependency chain === +Segregated witness fixes the problem of transaction malleability fundamentally, which enables the building of unconfirmed transaction dependency chains in a trust-free manner. + +Two parties, Alice and Bob, may agree to send certain amount of Bitcoin to a 2-of-2 multisig output (the "funding transaction"). Without signing the funding transaction, they may create another transaction, time-locked in the future, spending the 2-of-2 multisig output to third account(s) (the "spending transaction"). Alice and Bob will sign the spending transaction and exchange the signatures. After examining the signatures, they will sign and commit the funding transaction to the blockchain. Without further action, the spending transaction will be confirmed after the lock-time and release the funding according to the original contract. It also retains the flexibility of revoking the original contract before the lock-time, by another spending transaction with shorter lock-time, but only with mutual-agreement of both parties. + +Such setups is not possible with BIP62 as the malleability fix, since the spending transaction could not be created without both parties first signing the funding transaction. If Alice reveals the funding transaction signature before Bob does, Bob is able to lock up the funding indefinitely without ever signing the spending transaction. + +Unconfirmed transaction dependency chain is a fundamental building block of more sophisticated payment networks, such as duplex micropayment channel and the Lightning Network, which have the potential to greatly improve the scalability and efficiency of the Bitcoin system. + +== Future extensions == +=== Compact fraud proof for SPV nodes === +Bitcoin right now only has two real security models. A user either runs a full-node which validates every block with all rules in the system, or a SPV (Simple Payment Verification) client which only validates the headers as a proof of publication of some transactions. The Bitcoin whitepaper suggested that SPV nodes may accept alerts from full nodes when they detect an invalid block, prompting the SPV node to download the questioned blocks and transactions for validation. This approach, however, could become a DoS attack vector as there is virtually no cost to generate a false alarm. An alarm must come with a compact, yet deterministic fraud proof. + +In the current Bitcoin protocol, it is possible to generate compact fraud proof for almost all rules except a few: + +# It is not possible to proof a miner has introduced too many Bitcoins in the coinbase transaction outputs without showing the whole block itself and all input transactions. +# It is not possible to prove the violation of any block specific constraints, such as size and sigop limits, without showing the whole block (and all input transactions in the case of sigop limit) +# It is not possible to prove the spending of a non-existing input without showing all transaction IDs in the blockchain way back to the genesis block. + +It is possible to proof the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to proof the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. + +=== New script system === +Since all witness programs begin with a version byte, 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. + +The 41-byte limitation for witness programme could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable by introducing a secondary version byte for some specific primary version values. + +== Backward compatibility == +Without lifting the core block size limit of 1MB at the beginning, this proposal is a soft fork which all existing full nodes and SPV nodes are compatible. Non-upgrading nodes, however, will not see nor validate the witness data, and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Non-upgrading nodes are also unable to generate or sign for scriptPubKey templates (payment address). Nonetheless, they may still pay to a witness program if it is nested in a P2SH address, which has been defined since 2012. + +When the core block size limit is increased to over 1MB as scheduled, this proposal becomes a hard fork. Anybody running code that fully validates blocks must upgrade before the activation time or they will reject a chain containing blocks with core block size above 1MB. SPV software is not affected, unless it makes assumptions about the maximum depth of the Merkle tree based on the minimum size of a transaction and the maximum block size. + +== Deployment == + +We reuse the double-threshold IsSuperMajority() switchover mechanism used in +BIP65 with the same thresholds, but for nVersion = 5. The new rules are +in effect for every block (at height H) with nVersion = 5 and at least +750 out of 1000 blocks preceding it (with heights H-1000..H-1) also +have nVersion >= 5. Furthermore, when 950 out of the 1000 blocks +preceding a block do have nVersion >= 5, nVersion < 5 blocks become +invalid, and all further blocks enforce the new rules. + +It should be noted that BIP9 involves permanently setting a high-order bit to +1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus +no bits in nVersion are permanently lost. + + +=== SPV Clients === + +While SPV clients are (currently) unable to validate blocks in general, +trusting miners to do validation for them, they are able to validate block +headers and thus can validate a subset of the deployment rules. SPV clients +should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have +nVersion >= 5 to prevent false confirmations from the remaining 5% of +non-upgraded miners when the 95% threshold has been reached. + +== Credits == + +== Reference Implementation == +https://github.com/sipa/bitcoin/commits/segwit From 1817685aa94fdc5a58823e7e0a407463bea55ae0 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Sat, 19 Dec 2015 21:55:26 -0500 Subject: [PATCH 0065/2326] Added fraud proof motivation. --- bip-codeshark-jl2012-segwit.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index 1fc711d8e6..703954c0f8 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -29,6 +29,9 @@ By removing this data from the transaction structure committed to the transactio #* Size of witness could be ignored / discounted when calculating the block size, effectively increasing the block size to some extent #* Hard coded constants, such as maximum data push size (520 bytes) or sigops limit could be reevaluated or removed #* New script system could be introduced without any limitation from the existing script semantic +# '''Additional data required for fraud proofs can be added to witness'''. Extra data can be committed that allows short proofs of block invalidity that SPV nodes can quickly verify. +#* Backlinks for the outputs spent by the transaction's inputs can be provided. These backlinks consist of a block hash and an offset that thin clients can easily query and check to verify that the outputs exist. +#* Sum trees for transaction inputs and outputs can be committed making it possible to construct short proofs that no new coins are created in any noncoinbase transaction and that the miner does not add excessive fees to the coinbase transaction. ==Specification== From 1cdf145b9b74f465b514b19067c6a781769fdc77 Mon Sep 17 00:00:00 2001 From: jl2012 Date: Mon, 21 Dec 2015 13:27:25 +0800 Subject: [PATCH 0066/2326] Update bip-segwit.mediawiki --- bip-codeshark-jl2012-segwit.mediawiki | 93 ++++++++++++++++----------- 1 file changed, 56 insertions(+), 37 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index 703954c0f8..cc87de3c92 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -34,7 +34,6 @@ By removing this data from the transaction structure committed to the transactio #* Sum trees for transaction inputs and outputs can be committed making it possible to construct short proofs that no new coins are created in any noncoinbase transaction and that the miner does not add excessive fees to the coinbase transaction. ==Specification== - Maybe a seperate BIP
 * CTransaction gets, in addition to vin and vout, a vwit, which
@@ -42,7 +41,6 @@ contains a CTxInWitness object for each input. A CTxInWitness contains a CScript
 and can potentially be extended to contain other kinds of witness data.
 A CScriptWitness is a vector of byte vectors (nominally: the input stack to the program, no longer
 encoded as a CScript, but just the resulting stack directly).
-
 * A new serialization for CTransaction is defined: http://blockhawk.net/diagrams/witnesstx.png
 (int32 nVersion,
 0x00 marker, 0x01 flag, vector, vector,
@@ -83,38 +81,54 @@ with an empty witness have witness hash equal to normal hash).
 
 === Commitment structure ===
 
-UPDATE NEEDED
-A new block rule is added which requires a commitment (a merkle root
-computed similarly to the normal transaction one) to the witness
-hashes to be present as the last 32 bytes of
-block.vtx[0].vin[0].scriptSig (it doesn't need to be a push). This
-hopefully does not conflict with any other existing commitment
-schemes. To make it extensible, an extra merkle path can be provided
-(in the coinbase's "witness" field) so that coinbase commitment can be
-used for multiple things.
-
-    // Validation for witness commitments.
-    // * We compute the witness hash (which is the hash including witnesses) of all the block's transactions, except the
-    //   coinbase (where 0x0000....0000 is used instead).
-    // * We build a merkle tree with all those witness hashes as leaves (similar to the hashMerkleRoot in the block header).
-    // * The first coinbase scriptSig minimal push of 41 bytes for which the first 4 bytes are {0xaa, 0x21, 0xa9, 0xed} is
-    //   treated as a commitment header. If no such push is present, the block is invalid. If multiple are present, the first
-    //   is used.
-    //   * The first 4 bytes of the commitment header are just magic identifier bytes, and have no further meaning.
-    //   * The next 4 bytes describe a nonce.
-    //   * The next 1 byte describes the number of levels in a Merkle tree.
-    //   * locator = SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce). The first levels bits of locator, interpreted
-    //     in little endian, are assumed to be the position in the leaves of this Merkle tree where the witness commitment
-    //     goes.
-    //   * The last 32 bytes of the commitment header are its root hash.
-    //   * The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be
-    //     the Merkle path to connect the witness root hash to the commitment root hash.
-    
-    // No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam.
-
+!!!DRAFT ONLY!!! + +A new block rule is added which requires a commitment to the witness hashes in the coinbase (or an OP_RETURN output of a specific transaction, or somewhere else) + +(Hardfork after x year to move the commitment to block header?) + +Witness hash is the double SHA256 of a transaction including witnesses: http://blockhawk.net/diagrams/witnesstx.png. For the coinbase transaction, its witness hash is assumed to be 0x0000....0000. + +A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header. + +No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam. + +==== Proposal 1: balance tree (the current implementation) ==== +The commitment is a push of exactly 41 bytes: +*The first 4 bytes are commitment header: 0xaa21a9ed +*The next 4 bytes describe a nonce +*The next 1 byte is the "levels bytes", describes the number of levels in a Merkle tree (0 to 32) +*The next 32 bytes is a commitment root hash (not the witness root hash) + +Locator of the witness root hash is defined as: + +
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
+ +The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. + +The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. + +====Proposal 2: imbalance tree==== +The commitment is a push of exactly 40 bytes: +*The first 4 bytes are commitment header: 0xaa21a9ed +*The next 4 bytes describe a nonce +*The next 32 bytes is a commitment root hash (not the witness root hash) + +Locator of the witness root hash is defined as: + +
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
+ +The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. + +The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash. === Block size limit === -2-4-8? Discount for witness data? +A seperate BIP? +
+2-4-8?
+Discount for witness data?
+Start at softfork, moving to hardfork?
+
=== Witness program === @@ -136,14 +150,16 @@ used for multiple things. === Other consensus critical constraints === == Block size analysis == +WORK IN PROGRESS + Definitions:
  Core block size (CBS): The block size as seen by a non-upgrading full node
- Witness size (WS): The total size of witness in a block
+ Witness size (WS): The total size of witness data in a block
  Total block size (TBS): CBS + WS
- Witness discount (WD): A discount factor for witness for calculationg of VBS (1 = no discount)
+ Witness discount (WD): A discount factor for witness data in VBS calculation (1 = no discount)
  Virtual block size (VBS): CBS + (WS * WD)
- Witness adoption (WA): Proportion of new format transactions among all transactions
+ Witness adoption (WA): Proportion (in size) of new format transactions among all transactions
  Prunable ratio (PR): Proportion of signature data size in a transaction
 
@@ -155,8 +171,6 @@ With some transformation it could be shown that: In order to keep the proposal as a soft fork, the CBS must not have a upper limit higher than 1MB. -TBS is a function of only CBS, PR, and WA. - The PR heavily depends on the transaction script type and input-output ratio. For example, the PR of 1-in 2-out P2PKH and 1-in 1-out 2-of-2 multisig P2SH are about 47% and 72% respectively. According to the data presented by Pieter Wuille on 7 December 2015, the current average PR on the blockchain is about 60%. @@ -245,6 +259,11 @@ Examples of new script system include Schnorr signatures which reduce the size o The 41-byte limitation for witness programme could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable by introducing a secondary version byte for some specific primary version values. +=== Per-input lock-time and relative-lock-time === +Currently there is only one nLockTime field in a transaction and all inputs must share the same value. BIP68 enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. + +With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). + == Backward compatibility == Without lifting the core block size limit of 1MB at the beginning, this proposal is a soft fork which all existing full nodes and SPV nodes are compatible. Non-upgrading nodes, however, will not see nor validate the witness data, and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Non-upgrading nodes are also unable to generate or sign for scriptPubKey templates (payment address). Nonetheless, they may still pay to a witness program if it is nested in a P2SH address, which has been defined since 2012. From f026c28da5d32489c0c2346c33664d2b8a2f7d16 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 22 Dec 2015 06:15:05 -0500 Subject: [PATCH 0067/2326] MULICHECKSIG -> CHECKMULTISIG n-of-m -> m-of-n LN motivation smaller SPV proof motivation --- bip-codeshark-jl2012-segwit.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index cc87de3c92..f7026d6c24 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -20,11 +20,11 @@ The entirety of the transaction's effects are determined by output consumption ( By removing this data from the transaction structure committed to the transaction merkle tree, several problems are fixed: # '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was authorized is no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach (BIP62): -#* It prevents involuntary transaction malleability for any type of scripts, as long as all inputs are signed (with at least one CHECKSIG or MULTICHECKSIG operation) -#* In the case of a n-of-m MULTICHECKSIG script, a transaction is malleable only with agreement of n private key holders (as opposed to only 1 private key holder with BIP62) +#* It prevents involuntary transaction malleability for any type of scripts, as long as all inputs are signed (with at least one CHECKSIG or CHECKMULTISIG operation) +#* In the case of an m-of-n CHECKMULTISIG script, a transaction is malleable only with agreement of m private key holders (as opposed to only 1 private key holder with BIP62) #* It prevents involuntary transaction malleability due to unknown ECDSA signature malleability -#* It allows creation of unconfirmed transaction dependency chains without counterparty risk -# '''Transmission of signature data becomes optional'''. It is needed only if a peer is trying to validate a transaction, instead of just to prove its existence. This also improves prviacy of SPV clients as using the same bandwidth they could request for more transactions for obscuration. +#* It allows creation of unconfirmed transaction dependency chains without counterparty risk, an important feature for offchain protocols such as the Lightning Network +# '''Transmission of signature data becomes optional'''. It is needed only if a peer is trying to validate a transaction instead of just checking its existence. This reduces the size of SPV proofs and potentially improves the privacy of SPV clients as they can download more transactions using the same bandwidth. # '''Some constriants could be bypassed with a soft fork''' by moving part of the transaction data to a structure unknown to current protocol, for example: #* Size of witness could be ignored / discounted when calculating the block size, effectively increasing the block size to some extent #* Hard coded constants, such as maximum data push size (520 bytes) or sigops limit could be reevaluated or removed From 26a7293e67740b6bba854d0feb2ed25875c9037d Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 22 Dec 2015 22:54:40 +0800 Subject: [PATCH 0068/2326] Update bip-segwit.mediawiki --- bip-codeshark-jl2012-segwit.mediawiki | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index f7026d6c24..5c0d28ea40 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -123,12 +123,8 @@ The first levels bits of locator, interpreted in little endian, are assumed to b The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash. === Block size limit === -A seperate BIP? -
-2-4-8?
 Discount for witness data?
-Start at softfork, moving to hardfork?
-
+Virtual block size limit? === Witness program === @@ -265,9 +261,7 @@ Currently there is only one nLockTime field in a transaction and all inputs must With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). == Backward compatibility == -Without lifting the core block size limit of 1MB at the beginning, this proposal is a soft fork which all existing full nodes and SPV nodes are compatible. Non-upgrading nodes, however, will not see nor validate the witness data, and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Non-upgrading nodes are also unable to generate or sign for scriptPubKey templates (payment address). Nonetheless, they may still pay to a witness program if it is nested in a P2SH address, which has been defined since 2012. - -When the core block size limit is increased to over 1MB as scheduled, this proposal becomes a hard fork. Anybody running code that fully validates blocks must upgrade before the activation time or they will reject a chain containing blocks with core block size above 1MB. SPV software is not affected, unless it makes assumptions about the maximum depth of the Merkle tree based on the minimum size of a transaction and the maximum block size. +Without lifting the core block size limit of 1MB, this proposal is a soft fork which all existing full nodes and SPV nodes are compatible. Non-upgrading nodes, however, will not see nor validate the witness data, and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Non-upgrading nodes are also unable to generate or sign for scriptPubKey templates (payment address). Nonetheless, they may still pay to a witness program if it is nested in a P2SH address, which has been defined since 2012. == Deployment == From 7f196396d34d5cf1ad36491f87880ff6ef25ff90 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 22 Dec 2015 19:45:26 -0500 Subject: [PATCH 0069/2326] Updates to backward compatibility section --- bip-codeshark-jl2012-segwit.mediawiki | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index 5c0d28ea40..efed2b2785 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -261,7 +261,15 @@ Currently there is only one nLockTime field in a transaction and all inputs must With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). == Backward compatibility == -Without lifting the core block size limit of 1MB, this proposal is a soft fork which all existing full nodes and SPV nodes are compatible. Non-upgrading nodes, however, will not see nor validate the witness data, and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Non-upgrading nodes are also unable to generate or sign for scriptPubKey templates (payment address). Nonetheless, they may still pay to a witness program if it is nested in a P2SH address, which has been defined since 2012. +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. + +Wallets will be able to migrate in two phases: + +=== P2SH compatibility === +Witness programs are hashed to 256 bit "redeemscripts" which are then hashed to 160 bit P2SH. This format is fully compatible with currently existing wallets that support P2SH. Upgraded wallets will be able to send and receive to and from older wallets without any problems. + +=== Native outputs === +Witness programs are hashed to a 256 bit output. This format will not be compatible with older wallets but will require less block space and will have better security due to increased collision resistance. == Deployment == @@ -273,17 +281,16 @@ have nVersion >= 5. Furthermore, when 950 out of the 1000 blocks preceding a block do have nVersion >= 5, nVersion < 5 blocks become invalid, and all further blocks enforce the new rules. -It should be noted that BIP9 involves permanently setting a high-order bit to +(It should be noted that BIP9 involves permanently setting a high-order bit to 1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus -no bits in nVersion are permanently lost. +no bits in nVersion are permanently lost.) === SPV Clients === -While SPV clients are (currently) unable to validate blocks in general, -trusting miners to do validation for them, they are able to validate block -headers and thus can validate a subset of the deployment rules. SPV clients -should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have +While SPV clients are unable to fully validate blocks, +they are able to validate block headers and, thus, can check block version and proof-of-work. +SPV clients should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have nVersion >= 5 to prevent false confirmations from the remaining 5% of non-upgraded miners when the 95% threshold has been reached. From a208f3de00a7a79cf5cdc1731b6f7d166e799e37 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 22 Dec 2015 21:06:10 -0500 Subject: [PATCH 0070/2326] Copyright statement --- bip-codeshark-jl2012-segwit.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index efed2b2785..da624122eb 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -298,3 +298,6 @@ non-upgraded miners when the 95% threshold has been reached. == Reference Implementation == https://github.com/sipa/bitcoin/commits/segwit + +== Copyright == +This document is placed in the public domain. From 656b72695dc0a6d63cb691b02befc15039f7e5bc Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 22 Dec 2015 21:15:11 -0500 Subject: [PATCH 0071/2326] Credits --- bip-codeshark-jl2012-segwit.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index da624122eb..df43c273dc 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -1,7 +1,7 @@
   BIP: x
   Title: Segregated Witness (Consensus layer)
-  Author: 
+  Authors: Eric Lombrozo , Johnson Lau , Pieter Wuille 
   Status: Draft
   Type: Standards Track
   Created: 2015-12
@@ -295,6 +295,7 @@ nVersion >= 5 to prevent false confirmations from the remaining 5% of
 non-upgraded miners when the 95% threshold has been reached.
 
 == Credits ==
+Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 
 == Reference Implementation ==
 https://github.com/sipa/bitcoin/commits/segwit

From ec059d15822228d11a2c21a14fe6b91d2307888b Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Tue, 22 Dec 2015 21:24:47 -0500
Subject: [PATCH 0072/2326] Wallet migration phase update

---
 bip-codeshark-jl2012-segwit.mediawiki | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki
index df43c273dc..72bb9806e4 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-codeshark-jl2012-segwit.mediawiki
@@ -263,12 +263,10 @@ With a soft fork, it is possible to introduce a separate witness structure to al
 == Backward compatibility ==
 As a soft fork, older software will continue to operate without modification.  Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features.
 
-Wallets will be able to migrate in two phases:
-
-=== P2SH compatibility ===
+=== Version 0 witness programs ===
 Witness programs are hashed to 256 bit "redeemscripts" which are then hashed to 160 bit P2SH. This format is fully compatible with currently existing wallets that support P2SH. Upgraded wallets will be able to send and receive to and from older wallets without any problems.
 
-=== Native outputs ===
+=== Version 1 witness programs ===
 Witness programs are hashed to a 256 bit output. This format will not be compatible with older wallets but will require less block space and will have better security due to increased collision resistance.
 
 == Deployment ==

From 4c0863a2e406c7706b8ee44e6074d3bdf080a458 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Tue, 22 Dec 2015 21:43:05 -0500
Subject: [PATCH 0073/2326] typo fix

---
 bip-codeshark-jl2012-segwit.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki
index 72bb9806e4..f44c6f1efa 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-codeshark-jl2012-segwit.mediawiki
@@ -25,7 +25,7 @@ By removing this data from the transaction structure committed to the transactio
 #* It prevents involuntary transaction malleability due to unknown ECDSA signature malleability
 #* It allows creation of unconfirmed transaction dependency chains without counterparty risk, an important feature for offchain protocols such as the Lightning Network
 # '''Transmission of signature data becomes optional'''. It is needed only if a peer is trying to validate a transaction instead of just checking its existence. This reduces the size of SPV proofs and potentially improves the privacy of SPV clients as they can download more transactions using the same bandwidth.
-# '''Some constriants could be bypassed with a soft fork''' by moving part of the transaction data to a structure unknown to current protocol, for example:
+# '''Some constraints could be bypassed with a soft fork''' by moving part of the transaction data to a structure unknown to current protocol, for example:
 #* Size of witness could be ignored / discounted when calculating the block size, effectively increasing the block size to some extent
 #* Hard coded constants, such as maximum data push size (520 bytes) or sigops limit could be reevaluated or removed
 #* New script system could be introduced without any limitation from the existing script semantic

From 181280bed71acbee34ea5c83671b240ed28545dd Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Tue, 22 Dec 2015 21:52:55 -0500
Subject: [PATCH 0074/2326] Added block size limit

---
 bip-codeshark-jl2012-segwit.mediawiki | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki
index f44c6f1efa..61f341e7e8 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-codeshark-jl2012-segwit.mediawiki
@@ -123,8 +123,11 @@ The first levels bits of locator, interpreted in little endian, are assumed to b
 The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash.
 
 === Block size limit ===
-Discount for witness data?
-Virtual block size limit?
+Blocks are currently limited to 1 MB total size. We change this restriction as follows:
+
+We define a base block size sb consisting of the existing header and transactions, a witness size sw consisting of only the size of the witness data, and a virtual block size sv = sb + sw/4.
+
+The new rule is sv <= 1 MB.
 
 === Witness program ===
 

From 8fd3a42a954683268d158639aa7d602309950720 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Wed, 23 Dec 2015 09:57:37 -0500
Subject: [PATCH 0075/2326] Removed peer services specification.

---
 bip-codeshark-jl2012-segwit.mediawiki | 44 ---------------------------
 1 file changed, 44 deletions(-)

diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki
index 61f341e7e8..bbbf58cd3b 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-codeshark-jl2012-segwit.mediawiki
@@ -34,50 +34,6 @@ By removing this data from the transaction structure committed to the transactio
 #* Sum trees for transaction inputs and outputs can be committed making it possible to construct short proofs that no new coins are created in any noncoinbase transaction and that the miner does not add excessive fees to the coinbase transaction. 
 
 ==Specification==
-Maybe a seperate BIP
-
-* CTransaction gets, in addition to vin and vout, a vwit, which
-contains a CTxInWitness object for each input. A CTxInWitness contains a CScriptWitness object
-and can potentially be extended to contain other kinds of witness data.
-A CScriptWitness is a vector of byte vectors (nominally: the input stack to the program, no longer
-encoded as a CScript, but just the resulting stack directly).
-* A new serialization for CTransaction is defined: http://blockhawk.net/diagrams/witnesstx.png
-(int32 nVersion,
-0x00 marker, 0x01 flag, vector, vector,
-vector, int32 nLockTime) instead of (int32 nVersion,
-vector, vector, int32 nLockTime). This will never parse
-as a valid transaction (even if parsing succeeds, it means it's
-interpreted as a transaction with no inputs and 1 output). If all
-witnesses are empty, the old serialization format is used.
-- Rationale for not having an independent CWitnessTransaction with
-its own serialization: this would require separate "tx" and "block"
-messages, and all RPC calls operating on raw transactions would need
-to be duplicated, or need inefficinent or nondeterministic guesswork
-to know which type is to be used.
-- Rationale for not using just a single 0x00 byte as marker: that
-would lead to empty transactions (no inputs, no outputs, which are
-used in some tests) to be interpreted as new serialized data.
-- Rationale for the 0x01 flag byte in between: this will allow us to
-easily add more extra non-committed data to transactions (like txouts
-being spent, ...). It can be interpreted as a bitvector.
-
-* A new message 'havewitness' is sent after receiving 'verack' to
-indicate that a node can provide witness if requested (similar to
-'sendheaders')
-
-* New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
-for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK,
-similar to MSG_FILTERED_BLOCK.
-- Rationale for not advertizing witnessness in invs: we don't always
-use invs anymore (with 'sendheaders' BIP 130), plus it's not useful:
-implicitly, every transaction and block have a witness, old ones just
-have empty ones.
-
-* Transactions' GetHash is always computed on the old non-witness
-serialization. A new CTransaction::GetWitnessHash is added which is
-computed from the witness-serialization (this means that transactions
-with an empty witness have witness hash equal to normal hash).
-
=== Commitment structure === From 894d8ac1cb8d2717b865d36b342f58fe7253a2c0 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Wed, 23 Dec 2015 09:58:58 -0500 Subject: [PATCH 0076/2326] Moved authors to separate lines. --- bip-codeshark-jl2012-segwit.mediawiki | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index bbbf58cd3b..3bddf8a614 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -1,10 +1,12 @@
   BIP: x
   Title: Segregated Witness (Consensus layer)
-  Authors: Eric Lombrozo , Johnson Lau , Pieter Wuille 
+  Author: Eric Lombrozo 
+          Johnson Lau 
+          Pieter Wuille 
   Status: Draft
   Type: Standards Track
-  Created: 2015-12
+  Created: 2015-12-21
 
==Abstract== From 09192275acbaf8bed98738db107297434a3bba0a Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 24 Dec 2015 21:45:11 +0800 Subject: [PATCH 0077/2326] Create bip-segwitaddress.mediawiki --- bip-segwitaddress.mediawiki | 97 +++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 bip-segwitaddress.mediawiki diff --git a/bip-segwitaddress.mediawiki b/bip-segwitaddress.mediawiki new file mode 100644 index 0000000000..eed5b31380 --- /dev/null +++ b/bip-segwitaddress.mediawiki @@ -0,0 +1,97 @@ +
+  BIP: x
+  Title: Address Format for Witness Program
+  Author: Johnson Lau 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-12-24
+
+ +==Abstract== + +This BIP describes a new type of Bitcoin address to support native Segregated Witness (segwit) transactions. An address encoded under this proposal represents the base-58 encoding of a witness program. It supports arbitrarily complex transactions, and is forward compatible to new version witness programs in the future. + +==Motivation== + +To define a standard payment address for native segwit transactions, with minimal changes from existing address types, for the promotion of early adoption of the more efficient transaction method. + +==Specification== + +The new bitcoin address type is constructed in a similar manner of the original pay-to-public-key-hash addresses and pay-to-script-hash addresses (see BIP13): + + base58-encode: + [one-byte version] + [one-byte program length] + [2 to 41-byte witness program] + [padding by 0x00 to 43 bytes] + [4-byte checksum] + (47 bytes in total) + +Version byte is 0x15 for a main-network address, 0x37 for a testnet address. + +Program length byte indicates the length of witness program (L), from 0x02 to 0x29. + +The following 2 to 41 bytes is the actual witness program. + +The following (41 minus L) bytes is padded by 0x00. + +The 4-byte checksum is the first four bytes of the double SHA256 hash of the version, program length, program, and padding. + +All addresses generated with this scheme will have 64 characters, with a "B" prefix for main-network and "T" prefix for testnet. + +==Rationale== + +The segregated witness soft fork (BIP x) defines 2 ways of encoding "witness program", a data push of 2 to 41 bytes: + +* A native witness program output is a scriptPubKey with a single push of a witness program, and nothing else; +* A witness program in P2SH is a P2SH redeemScript with a single push of a witness program, while the scriptPubKey looks like a normal P2SH output. + +As the P2SH address has been defined in 2012, using witness program in P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is less collision-resistance than a native witness program, and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method. + +Currently there are 2 payment addresses format in Bitcoin, the original pay-to-public-key-hash addresses and the pay-to-script-hash addresses defined in 2012. All address formats, including the one defined in this BIP, are mutually incompatible. However, due to the excellent upgradability of witness programme, this proposal is likely to be the last address format encoding a scriptPubKey template. + +The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Since then, better payment methods have been proposed or deployed, for example: +*BIP47 Reusable Payment Codes for Hierarchical Deterministic Wallets +*BIP63 Stealth Addresses +*BIP70 Payment protocol +However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. The author believes this proposal as the most efficient way to promote early adoption of native witness program, which is particularly important in the context of scaling the capacity of the blockchain. + +Following the same rationale of BIP13, and to minimize the changes needed in wallet upgrade, this proposal resembles the original address format, including the checksum algorithm. + +==Compatibility== + +This proposal is not backward compatible, but it fails gracefully -- if an older implementation is given one of these new Bitcoin addresses, it will report the address as invalid and will refuse to create a transaction. + +This proposal is forward compatible to any new version witness program in the future. + +==Example== + +The following public key, + 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6 +when encoded as a P2PKH template, would become: + DUP HASH160 <010966776006953D5567439E5E39F86A0D273BEE> EQUALVERIFY CHECKSIG +And the corresponding version 1 Bitcoin address is + 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM +In the case of using the same P2PKH template as a version 0 witness program, the scriptPubKey becomes a 26-byte single push of: + 0076A914010966776006953D5567439E5E39F86A0D273BEE88AC +Prefixing with the address version byte 0x15 and program length 0x1A: + 151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC +Padding with 41 - 26 = 15 0x00: + 151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC000000000000000000000000000000 +Perform double SHA-256 hash: + 1B4A8136E38479EF5F08626D524534E6C94C92B1E77690B727CE8BD30BB3DAA0 +Take the first 4 bytes. This is the address checksum: + 1B4A8136 +Add the 4 checksum bytes at the end of extended witness program. This is the 47-byte binary witness program address: + 151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC0000000000000000000000000000001B4A8136 +Convert the result from a byte string into a base58 string with 64 characters. + BAxHaPmrSLbCt4QjJkW1W7MMXZmMdJkoxFHTEQXKmL9LpMUvDMcLAGgeeuLnkvNR + +==Reference Implementation== + +==See Also== + +* [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]] +* [[bip-0016.mediawiki|BIP 16: Pay to Script Hash (aka "/P2SH/")]] +* [[bip-xxxx.mediawiki|BIP x: Segregated Witness]] + From 9b9a8c4b71317afb946ef5198836df31914ed6f9 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Thu, 24 Dec 2015 14:23:27 -0500 Subject: [PATCH 0078/2326] Segregated Witness Peer Services BIP --- bip-codeshark-segwit-peer-services.mediawiki | 340 +++++++++++++++++++ 1 file changed, 340 insertions(+) create mode 100644 bip-codeshark-segwit-peer-services.mediawiki diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki new file mode 100644 index 0000000000..6f33378caf --- /dev/null +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -0,0 +1,340 @@ +
+  BIP: x
+  Title: Segregated Witness (Peer Services)
+  Authors: Eric Lombrozo , Pieter Wuille 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-12
+
+ +==Abstract== + +This BIP defines new messages and serialization formats for propagation of transactions and blocks committing to segregated witness structures. + +==Motivation== + +==Specification== + +A new message type called "witnesstx" is added to the peer-to-peer protocol. (http://blockhawk.net/diagrams/witnesstx.png) + +The message has the following structure: + +{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" +!Field Size +!Name +!Type +!Description +|- +| 4 +| version +| int32_t +| Transaction data format version +|- +| 1 +| marker +| char +| Must be zero +|- +| 1 +| flag +| char +| Must be nonzero +|- +| 1+ +| txin_count +| var_int +| Number of transaction inputs +|- +| 41+ +| txins +| txin[] +| A list of one or more transaction inputs +|- +| 1+ +| txout_count +| var_int +| Number of transaction outputs +|- +| 9+ +| txouts +| txouts[] +| A list of one or more transaction outputs +|- +| +| txin_witness +| txin_witness +| Transaction input witness +|- +| 4 +| lock_time +| uint32_t +| The block number or timestamp until which the transaction is locked +|} + +* CTransaction gets, in addition to vin and vout, a vwit, which +contains a CTxInWitness object for each input. A CTxInWitness contains a CScriptWitness object +and can potentially be extended to contain other kinds of witness data. +A CScriptWitness is a vector of byte vectors (nominally: the input stack to the program, no longer +encoded as a CScript, but just the resulting stack directly). +* A new serialization for CTransaction is defined: http://blockhawk.net/diagrams/witnesstx.png +(int32 nVersion, +0x00 marker, 0x01 flag, vector, vector, +vector, int32 nLockTime) instead of (int32 nVersion, +vector, vector, int32 nLockTime). This will never parse +as a valid transaction (even if parsing succeeds, it means it's +interpreted as a transaction with no inputs and 1 output). If all +witnesses are empty, the old serialization format is used. +- Rationale for not having an independent CWitnessTransaction with +its own serialization: this would require separate "tx" and "block" +messages, and all RPC calls operating on raw transactions would need +to be duplicated, or need inefficinent or nondeterministic guesswork +to know which type is to be used. +- Rationale for not using just a single 0x00 byte as marker: that +would lead to empty transactions (no inputs, no outputs, which are +used in some tests) to be interpreted as new serialized data. +- Rationale for the 0x01 flag byte in between: this will allow us to +easily add more extra non-committed data to transactions (like txouts +being spent, ...). It can be interpreted as a bitvector. + +* A new message 'havewitness' is sent after receiving 'verack' to +indicate that a node can provide witness if requested (similar to +'sendheaders') + +* New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only +for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK, +similar to MSG_FILTERED_BLOCK. +- Rationale for not advertizing witnessness in invs: we don't always +use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: +implicitly, every transaction and block have a witness, old ones just +have empty ones. + +* Transactions' GetHash is always computed on the old non-witness +serialization. A new CTransaction::GetWitnessHash is added which is +computed from the witness-serialization (this means that transactions +with an empty witness have witness hash equal to normal hash). +
+ +=== Commitment structure === + +!!!DRAFT ONLY!!! + +A new block rule is added which requires a commitment to the witness hashes in the coinbase (or an OP_RETURN output of a specific transaction, or somewhere else) + +(Hardfork after x year to move the commitment to block header?) + +Witness hash is the double SHA256 of a transaction including witnesses: http://blockhawk.net/diagrams/witnesstx.png. For the coinbase transaction, its witness hash is assumed to be 0x0000....0000. + +A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header. + +No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam. + +==== Proposal 1: balance tree (the current implementation) ==== +The commitment is a push of exactly 41 bytes: +*The first 4 bytes are commitment header: 0xaa21a9ed +*The next 4 bytes describe a nonce +*The next 1 byte is the "levels bytes", describes the number of levels in a Merkle tree (0 to 32) +*The next 32 bytes is a commitment root hash (not the witness root hash) + +Locator of the witness root hash is defined as: + +
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
+ +The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. + +The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. + +====Proposal 2: imbalance tree==== +The commitment is a push of exactly 40 bytes: +*The first 4 bytes are commitment header: 0xaa21a9ed +*The next 4 bytes describe a nonce +*The next 32 bytes is a commitment root hash (not the witness root hash) + +Locator of the witness root hash is defined as: + +
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
+ +The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. + +The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash. + +=== Block size limit === +Blocks are currently limited to 1 MB total size. We change this restriction as follows: + +We define a base block size sb consisting of the existing header and transactions, a witness size sw consisting of only the size of the witness data, and a virtual block size sv = sb + sw/4. + +The new rule is sv <= 1 MB. + +=== Witness program === + +* A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a single push of 2 to 41 bytes gets a new special meaning. The byte vector pushed by it is called the "witness program". +** In case the scriptPubKey pushes a witness program directly, the scriptSig must be exactly empty. +** In case the redeemScript pushes a witness program, the scriptSig must be exactly the single push of the redeemScript. + +* The first byte of a witness program is the "version byte", an unsigned integer. +** If the version byte is 0, the rest of the witness program is the actual script. +*** The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. +*** The program must not fail, and result in exactly a single TRUE on the stack. +** If the version byte is 1, the rest of the witness program must be 32 bytes, as a SHA256 hash of the actual script. +*** The witness must consist of an input stack to feed to the program, followed by the serialized program. +*** The serialized program is popped off the initial witness stack. Hash of the serialized program must match the hash pushed in the witness program. +*** The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. +*** The script must not fail, and result in exactly a single TRUE on the stack. +** If the witness version byte is 2 or above, no further interpretation of the witness program or witness happens. + +=== Other consensus critical constraints === + +== Block size analysis == +WORK IN PROGRESS + +Definitions: +
+ Core block size (CBS): The block size as seen by a non-upgrading full node
+ Witness size (WS): The total size of witness data in a block
+ Total block size (TBS): CBS + WS
+ Witness discount (WD): A discount factor for witness data in VBS calculation (1 = no discount)
+ Virtual block size (VBS): CBS + (WS * WD)
+ Witness adoption (WA): Proportion (in size) of new format transactions among all transactions
+ Prunable ratio (PR): Proportion of signature data size in a transaction
+
+ +With some transformation it could be shown that: +
+ TBS = CBS / (1 - WA * PR)
+     = VBS / (1 - WA * PR * (1 - WD))
+
+ +In order to keep the proposal as a soft fork, the CBS must not have a upper limit higher than 1MB. + +The PR heavily depends on the transaction script type and input-output ratio. For example, the PR of 1-in 2-out P2PKH and 1-in 1-out 2-of-2 multisig P2SH are about 47% and 72% respectively. According to the data presented by Pieter Wuille on 7 December 2015, the current average PR on the blockchain is about 60%. + + + +== Examples == + +=== Version 0 witness program === + +The following example is a version 0 witness program, equivalent to the existing Pay-to-Pubkey-Hash (P2PKH) output. + + witness: + scriptSig: (empty) + scriptPubKey: <0x0076A914{20-byte-hash-value}88AC> + +The version byte 0x00 is removed. The rest of the witness program is deserialized and becomes: + + DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + +The script is executed with the data from witness + + DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + +Comparing with a P2PKH output, the witness program equivalent occupies 2 more bytes in the scriptPubKey, while moving the signature and public key from scriptSig to witness. + +=== Version 1 witness program === + +The following example is an 1-of-2 multi-signature version 1 witness program. + + witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> + scriptSig: (empty) + scriptPubKey: <0x01{32-byte-hash-value}> + +The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: + + 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + +The script is executed with the remaining data from witness: + + 0 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + +Since the actual program is larger than 40 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. + +The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 2^80 work is not infeasible anymore (By the end of 2015, 2^84 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. + +=== Witness program nested in Pay-to-Script-Hash === + +The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. + + witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> + scriptSig: <0x2101{32-byte-hash-value}> + scriptPubKey: HASH160 <20-byte-hash-value> EQUAL + +The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as a single push of: + + <0x01{32-byte-hash-value}> + +The version 1 witness program is then executed as described in the last example + +Comparing with the last example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. + +=== Trust-free unconfirmed transaction dependency chain === +Segregated witness fixes the problem of transaction malleability fundamentally, which enables the building of unconfirmed transaction dependency chains in a trust-free manner. + +Two parties, Alice and Bob, may agree to send certain amount of Bitcoin to a 2-of-2 multisig output (the "funding transaction"). Without signing the funding transaction, they may create another transaction, time-locked in the future, spending the 2-of-2 multisig output to third account(s) (the "spending transaction"). Alice and Bob will sign the spending transaction and exchange the signatures. After examining the signatures, they will sign and commit the funding transaction to the blockchain. Without further action, the spending transaction will be confirmed after the lock-time and release the funding according to the original contract. It also retains the flexibility of revoking the original contract before the lock-time, by another spending transaction with shorter lock-time, but only with mutual-agreement of both parties. + +Such setups is not possible with BIP62 as the malleability fix, since the spending transaction could not be created without both parties first signing the funding transaction. If Alice reveals the funding transaction signature before Bob does, Bob is able to lock up the funding indefinitely without ever signing the spending transaction. + +Unconfirmed transaction dependency chain is a fundamental building block of more sophisticated payment networks, such as duplex micropayment channel and the Lightning Network, which have the potential to greatly improve the scalability and efficiency of the Bitcoin system. + +== Future extensions == +=== Compact fraud proof for SPV nodes === +Bitcoin right now only has two real security models. A user either runs a full-node which validates every block with all rules in the system, or a SPV (Simple Payment Verification) client which only validates the headers as a proof of publication of some transactions. The Bitcoin whitepaper suggested that SPV nodes may accept alerts from full nodes when they detect an invalid block, prompting the SPV node to download the questioned blocks and transactions for validation. This approach, however, could become a DoS attack vector as there is virtually no cost to generate a false alarm. An alarm must come with a compact, yet deterministic fraud proof. + +In the current Bitcoin protocol, it is possible to generate compact fraud proof for almost all rules except a few: + +# It is not possible to proof a miner has introduced too many Bitcoins in the coinbase transaction outputs without showing the whole block itself and all input transactions. +# It is not possible to prove the violation of any block specific constraints, such as size and sigop limits, without showing the whole block (and all input transactions in the case of sigop limit) +# It is not possible to prove the spending of a non-existing input without showing all transaction IDs in the blockchain way back to the genesis block. + +It is possible to proof the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to proof the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. + +=== New script system === +Since all witness programs begin with a version byte, 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. + +The 41-byte limitation for witness programme could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable by introducing a secondary version byte for some specific primary version values. + +=== Per-input lock-time and relative-lock-time === +Currently there is only one nLockTime field in a transaction and all inputs must share the same value. BIP68 enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. + +With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). + +== Backward compatibility == +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. + +=== Version 0 witness programs === +Witness programs are hashed to 256 bit "redeemscripts" which are then hashed to 160 bit P2SH. This format is fully compatible with currently existing wallets that support P2SH. Upgraded wallets will be able to send and receive to and from older wallets without any problems. + +=== Version 1 witness programs === +Witness programs are hashed to a 256 bit output. This format will not be compatible with older wallets but will require less block space and will have better security due to increased collision resistance. + +== Deployment == + +We reuse the double-threshold IsSuperMajority() switchover mechanism used in +BIP65 with the same thresholds, but for nVersion = 5. The new rules are +in effect for every block (at height H) with nVersion = 5 and at least +750 out of 1000 blocks preceding it (with heights H-1000..H-1) also +have nVersion >= 5. Furthermore, when 950 out of the 1000 blocks +preceding a block do have nVersion >= 5, nVersion < 5 blocks become +invalid, and all further blocks enforce the new rules. + +(It should be noted that BIP9 involves permanently setting a high-order bit to +1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus +no bits in nVersion are permanently lost.) + + +=== SPV Clients === + +While SPV clients are unable to fully validate blocks, +they are able to validate block headers and, thus, can check block version and proof-of-work. +SPV clients should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have +nVersion >= 5 to prevent false confirmations from the remaining 5% of +non-upgraded miners when the 95% threshold has been reached. + +== Credits == +Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork. + +== Reference Implementation == +https://github.com/sipa/bitcoin/commits/segwit + +== Copyright == +This document is placed in the public domain. From 0112d56051d3406ba035a75a5033fe5de52a6c86 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Thu, 24 Dec 2015 17:23:02 -0500 Subject: [PATCH 0079/2326] Embedded diagram --- bip-codeshark-segwit-peer-services.mediawiki | 25 +++++++++--------- .../witnesstx.png | Bin 0 -> 18923 bytes 2 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 bip-codeshark-segwit-peer-services/witnesstx.png diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index 6f33378caf..c81e1dbb7c 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -15,9 +15,9 @@ This BIP defines new messages and serialization formats for propagation of trans ==Specification== -A new message type called "witnesstx" is added to the peer-to-peer protocol. (http://blockhawk.net/diagrams/witnesstx.png) +A new serialization format for tx messages is added to the peer-to-peer protocol. -The message has the following structure: +The serialization has the following structure: {| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" !Field Size @@ -71,16 +71,17 @@ The message has the following structure: | The block number or timestamp until which the transaction is locked |} -* CTransaction gets, in addition to vin and vout, a vwit, which -contains a CTxInWitness object for each input. A CTxInWitness contains a CScriptWitness object -and can potentially be extended to contain other kinds of witness data. -A CScriptWitness is a vector of byte vectors (nominally: the input stack to the program, no longer -encoded as a CScript, but just the resulting stack directly). -* A new serialization for CTransaction is defined: http://blockhawk.net/diagrams/witnesstx.png -(int32 nVersion, -0x00 marker, 0x01 flag, vector, vector, -vector, int32 nLockTime) instead of (int32 nVersion, -vector, vector, int32 nLockTime). This will never parse + + +Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witnesses) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeeded, such a transaction would contain no inputs and a single output. + +If all witnesses are empty, the old serialization format should be used. + +Witness objects can potentially be extended to contain other kinds of witness data. + +A script witness is a vector of byte vectors (nominally: the input stack to the program, no longer +encoded as a scriptSig, but just the resulting stack directly). + as a valid transaction (even if parsing succeeds, it means it's interpreted as a transaction with no inputs and 1 output). If all witnesses are empty, the old serialization format is used. diff --git a/bip-codeshark-segwit-peer-services/witnesstx.png b/bip-codeshark-segwit-peer-services/witnesstx.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd8afcb01ce0cf08b7de1003c8be0539f226ba6 GIT binary patch literal 18923 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 a_XyRdy1QZ%@C8jEr^D`tst=s{>3;#p)Md^9 literal 0 HcmV?d00001 From 5036ebe02b4c2090386f8c1dc7ebee6d65a26c48 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Thu, 24 Dec 2015 17:37:28 -0500 Subject: [PATCH 0080/2326] Removed consensus layer stuff and added new section headers. --- bip-codeshark-segwit-peer-services.mediawiki | 219 +------------------ 1 file changed, 5 insertions(+), 214 deletions(-) diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index c81e1dbb7c..35bd05985b 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -15,6 +15,8 @@ This BIP defines new messages and serialization formats for propagation of trans ==Specification== +=== Serializations === + A new serialization format for tx messages is added to the peer-to-peer protocol. The serialization has the following structure: @@ -113,223 +115,12 @@ have empty ones. serialization. A new CTransaction::GetWitnessHash is added which is computed from the witness-serialization (this means that transactions with an empty witness have witness hash equal to normal hash). -
- -=== Commitment structure === - -!!!DRAFT ONLY!!! - -A new block rule is added which requires a commitment to the witness hashes in the coinbase (or an OP_RETURN output of a specific transaction, or somewhere else) - -(Hardfork after x year to move the commitment to block header?) - -Witness hash is the double SHA256 of a transaction including witnesses: http://blockhawk.net/diagrams/witnesstx.png. For the coinbase transaction, its witness hash is assumed to be 0x0000....0000. - -A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header. - -No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam. - -==== Proposal 1: balance tree (the current implementation) ==== -The commitment is a push of exactly 41 bytes: -*The first 4 bytes are commitment header: 0xaa21a9ed -*The next 4 bytes describe a nonce -*The next 1 byte is the "levels bytes", describes the number of levels in a Merkle tree (0 to 32) -*The next 32 bytes is a commitment root hash (not the witness root hash) - -Locator of the witness root hash is defined as: - -
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
- -The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. - -The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. - -====Proposal 2: imbalance tree==== -The commitment is a push of exactly 40 bytes: -*The first 4 bytes are commitment header: 0xaa21a9ed -*The next 4 bytes describe a nonce -*The next 32 bytes is a commitment root hash (not the witness root hash) - -Locator of the witness root hash is defined as: - -
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
- -The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. - -The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash. - -=== Block size limit === -Blocks are currently limited to 1 MB total size. We change this restriction as follows: - -We define a base block size sb consisting of the existing header and transactions, a witness size sw consisting of only the size of the witness data, and a virtual block size sv = sb + sw/4. - -The new rule is sv <= 1 MB. - -=== Witness program === - -* A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a single push of 2 to 41 bytes gets a new special meaning. The byte vector pushed by it is called the "witness program". -** In case the scriptPubKey pushes a witness program directly, the scriptSig must be exactly empty. -** In case the redeemScript pushes a witness program, the scriptSig must be exactly the single push of the redeemScript. - -* The first byte of a witness program is the "version byte", an unsigned integer. -** If the version byte is 0, the rest of the witness program is the actual script. -*** The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. -*** The program must not fail, and result in exactly a single TRUE on the stack. -** If the version byte is 1, the rest of the witness program must be 32 bytes, as a SHA256 hash of the actual script. -*** The witness must consist of an input stack to feed to the program, followed by the serialized program. -*** The serialized program is popped off the initial witness stack. Hash of the serialized program must match the hash pushed in the witness program. -*** The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. -*** The script must not fail, and result in exactly a single TRUE on the stack. -** If the witness version byte is 2 or above, no further interpretation of the witness program or witness happens. - -=== Other consensus critical constraints === - -== Block size analysis == -WORK IN PROGRESS - -Definitions: -
- Core block size (CBS): The block size as seen by a non-upgrading full node
- Witness size (WS): The total size of witness data in a block
- Total block size (TBS): CBS + WS
- Witness discount (WD): A discount factor for witness data in VBS calculation (1 = no discount)
- Virtual block size (VBS): CBS + (WS * WD)
- Witness adoption (WA): Proportion (in size) of new format transactions among all transactions
- Prunable ratio (PR): Proportion of signature data size in a transaction
-
- -With some transformation it could be shown that: -
- TBS = CBS / (1 - WA * PR)
-     = VBS / (1 - WA * PR * (1 - WD))
-
- -In order to keep the proposal as a soft fork, the CBS must not have a upper limit higher than 1MB. - -The PR heavily depends on the transaction script type and input-output ratio. For example, the PR of 1-in 2-out P2PKH and 1-in 1-out 2-of-2 multisig P2SH are about 47% and 72% respectively. According to the data presented by Pieter Wuille on 7 December 2015, the current average PR on the blockchain is about 60%. - - - -== Examples == - -=== Version 0 witness program === - -The following example is a version 0 witness program, equivalent to the existing Pay-to-Pubkey-Hash (P2PKH) output. - - witness: - scriptSig: (empty) - scriptPubKey: <0x0076A914{20-byte-hash-value}88AC> - -The version byte 0x00 is removed. The rest of the witness program is deserialized and becomes: - - DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG - -The script is executed with the data from witness - - DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG - -Comparing with a P2PKH output, the witness program equivalent occupies 2 more bytes in the scriptPubKey, while moving the signature and public key from scriptSig to witness. - -=== Version 1 witness program === - -The following example is an 1-of-2 multi-signature version 1 witness program. - - witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> - scriptSig: (empty) - scriptPubKey: <0x01{32-byte-hash-value}> - -The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: - - 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG - -The script is executed with the remaining data from witness: - - 0 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG - -Since the actual program is larger than 40 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. - -The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 2^80 work is not infeasible anymore (By the end of 2015, 2^84 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. - -=== Witness program nested in Pay-to-Script-Hash === - -The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. - - witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> - scriptSig: <0x2101{32-byte-hash-value}> - scriptPubKey: HASH160 <20-byte-hash-value> EQUAL - -The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as a single push of: - - <0x01{32-byte-hash-value}> - -The version 1 witness program is then executed as described in the last example - -Comparing with the last example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. - -=== Trust-free unconfirmed transaction dependency chain === -Segregated witness fixes the problem of transaction malleability fundamentally, which enables the building of unconfirmed transaction dependency chains in a trust-free manner. - -Two parties, Alice and Bob, may agree to send certain amount of Bitcoin to a 2-of-2 multisig output (the "funding transaction"). Without signing the funding transaction, they may create another transaction, time-locked in the future, spending the 2-of-2 multisig output to third account(s) (the "spending transaction"). Alice and Bob will sign the spending transaction and exchange the signatures. After examining the signatures, they will sign and commit the funding transaction to the blockchain. Without further action, the spending transaction will be confirmed after the lock-time and release the funding according to the original contract. It also retains the flexibility of revoking the original contract before the lock-time, by another spending transaction with shorter lock-time, but only with mutual-agreement of both parties. - -Such setups is not possible with BIP62 as the malleability fix, since the spending transaction could not be created without both parties first signing the funding transaction. If Alice reveals the funding transaction signature before Bob does, Bob is able to lock up the funding indefinitely without ever signing the spending transaction. - -Unconfirmed transaction dependency chain is a fundamental building block of more sophisticated payment networks, such as duplex micropayment channel and the Lightning Network, which have the potential to greatly improve the scalability and efficiency of the Bitcoin system. - -== Future extensions == -=== Compact fraud proof for SPV nodes === -Bitcoin right now only has two real security models. A user either runs a full-node which validates every block with all rules in the system, or a SPV (Simple Payment Verification) client which only validates the headers as a proof of publication of some transactions. The Bitcoin whitepaper suggested that SPV nodes may accept alerts from full nodes when they detect an invalid block, prompting the SPV node to download the questioned blocks and transactions for validation. This approach, however, could become a DoS attack vector as there is virtually no cost to generate a false alarm. An alarm must come with a compact, yet deterministic fraud proof. - -In the current Bitcoin protocol, it is possible to generate compact fraud proof for almost all rules except a few: - -# It is not possible to proof a miner has introduced too many Bitcoins in the coinbase transaction outputs without showing the whole block itself and all input transactions. -# It is not possible to prove the violation of any block specific constraints, such as size and sigop limits, without showing the whole block (and all input transactions in the case of sigop limit) -# It is not possible to prove the spending of a non-existing input without showing all transaction IDs in the blockchain way back to the genesis block. - -It is possible to proof the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to proof the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. - -=== New script system === -Since all witness programs begin with a version byte, 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. - -The 41-byte limitation for witness programme could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable by introducing a secondary version byte for some specific primary version values. - -=== Per-input lock-time and relative-lock-time === -Currently there is only one nLockTime field in a transaction and all inputs must share the same value. BIP68 enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. - -With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). - -== Backward compatibility == -As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. - -=== Version 0 witness programs === -Witness programs are hashed to 256 bit "redeemscripts" which are then hashed to 160 bit P2SH. This format is fully compatible with currently existing wallets that support P2SH. Upgraded wallets will be able to send and receive to and from older wallets without any problems. - -=== Version 1 witness programs === -Witness programs are hashed to a 256 bit output. This format will not be compatible with older wallets but will require less block space and will have better security due to increased collision resistance. - -== Deployment == - -We reuse the double-threshold IsSuperMajority() switchover mechanism used in -BIP65 with the same thresholds, but for nVersion = 5. The new rules are -in effect for every block (at height H) with nVersion = 5 and at least -750 out of 1000 blocks preceding it (with heights H-1000..H-1) also -have nVersion >= 5. Furthermore, when 950 out of the 1000 blocks -preceding a block do have nVersion >= 5, nVersion < 5 blocks become -invalid, and all further blocks enforce the new rules. - -(It should be noted that BIP9 involves permanently setting a high-order bit to -1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus -no bits in nVersion are permanently lost.) +== Synchronization == -=== SPV Clients === +=== Initial Blockchain Download === -While SPV clients are unable to fully validate blocks, -they are able to validate block headers and, thus, can check block version and proof-of-work. -SPV clients should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have -nVersion >= 5 to prevent false confirmations from the remaining 5% of -non-upgraded miners when the 95% threshold has been reached. +=== Message Propagation === == Credits == Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork. From 0d887af4035dc8f5258ad3c54f5a42d2973f6b1d Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 25 Dec 2015 19:03:02 -0500 Subject: [PATCH 0081/2326] Separate authors into two lines. --- bip-codeshark-segwit-peer-services.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index 35bd05985b..121cd5a11f 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -1,7 +1,8 @@
   BIP: x
   Title: Segregated Witness (Peer Services)
-  Authors: Eric Lombrozo , Pieter Wuille 
+  Author: Eric Lombrozo 
+          Pieter Wuille 
   Status: Draft
   Type: Standards Track
   Created: 2015-12

From 84dc2f7ddcf0b08adec056532fd9021ee461d1d5 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Fri, 25 Dec 2015 18:57:27 -0500
Subject: [PATCH 0082/2326] New sections

---
 bip-codeshark-segwit-peer-services.mediawiki | 30 ++++++++------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki
index 121cd5a11f..37c5d17df3 100644
--- a/bip-codeshark-segwit-peer-services.mediawiki
+++ b/bip-codeshark-segwit-peer-services.mediawiki
@@ -16,8 +16,7 @@ This BIP defines new messages and serialization formats for propagation of trans
 
 ==Specification==
 
-=== Serializations ===
-
+=== Serialization ===
 A new serialization format for tx messages is added to the peer-to-peer protocol.
 
 The serialization has the following structure:
@@ -63,7 +62,7 @@ The serialization has the following structure:
 | txouts[]
 | A list of one or more transaction outputs
 |-
-| 
+| 1+
 | txin_witness
 | txin_witness
 | Transaction input witness
@@ -85,10 +84,7 @@ Witness objects can potentially be extended to contain other kinds of witness da
 A script witness is a vector of byte vectors (nominally: the input stack to the program, no longer
 encoded as a scriptSig, but just the resulting stack directly).
 
-as a valid transaction (even if parsing succeeds, it means it's
-interpreted as a transaction with no inputs and 1 output). If all
-witnesses are empty, the old serialization format is used.
-- Rationale for not having an independent CWitnessTransaction with
+- Rationale for not having an independent message type with
 its own serialization: this would require separate "tx" and "block"
 messages, and all RPC calls operating on raw transactions would need
 to be duplicated, or need inefficinent or nondeterministic guesswork
@@ -100,29 +96,27 @@ used in some tests) to be interpreted as new serialized data.
 easily add more extra non-committed data to transactions (like txouts
 being spent, ...). It can be interpreted as a bitvector.
 
-* A new message 'havewitness' is sent after receiving 'verack' to
+=== Handshake ===
+A new message 'havewitness' is sent after receiving 'verack' to
 indicate that a node can provide witness if requested (similar to
-'sendheaders')
+'sendheaders') (Note: it might be better to signal this with a services bit in the version message)
 
-* New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
+=== Relay ===
+New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
 for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK,
 similar to MSG_FILTERED_BLOCK.
+
 - Rationale for not advertizing witnessness in invs: we don't always
 use invs anymore (with 'sendheaders' BIP 130), plus it's not useful:
 implicitly, every transaction and block have a witness, old ones just
 have empty ones.
 
-* Transactions' GetHash is always computed on the old non-witness
-serialization. A new CTransaction::GetWitnessHash is added which is
+=== Hashes ===
+Transaction hashes used in the transaction merkle tree and txin outpoints is always computed on the old non-witness
+serialization. A new hash including the witness data is added that is
 computed from the witness-serialization (this means that transactions
 with an empty witness have witness hash equal to normal hash).
 
-== Synchronization ==
-
-=== Initial Blockchain Download ===
-
-=== Message Propagation ===
-
 == Credits ==
 Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 

From 0ea5ba232dd33836d9ce0a4b24690dd8a8c0f193 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Fri, 25 Dec 2015 19:14:36 -0500
Subject: [PATCH 0083/2326] Added motivation section text.

---
 bip-codeshark-segwit-peer-services.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki
index 37c5d17df3..7e94b737ad 100644
--- a/bip-codeshark-segwit-peer-services.mediawiki
+++ b/bip-codeshark-segwit-peer-services.mediawiki
@@ -9,10 +9,10 @@
 
==Abstract== - This BIP defines new messages and serialization formats for propagation of transactions and blocks committing to segregated witness structures. ==Motivation== +In addition to defining witness structures and requiring commitments in future blocks (BIPxxxx - Consensus segwit BIP), new mechanisms must be defined to allow peers to advertise support for segregated witness and to relay the witness structures and request them from other peers without breaking compatibility with older nodes. ==Specification== From 0ab3b3eb0c50ea24c9043219d7f968825dc68221 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 25 Dec 2015 19:17:00 -0500 Subject: [PATCH 0084/2326] Moved diagrams to hashes section. --- bip-codeshark-segwit-peer-services.mediawiki | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index 7e94b737ad..c5b205efce 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -73,8 +73,6 @@ The serialization has the following structure: | The block number or timestamp until which the transaction is locked |} - - Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witnesses) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeeded, such a transaction would contain no inputs and a single output. If all witnesses are empty, the old serialization format should be used. @@ -112,10 +110,15 @@ implicitly, every transaction and block have a witness, old ones just have empty ones. === Hashes === -Transaction hashes used in the transaction merkle tree and txin outpoints is always computed on the old non-witness -serialization. A new hash including the witness data is added that is -computed from the witness-serialization (this means that transactions -with an empty witness have witness hash equal to normal hash). +Transaction hashes used in the transaction merkle tree and txin outpoints are always computed using the old non-witness +serialization. + +Support for a new hash including the witness data is added that is +computed from the new witness serialization. (Note that transactions +with an empty witness always use the old serialization, +and therefore, they have witness hash equal to normal hash.) + + == Credits == Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork. From 1f538fd4589b18ddede831e0cbfb0401f5ec8472 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 25 Dec 2015 19:41:39 -0500 Subject: [PATCH 0085/2326] Bulletted rationales and other minor changes. --- bip-codeshark-segwit-peer-services.mediawiki | 30 ++++++-------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index c5b205efce..6e0bc6e779 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -63,9 +63,9 @@ The serialization has the following structure: | A list of one or more transaction outputs |- | 1+ -| txin_witness -| txin_witness -| Transaction input witness +| txin_witnesses +| txin_witnesses[] +| A list of one or more transaction input witnesses (note: the count is just txin_count) |- | 4 | lock_time @@ -77,22 +77,13 @@ Parsers supporting this BIP will be able to distinguish between the old serializ If all witnesses are empty, the old serialization format should be used. -Witness objects can potentially be extended to contain other kinds of witness data. +Witness objects can be extended to contain other kinds of witness data not yet specified. This BIP is agnostic to the witness data structure, defined in BIPxxxx (Consensus Segwit BIP), and treats it as an arbitrary byte array. -A script witness is a vector of byte vectors (nominally: the input stack to the program, no longer -encoded as a scriptSig, but just the resulting stack directly). +* '''Rationale for not having an independent message type with its own serialization''': this would require separate "tx" and "block" messages, and all RPC calls operating on raw transactions would need to be duplicated, or need inefficinent or nondeterministic guesswork to know which type is to be used. -- Rationale for not having an independent message type with -its own serialization: this would require separate "tx" and "block" -messages, and all RPC calls operating on raw transactions would need -to be duplicated, or need inefficinent or nondeterministic guesswork -to know which type is to be used. -- Rationale for not using just a single 0x00 byte as marker: that -would lead to empty transactions (no inputs, no outputs, which are -used in some tests) to be interpreted as new serialized data. -- Rationale for the 0x01 flag byte in between: this will allow us to -easily add more extra non-committed data to transactions (like txouts -being spent, ...). It can be interpreted as a bitvector. +* '''Rationale for not using just a single 0x00 byte as marker''': that would lead to empty transactions (no inputs, no outputs, which are used in some tests) to be interpreted as new serialized data. + +* '''Rationale for the 0x01 flag byte in between''': this will allow us to easily add more extra non-committed data to transactions (like txouts being spent, ...). It can be interpreted as a bitvector. === Handshake === A new message 'havewitness' is sent after receiving 'verack' to @@ -104,10 +95,7 @@ New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK, similar to MSG_FILTERED_BLOCK. -- Rationale for not advertizing witnessness in invs: we don't always -use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: -implicitly, every transaction and block have a witness, old ones just -have empty ones. +* '''Rationale for not advertizing witnessness in invs''': we don't always use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: implicitly, every transaction and block have a witness, old ones just have empty ones. === Hashes === Transaction hashes used in the transaction merkle tree and txin outpoints are always computed using the old non-witness From 35990e2faa69c326807418a6405a25139e92db6f Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 25 Dec 2015 19:56:11 -0500 Subject: [PATCH 0086/2326] Use abstract witness structure --- bip-codeshark-segwit-peer-services.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki index 6e0bc6e779..7501d2b893 100644 --- a/bip-codeshark-segwit-peer-services.mediawiki +++ b/bip-codeshark-segwit-peer-services.mediawiki @@ -63,9 +63,9 @@ The serialization has the following structure: | A list of one or more transaction outputs |- | 1+ -| txin_witnesses -| txin_witnesses[] -| A list of one or more transaction input witnesses (note: the count is just txin_count) +| witness +| witness +| The witness structure as a serialized byte array |- | 4 | lock_time @@ -73,9 +73,9 @@ The serialization has the following structure: | The block number or timestamp until which the transaction is locked |} -Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witnesses) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeeded, such a transaction would contain no inputs and a single output. +Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witness) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeeded, such a transaction would contain no inputs and a single output. -If all witnesses are empty, the old serialization format should be used. +If the witness is empty, the old serialization format should be used. Witness objects can be extended to contain other kinds of witness data not yet specified. This BIP is agnostic to the witness data structure, defined in BIPxxxx (Consensus Segwit BIP), and treats it as an arbitrary byte array. From d1f008b8787f2d9151beeadeb749468400e6c2b2 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Sat, 26 Dec 2015 16:46:02 +0100 Subject: [PATCH 0087/2326] Changed temporary name to bip-MarcoPon-BlockchainURI - Waiting for BIP number assignment --- README.mediawiki | 2 +- ...arcoPon-01.mediawiki => bip-MarcoPon-BlockchainURI.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename bip-MarcoPon-01.mediawiki => bip-MarcoPon-BlockchainURI.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 4d90c2398b..9e68b022c2 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -374,7 +374,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- -| [[bip-MarcoPon-01.mediawiki| xx]] +| [[bip-MarcoPon-BlockchainURI.mediawiki| xx]] | URI scheme for Blockchain references / exploration | Marco Pontello | Standard diff --git a/bip-MarcoPon-01.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki similarity index 99% rename from bip-MarcoPon-01.mediawiki rename to bip-MarcoPon-BlockchainURI.mediawiki index b8483c2260..2380f80c8f 100644 --- a/bip-MarcoPon-01.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -1,5 +1,5 @@
-  BIP: MarcoPon-01
+  BIP: bip-MarcoPon-BlockchainURI
   Title: URI scheme for Blockchain references / exploration
   Author: Marco Pontello 
   Status: Draft

From d0ad38fb692ac919bd116a69f5f60e0c856b9148 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Sat, 26 Dec 2015 16:41:57 -0500
Subject: [PATCH 0088/2326] Added to relay section.

---
 bip-codeshark-segwit-peer-services.mediawiki | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-codeshark-segwit-peer-services.mediawiki
index 7501d2b893..78412c1dea 100644
--- a/bip-codeshark-segwit-peer-services.mediawiki
+++ b/bip-codeshark-segwit-peer-services.mediawiki
@@ -90,13 +90,6 @@ A new message 'havewitness' is sent after receiving 'verack' to
 indicate that a node can provide witness if requested (similar to
 'sendheaders') (Note: it might be better to signal this with a services bit in the version message)
 
-=== Relay ===
-New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
-for use in getdata. Inv itself still use just MSG_TX and MSG_BLOCK,
-similar to MSG_FILTERED_BLOCK.
-
-* '''Rationale for not advertizing witnessness in invs''': we don't always use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: implicitly, every transaction and block have a witness, old ones just have empty ones.
-
 === Hashes ===
 Transaction hashes used in the transaction merkle tree and txin outpoints are always computed using the old non-witness
 serialization.
@@ -108,6 +101,17 @@ and therefore, they have witness hash equal to normal hash.)
 
 
 
+=== Relay ===
+New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
+for use in getdata. Inventory messages themselves still use just MSG_TX and MSG_BLOCK,
+similar to MSG_FILTERED_BLOCK.
+
+* '''Rationale for not advertizing witnessness in invs''': we don't always use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: implicitly, every transaction and block have a witness, old ones just have empty ones.
+
+MSG_WITNESS_TX getdata requests should use the non-witness serialized hash. The peer shall respond with a tx message, and if the witness structure is nonempty, the witness serialization shall be used.
+
+MSG_WITNESS_BLOCK requests will return a block message with transactions that have a witness using witness serialization.
+
 == Credits ==
 Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 

From 93cedfbf2d50eb1f0ba750d364304f7adf7bcf79 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Sun, 27 Dec 2015 16:21:19 +0800
Subject: [PATCH 0089/2326] New proposal with 2 address types

---
 bip-segwitaddress.mediawiki | 131 +++++++++++++++++++++++-------------
 1 file changed, 83 insertions(+), 48 deletions(-)

diff --git a/bip-segwitaddress.mediawiki b/bip-segwitaddress.mediawiki
index eed5b31380..34ff5f3eae 100644
--- a/bip-segwitaddress.mediawiki
+++ b/bip-segwitaddress.mediawiki
@@ -1,6 +1,6 @@
 
   BIP: x
-  Title: Address Format for Witness Program
+  Title: Address Formats for Witness Program
   Author: Johnson Lau 
   Status: Draft
   Type: Standards Track
@@ -9,35 +9,65 @@
 
 ==Abstract==
 
-This BIP describes a new type of Bitcoin address to support native Segregated Witness (segwit) transactions. An address encoded under this proposal represents the base-58 encoding of a witness program. It supports arbitrarily complex transactions, and is forward compatible to new version witness programs in the future.
+This BIP describes 2 new types of Bitcoin address to support native Segregated Witness (segwit) transactions. The first type resembles the original P2PKH base-58 address. The second type is a z-base-32 representation of a witness program with Damm algorithm checksum, which supports arbitrarily complex transactions, and is forward compatible to new version witness programs in the future.
 
 ==Motivation==
 
-To define a standard payment address for native segwit transactions, with minimal changes from existing address types, for the promotion of early adoption of the more efficient transaction method.
+To define standard payment addresses for native segwit transactions to promote early adoption of the more efficient transaction method.
+
+== Specification ==
+=== P2PKH segwit address ===
+The first new Bitcoin address format defined is specific to pay-to-public-key-hash segwit transaction. The scriptPubKey is a single push of version-0 witness program in this form,
+  <0x0076A914{20-byte-hash-value}88AC>
+The new address is encoded exactly in the same way as the original pay-to-public-key-hash address:
+  base58-encode: [1-byte version][20-byte-hash-value][4-byte checksum]
+Version byte is 0x19 for a main-network address, 0x41 for a testnet address. The following 20-byte is the public key hash. And the 4-byte checksum is the first four bytes of the double SHA256 hash of the version and public key hash.
+
+All addresses generated with this scheme will a constant length of 34 characters, with a "B" prefix for main-network and "T" prefix for testnet.
+
+=== General segwit address ===
+The second new bitcoin address format defined is applicable to any version of witness program with a length of 2 to 33 bytes.
+
+The z-base-32 character set is used:
+{|class="wikitable" style="width:40ex; text-align: center; margin: 0 auto 0 auto;"
+!width="12%"|Value
+!width="12%"|Symbol
+!width="12%"|Value
+!width="12%"|Symbol
+!width="12%"|Value
+!width="12%"|Symbol
+!width="12%"|Value
+!width="12%"|Symbol
+|-
+| 0 || y ||  8 || e || 16 || o || 24 || a
+|-
+| 1 || b ||  9 || j || 17 || t || 25 || 2
+|-
+| 2 || n || 10 || k || 18 || 1 || 26 || 4
+|-
+| 3 || d || 11 || m || 19 || u || 27 || 5
+|-
+| 4 || r || 12 || c || 20 || w || 28 || h
+|-
+| 5 || f || 13 || p || 21 || i || 29 || 7
+|-
+| 6 || g || 14 || q || 22 || s || 30 || 6
+|-
+| 7 || 8 || 15 || x || 23 || z || 31 || 9
+|}
+
+It is case-insensitive and includes all alphanumeric characters excluding 0, 2, l, v. The order of alphabet is chosen so that less ambiguous alphabet characters will appear more frequently than others.
+
+An address starts with a version digit, which is b32 for the main-network and t32 for the testnet.
+
+The next digit is a length digit, which the value is length of the witness program in byte (L) minus 2.
+
+The length digit is followed by the witness program. The witness program is padded with leading 0b to become 265-bit, and transformed to z-base-32 with 53 digits.
+
+The 55-digit raw address is then divided into 11 equal segments. For each segment, a checksum is calculated with Damm algorithm and appended to the end of the segment. This makes the length increases to 66 digits.
+
+A second round of checksum is calculated by taking the digits in the same position of the 11 segments, and appended to the end of the address. This is the final address with 71 digits.
 
-==Specification==
-
-The new bitcoin address type is constructed in a similar manner of the original pay-to-public-key-hash addresses and pay-to-script-hash addresses (see BIP13):
-
-  base58-encode:
-    [one-byte version]
-    [one-byte program length]
-    [2 to 41-byte witness program]
-    [padding by 0x00 to 43 bytes]
-    [4-byte checksum]
-    (47 bytes in total)
-
-Version byte is 0x15 for a main-network address, 0x37 for a testnet address.
-
-Program length byte indicates the length of witness program (L), from 0x02 to 0x29.
-
-The following 2 to 41 bytes is the actual witness program.
-
-The following (41 minus L) bytes is padded by 0x00.
-
-The 4-byte checksum is the first four bytes of the double SHA256 hash of the version, program length, program, and padding.
-
-All addresses generated with this scheme will have 64 characters, with a "B" prefix for main-network and "T" prefix for testnet.
 
 ==Rationale==
 
@@ -48,50 +78,55 @@ The segregated witness soft fork (BIP x) defines 2 ways of encoding "witness pro
 
 As the P2SH address has been defined in 2012, using witness program in P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is less collision-resistance than a native witness program, and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method.
 
-Currently there are 2 payment addresses format in Bitcoin, the original pay-to-public-key-hash addresses and the pay-to-script-hash addresses defined in 2012. All address formats, including the one defined in this BIP, are mutually incompatible. However, due to the excellent upgradability of witness programme, this proposal is likely to be the last address format encoding a scriptPubKey template.
-
 The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Since then, better payment methods have been proposed or deployed, for example:
 *BIP47 Reusable Payment Codes for Hierarchical Deterministic Wallets
 *BIP63 Stealth Addresses
 *BIP70 Payment protocol
-However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. The author believes this proposal as the most efficient way to promote early adoption of native witness program, which is particularly important in the context of scaling the capacity of the blockchain.
 
-Following the same rationale of BIP13, and to minimize the changes needed in wallet upgrade, this proposal resembles the original address format, including the checksum algorithm.
+However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. As P2PKH transactions are still dominating the blockchain, the author believes that the proposed P2PKH segwit addresses is the easiest way for wallets and services to adopt native witness program, which is particularly important in the context of scaling the capacity of the blockchain.
+
+The P2PKH segwit addresses only allow simple payment to a single public key. For arbitrarily complex segwit transactions, the general segwit address is used. The use of z-base-32 eliminates case-sensitiveness and simplifies transformation to and from hexadecimals. The Damm algorithm checksum allows detection of all single-digit errors and all adjacent transposition errors. With the excellent upgradability of witness program, this proposal is also forward compatible to new version witness programs that is not longer than 33 bytes.
 
 ==Compatibility==
 
 This proposal is not backward compatible, but it fails gracefully -- if an older implementation is given one of these new Bitcoin addresses, it will report the address as invalid and will refuse to create a transaction.
 
-This proposal is forward compatible to any new version witness program in the future.
+This proposal is forward compatible to any new version witness program with 2 to 33 bytes.
 
 ==Example==
-
+=== Address for Pay-to-Public-Key-Hash Version 0 Witness Program ===
 The following public key,
     0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
 when encoded as a P2PKH template, would become:
     DUP HASH160 <010966776006953D5567439E5E39F86A0D273BEE> EQUALVERIFY CHECKSIG
 And the corresponding version 1 Bitcoin address is
     16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
-In the case of using the same P2PKH template as a version 0 witness program, the scriptPubKey becomes a 26-byte single push of:
-    0076A914010966776006953D5567439E5E39F86A0D273BEE88AC
-Prefixing with the address version byte 0x15 and program length 0x1A:
-    151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC
-Padding with 41 - 26 = 15 0x00:
-    151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC000000000000000000000000000000
-Perform double SHA-256 hash:
-    1B4A8136E38479EF5F08626D524534E6C94C92B1E77690B727CE8BD30BB3DAA0
-Take the first 4 bytes. This is the address checksum:
-    1B4A8136
-Add the 4 checksum bytes at the end of extended witness program. This is the 47-byte binary witness program address:
-    151A0076A914010966776006953D5567439E5E39F86A0D273BEE88AC0000000000000000000000000000001B4A8136
-Convert the result from a byte string into a base58 string with 64 characters. 
-    BAxHaPmrSLbCt4QjJkW1W7MMXZmMdJkoxFHTEQXKmL9LpMUvDMcLAGgeeuLnkvNR
+When the same script is encoded as a version 0 witness program, the scriptPubKey becomes a single push of 
+    <0x0076A914010966776006953D5567439E5E39F86A0D273BEE88AC>
+Using 0x19 as the address version, the equivalent witness program address is:
+    B4YZZ3nMBETWVF9ZSfotSwTxVnqhdkTi7r
+
+=== General witness program address ===
+With the same 26 bytes witness program in the last example:
+    0x0076A914010966776006953D5567439E5E39F86A0D273BEE88AC
+The witness program is transformed to z-base-32 with 53 digits:
+    yyyyyyyyyyyyyq4wteyejc35sybwi8iksqoh6mah9o4oprh767nfc
+Prepending with version digit b32 and length digit a32 (24 = 26 - 2)
+    bayyyyyyyyyyyyyq4wteyejc35sybwi8iksqoh6mah9o4oprh767nfc
+Split into 11 equal segments:
+    bayyy -yyyyy -yyyyy -q4wte -yejc3 -5sybw -i8iks -qoh6m -ah9o4 -oprh7 -67nfc
+Calculate the Damm checksum for each segment:
+    For example: Damm(bayyy) = h
+    bayyyh-yyyyyy-yyyyyy-q4wtey-yejc3w-5sybwu-i8iksj-qoh6mr-ah9o4h-oprh7t-67nfcs
+Calculate the Damm checksum for digits in the same position of different segments:
+    For example: Damm(byyqy5iqao6) = d
+    bayyyh-yyyyyy-yyyyyy-q4wtey-yejc3w-5sybwu-i8iksj-qoh6mr-ah9o4h-oprh7t-67nfcs-dmi1t
 
 ==Reference Implementation==
+From arbitrary witness program to general segwit address: https://gist.github.com/jl2012/760b0f952715b8b6c608
 
 ==See Also==
 
 * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]]
 * [[bip-0016.mediawiki|BIP 16: Pay to Script Hash (aka "/P2SH/")]]
-* [[bip-xxxx.mediawiki|BIP x: Segregated Witness]]
-
+* [[bip-xxxx.mediawiki|BIP x: Segregated Witness]] https://github.com/bitcoin/bips/pull/265

From 3e3006127e7d9d6a4f172d692df5195cf740cf71 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 29 Dec 2015 01:32:35 +0800
Subject: [PATCH 0090/2326] Clarify Backward compatibility

---
 bip-codeshark-jl2012-segwit.mediawiki | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki
index 3bddf8a614..643b9d134e 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-codeshark-jl2012-segwit.mediawiki
@@ -224,11 +224,14 @@ With a soft fork, it is possible to introduce a separate witness structure to al
 == Backward compatibility ==
 As a soft fork, older software will continue to operate without modification.  Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features.
 
-=== Version 0 witness programs ===
-Witness programs are hashed to 256 bit "redeemscripts" which are then hashed to 160 bit P2SH. This format is fully compatible with currently existing wallets that support P2SH. Upgraded wallets will be able to send and receive to and from older wallets without any problems.
-
-=== Version 1 witness programs ===
-Witness programs are hashed to a 256 bit output. This format will not be compatible with older wallets but will require less block space and will have better security due to increased collision resistance.
+'''What a non-upgraded wallet can do'''
+* Receiving bitcoin from non-upgraded and upgraded wallets
+* Sending bitcoin to non-upgraded wallets
+* Sending bitcoin to upgraded wallets using a P2SH address (a less efficient way to use segregated witness)
+
+'''What a non-upgraded wallet cannot do'''
+* Validating segregated witness transaction. It assumes such a transaction is always valid
+* Sending bitcoin to upgraded wallets using a native witness program (a more efficient way to use segregated witness)
 
 == Deployment ==
 

From c2d3488c026f074fbdc2ac989de484bc5fc33456 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 29 Dec 2015 15:19:25 +0800
Subject: [PATCH 0091/2326] Update for new witness prog design & formatting

---
 bip-segwitaddress.mediawiki | 93 +++++++++++++++++++++++--------------
 1 file changed, 59 insertions(+), 34 deletions(-)

diff --git a/bip-segwitaddress.mediawiki b/bip-segwitaddress.mediawiki
index 34ff5f3eae..f92e368081 100644
--- a/bip-segwitaddress.mediawiki
+++ b/bip-segwitaddress.mediawiki
@@ -7,16 +7,18 @@
   Created: 2015-12-24
 
-==Abstract== +== Abstract == This BIP describes 2 new types of Bitcoin address to support native Segregated Witness (segwit) transactions. The first type resembles the original P2PKH base-58 address. The second type is a z-base-32 representation of a witness program with Damm algorithm checksum, which supports arbitrarily complex transactions, and is forward compatible to new version witness programs in the future. -==Motivation== +== Motivation == To define standard payment addresses for native segwit transactions to promote early adoption of the more efficient transaction method. == Specification == + === P2PKH segwit address === + The first new Bitcoin address format defined is specific to pay-to-public-key-hash segwit transaction. The scriptPubKey is a single push of version-0 witness program in this form, <0x0076A914{20-byte-hash-value}88AC> The new address is encoded exactly in the same way as the original pay-to-public-key-hash address: @@ -26,7 +28,8 @@ Version byte is 0x19 for a main-network address, 0x41 for a testnet address. The All addresses generated with this scheme will a constant length of 34 characters, with a "B" prefix for main-network and "T" prefix for testnet. === General segwit address === -The second new bitcoin address format defined is applicable to any version of witness program with a length of 2 to 33 bytes. + +The second new bitcoin address format defined is applicable to witness program of version 0 to 15 with a length of 2 to 32 bytes. The z-base-32 character set is used: {|class="wikitable" style="width:40ex; text-align: center; margin: 0 auto 0 auto;" @@ -58,23 +61,34 @@ The z-base-32 character set is used: It is case-insensitive and includes all alphanumeric characters excluding 0, 2, l, v. The order of alphabet is chosen so that less ambiguous alphabet characters will appear more frequently than others. -An address starts with a version digit, which is b32 for the main-network and t32 for the testnet. +An address is a 270-bit string in z-base-32 with the following components: + + 5 address version bits + 5 length bits + 4 witness program version bits + 256 witness program bits + +The address version bits is 00001b for the main-network and 11001b for the testnet. + +Value of the length bits is the length of the witness program in byte minus 1. + +Witness program version bits indicates version of the witness program (v0 to v15). -The next digit is a length digit, which the value is length of the witness program in byte (L) minus 2. +The witness program is padded with leading 0b to 256 bits. -The length digit is followed by the witness program. The witness program is padded with leading 0b to become 265-bit, and transformed to z-base-32 with 53 digits. +The 270-bit string is transformed to z-base-32 with 54 digits. -The 55-digit raw address is then divided into 11 equal segments. For each segment, a checksum is calculated with Damm algorithm and appended to the end of the segment. This makes the length increases to 66 digits. +The 54-digit raw address is then divided into 9 equal segments. For each segment, a checksum is calculated with Damm algorithm and appended to the end of the segment. This makes the length increases to 63 digits. -A second round of checksum is calculated by taking the digits in the same position of the 11 segments, and appended to the end of the address. This is the final address with 71 digits. +A second round of checksum is calculated by taking the digits in the same position of the 9 segments, and appended to the end of the address. This is the final address with 69 digits. -==Rationale== +== Rationale == -The segregated witness soft fork (BIP x) defines 2 ways of encoding "witness program", a data push of 2 to 41 bytes: +The segregated witness soft fork (BIP x) defines 2 ways of encoding "witness program", a data push of 2 to 32 bytes: -* A native witness program output is a scriptPubKey with a single push of a witness program, and nothing else; -* A witness program in P2SH is a P2SH redeemScript with a single push of a witness program, while the scriptPubKey looks like a normal P2SH output. +* A native witness program output is a scriptPubKey with a push of version byte followed by a push of witness program, and nothing else; +* A witness program in P2SH is a P2SH redeemScript with a push of version byte followed by a push of witness program, while the scriptPubKey looks like a normal P2SH output. As the P2SH address has been defined in 2012, using witness program in P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is less collision-resistance than a native witness program, and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method. @@ -85,48 +99,59 @@ The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Sin However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. As P2PKH transactions are still dominating the blockchain, the author believes that the proposed P2PKH segwit addresses is the easiest way for wallets and services to adopt native witness program, which is particularly important in the context of scaling the capacity of the blockchain. -The P2PKH segwit addresses only allow simple payment to a single public key. For arbitrarily complex segwit transactions, the general segwit address is used. The use of z-base-32 eliminates case-sensitiveness and simplifies transformation to and from hexadecimals. The Damm algorithm checksum allows detection of all single-digit errors and all adjacent transposition errors. With the excellent upgradability of witness program, this proposal is also forward compatible to new version witness programs that is not longer than 33 bytes. +The P2PKH segwit addresses only allow simple payment to a single public key. For arbitrarily complex segwit transactions, the general segwit address is used. The use of z-base-32 eliminates case-sensitiveness and simplifies transformation to and from hexadecimals. The Damm algorithm checksum allows detection of all single-digit errors and all adjacent transposition errors. With the excellent upgradability of witness program, this proposal is also forward compatible to new version witness programs that is not longer than 32 bytes. -==Compatibility== +== Compatibility == This proposal is not backward compatible, but it fails gracefully -- if an older implementation is given one of these new Bitcoin addresses, it will report the address as invalid and will refuse to create a transaction. -This proposal is forward compatible to any new version witness program with 2 to 33 bytes. +This proposal is forward compatible to any new witness program format with version 2 to 15 and length of 2 to 32 bytes. + +== Example == + +=== P2PKH segwit address === -==Example== -=== Address for Pay-to-Public-Key-Hash Version 0 Witness Program === The following public key, 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6 when encoded as a P2PKH template, would become: DUP HASH160 <010966776006953D5567439E5E39F86A0D273BEE> EQUALVERIFY CHECKSIG And the corresponding version 1 Bitcoin address is 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM -When the same script is encoded as a version 0 witness program, the scriptPubKey becomes a single push of - <0x0076A914010966776006953D5567439E5E39F86A0D273BEE88AC> +When the same script is encoded as a version 0 witness program, the scriptPubKey becomes: + OP_0 <0x76A914010966776006953D5567439E5E39F86A0D273BEE88AC> Using 0x19 as the address version, the equivalent witness program address is: B4YZZ3nMBETWVF9ZSfotSwTxVnqhdkTi7r -=== General witness program address === -With the same 26 bytes witness program in the last example: - 0x0076A914010966776006953D5567439E5E39F86A0D273BEE88AC -The witness program is transformed to z-base-32 with 53 digits: - yyyyyyyyyyyyyq4wteyejc35sybwi8iksqoh6mah9o4oprh767nfc -Prepending with version digit b32 and length digit a32 (24 = 26 - 2) - bayyyyyyyyyyyyyq4wteyejc35sybwi8iksqoh6mah9o4oprh767nfc -Split into 11 equal segments: - bayyy -yyyyy -yyyyy -q4wte -yejc3 -5sybw -i8iks -qoh6m -ah9o4 -oprh7 -67nfc +=== General segwit address === + +With the same 25 bytes version 0 witness program in the last example: + OP_0 <0x76A914010966776006953D5567439E5E39F86A0D273BEE88AC> +The address version bits is 00001b + 00001b +The lengths bits is 11000b (24 = 25 - 1) + 00001-11000b +The witness program version bits is 0000 + 00001-11000-0000b +Appended by the zero-padded witness program + 00001-11000-0000-0-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-11101...01100 +The 270-bit string is transformed to z-base-32 with 54 digits and split into 9 equal segments: + bayyyy -yyyyyy -yyq4wt -eyejc3 -5sybwi -8iksqo -h6mah9 -o4oprh -767nfc Calculate the Damm checksum for each segment: - For example: Damm(bayyy) = h - bayyyh-yyyyyy-yyyyyy-q4wtey-yejc3w-5sybwu-i8iksj-qoh6mr-ah9o4h-oprh7t-67nfcs + For example: Damm(bayyyy) = 7 + bayyyy7-yyyyyyy-yyq4wte-eyejc3q-5sybwic-8iksqoo-h6mah9w-o4oprhm-767nfc4 Calculate the Damm checksum for digits in the same position of different segments: - For example: Damm(byyqy5iqao6) = d - bayyyh-yyyyyy-yyyyyy-q4wtey-yejc3w-5sybwu-i8iksj-qoh6mr-ah9o4h-oprh7t-67nfcs-dmi1t + For example: Damm(byye58ho7) = j + bayyyy7-yyyyyyy-yyq4wte-eyejc3q-5sybwic-8iksqoo-h6mah9w-o4oprhm-767nfc4-jwk86o + +== Implementation == -==Reference Implementation== From arbitrary witness program to general segwit address: https://gist.github.com/jl2012/760b0f952715b8b6c608 -==See Also== +== References == * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]] * [[bip-0016.mediawiki|BIP 16: Pay to Script Hash (aka "/P2SH/")]] * [[bip-xxxx.mediawiki|BIP x: Segregated Witness]] https://github.com/bitcoin/bips/pull/265 + +== Copyright == +This work is placed in the public domain. From 66ba4e6fcf6b8752ec38b78a85c7f2120148d856 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 29 Dec 2015 11:11:16 +0800 Subject: [PATCH 0092/2326] Separating version byte and witness program --- bip-codeshark-jl2012-segwit.mediawiki | 35 ++++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index 643b9d134e..ce85c534a2 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -89,20 +89,19 @@ The new rule is sv <= 1 MB. === Witness program === -* A scriptPubKey (or redeemScript as defined in BIP16/P2SH) that consists of a single push of 2 to 41 bytes gets a new special meaning. The byte vector pushed by it is called the "witness program". -** In case the scriptPubKey pushes a witness program directly, the scriptSig must be exactly empty. -** In case the redeemScript pushes a witness program, the scriptSig must be exactly the single push of the redeemScript. +* 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 32 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 case the scriptPubKey pushes a version byte and witness program directly, the scriptSig must be exactly empty. +** In case the redeemScript pushes a version byte and witness program, the scriptSig must be exactly the single push of the redeemScript. -* The first byte of a witness program is the "version byte", an unsigned integer. -** If the version byte is 0, the rest of the witness program is the actual script. +** If the version byte is 0, the WP is the actual script. *** The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. *** The program must not fail, and result in exactly a single TRUE on the stack. -** If the version byte is 1, the rest of the witness program must be 32 bytes, as a SHA256 hash of the actual script. +** If the version byte is 1, the WP must be 32 bytes, as a SHA256 hash of the actual script. *** The witness must consist of an input stack to feed to the program, followed by the serialized program. *** The serialized program is popped off the initial witness stack. Hash of the serialized program must match the hash pushed in the witness program. *** The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. *** The script must not fail, and result in exactly a single TRUE on the stack. -** If the witness version byte is 2 or above, no further interpretation of the witness program or witness happens. +** If the version byte is 2 to 16, no further interpretation of the witness program or witness happens. === Other consensus critical constraints === @@ -140,9 +139,9 @@ The following example is a version 0 witness program, equivalent to the existing witness: scriptSig: (empty) - scriptPubKey: <0x0076A914{20-byte-hash-value}88AC> + scriptPubKey: OP_0 <0x76A914{20-byte-hash-value}88AC> -The version byte 0x00 is removed. The rest of the witness program is deserialized and becomes: +The OP_0 indicates the following push is a version 0 witness program. The witness program is deserialized and becomes: DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG @@ -158,9 +157,9 @@ The following example is an 1-of-2 multi-signature version 1 witness program. witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> scriptSig: (empty) - scriptPubKey: <0x01{32-byte-hash-value}> + scriptPubKey: OP_1 <0x{32-byte-hash-value}> -The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: +The OP_1 in scriptPubKey indicates the following push is a version 1 witness program. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG @@ -168,7 +167,7 @@ The script is executed with the remaining data from witness: 0 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG -Since the actual program is larger than 40 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. +Since the actual program is larger than 32 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 2^80 work is not infeasible anymore (By the end of 2015, 2^84 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. @@ -177,12 +176,12 @@ The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increase The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> - scriptSig: <0x2101{32-byte-hash-value}> + scriptSig: <0x5120{32-byte-hash-value}> scriptPubKey: HASH160 <20-byte-hash-value> EQUAL -The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as a single push of: +The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as: - <0x01{32-byte-hash-value}> + OP_1 <0x{32-byte-hash-value}> The version 1 witness program is then executed as described in the last example @@ -210,11 +209,11 @@ In the current Bitcoin protocol, it is possible to generate compact fraud proof It is possible to proof the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to proof the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. === New script system === -Since all witness programs begin with a version byte, 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. +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. -The 41-byte limitation for witness programme could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable by introducing a secondary version byte for some specific primary version values. +The 32-byte limitation for witness program could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable through a softfork. === Per-input lock-time and relative-lock-time === Currently there is only one nLockTime field in a transaction and all inputs must share the same value. BIP68 enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. @@ -225,11 +224,13 @@ With a soft fork, it is possible to introduce a separate witness structure to al As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. '''What a non-upgraded wallet can do''' + * Receiving bitcoin from non-upgraded and upgraded wallets * Sending bitcoin to non-upgraded wallets * Sending bitcoin to upgraded wallets using a P2SH address (a less efficient way to use segregated witness) '''What a non-upgraded wallet cannot do''' + * Validating segregated witness transaction. It assumes such a transaction is always valid * Sending bitcoin to upgraded wallets using a native witness program (a more efficient way to use segregated witness) From e36fba6978b72c4541a7288570ed623cf945294e Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Wed, 30 Dec 2015 15:51:11 -0800 Subject: [PATCH 0093/2326] added coalesce bip to new branch --- bip-coalesc-wildcard.mediawiki => bip-coalesce-wildcard.mediawiki | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bip-coalesc-wildcard.mediawiki => bip-coalesce-wildcard.mediawiki (100%) diff --git a/bip-coalesc-wildcard.mediawiki b/bip-coalesce-wildcard.mediawiki similarity index 100% rename from bip-coalesc-wildcard.mediawiki rename to bip-coalesce-wildcard.mediawiki From 3a41325f81e50c4d90cc04c5dec4c6f8b9ac6233 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Wed, 30 Dec 2015 15:54:33 -0800 Subject: [PATCH 0094/2326] removed old bip --- bip-0122.mediawiki | 47 ---------------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 bip-0122.mediawiki diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki deleted file mode 100644 index 7dceb073a5..0000000000 --- a/bip-0122.mediawiki +++ /dev/null @@ -1,47 +0,0 @@ -
-  BIP: 122
-  Title: Creation of new testnet for scaling experiments
-  Author: Chris Priest 
-  Status: Draft
-  Type: Standards Track
-  Created: 2015-10-16
-
- -==Abstract== - -This BIP defines the creation of a new parallel text network called "ScaleNet", -which will be used to test the effects of massive scale upon the bitcoin -consensus protocol. - -==Motivation== - -Bitcoin was originally designed to be an experiment. With the increase in the market -cap, this experimental nature is decreased. There is considerable doubt whether -the Bitcoin consensus protocol can handle transaction rates orders of magnitude -higher than the network sees today. - -==Specification== - -The code for ScaleNet will resemble the current Bitcoin TestNet code in every way possible. -The only difference will be the elimination of the blocksize limit. - -ScaleNet coins will have 0 monetary value, just like TestNet coins. - -There will also be a ScaleNet faucet that will be used to automatically get free ScaleNet coins. - -==ScaleNet Spammer== - -Along with the creation of the ScaleNet client, there will also be a piece of software -called the "ScaleNet Spammer Client". The purpose of this software is to simply send large amounts -of transactions to the network. This software works very much like how software used to "stress test" -the main Bitcoin network. - -==Lessons Hopefully Learned== - -* What happens when the blockchain get too large to fit entirely onto a consumer grade hard drive? -* How will it be possible to run a full node when there are hundreds of GB of unconfirmed transactions in the mempool? -* What kind of special attention needs to go into mining gigantic blocks (>100MB) without through the roof orphan rates? - -Each of these questions will be answered by ScaleNet. At some point in time -bitcoin will need to face these problems. Hopefully the insights learned -from ScaleNet will help drive a more data-driven approach to Bitcoin Development. From 2f06ee5006e5fa69d52f0d7c9d60ad510101ab38 Mon Sep 17 00:00:00 2001 From: alp-bitcoin Date: Thu, 31 Dec 2015 15:01:27 -0600 Subject: [PATCH 0095/2326] Fixed typos. --- bip-codeshark-jl2012-segwit.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-codeshark-jl2012-segwit.mediawiki index 3bddf8a614..8bdade79a7 100644 --- a/bip-codeshark-jl2012-segwit.mediawiki +++ b/bip-codeshark-jl2012-segwit.mediawiki @@ -203,11 +203,11 @@ Bitcoin right now only has two real security models. A user either runs a full-n In the current Bitcoin protocol, it is possible to generate compact fraud proof for almost all rules except a few: -# It is not possible to proof a miner has introduced too many Bitcoins in the coinbase transaction outputs without showing the whole block itself and all input transactions. +# It is not possible to prove a miner has introduced too many Bitcoins in the coinbase transaction outputs without showing the whole block itself and all input transactions. # It is not possible to prove the violation of any block specific constraints, such as size and sigop limits, without showing the whole block (and all input transactions in the case of sigop limit) # It is not possible to prove the spending of a non-existing input without showing all transaction IDs in the blockchain way back to the genesis block. -It is possible to proof the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to proof the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. +It is possible to prove the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to prove the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. === New script system === Since all witness programs begin with a version byte, 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. From bada79afddc7cd70f7ad36d163aa7110964e03ee Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 11:04:23 -0600 Subject: [PATCH 0096/2326] BIP1: trivial formatting change --- bip-0001.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index faa80290f7..ad96dced63 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -13,6 +13,7 @@ BIP stands for Bitcoin Improvement Proposal. A BIP is a design document providin We intend BIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Bitcoin. The BIP author is responsible for building consensus within the community and documenting dissenting opinions. Because the BIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. + ==BIP Types== There are three kinds of BIP: From c1261ac6473040ca6079fe4f9301102d0e518446 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 11:06:47 -0600 Subject: [PATCH 0097/2326] BIP1: clarify "issue tracker" statement This switches from specifying "Bitcoin issue tracker" to specifying "Bitcoin Core issue tracker". Other issue trackers are useful for other client development activities, although this does not seem necessary to mention. --- bip-0001.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index ad96dced63..9703409cc2 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -28,7 +28,7 @@ The BIP editors assign BIP numbers and change their status. Please send all BIP- Authors MUST NOT self assign numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject. -The BIP process begins with a new idea for Bitcoin. It is highly recommended that a single BIP contain a single key proposal or new idea. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin development work flow with a patch submission to the Bitcoin issue tracker. The more focused the BIP, the more successful it tends to be. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. If in doubt, split your BIP into several well-focused ones. +The BIP process begins with a new idea for Bitcoin. It is highly recommended that a single BIP contain a single key proposal or new idea. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. The more focused the BIP, the more successful it tends to be. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. If in doubt, split your BIP into several well-focused ones. Each BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development&Technical Discussion] forum) is the best way to go about this. From ea1111226f3c66c14f22d48ce0d1fb94ce85fd1f Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 11:32:55 -0600 Subject: [PATCH 0098/2326] BIP1: clarify early stages of BIP championing The previous BIP1 text was ambiguous regarding early steps for taking an idea from concept and eventually into a BIP. The new text is intended to make it more clear that the initial email to the bitcoin-dev mailing list should not be a fully-formed BIP. There have been exceptions to this in the past for ideas already widely known and implementation in progress, but "you know it when you see it". Hopefully this will add clarity to the BIP authoring process and work flow for new authors. --- bip-0001.mediawiki | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 9703409cc2..41b3f6162b 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -24,30 +24,26 @@ There are three kinds of BIP: ==BIP Work Flow== -The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. +The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this. -Authors MUST NOT self assign numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject. +Vetting an idea publicly before going as far as writing a BIP is meant to both save the potential author and the wider community time. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. -The BIP process begins with a new idea for Bitcoin. It is highly recommended that a single BIP contain a single key proposal or new idea. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. The more focused the BIP, the more successful it tends to be. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. If in doubt, split your BIP into several well-focused ones. +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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. -Each BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development&Technical Discussion] forum) is the best way to go about this. +BIP authors are responsible for collecting community feedback on both the initial idea and the BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here. -Vetting an idea publicly before going as far as writing a BIP is meant to save the potential author time. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. +It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. If in doubt, split your BIP into several well-focused ones. -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 [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org]. This gives the author a chance to flesh out the draft BIP to make properly formatted, of high quality, and to address initial concerns about the proposal. +The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. -Following a discussion, the proposal should be sent to the Bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. +Authors MUST NOT self assign BIP numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject. -If the BIP editor approves, he will assign the BIP a number, label it as Standards Track, Informational, or Process, give it status "Draft", and add it to the git repository. The BIP editor will not unreasonably deny a BIP. Reasons for denying BIP status include duplication of effort, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy. +If the BIP editor approves, he will assign the BIP a number, label it as Standards Track, Informational, or Process, give it status "Draft", and add it to the BIPs git repository. The BIP editor will not unreasonably deny a BIP. Reasons for denying BIP status include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy. For a BIP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. The BIP author may update the Draft as necessary in the git repository. Updates to drafts may also be submitted by the author as pull requests. Standards Track BIPs consist of two parts, a design document and a reference implementation. The BIP should be reviewed and accepted before a reference implementation is begun, unless a reference implementation will aid people in studying the BIP. Standards Track BIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. -BIP authors are responsible for collecting community feedback on a BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here. - -For a BIP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. - Once a BIP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the community, the status will be changed to "Final". A BIP can also be assigned status "Deferred". The BIP author or editor can assign the BIP this status when no progress is being made on the BIP. Once a BIP is deferred, the BIP editor can re-assign it to draft status. @@ -168,11 +164,11 @@ The BIP editor will: * List the BIP in [[README.mediawiki]] -* Send email back to the BIP author with next steps (post to bitcoin mailing list). +* Send email back to the BIP author with next steps (post to bitcoin-dev mailing list). -Many BIPs are written and maintained by developers with write access to the Bitcoin codebase. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. +Many BIPs are written and maintained by developers with write access to the Bitcoin Core codebase. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. -The editors don't pass judgement on BIPs. We merely do the administrative & editorial part. Except for times like this, there's relatively low volume. +The BIP editors are intended to fulfill administrative and editorial responsibilities. ==History== @@ -181,3 +177,4 @@ This document was derived heavily from Python's PEP-0001. In many places text wa ==Changelog== 10 Oct 2015 - Added clarifications about sumission process and BIP number assignment. +01 Jan 2016 - Clarified early stages of BIP idea championing, collecting community feedback, etc. From e1628bb408f89769a99636c06ce9f440b8a2fda9 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 11:54:17 -0600 Subject: [PATCH 0099/2326] BIP1: use "relevant Bitcoin issue tracker" instead Also, remove an unnecessarily duplicated sentence. --- bip-0001.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 41b3f6162b..6d5a896862 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -26,13 +26,13 @@ There are three kinds of BIP: The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this. -Vetting an idea publicly before going as far as writing a BIP is meant to both save the potential author and the wider community time. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. +Vetting an idea publicly before going as far as writing a BIP is meant to both save the potential author and the wider community time. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the relevant Bitcoin development work flow with a patch submission to the relevant Bitcoin issue tracker. 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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. BIP authors are responsible for collecting community feedback on both the initial idea and the BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here. -It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. Small enhancements or patches often don't need a BIP and can be injected into the Bitcoin Core development work flow with a patch submission to the Bitcoin Core issue tracker. If in doubt, split your BIP into several well-focused ones. +It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. If in doubt, split your BIP into several well-focused ones. The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. From 17dda103e950db9c7c1e2e3e40ba0fc38535fdc0 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 11:57:55 -0600 Subject: [PATCH 0100/2326] BIP1: fix changelog formatting --- bip-0001.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 6d5a896862..752947981a 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -177,4 +177,5 @@ This document was derived heavily from Python's PEP-0001. In many places text wa ==Changelog== 10 Oct 2015 - Added clarifications about sumission process and BIP number assignment. + 01 Jan 2016 - Clarified early stages of BIP idea championing, collecting community feedback, etc. From d01ba11ecc1c38fabbd3aa3ae307f6b46039a783 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Fri, 1 Jan 2016 22:30:07 +0100 Subject: [PATCH 0101/2326] Added clarification for forked chains. --- bip-MarcoPon-BlockchainURI.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index 2380f80c8f..5c0881fabe 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -27,7 +27,7 @@ The URI follow this simple form: Where: ;chain: -: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (leading zeros included). In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. If omitted (which would be the usual case), Bitcoin's mainnet is assumed. As a reference, see for example this code fragment from Bitcoin chainparams.cpp source: +: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (leading zeros included). For forked chains, the hash of the relevant first block after fork is used. In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. If omitted (which would be the usual case), Bitcoin's mainnet is assumed. As a reference, see for example this code fragment from Bitcoin chainparams.cpp source: const std::map CChainParams::supportedChains = boost::assign::map_list_of ( "main", uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")) From 66224130f03ffb94daae9692d1b8d25b1c35e6ba Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 1 Jan 2016 15:37:47 -0600 Subject: [PATCH 0102/2326] BIP1: remove line about committers https://github.com/bitcoin/bips/pull/269#issuecomment-168335009 --- bip-0001.mediawiki | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 752947981a..8512b76c54 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -166,9 +166,7 @@ The BIP editor will: * Send email back to the BIP author with next steps (post to bitcoin-dev mailing list). -Many BIPs are written and maintained by developers with write access to the Bitcoin Core codebase. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. - -The BIP editors are intended to fulfill administrative and editorial responsibilities. +The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. ==History== From 6a08c9c76affe5608326d9b7f0d06d18dea6a6c4 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Sat, 2 Jan 2016 02:53:41 +0100 Subject: [PATCH 0103/2326] Removed specific wallet examples. --- bip-MarcoPon-BlockchainURI.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index 5c0881fabe..a60d2f2aec 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -14,7 +14,7 @@ This BIP propose an URI scheme for looking up blocks, transactions, addresses on ==Motivation== The purpose of this URI scheme is to enable users to handle all the requests for details about blocks, transactions, etc. with their preferred tool (being that a web service or a local application). -Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction (es. Bitcoin Wallet uses BitEasy, Mycelium or Electrum uses Blockchain.info, etc.). +Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction, or let him choose from a limited list of possible alternatives. Other times resorting to cut&paste is needed. The same happens with posts and messages that reference some particular txs or blocks, if they provide links at all. From d4130aa650191ca7963dc94f6b59798ec356eeb9 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Sat, 2 Jan 2016 13:59:32 +0100 Subject: [PATCH 0104/2326] Added Post-History. --- bip-MarcoPon-BlockchainURI.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index a60d2f2aec..8da74dbc3a 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -5,6 +5,7 @@ Status: Draft Type: Standards Track Created: 29 August 2015 + Post-History: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010712.html
==Abstract== From f03c7bb90ac854f711eaf03574cc210051164299 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Tue, 5 Jan 2016 02:58:30 +0100 Subject: [PATCH 0105/2326] Reworked layout, clarified chain ID. --- bip-MarcoPon-BlockchainURI.mediawiki | 69 +++++++++++++++++-------- bip-MarcoPon-BlockchainURI/chainid.png | Bin 0 -> 2967 bytes 2 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 bip-MarcoPon-BlockchainURI/chainid.png diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index 8da74dbc3a..1897326b50 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -21,45 +21,73 @@ The same happens with posts and messages that reference some particular txs or b ==Specification== -The URI follow this simple form: +The URI follow this form: blockchain:[//chain] Where: -;chain: -: (optional) to uniquely point to a specific chain, the hash of the corresponding genesis block is used (leading zeros included). For forked chains, the hash of the relevant first block after fork is used. In principle some kind of alias/mnemonic could also be used, but that is out of the scope of this BIP, and maybe could be developed in another subsequent one. If omitted (which would be the usual case), Bitcoin's mainnet is assumed. As a reference, see for example this code fragment from Bitcoin chainparams.cpp source: - const std::map CChainParams::supportedChains = - boost::assign::map_list_of - ( "main", uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")) - ( "test", uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")) - ( "regtest", uint256S("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")) - ; +{| class="wikitable" +! style="text-align: center;" | Element +! colspan="2" style="text-align: center;" | Description +! +|- +| chain +| colspan="2" | '''chain ID''' (see below) of the desired chain, leading 0s included. If omitted (which would be the usual case), Bitcoin main net is assumed. +| optional +|- +| rowspan="3" | type +| tx +| for transactions. +| rowspan="3" | +|- +| block +| for blocks (supports both hash or height). +|- +| address +| for addresses. +|- +| hash +| colspan="2" | the relevant hash to refer to (leading zeros included), or block height. +| +|} + +---- +===Definition of chain ID=== + +The '''chain ID''' of a chain is the block hash of the corresponding genesis block. For forked chains, it's the block hash of the first block after fork. + +So, for example: +
+Bitcoin main   : 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 
+Bitcoin test   : 000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
+Bitcoin regtest: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 
+
+An example of forked chain (Feathercoin, that forked Litecoin): + -;type: -: '''tx''': for transactions. -: '''block''': for blocks (supports both hash or height). -: '''address''': for addresses. +
+Litecoin   : 12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2
+Feathercoin: fdbe99b90c90bae7505796461471d89ae8388ab953997aa06a355bbda8d915cb
+
-;hash: -: the relevant hash to refer to (leading zeros included), or block height. ==Examples== -A transaction on Bitcoin's mainnet: +A transaction on Bitcoin main net: blockchain:/tx/b462ae6eb8bdae2e060239a2a3ea5d9c3e0f9ef34d9717beb2dcf0ed42cee7da -A block on Bitcoin's mainnet: +A block on Bitcoin main net: blockchain:/block/00000000000000000119af5bcae2926df54ae262e9071a94a99c913cc217cc72 or blockchain:/block/372338 -An address on Bitcoin's mainnet: +An address on Bitcoin main net: blockchain:/address/16EW6Rv9P9AxFDBrZV816dD4sj1EAYUX3f -A transaction on Bitcoin's testnet: +A transaction on Bitcoin test net: blockchain://000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943/tx/3b95a766d7a99b87188d6875c8484cb2b310b78459b7816d4dfc3f0f7e04281a ==Rationale== @@ -77,5 +105,4 @@ Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for suggestions about ==Copyright== -This document is placed in the public domain. - +This document is placed in the public domain. \ No newline at end of file diff --git a/bip-MarcoPon-BlockchainURI/chainid.png b/bip-MarcoPon-BlockchainURI/chainid.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6957ab2d059832433c70f106edaefa7aaf6ec1 GIT binary patch literal 2967 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 Date: Tue, 5 Jan 2016 02:59:59 +0100 Subject: [PATCH 0106/2326] Fixed img link. --- bip-MarcoPon-BlockchainURI.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index 1897326b50..372c0ef2a3 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -66,7 +66,7 @@ Bitcoin regtest: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e220 An example of forked chain (Feathercoin, that forked Litecoin): - +
 Litecoin   : 12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2

From fd55dd92e60b1d664da63e2e01b58bab174090c4 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Thu, 31 Dec 2015 21:59:10 +0800
Subject: [PATCH 0107/2326] Create bip-segwit-checksig.mediawiki

---
 bip-segwit-checksig.mediawiki | 132 ++++++++++++++++++++++++++++++++++
 1 file changed, 132 insertions(+)
 create mode 100644 bip-segwit-checksig.mediawiki

diff --git a/bip-segwit-checksig.mediawiki b/bip-segwit-checksig.mediawiki
new file mode 100644
index 0000000000..d4075b2e9c
--- /dev/null
+++ b/bip-segwit-checksig.mediawiki
@@ -0,0 +1,132 @@
+
+  BIP: x
+  Title: Transaction signature verification for version 0 and version 1 witness program
+  Author: Johnson Lau 
+          Pieter Wuille 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-01-03
+
+ +== Abstract == +This proposal defines a new transaction digest algorithm for signature verification in version 0 and version 1 witness program, in order to minimize redundant data hashing in verification, and to cover the input value by the signature. + +== Motivation == +There are 4 ECDSA signature verification codes in the original Bitcoin script system: CHECKSIG, CHECKSIGVERIFY, CHECKMULTISIG, CHECKMULTISIGVERIFY (“sigops”). According to the sighash type (ALL, NONE, SINGLE, ANYONECANPAY), a transaction digest is generated with a double SHA256 of a serialized subset of the transaction, and the signature is verified against this digest with a given public key. The detailed procedure is described in a Bitcoin Wiki article. [https://en.bitcoin.it/wiki/OP_CHECKSIG] + +Unfortunately, there are at least 2 weaknesses in the original transaction digest algorithm: + +* For the verification of each signature, the amount of data hashing is proportional to the size of the transaction. Therefore, data hashing grows in O(n2) as the number of sigops in a transaction increases. While a 1 MB block would normally take 2 seconds to verify with an average computer in 2015, a 1MB transaction with 5569 sigops may take 25 seconds to verify. This could be fixed by optimizing the digest algorithm by introducing some reusable “midstate”, so the time complexity becomes O(n). [https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-2292 CVE-2013-2292][https://bitcointalk.org/?topic=140078 New Bitcoin vulnerability: A transaction that takes at least 3 minutes to verify][http://rusty.ozlabs.org/?p=522 The Megatransaction: Why Does It Take 25 Seconds?] +* The algorithm does not involve the amount of Bitcoin being spent by the input. This is usually not a problem for online network nodes as they could request for the specified transaction to acquire the output value. For an offline transaction signing device ("cold wallet"), however, the unknowing of input amount makes it impossible to calculate the exact amount being spent and the transaction fee. To cope with this problem a cold wallet must also acquire the full transaction being spent, which could be a big obstacle in the implementation of lightweight, air-gapped wallet. By including the input value of part of the transaction digest, a cold wallet may safely sign a transaction by learning the value from an untrusted source. In the case that a wrong value is provided and signed, the signature would be invalid and no funding might be lost. [https://bitcointalk.org/index.php?topic=181734.0 SIGHASH_WITHINPUTVALUE: Super-lightweight HW wallets and offline data] + +Deploying the aforementioned fixes in the original script system is not a simple task. That would be either a hardfork, or a softfork for new sigops without the ability to remove or insert stack items. However, the introduction of segregated witness softfork offers an opportunity to define a different set of script semantics without disrupting the original system, as the unupgraded nodes would always consider such a transaction output is spendable by arbitrary signature or no signature at all. [https://github.com/CodeShark/bips/blob/segwit/bip-codeshark-jl2012-segwit.mediawiki BIPx: Segregated Witness (Consensus layer)] + +== Specification == +A new transaction digest algorithm is defined, but only applicable to sigops in version 0 and version 1 witness program: + Double SHA256 of the serialization of: + 1. nVersion of the transaction + 2. hashPrevouts + 3. hashSequence + 4. transaction id and output index of the output spent by this input + 5. subscript of the input + 6. value of the output spent by this input + 7. nSequence of the input + 8. hashOutputs + 9. nLocktime of the transaction + 10. sighash type of the signature + +The items 1, 4, 5, 7, 9, 10 have the same meaning as the original algorithm. + +The item 6 is a 8-byte value of the amount of bitcoin spent in this input. + +hashPrevouts: +*If the ANYONECANPAY flag is not set, hashPrevouts is the double SHA256 of the serialization of all transaction ids and output indexes involved in this transaction; +*Otherwise, hashPrevouts is a uint256 of 0x0000......0000. + +hashSequence: +*If none of the ANYONECANPAY, SINGLE, NONE sighash type is set, hashSequence is the double SHA256 of the serialization of nSequence of all inputs; +*Otherwise, hashSequence is a uint256 of 0x0000......0000. + +hashOutputs: +*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output scriptPubKey with value; +*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output scriptPubKey with value of the same index as the input; +*Otherwise, hashOutputs is a uint256 of 0x0000......0000. + +The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verification may be reused in other inputs of the same transaction, so that the time complexity of the whole hashing process reduces from O(n2) to O(n). + +Refer to the reference implementation, reproduced below, for the precise algorithm: + + + uint256 hashPrevouts; + uint256 hashSequence; + uint256 hashOutputs; + + if (!(nHashType & SIGHASH_ANYONECANPAY)) { + CHashWriter ss(SER_GETHASH, 0); + for (unsigned int n = 0; n < txTo.vin.size(); n++) { + ss << txTo.vin[n].prevout; + } + hashPrevouts = ss.GetHash(); + } + + if (!(nHashType & SIGHASH_ANYONECANPAY) && (nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) { + CHashWriter ss(SER_GETHASH, 0); + for (unsigned int n = 0; n < txTo.vin.size(); n++) { + ss << txTo.vin[n].nSequence; + } + hashSequence = ss.GetHash(); + } + + if ((nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) { + CHashWriter ss(SER_GETHASH, 0); + for (unsigned int n = 0; n < txTo.vout.size(); n++) { + ss << txTo.vout[n]; + } + hashOutputs = ss.GetHash(); + } else if ((nHashType & 0x1f) == SIGHASH_SINGLE && nIn < txTo.vout.size()) { + CHashWriter ss(SER_GETHASH, 0); + ss << txTo.vout[nIn]; + hashOutputs = ss.GetHash(); + } + + CHashWriter ss(SER_GETHASH, 0); + // Version + ss << txTo.nVersion; + // Input prevouts/nSequence (none/all, depending on flags) + ss << hashPrevouts; + ss << hashSequence; + // The input being signed (replacing the scriptSig with scriptCode + amount) + // The prevout may already be contained in hashPrevout, and the nSequence + // may already be contain in hashSequence. + ss << txTo.vin[nIn].prevout; + ss << static_cast(scriptCode); + ss << amount; + ss << txTo.vin[nIn].nSequence; + // Outputs (none/one/all, depending on flags) + ss << hashOutputs; + // Locktime + ss << txTo.nLockTime; + // Sighash type + ss << nHashType; + + return ss.GetHash(); + +== Deployment == + +This proposal is deployed with Segregated Witness softfork (BIP x) + +== Backward compatibility == + +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs, inculding the redefined sigops, as anyone-can-spend scripts. + +== Reference Implementation == + +https://github.com/sipa/bitcoin/commits/segwit + +== References == + + + +== Copyright == + +This document is placed in the public domain. From 1c5c149220ef9b0de95b9bed380a00abf61722f1 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 6 Jan 2016 20:35:36 +0000 Subject: [PATCH 0108/2326] BIP 0001: Change BIP editor to Luke Dashjr Greg asked that I take over BIP number assignments --- bip-0001.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index faa80290f7..db7a6efd1a 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -143,7 +143,7 @@ If you are interested in assuming ownership of a BIP, send a message asking to t ==BIP Editors== -The current BIP editor is Gregory Maxwell who can be contacted at [[mailto:gmaxwell@gmail.com|gmaxwell@gmail.com]]. +The current BIP editor is Luke Dashjr who can be contacted at [[mailto:luke_bipeditor@dashjr.org|luke_bipeditor@dashjr.org]]. ==BIP Editor Responsibilities & Workflow== From 627ffecd5ac7fbc28167dad72c1c9c33170965ef Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Thu, 7 Jan 2016 13:41:49 +0100 Subject: [PATCH 0109/2326] Fix syntax error --- bip-segwit-checksig.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-segwit-checksig.mediawiki b/bip-segwit-checksig.mediawiki index d4075b2e9c..dc6c3df4a5 100644 --- a/bip-segwit-checksig.mediawiki +++ b/bip-segwit-checksig.mediawiki @@ -35,7 +35,7 @@ A new transaction digest algorithm is defined, but only applicable to sigops in 9. nLocktime of the transaction 10. sighash type of the signature -The items 1, 4, 5, 7, 9, 10 have the same meaning as the original algorithm. +The items 1, 4, 5, 7, 9, 10 have the same meaning as the original algorithm. The item 6 is a 8-byte value of the amount of bitcoin spent in this input. @@ -56,7 +56,7 @@ The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verific Refer to the reference implementation, reproduced below, for the precise algorithm: - + uint256 hashPrevouts; uint256 hashSequence; uint256 hashOutputs; @@ -110,6 +110,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit ss << nHashType; return ss.GetHash(); + == Deployment == From ca6cfc2192ce3ea8622edf30bb0d06c8ae1b8a26 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 7 Jan 2016 16:16:20 +0000 Subject: [PATCH 0110/2326] README: Update BIP editor --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index b45c17a06d..d8c2341b2d 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 mailing list. After discussion they should email Greg Maxwell <gmaxwell@gmail.com>. After copy-editing and acceptance, it will be published here. +People wishing to submit BIPs, first should propose their idea or document to the mailing list. After discussion they should email Luke Dashjr <luke_bipeditor@dashjr.org>. 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 67470e0817042c9b4d752e990d2219b47f28b1cf Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 7 Jan 2016 11:37:09 -0800 Subject: [PATCH 0111/2326] - Update motivation to include auditability - Update InvoiceRequest to include nonce - Remove ephemeral_public_key from ReturnPaymentRequest - Update message validation and nonce usage in processes --- bip-invoicerequest-extension.mediawiki | 35 +++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 6b80467eb2..8d8fc64651 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -20,10 +20,11 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Motivation== -The motiviation for defining this extension to the BIP-70 Payment Protocol is to allow 2 parties to exchange payment +The motiviation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order -to facilitate identification for address release. +to facilitate identification for address release. This also allows for automated creation of off blockchain transaction +logs that are human readable, containing who you transacted with, in addition to the information that it contains today. ==Definitions== {| class="wikitable" @@ -49,11 +50,12 @@ The InvoiceRequest message allows a Sender to send information to the Receiver s
 message InvoiceRequest {
         required bytes  sender_public_key = 1;              // Sender's EC Public Key
-        optional uint64 amount = 2 [default = 0];           // amount is integer-number-of-satoshis
-        optional string pki_type = 3 [default = "none"];    // none / x509+sha256
-        optional bytes  pki_data = 4;                       // Depends on pki_type
-        optional string notification_url = 5;               // URL to notify on ReturnPaymentRequest ready
-        optional bytes  signature = 6;                      // PKI-dependent signature
+        required uint64 nonce = 2;                          // Microseconds since epoch
+        optional uint64 amount = 3 [default = 0];           // amount is integer-number-of-satoshis
+        optional string pki_type = 4 [default = "none"];    // none / x509+sha256
+        optional bytes  pki_data = 5;                       // Depends on pki_type
+        optional string notification_url = 6;               // URL to notify on ReturnPaymentRequest ready
+        optional bytes  signature = 7;                      // PKI-dependent signature
 }
 
@@ -62,6 +64,8 @@ message InvoiceRequest { |- | sender_public_key || Sender's EC Public Key |- +| nonce || Microseconds since epoch +|- | amount || amount is integer-number-of-satoshis (default: 0) |- | pki_type || none / x509+sha256 (default: "none") @@ -81,8 +85,7 @@ The ReturnPaymentRequest message is an encapsulating message that allows the tra message ReturnPaymentRequest { required bytes encrypted_payment_request = 1; // Encrypted, Serialized PaymentRequest required bytes receiver_public_key = 2; // Receiver's EC Public Key - required bytes ephemeral_public_key = 3; // Public Key of keypair created with ECDH-derived secret point - required bytes payment_request_hash = 4; // SHA256 of Serialized PaymentRequest + required bytes payment_request_hash = 3; // SHA256 of Serialized PaymentRequest }
{| class="wikitable" @@ -92,8 +95,6 @@ message ReturnPaymentRequest { |- | receiver_public_key || Receiver's EC Public Key |- -| ephemeral_public_key || Ephemeral EC Public Key -|- | payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest |} @@ -132,19 +133,21 @@ An invalid or unparsable message or communications error must be communicated to should be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ===InvoiceRequest Message Creation=== - * Create an InvoiceRequest message -* sender_public_key MUST be set to the public key of an EC keypair. +* sender_public_key MUST be set to the public key of an EC keypair +* nonce MUST be set to the current epoch time in microseconds * Amount is optional * Set notification_url to URL that the Receiver will submit completed ReturnPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: ** Set pki_type to "x509+sha256" ** Set pki_data as it would be set in BIP-0070 (see [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) section) -** Sign InvoiceRequest with signature == "" using the X509 Certificate's private key +** Sign InvoiceRequest with signature = "" using the X509 Certificate's private key +** Set signature value to the computed signature ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key +* The nonce must not be repeated. The service receiving the InvoiceRequest may use whatever method to make sure that the nonce is never repeated. * Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID @@ -154,11 +157,9 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. * Create ReturnPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) -* Set ephemeral_public_key to the public key of an EC keypair created using the secret point's X value. * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) ===ReturnPaymentRequest Validation and Decryption=== -* Validate ephemeral_public_key matches public key of an EC keypair created using the secret point's X value. * Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest @@ -167,7 +168,7 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''secret point's''' X value for Entropy -** Use Sender's public key for Nonce +** Use the given InvoiceRequest's nonce field for Nonce * Initialize AES-256 in CBC Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) From 385287b3950d7a86b63a8ce3ac27289880aaec4e Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 7 Jan 2016 13:53:51 -0800 Subject: [PATCH 0112/2326] - Adding James to the author list --- bip-invoicerequest-extension.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 8d8fc64651..c2140befcd 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -4,6 +4,7 @@ Authors: Matt David Justin Newton Aaron Voisine + James MacWhyte Status: Draft Type: Informational Created: 2015-11-20 From 2ea077022ef36859c38c3906a24558facc5091a7 Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Thu, 7 Jan 2016 23:11:32 +0100 Subject: [PATCH 0113/2326] Added Sample implementation section --- bip-MarcoPon-BlockchainURI.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-MarcoPon-BlockchainURI.mediawiki index 372c0ef2a3..2a0a659c91 100644 --- a/bip-MarcoPon-BlockchainURI.mediawiki +++ b/bip-MarcoPon-BlockchainURI.mediawiki @@ -98,6 +98,10 @@ Blockchain explorers in turn will simply offer to handle the blockchain: URI, th Users get the convenience of using always their preferred explorer, which can be especially handy on mobile devices, where juggling with cut&paste is far from ideal. +== Sample implementation == + +[https://github.com/MarcoPon/blockchain-exploration Demo Blockchain: URI handler on GitHub] + ==Acknowledgements== Thanks to Btc Drak for suggesting to provide support for different networks. Thanks to Jorge Timon for the idea of using genesis blocks hashes to identify them. From 58754bd493e44187cf714abb4176b9d3536b1dff Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 7 Jan 2016 14:24:48 -0800 Subject: [PATCH 0114/2326] - Fix typos in abstract and "motiviation" --- bip-invoicerequest-extension.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index c2140befcd..b672bfd466 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -12,7 +12,7 @@ ==Abstract== -This BIP is an extension to BIP70 that extends the payment protocol to prevent PaymentRequet interception / modification +This BIP is an extension to BIP70 that extends the payment protocol to prevent PaymentRequest interception / modification during transmission using ephemeral key encryption. This also allows permissioned release of a PaymentRequest to a requestor and allows a requestor to supply a certificate and signature to the PaymentRequest creator. @@ -21,7 +21,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Motivation== -The motiviation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment +The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction From fddb05618de44b2728a53e4240efd8419bab1610 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 8 Jan 2016 17:42:27 +0000 Subject: [PATCH 0115/2326] Assign BIP 107 --- README.mediawiki | 6 ++++++ dynamicblocksize.mediawiki => bip-0107.mediawiki | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) rename dynamicblocksize.mediawiki => bip-0107.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 1404eb678b..5ab33cbe38 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -308,6 +308,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0107.mediawiki|107]] +| Dynamic limit on the block size +| Washington Y. Sanchez +| Standard +| Draft +|- | [[bip-0111.mediawiki|111]] | NODE_BLOOM service bit | Matt Corallo and Peter Todd diff --git a/dynamicblocksize.mediawiki b/bip-0107.mediawiki similarity index 99% rename from dynamicblocksize.mediawiki rename to bip-0107.mediawiki index 7431a1c124..88a2c99076 100644 --- a/dynamicblocksize.mediawiki +++ b/bip-0107.mediawiki @@ -1,5 +1,5 @@
-  BIP: XXX
+  BIP: 107
   Title: Dynamic limit on the block size
   Author: Dr Washington Y. Sanchez 
   Status: Draft

From 8380abd7eb1177365a131254e0c373e09d2b5371 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:45:00 +0000
Subject: [PATCH 0116/2326] Assign BIP 122

---
 README.mediawiki                                    |  12 ++++++------
 ...on-BlockchainURI.mediawiki => bip-0122.mediawiki |   4 ++--
 .../chainid.png                                     | Bin
 3 files changed, 8 insertions(+), 8 deletions(-)
 rename bip-MarcoPon-BlockchainURI.mediawiki => bip-0122.mediawiki (97%)
 rename {bip-MarcoPon-BlockchainURI => bip-0122}/chainid.png (100%)

diff --git a/README.mediawiki b/README.mediawiki
index 9e68b022c2..389a727687 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -362,6 +362,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0122.mediawiki|121]]
+| URI scheme for Blockchain references / exploration
+| Marco Pontello
+| Standard
+| Draft
+|-
 | [[bip-0123.mediawiki|123]]
 | BIP Classification
 | Eric Lombrozo
@@ -373,12 +379,6 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
-|-
-| [[bip-MarcoPon-BlockchainURI.mediawiki| xx]]
-| URI scheme for Blockchain references / exploration
-| Marco Pontello
-| Standard
-| Draft
 |}
 
 
diff --git a/bip-MarcoPon-BlockchainURI.mediawiki b/bip-0122.mediawiki
similarity index 97%
rename from bip-MarcoPon-BlockchainURI.mediawiki
rename to bip-0122.mediawiki
index 2a0a659c91..902aa02a54 100644
--- a/bip-MarcoPon-BlockchainURI.mediawiki
+++ b/bip-0122.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: bip-MarcoPon-BlockchainURI
+  BIP: 122
   Title: URI scheme for Blockchain references / exploration
   Author: Marco Pontello 
   Status: Draft
@@ -66,7 +66,7 @@ Bitcoin regtest: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e220
 
 An example of forked chain (Feathercoin, that forked Litecoin):
 
-
+
 
 
 Litecoin   : 12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2
diff --git a/bip-MarcoPon-BlockchainURI/chainid.png b/bip-0122/chainid.png
similarity index 100%
rename from bip-MarcoPon-BlockchainURI/chainid.png
rename to bip-0122/chainid.png

From 5f59ac2d9d79b89031d2787d82c53162b28e03e0 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:47:46 +0000
Subject: [PATCH 0117/2326] Assign BIP 140

---
 README.mediawiki                         | 6 ++++++
 bip-00nn.mediawiki => bip-0140.mediawiki | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
 rename bip-00nn.mediawiki => bip-0140.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index 1243d20c25..d41afcd156 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -349,6 +349,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Kalle Rosenbaum
 | Standard
 | Draft
+|-
+| [[bip-0140.mediawiki|140]]
+| Normalized TXID
+| Christian Decker
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-00nn.mediawiki b/bip-0140.mediawiki
similarity index 99%
rename from bip-00nn.mediawiki
rename to bip-0140.mediawiki
index dfe48a531e..b187a49b8d 100644
--- a/bip-00nn.mediawiki
+++ b/bip-0140.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: NN
+  BIP: 140
   Title: Normalized TXID
   Author: Christian Decker 
   Status: Draft

From 8fdd879cdc2635784848a951bbd81fb12cff0d0b Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:50:22 +0000
Subject: [PATCH 0118/2326] Assign BIP 125

---
 README.mediawiki                               | 12 ++++++------
 bip-opt-in-rbf.mediawiki => bip-0125.mediawiki |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)
 rename bip-opt-in-rbf.mediawiki => bip-0125.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index 14d8a06cd5..bcc8b95b29 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -374,15 +374,15 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Informational
 | Draft
 |-
-| [[bip-0130.mediawiki|130]]
-| sendheaders message 
-| Suhas Daftuar
+| [[bip-0125.mediawiki|125]]
+| Opt-in Full Replace-by-Fee Signaling
+| David Harding, Peter Todd
 | Standard
 | Draft
 |-
-| [[bip-opt-in-rbf.mediawiki|FIXME]]
-| Opt-in Full Replace-by-Fee Signaling
-| David Harding, Peter Todd
+| [[bip-0130.mediawiki|130]]
+| sendheaders message 
+| Suhas Daftuar
 | Standard
 | Draft
 |}
diff --git a/bip-opt-in-rbf.mediawiki b/bip-0125.mediawiki
similarity index 99%
rename from bip-opt-in-rbf.mediawiki
rename to bip-0125.mediawiki
index 5bd24729c8..63788e9df5 100644
--- a/bip-opt-in-rbf.mediawiki
+++ b/bip-0125.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: bip-harding-opt-in-replace-by-fee
+  BIP: 125
   Title: Opt-in Full Replace-by-Fee Signaling
   Author: David A. Harding , Peter Todd 
   Status: Draft

From b16a75072d11b367d97d2676d260a5cd6a907adf Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:53:59 +0000
Subject: [PATCH 0119/2326] Assign BIP 141

---
 README.mediawiki                                            | 6 ++++++
 bip-codeshark-jl2012-segwit.mediawiki => bip-0141.mediawiki | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
 rename bip-codeshark-jl2012-segwit.mediawiki => bip-0141.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index b45c17a06d..af982a5e6d 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -379,6 +379,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
+|-
+| [[bip-0141.mediawiki|141]]
+| Segregated Witness (Consensus layer)
+| Eric Lombrozo, Johnson Lau, and Pieter Wuille
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-codeshark-jl2012-segwit.mediawiki b/bip-0141.mediawiki
similarity index 99%
rename from bip-codeshark-jl2012-segwit.mediawiki
rename to bip-0141.mediawiki
index dd81c1d0cc..ac44d8700a 100644
--- a/bip-codeshark-jl2012-segwit.mediawiki
+++ b/bip-0141.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: x
+  BIP: 141
   Title: Segregated Witness (Consensus layer)
   Author: Eric Lombrozo 
           Johnson Lau 

From 1c879abccd4308006a565bc26d0ee58d13b6541a Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:56:02 +0000
Subject: [PATCH 0120/2326] Assign BIP 142

---
 README.mediawiki                                  | 6 ++++++
 bip-segwitaddress.mediawiki => bip-0142.mediawiki | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
 rename bip-segwitaddress.mediawiki => bip-0142.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index b45c17a06d..a895342bf0 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -379,6 +379,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
+|-
+| [[bip-0142.mediawiki|142]]
+| Address Formats for Witness Program
+| Johnson Lau
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-segwitaddress.mediawiki b/bip-0142.mediawiki
similarity index 99%
rename from bip-segwitaddress.mediawiki
rename to bip-0142.mediawiki
index f92e368081..7efeca74bc 100644
--- a/bip-segwitaddress.mediawiki
+++ b/bip-0142.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: x
+  BIP: 142
   Title: Address Formats for Witness Program
   Author: Johnson Lau 
   Status: Draft

From 1e9d6180fe2bf5233e3679d2155f954cd6412d8e Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:57:52 +0000
Subject: [PATCH 0121/2326] Assign BIP 143

---
 README.mediawiki                                    | 6 ++++++
 bip-segwit-checksig.mediawiki => bip-0143.mediawiki | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
 rename bip-segwit-checksig.mediawiki => bip-0143.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index b45c17a06d..beb59e5178 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -379,6 +379,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
+|-
+| [[bip-0143.mediawiki|143]]
+| Transaction signature verification for version 0 and version 1 witness program
+| Johnson Lau, Pieter Wuille
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-segwit-checksig.mediawiki b/bip-0143.mediawiki
similarity index 99%
rename from bip-segwit-checksig.mediawiki
rename to bip-0143.mediawiki
index dc6c3df4a5..276e2cb1e5 100644
--- a/bip-segwit-checksig.mediawiki
+++ b/bip-0143.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: x
+  BIP: 143
   Title: Transaction signature verification for version 0 and version 1 witness program
   Author: Johnson Lau 
           Pieter Wuille 

From 8084782fa5d3143555db1e8ac13eda5a4ae82c52 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 17:59:36 +0000
Subject: [PATCH 0122/2326] Assign BIP 144

---
 README.mediawiki                                    |   6 ++++++
 ...it-peer-services.mediawiki => bip-0144.mediawiki |   4 ++--
 .../witnesstx.png                                   | Bin
 3 files changed, 8 insertions(+), 2 deletions(-)
 rename bip-codeshark-segwit-peer-services.mediawiki => bip-0144.mediawiki (98%)
 rename {bip-codeshark-segwit-peer-services => bip-0144}/witnesstx.png (100%)

diff --git a/README.mediawiki b/README.mediawiki
index b45c17a06d..ce44289cbd 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -379,6 +379,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Suhas Daftuar
 | Standard
 | Draft
+|-
+| [[bip-0144.mediawiki|144]]
+| Segregated Witness (Peer Services)
+| Eric Lombrozo, Pieter Wuille
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-codeshark-segwit-peer-services.mediawiki b/bip-0144.mediawiki
similarity index 98%
rename from bip-codeshark-segwit-peer-services.mediawiki
rename to bip-0144.mediawiki
index 78412c1dea..ed8cf2be67 100644
--- a/bip-codeshark-segwit-peer-services.mediawiki
+++ b/bip-0144.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: x
+  BIP: 144
   Title: Segregated Witness (Peer Services)
   Author: Eric Lombrozo 
           Pieter Wuille 
@@ -99,7 +99,7 @@ computed from the new witness serialization. (Note that transactions
 with an empty witness always use the old serialization,
 and therefore, they have witness hash equal to normal hash.)
 
-
+
 
 === Relay ===
 New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
diff --git a/bip-codeshark-segwit-peer-services/witnesstx.png b/bip-0144/witnesstx.png
similarity index 100%
rename from bip-codeshark-segwit-peer-services/witnesstx.png
rename to bip-0144/witnesstx.png

From 9bcd89a221a9b39e3f9bd9fa0eb669c2d52a6cce Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 18:00:58 +0000
Subject: [PATCH 0123/2326] README: Common formatting for name lists

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

diff --git a/README.mediawiki b/README.mediawiki
index 6244ca79be..7eba079aa6 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -153,7 +153,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |- style="background-color: #cfffcf"
 | [[bip-0037.mediawiki|37]]
 | Bloom filtering
-| Mike Hearn and Matt Corallo
+| Mike Hearn, Matt Corallo
 | Standard
 | Accepted
 |-
@@ -268,7 +268,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0068.mediawiki|68]]
 | Relative lock-time through consensus-enforced sequence numbers
-| Mark Friedenbach, BtcDrak and Nicolas Dorier
+| Mark Friedenbach, BtcDrak, Nicolas Dorier
 | Standard
 | Draft
 |-
@@ -346,19 +346,19 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0111.mediawiki|111]]
 | NODE_BLOOM service bit
-| Matt Corallo and Peter Todd
+| Matt Corallo, Peter Todd
 | Standard
 | Draft
 |-
 | [[bip-0112.mediawiki|112]]
 | CHECKSEQUENCEVERIFY
-| BtcDrak and Mark Friedenbach
+| BtcDrak, Mark Friedenbach
 | Standard
 | Draft
 |-
 | [[bip-0113.mediawiki|113]]
 | Median time-past as endpoint for lock-time calculations
-| Thomas Kerin and Mark Friedenbach
+| Thomas Kerin, Mark Friedenbach
 | Standard
 | Draft
 |-
@@ -393,7 +393,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Draft
 |-
 | [[bip-0130.mediawiki|130]]
-| sendheaders message 
+| sendheaders message
 | Suhas Daftuar
 | Standard
 | Draft
@@ -406,7 +406,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0141.mediawiki|141]]
 | Segregated Witness (Consensus layer)
-| Eric Lombrozo, Johnson Lau, and Pieter Wuille
+| Eric Lombrozo, Johnson Lau, Pieter Wuille
 | Standard
 | Draft
 |-

From e516dc796b28d80902cd64a252fa6da43290e0e1 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 18:04:01 +0000
Subject: [PATCH 0124/2326] BIP 0001: Update correspondance email

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

diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki
index db7a6efd1a..d8fab7b532 100644
--- a/bip-0001.mediawiki
+++ b/bip-0001.mediawiki
@@ -147,7 +147,7 @@ The current BIP editor is Luke Dashjr who can be contacted at [[mailto:luke_bipe
 
 ==BIP Editor Responsibilities & Workflow==
 
-A BIP editor must subscribe to the Bitcoin development mailing list. All BIP-related correspondence should be sent (or CC'd) to gmaxwell@gmail.com.
+The BIP editor subscribes to the Bitcoin development mailing list. All BIP-related correspondence should be sent (or CC'd) to luke_bipeditor@dashjr.org.
 
 For each new BIP that comes in an editor does the following:
 

From 0deca071e2c32b4f5ff1101253d94a8b871868c1 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 18:48:34 +0000
Subject: [PATCH 0125/2326] README: Fix BIP 122 number

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

diff --git a/README.mediawiki b/README.mediawiki
index 7eba079aa6..8e821185d7 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -374,7 +374,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
-| [[bip-0122.mediawiki|121]]
+| [[bip-0122.mediawiki|122]]
 | URI scheme for Blockchain references / exploration
 | Marco Pontello
 | Standard

From ceb4f76df7f989e3fc6aece14fa55cd3f8fe7419 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 18:52:25 +0000
Subject: [PATCH 0126/2326] BIP 0001: Minor language nit

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

diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki
index 8512b76c54..dbc6e042ea 100644
--- a/bip-0001.mediawiki
+++ b/bip-0001.mediawiki
@@ -26,7 +26,7 @@ There are three kinds of BIP:
 
 The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this.
 
-Vetting an idea publicly before going as far as writing a BIP is meant to both save the potential author and the wider community time. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the relevant Bitcoin development work flow with a patch submission to the relevant Bitcoin issue tracker.
+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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker.
 
 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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed.
 

From 4c1c02a94dc19b79e372c57a9020a6bb14bfc737 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 18:55:01 +0000
Subject: [PATCH 0127/2326] BIP 0001: Clarification of when changes don't need
 a BIP

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

diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki
index aac6ba4eeb..e1abaddc99 100644
--- a/bip-0001.mediawiki
+++ b/bip-0001.mediawiki
@@ -26,7 +26,7 @@ There are three kinds of BIP:
 
 The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this.
 
-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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need a BIP and can be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker.
+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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need standardisation between multiple projects; these don't need a BIP and should be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker.
 
 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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed.
 

From d1e0deef254d5e7ab1903e2088c8c4a6594ba9a1 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 8 Jan 2016 20:42:57 +0000
Subject: [PATCH 0128/2326] Fix markdown

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

diff --git a/README.mediawiki b/README.mediawiki
index 8e821185d7..dec53f945a 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -303,9 +303,9 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Draft
 |-
 | [[bip-0099.mediawiki|99]]
-| Motivation and deployment of consensus rule changes
+| Motivation and deployment of consensus rule changes ([soft/hard]forks)
 | Jorge Timón
-| Informational | Process
+| Informational / Process
 | Draft
 |-
 | [[bip-0101.mediawiki|101]]
diff --git a/bip-0099.mediawiki b/bip-0099.mediawiki
index c40bacb6a4..b416e6866d 100644
--- a/bip-0099.mediawiki
+++ b/bip-0099.mediawiki
@@ -3,7 +3,7 @@
   Title: Motivation and deployment of consensus rule changes ([soft/hard]forks)
   Author: Jorge Timón 
   Status: Draft
-  Type: Informational | Process
+  Type: Informational / Process
   Created: 2015-06-20
   Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-June/008936.html
 
From 14ce2bcead9748d472730d33f140abaaaa3b28fa Mon Sep 17 00:00:00 2001 From: Peter Todd Date: Mon, 11 Jan 2016 05:02:19 -0500 Subject: [PATCH 0129/2326] Minor: Fix BIP65 status in README --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index dec53f945a..fdfb988d7a 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -252,7 +252,7 @@ Those proposing changes should consider that ultimately consent may rest with th | OP_CHECKLOCKTIMEVERIFY | Peter Todd | Standard -| Draft +| Accepted |- | [[bip-0066.mediawiki|66]] | Strict DER signatures From 858a4a70ea2dfde140c22e5535d1eabb182663b2 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Mon, 11 Jan 2016 19:08:33 +0800 Subject: [PATCH 0130/2326] New commitment structure, sigop limits, etc --- bip-0141.mediawiki | 198 ++++++++++++++++++++++----------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index ac44d8700a..7a5c28c122 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -21,7 +21,7 @@ The entirety of the transaction's effects are determined by output consumption ( By removing this data from the transaction structure committed to the transaction merkle tree, several problems are fixed: -# '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was authorized is no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach (BIP62): +# '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was signed are no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach ([https://github.com/bitcoin/bips/edit/master/bip-0062.mediawiki BIP62]): #* It prevents involuntary transaction malleability for any type of scripts, as long as all inputs are signed (with at least one CHECKSIG or CHECKMULTISIG operation) #* In the case of an m-of-n CHECKMULTISIG script, a transaction is malleable only with agreement of m private key holders (as opposed to only 1 private key holder with BIP62) #* It prevents involuntary transaction malleability due to unknown ECDSA signature malleability @@ -30,106 +30,67 @@ By removing this data from the transaction structure committed to the transactio # '''Some constraints could be bypassed with a soft fork''' by moving part of the transaction data to a structure unknown to current protocol, for example: #* Size of witness could be ignored / discounted when calculating the block size, effectively increasing the block size to some extent #* Hard coded constants, such as maximum data push size (520 bytes) or sigops limit could be reevaluated or removed -#* New script system could be introduced without any limitation from the existing script semantic -# '''Additional data required for fraud proofs can be added to witness'''. Extra data can be committed that allows short proofs of block invalidity that SPV nodes can quickly verify. -#* Backlinks for the outputs spent by the transaction's inputs can be provided. These backlinks consist of a block hash and an offset that thin clients can easily query and check to verify that the outputs exist. -#* Sum trees for transaction inputs and outputs can be committed making it possible to construct short proofs that no new coins are created in any noncoinbase transaction and that the miner does not add excessive fees to the coinbase transaction. +#* New script system could be introduced without any limitation from the existing script semantic. For example, a new transaction digest algorithm for transaction signature verification is described in [https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP143] ==Specification== === Commitment structure === -!!!DRAFT ONLY!!! - -A new block rule is added which requires a commitment to the witness hashes in the coinbase (or an OP_RETURN output of a specific transaction, or somewhere else) - -(Hardfork after x year to move the commitment to block header?) - -Witness hash is the double SHA256 of a transaction including witnesses: http://blockhawk.net/diagrams/witnesstx.png. For the coinbase transaction, its witness hash is assumed to be 0x0000....0000. +A new block rule is added which requires a commitment to the witness hashes, the double SHA256 of a transaction including witnesses. The witness hash of coinbase transaction is assumed to be 0x0000....0000. A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header. -No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room from spam. - -==== Proposal 1: balance tree (the current implementation) ==== -The commitment is a push of exactly 41 bytes: -*The first 4 bytes are commitment header: 0xaa21a9ed -*The next 4 bytes describe a nonce -*The next 1 byte is the "levels bytes", describes the number of levels in a Merkle tree (0 to 32) -*The next 32 bytes is a commitment root hash (not the witness root hash) - -Locator of the witness root hash is defined as: - -
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
- -The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. - -The coinbase's input's witness must consist of a single byte array of 32 * levels bytes, and are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. - -====Proposal 2: imbalance tree==== -The commitment is a push of exactly 40 bytes: -*The first 4 bytes are commitment header: 0xaa21a9ed -*The next 4 bytes describe a nonce -*The next 32 bytes is a commitment root hash (not the witness root hash) - -Locator of the witness root hash is defined as: +The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is: + + 1-byte - OP_RETURN (0x6a) + 1-byte - Push the following 36 bytes (0x24) + 4-byte - Commitment header (0xaa21a9ed) + 32-byte - Commitment hash: Double-SHA256(witness root hash|witness nonce) + + 39th byte onwards: Optional data with no consensus meaning + +and the coinbase's input's witness must consist of a single 32-byte array for the witness nonce. -
SHA256('WitnessV1\x00\x00\x00\x00\x00\x00\x00' || nonce)
+If there are more than one scriptPubKey matching the pattern, the one with highest output index is assumed to be the commitment. -The first levels bits of locator, interpreted in little endian, are assumed to be the position in the leaves of the Merkle tree where the witness root hash goes. +=== Witness program === -The coinbase's input's witness must consist of a single byte array, which the size must be a multiple of 32 bytes but not bigger than 32*32 bytes. These are assumed to be the Merkle path to connect the witness root hash to the commitment root hash. Depth of the commitment is determined by the length of the path. If the depth of the tree is 0, the path should be represented by 0x00, and the witness root hash will be same as the commitment root hash. +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 32 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". -=== Block size limit === -Blocks are currently limited to 1 MB total size. We change this restriction as follows: +New rules for scriptSig: +* In case the scriptPubKey pushes a version byte and witness program directly, the scriptSig must be exactly empty. +* In case the redeemScript pushes a version byte and witness program, the scriptSig must be exactly the single push of the redeemScript. -We define a base block size sb consisting of the existing header and transactions, a witness size sw consisting of only the size of the witness data, and a virtual block size sv = sb + sw/4. +If the version byte is 0, the witness program is the actual script: +* The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. +* The program must not fail and must result in exactly a single TRUE on the stack. -The new rule is sv <= 1 MB. +If the version byte is 1, the witness program must be 32 bytes, as a SHA256 hash of the actual script: +* The witness must consist of an input stack to feed to the program, followed by the serialized program. +* The serialized program is popped off the initial witness stack. SHA256 of the serialized program must match the hash pushed in the witness program. +* The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. +* The script must not fail, and result in exactly a single TRUE on the stack. +* If the witness program is between 2 and 31 bytes, the script must fail. -=== Witness program === +If the version byte is 2 to 16, no further interpretation of the witness program or witness happens. -* 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 32 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 case the scriptPubKey pushes a version byte and witness program directly, the scriptSig must be exactly empty. -** In case the redeemScript pushes a version byte and witness program, the scriptSig must be exactly the single push of the redeemScript. +=== Other consensus critical limits === -** If the version byte is 0, the WP is the actual script. -*** The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. -*** The program must not fail, and result in exactly a single TRUE on the stack. -** If the version byte is 1, the WP must be 32 bytes, as a SHA256 hash of the actual script. -*** The witness must consist of an input stack to feed to the program, followed by the serialized program. -*** The serialized program is popped off the initial witness stack. Hash of the serialized program must match the hash pushed in the witness program. -*** The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. -*** The script must not fail, and result in exactly a single TRUE on the stack. -** If the version byte is 2 to 16, no further interpretation of the witness program or witness happens. +==== Block size ==== -=== Other consensus critical constraints === +Blocks are currently limited to 1,000,000 bytes (1MB) total size. We change this restriction as follows: -== Block size analysis == -WORK IN PROGRESS +''Block cost'' is defined. The cost of each byte in the existing header and transactions is 4, while the cost of each byte in witness data is 1. -Definitions: -
- Core block size (CBS): The block size as seen by a non-upgrading full node
- Witness size (WS): The total size of witness data in a block
- Total block size (TBS): CBS + WS
- Witness discount (WD): A discount factor for witness data in VBS calculation (1 = no discount)
- Virtual block size (VBS): CBS + (WS * WD)
- Witness adoption (WA): Proportion (in size) of new format transactions among all transactions
- Prunable ratio (PR): Proportion of signature data size in a transaction
-
+The new rule is total ''block cost'' ≤ 4,000,000. -With some transformation it could be shown that: -
- TBS = CBS / (1 - WA * PR)
-     = VBS / (1 - WA * PR * (1 - WD))
-
- -In order to keep the proposal as a soft fork, the CBS must not have a upper limit higher than 1MB. +==== Sigops ==== -The PR heavily depends on the transaction script type and input-output ratio. For example, the PR of 1-in 2-out P2PKH and 1-in 1-out 2-of-2 multisig P2SH are about 47% and 72% respectively. According to the data presented by Pieter Wuille on 7 December 2015, the current average PR on the blockchain is about 60%. +Sigops per block is currently limited to 20,000. We change this restriction as follows: +''Sigop cost'' is defined. The cost of a sigop in traditoinal script is 4, while the cost of a sigop in witness program is 1. +The new rule is total ''sigop cost'' ≤ 80,000. == Examples == @@ -139,15 +100,16 @@ The following example is a version 0 witness program, equivalent to the existing witness: scriptSig: (empty) - scriptPubKey: OP_0 <0x76A914{20-byte-hash-value}88AC> + scriptPubKey: 0 EQUALVERIFY CHECKSIG> + (0x001976A914{20-byte-hash}88AC) -The OP_0 indicates the following push is a version 0 witness program. The witness program is deserialized and becomes: +The '0' indicates the following push is a version 0 witness program. The witness program is deserialized and becomes: - DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + DUP HASH160 <20-byte-hash> EQUALVERIFY CHECKSIG The script is executed with the data from witness - DUP HASH160 <20byte-hash-value> EQUALVERIFY CHECKSIG + DUP HASH160 <20-byte-hash> EQUALVERIFY CHECKSIG Comparing with a P2PKH output, the witness program equivalent occupies 2 more bytes in the scriptPubKey, while moving the signature and public key from scriptSig to witness. @@ -155,39 +117,57 @@ Comparing with a P2PKH output, the witness program equivalent occupies 2 more by The following example is an 1-of-2 multi-signature version 1 witness program. - witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> + witness: 0 <1 2 CHECKMULTISIG> scriptSig: (empty) - scriptPubKey: OP_1 <0x{32-byte-hash-value}> + scriptPubKey: 1 <32-byte-hash> + (0x5120{32-byte-hash}) -The OP_1 in scriptPubKey indicates the following push is a version 1 witness program. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash-value in scriptPubKey, and deserialized: +The '1' in scriptPubKey indicates the following push is a version 1 witness program. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash in scriptPubKey, and deserialized: - 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + 1 2 CHECKMULTISIG The script is executed with the remaining data from witness: - 0 1 <33-byte-pubkey1> <33-byte-pubkey2> 2 CHECKMULTISIG + 0 1 2 CHECKMULTISIG Since the actual program is larger than 32 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. -The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 2^80 work is not infeasible anymore (By the end of 2015, 2^84 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. +The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 280 work is not infeasible anymore (By the end of 2015, 284 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. === Witness program nested in Pay-to-Script-Hash === The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. - witness: 0 <0x5121{33-byte-pubkey1}21{33-byte-pubkey2}52AE> - scriptSig: <0x5120{32-byte-hash-value}> - scriptPubKey: HASH160 <20-byte-hash-value> EQUAL + witness: 0 <1 2 CHECKMULTISIG> + scriptSig: <1 <32-byte-hash>> + (5120{32-byte-hash}) + scriptPubKey: HASH160 <20-byte-hash> EQUAL + (0x76A914{20-byte-hash}88AC) -The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash-value in scriptPubKey, and interpreted as: +The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash in scriptPubKey, and interpreted as: - OP_1 <0x{32-byte-hash-value}> + 1 <32-byte-hash> The version 1 witness program is then executed as described in the last example Comparing with the last example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. +=== Extensible commitment structure === + +The new commitment in coinbase transaction is a hash of the witness root hash and a witness nonce. The nonce which currently has no consensus meaning, serves two purposes: + +* It allows new commitment values for future softforks. For example, if a new consensus-critical commitment is required in the future, the commitment in coinbase becomes: + + Double-SHA256(Witness root hash|Hash(new commitment|witness nonce)) + +:: For backward compatibility, the Hash(new commitment|witness nonce) will go to the coinbase witness, and the witness nonce will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way. + +* Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, may utilize this witness nonce. However, they must not be committed directly as the nonce, or the external system may be forced to hardfork when Bitcoin introduces more consensus-critical commitments. Instead, they should use the nonce as the root of an extensible commitment tree, and should not make any assumption about the location and depth of their commitments in the tree. For example, in the external system, it may use a flag to indicate the actual location of the commitments with the Merkle paths provided. + +The optional data space following the commitment also leaves room for metadata of future softforks. + === Trust-free unconfirmed transaction dependency chain === + Segregated witness fixes the problem of transaction malleability fundamentally, which enables the building of unconfirmed transaction dependency chains in a trust-free manner. Two parties, Alice and Bob, may agree to send certain amount of Bitcoin to a 2-of-2 multisig output (the "funding transaction"). Without signing the funding transaction, they may create another transaction, time-locked in the future, spending the 2-of-2 multisig output to third account(s) (the "spending transaction"). Alice and Bob will sign the spending transaction and exchange the signatures. After examining the signatures, they will sign and commit the funding transaction to the blockchain. Without further action, the spending transaction will be confirmed after the lock-time and release the funding according to the original contract. It also retains the flexibility of revoking the original contract before the lock-time, by another spending transaction with shorter lock-time, but only with mutual-agreement of both parties. @@ -197,7 +177,9 @@ Such setups is not possible with BIP62 as the malleability fix, since the spendi Unconfirmed transaction dependency chain is a fundamental building block of more sophisticated payment networks, such as duplex micropayment channel and the Lightning Network, which have the potential to greatly improve the scalability and efficiency of the Bitcoin system. == Future extensions == + === Compact fraud proof for SPV nodes === + Bitcoin right now only has two real security models. A user either runs a full-node which validates every block with all rules in the system, or a SPV (Simple Payment Verification) client which only validates the headers as a proof of publication of some transactions. The Bitcoin whitepaper suggested that SPV nodes may accept alerts from full nodes when they detect an invalid block, prompting the SPV node to download the questioned blocks and transactions for validation. This approach, however, could become a DoS attack vector as there is virtually no cost to generate a false alarm. An alarm must come with a compact, yet deterministic fraud proof. In the current Bitcoin protocol, it is possible to generate compact fraud proof for almost all rules except a few: @@ -206,9 +188,15 @@ In the current Bitcoin protocol, it is possible to generate compact fraud proof # It is not possible to prove the violation of any block specific constraints, such as size and sigop limits, without showing the whole block (and all input transactions in the case of sigop limit) # It is not possible to prove the spending of a non-existing input without showing all transaction IDs in the blockchain way back to the genesis block. -It is possible to prove the first 2 types of fraud if a block is committed to a Merkle-sum-tree of the fee, size, and sigop count of each transaction. It is also possible to prove the last type of fraud if a block is committed to a Merkle tree with the originating block height and transaction index of all inputs. These commitments could be included in the extensible witness commitment through a soft fork and will be transparent to nodes that do not understand such new rules. +Extra witness data can be committed that allows short proofs of block invalidity that SPV nodes can quickly verify: + +# Sum trees for transaction fee can be committed making it possible to construct short proofs that the miner does not add excessive fees to the coinbase transaction. Similar for the block size and sigop count limit. +# Backlinks for the outputs spent by the transaction's inputs can be provided. These backlinks consist of a block hash and an offset that thin clients can easily query and check to verify that the outputs exist. + +These commitments could be included in the extensible commitment structure through a soft fork and will be transparent to nodes that do not understand such new rules. === New script system === + 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. @@ -216,23 +204,26 @@ Examples of new script system include Schnorr signatures which reduce the size o The 32-byte limitation for witness program could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable through a softfork. === Per-input lock-time and relative-lock-time === -Currently there is only one nLockTime field in a transaction and all inputs must share the same value. BIP68 enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. -With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like BIP65 and BIP112). +Currently there is only one nLockTime field in a transaction and all inputs must share the same value. [https://github.com/bitcoin/bips/edit/master/bip-0068.mediawiki BIP68] enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. + +With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like [https://github.com/bitcoin/bips/edit/master/bip-0065.mediawiki BIP65] and [https://github.com/bitcoin/bips/edit/master/bip-0112.mediawiki BIP112]). == Backward compatibility == + As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. '''What a non-upgraded wallet can do''' * Receiving bitcoin from non-upgraded and upgraded wallets * Sending bitcoin to non-upgraded wallets -* Sending bitcoin to upgraded wallets using a P2SH address (a less efficient way to use segregated witness) +* Sending bitcoin to upgraded wallets using a P2SH address (less efficient) +* Sending bitcoin to upgraded wallets using a native witness program (more efficient) through [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki BIP70] payment protocol '''What a non-upgraded wallet cannot do''' * Validating segregated witness transaction. It assumes such a transaction is always valid -* Sending bitcoin to upgraded wallets using a native witness program (a more efficient way to use segregated witness) +* Sending bitcoin to upgraded wallets using a native witness program if BIP70 is not supported == Deployment == @@ -248,7 +239,6 @@ invalid, and all further blocks enforce the new rules. 1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus no bits in nVersion are permanently lost.) - === SPV Clients === While SPV clients are unable to fully validate blocks, @@ -258,10 +248,20 @@ nVersion >= 5 to prevent false confirmations from the remaining 5% of non-upgraded miners when the 95% threshold has been reached. == Credits == + Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork. == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit + +https://github.com/sipa/bitcoin/commits/segwit2 + +== References == + +*[https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki BIP16 Pay to Script Hash] +*[https://github.com/bitcoin/bips/blob/master/bip-0142.mediawiki BIP142 Address Formats for Witness Program] +*[https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP143 Transaction signature verification for version 0 and version 1 witness program] +*[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki BIP144 Segregated Witness (Peer Services)] == Copyright == + This document is placed in the public domain. From 5ec3d52181b6b4558d6b364a2024776dc56f7945 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 11 Jan 2016 11:05:26 -0800 Subject: [PATCH 0131/2326] Updating abstract and motivation with changes made by the Netki team --- bip-invoicerequest-extension.mediawiki | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index b672bfd466..ee8fb70ef3 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -12,20 +12,30 @@ ==Abstract== -This BIP is an extension to BIP70 that extends the payment protocol to prevent PaymentRequest interception / modification -during transmission using ephemeral key encryption. This also allows permissioned release of a PaymentRequest to a requestor -and allows a requestor to supply a certificate and signature to the PaymentRequest creator. +This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol. -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and +# It allows the requestor of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know who they are transacting with. + +# It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details. + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. ==Motivation== -The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment -information in a permissioned and encrypted way such that wallet address communication can become a more automated process. -Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order -to facilitate identification for address release. This also allows for automated creation of off blockchain transaction -logs that are human readable, containing who you transacted with, in addition to the information that it contains today. +The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. + +The motivation for this extension to BIP70 is twofold: + +# Ensure that the payment details can only be seen by the participants in the transaction, and not any third party. By encrypting at the application layer we protect the payment request from being intercepted by a man in the middle, and allow mobile and desktop wallets to use a server to act as a “store and forward server” or “meet point” for serving Payment Requests without having to worry the server operator can spy on their transactions. + +# Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: +** Make bitcoin logs more human readable +** Give the user the ability to decide who to release payment details to +** Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements +** Allow for an open standards based way to meet regulatory requirements + +In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. ==Definitions== {| class="wikitable" From 6c537eb0a74a9ca39052f6671f09afc4c1ff6169 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 11 Jan 2016 11:06:47 -0800 Subject: [PATCH 0132/2326] Fix bullet in motivation --- bip-invoicerequest-extension.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index ee8fb70ef3..89c29f8711 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -30,6 +30,7 @@ The motivation for this extension to BIP70 is twofold: # Ensure that the payment details can only be seen by the participants in the transaction, and not any third party. By encrypting at the application layer we protect the payment request from being intercepted by a man in the middle, and allow mobile and desktop wallets to use a server to act as a “store and forward server” or “meet point” for serving Payment Requests without having to worry the server operator can spy on their transactions. # Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: + ** Make bitcoin logs more human readable ** Give the user the ability to decide who to release payment details to ** Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements From 0c93de978e4a6c96a6df701ab80f83b35cd9e49f Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 11 Jan 2016 11:07:18 -0800 Subject: [PATCH 0133/2326] Fix bullet in motivation --- bip-invoicerequest-extension.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 89c29f8711..3d18e411f7 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -31,10 +31,10 @@ The motivation for this extension to BIP70 is twofold: # Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: -** Make bitcoin logs more human readable -** Give the user the ability to decide who to release payment details to -** Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements -** Allow for an open standards based way to meet regulatory requirements +* Make bitcoin logs more human readable +* Give the user the ability to decide who to release payment details to +* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements +* Allow for an open standards based way to meet regulatory requirements In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. From ae529c3f0488fec6ebc335f2bdb0e623af6a6a5c Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 12 Jan 2016 03:09:50 +0800 Subject: [PATCH 0134/2326] Fix links in BIP142-144. Corrections in BIP142. --- bip-0142.mediawiki | 6 +++--- bip-0143.mediawiki | 6 +++--- bip-0144.mediawiki | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index 7efeca74bc..fdf52027a2 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -19,8 +19,8 @@ To define standard payment addresses for native segwit transactions to promote e === P2PKH segwit address === -The first new Bitcoin address format defined is specific to pay-to-public-key-hash segwit transaction. The scriptPubKey is a single push of version-0 witness program in this form, - <0x0076A914{20-byte-hash-value}88AC> +The first new Bitcoin address format defined is specific to pay-to-public-key-hash segwit transaction. The scriptPubKey is an OP_0 followed by a push of version 0 witness program: + OP_0 EQUALVERIFY CHECKSIG> The new address is encoded exactly in the same way as the original pay-to-public-key-hash address: base58-encode: [1-byte version][20-byte-hash-value][4-byte checksum] Version byte is 0x19 for a main-network address, 0x41 for a testnet address. The following 20-byte is the public key hash. And the 4-byte checksum is the first four bytes of the double SHA256 hash of the version and public key hash. @@ -151,7 +151,7 @@ From arbitrary witness program to general segwit address: https://gist.github.co * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]] * [[bip-0016.mediawiki|BIP 16: Pay to Script Hash (aka "/P2SH/")]] -* [[bip-xxxx.mediawiki|BIP x: Segregated Witness]] https://github.com/bitcoin/bips/pull/265 +* [[bip-0141.mediawiki|BIP 141: Segregated Witness]] == Copyright == This work is placed in the public domain. diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 276e2cb1e5..4aca2db6ba 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -19,7 +19,7 @@ Unfortunately, there are at least 2 weaknesses in the original transaction diges * For the verification of each signature, the amount of data hashing is proportional to the size of the transaction. Therefore, data hashing grows in O(n2) as the number of sigops in a transaction increases. While a 1 MB block would normally take 2 seconds to verify with an average computer in 2015, a 1MB transaction with 5569 sigops may take 25 seconds to verify. This could be fixed by optimizing the digest algorithm by introducing some reusable “midstate”, so the time complexity becomes O(n). [https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-2292 CVE-2013-2292][https://bitcointalk.org/?topic=140078 New Bitcoin vulnerability: A transaction that takes at least 3 minutes to verify][http://rusty.ozlabs.org/?p=522 The Megatransaction: Why Does It Take 25 Seconds?] * The algorithm does not involve the amount of Bitcoin being spent by the input. This is usually not a problem for online network nodes as they could request for the specified transaction to acquire the output value. For an offline transaction signing device ("cold wallet"), however, the unknowing of input amount makes it impossible to calculate the exact amount being spent and the transaction fee. To cope with this problem a cold wallet must also acquire the full transaction being spent, which could be a big obstacle in the implementation of lightweight, air-gapped wallet. By including the input value of part of the transaction digest, a cold wallet may safely sign a transaction by learning the value from an untrusted source. In the case that a wrong value is provided and signed, the signature would be invalid and no funding might be lost. [https://bitcointalk.org/index.php?topic=181734.0 SIGHASH_WITHINPUTVALUE: Super-lightweight HW wallets and offline data] -Deploying the aforementioned fixes in the original script system is not a simple task. That would be either a hardfork, or a softfork for new sigops without the ability to remove or insert stack items. However, the introduction of segregated witness softfork offers an opportunity to define a different set of script semantics without disrupting the original system, as the unupgraded nodes would always consider such a transaction output is spendable by arbitrary signature or no signature at all. [https://github.com/CodeShark/bips/blob/segwit/bip-codeshark-jl2012-segwit.mediawiki BIPx: Segregated Witness (Consensus layer)] +Deploying the aforementioned fixes in the original script system is not a simple task. That would be either a hardfork, or a softfork for new sigops without the ability to remove or insert stack items. However, the introduction of segregated witness softfork offers an opportunity to define a different set of script semantics without disrupting the original system, as the unupgraded nodes would always consider such a transaction output is spendable by arbitrary signature or no signature at all. [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141: Segregated Witness (Consensus layer)] == Specification == A new transaction digest algorithm is defined, but only applicable to sigops in version 0 and version 1 witness program: @@ -114,7 +114,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit == Deployment == -This proposal is deployed with Segregated Witness softfork (BIP x) +This proposal is deployed with Segregated Witness softfork (BIP 141) == Backward compatibility == @@ -122,7 +122,7 @@ As a soft fork, older software will continue to operate without modification. No == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit +https://github.com/sipa/bitcoin/commits/segwit2 == References == diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki index ed8cf2be67..e3843a8f90 100644 --- a/bip-0144.mediawiki +++ b/bip-0144.mediawiki @@ -12,7 +12,7 @@ This BIP defines new messages and serialization formats for propagation of transactions and blocks committing to segregated witness structures. ==Motivation== -In addition to defining witness structures and requiring commitments in future blocks (BIPxxxx - Consensus segwit BIP), new mechanisms must be defined to allow peers to advertise support for segregated witness and to relay the witness structures and request them from other peers without breaking compatibility with older nodes. +In addition to defining witness structures and requiring commitments in future blocks ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141] - Consensus segwit BIP), new mechanisms must be defined to allow peers to advertise support for segregated witness and to relay the witness structures and request them from other peers without breaking compatibility with older nodes. ==Specification== From a81b43b49b09413961936f490afacec9df1106b5 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 11 Jan 2016 15:22:06 -0800 Subject: [PATCH 0135/2326] added some details, fix typo --- bip-invoicerequest-extension.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 3d18e411f7..9fd4cb8b49 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -35,6 +35,7 @@ The motivation for this extension to BIP70 is twofold: * Give the user the ability to decide who to release payment details to * Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements * Allow for an open standards based way to meet regulatory requirements +* Automate the creation and maintenance of an "address book" of payees, without relying on static addresses or BIP32 X-Pubs which can become outdated and/or compromise privacy In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. @@ -137,7 +138,7 @@ messages must set appropriate Content-Type headers as specified here: ====ReturnPaymentRequest==== Receiver must transmit ReturnPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -ReturnPaymentRequest messages must set appropritate Content-Type headers as specified here: +ReturnPaymentRequest messages must set appropriate Content-Type headers as specified here:
Content-Type: application/bitcoin-returnpaymentrequest
====Message or Communication Errors==== @@ -147,7 +148,7 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair -* nonce MUST be set to the current epoch time in microseconds +* nonce MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example) * Amount is optional * Set notification_url to URL that the Receiver will submit completed ReturnPaymentRequest to * If NOT including certificate, set pki_type to "none" From 63fcb73ab7a9e005ec996e2bd87631fc56655fbd Mon Sep 17 00:00:00 2001 From: Dr Washington Sanchez Date: Tue, 12 Jan 2016 13:37:03 +1000 Subject: [PATCH 0136/2326] Fixes - Spelling mistakes - Change in the deployment model - Corrected my acknowledgement to Austin 'Williams' --- bip-0107.mediawiki | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-0107.mediawiki b/bip-0107.mediawiki index 88a2c99076..4e96173a29 100644 --- a/bip-0107.mediawiki +++ b/bip-0107.mediawiki @@ -16,11 +16,11 @@ This BIP proposes a dynamic limit to the block size based on transaction volume. Over the next few years, large infrastructure investments will be made into: # Improving global network connectivity -# Improving block propogation across the Bitcoin network +# Improving block propagation across the Bitcoin network # Layer 2 services and networks for off-chain transactions # General efficiency improvements to transactions and the blockchain -* While there is a consensus between Bitcoin developers, miners, businesses and users that the block size needs to be increased, there is a lingering concern over the potential unintended consequences that may agument the trend towards network and mining centralization (largely driven by mining hardware such as ASICs) and thereby threaten the security of the network. +* While there is a consensus between Bitcoin developers, miners, businesses and users that the block size needs to be increased, there is a lingering concern over the potential unintended consequences that may augment the trend towards network and mining centralization (largely driven by mining hardware such as ASICs) and thereby threaten the security of the network. * In contrast, failing to respond to elevated on-chain transaction volume may lead to a consumer-failure of Bitcoin, where ordinary users - having enjoyed over 6 years of submitting transactions on-chain at relatively low cost - will be priced out of blockchain with the emergence of a prohibitive 'fee market'. * These two concerns must be delicately balanced so that all users can benefit from a robust, scalable, and neutral network. @@ -44,7 +44,7 @@ Over the next few years, large infrastructure investments will be made into: ** limitfreerelay also helps counter attempts to trigger a block size increase by 'penny-flooding' For example: -* When the dynamic rules for increasing the block size go live on January 1st 2020, the starting maximum block size wil be 6 MB +* When the dynamic rules for increasing the block size go live on January 1st 2020, the starting maximum block size will be 6 MB * IF >=3025 blocks are >= 3.6 MB, the new maximum block size become 6.6 MB. * The theoretical maximum block size at the end of 2020 would be ~20.7 MB, assuming all 13 increases are triggered every 4 weeks by the end of the year. @@ -59,7 +59,7 @@ For example: *** Setting the parameter too high may set the trigger sensitivity too low, causing transaction delays that are trying to be avoided in the first place *** Between September 2013-2015, the standard deviation measured from average block size (n=730 data points from blockchain.info) was ~ 0.13 MB or 13% of the maximum block size **** If blocks needed to be 90% full before an increase were triggered, normal variance in the average block size would mean some blocks would be full before an increase could be triggered -*** Therefore, we need a ''safe distance'' away from the maximum block size to avoid normal block size variance hitting the limit. The 60% level represents a 3 standard deviation distrance from the limit. +*** Therefore, we need a ''safe distance'' away from the maximum block size to avoid normal block size variance hitting the limit. The 60% level represents a 3 standard deviation distance from the limit. ** Why 3025 blocks? *** The assessment period is 4032 blocks or ~ 4 weeks, with the threshold set as 4032 blocks/0.75 + 1 *** Increases in the maximum block size should only occur after a sustained trend can be observed in order to: @@ -67,16 +67,16 @@ For example: ***# Increase the cost to trigger an increase by spam attacks or miner collusion with zero fee transactions *** In other words, increases to the maximum block size must be conservative but meaningful to relieve transaction volume pressure in response to true market demand ** Why 10% increase in the block size? -*** Increases in the block size are designed to be conservative and in balance with the number of theoretical opportunitites to increase the block size per year +*** Increases in the block size are designed to be conservative and in balance with the number of theoretical opportunities to increase the block size per year *** Makes any resources spent for spam attacks or miner collusion relatively expensive to achieve a minor increase in the block size. A sustained attack would need to be launched that may be too costly, and ideally detectable by the community ==Deployment== -''From BIP66:'' -We reuse the double-threshold switchover mechanism from BIP 34, with the same thresholds, but for nVersion = ''n''. The new rules are in effect for every block (at height H) with nVersion = ''n'' and at least 750 out of 1000 blocks preceding it (with heights H-1000..H-1) also have nVersion = ''n''. Furthermore, when 950 out of the 1000 blocks preceding a block do have nVersion = ''n'', nVersion = ''n-1'' blocks become invalid, and all further blocks enforce the new rules. +Similar deployment model to BIP101: +
Activation is achieved when 750 of 1,000 consecutive blocks in the best chain have a version number with the first, second, third, and thirtieth bits set (0x20000007 in hex). The activation time will be the timestamp of the 750'th block plus a two week (1,209,600 second) grace period to give any remaining miners or services time to upgrade to support larger blocks.
==Acknowledgements== -Thanks to Austin Hill, Brian Hoffman, Angel Leon, Bulukani Mlalazi, Chris Pacia, and Ryan Shea for their comments. +Thanks to Austin Williams, Brian Hoffman, Angel Leon, Bulukani Mlalazi, Chris Pacia, and Ryan Shea for their comments. ==Copyright== From 07b73c67dfa99cb13bf9e95dbbc3cad8d938936a Mon Sep 17 00:00:00 2001 From: Marco Pontello Date: Tue, 12 Jan 2016 16:46:52 +0100 Subject: [PATCH 0137/2326] added ABNF grammar --- bip-0122.mediawiki | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index 902aa02a54..d0258738b7 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -23,7 +23,7 @@ The same happens with posts and messages that reference some particular txs or b The URI follow this form: - blockchain:[//chain] + blockchain:[//]// Where: @@ -52,6 +52,18 @@ Where: | |} +====ABNF grammar==== + +
+blockchainuri = "blockchain:" ["//" chain] "/" object
+object = ("tx" "/" hash ) / ( "block" "/" (hash / blockheight ) ) /
+         ( "address" "/" address )
+chain = hash
+hash = 64HEXDIG
+blockheight = 1*15DIGIT ; 15 is somehow arbitrary, i.e. a "small" int.
+address = base58 ; https://en.wikipedia.org/wiki/Base58
+
+ ---- ===Definition of chain ID=== From 628a851062abbad73df8f48e3cd45dcffbdec914 Mon Sep 17 00:00:00 2001 From: MarcoPon Date: Tue, 12 Jan 2016 19:09:57 +0100 Subject: [PATCH 0138/2326] More consistent spacing. --- bip-0122.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index d0258738b7..d59e353793 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -56,8 +56,8 @@ Where:
 blockchainuri = "blockchain:" ["//" chain] "/" object
-object = ("tx" "/" hash ) / ( "block" "/" (hash / blockheight ) ) /
-         ( "address" "/" address )
+object = ("tx" "/" hash) / ("block" "/" (hash / blockheight)) /
+         ("address" "/" address)
 chain = hash
 hash = 64HEXDIG
 blockheight = 1*15DIGIT ; 15 is somehow arbitrary, i.e. a "small" int.
@@ -121,4 +121,4 @@ Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for suggestions about
 
 ==Copyright==
 
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.

From a8ace6d608b2068ce949993d4dd048fd759820ce Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Tue, 12 Jan 2016 19:06:32 -0500
Subject: [PATCH 0139/2326] Added BIP 124

---
 README.mediawiki   |   6 +++
 bip-0124.mediawiki | 123 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 129 insertions(+)
 create mode 100644 bip-0124.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index fdfb988d7a..d9d0e3283a 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -386,6 +386,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Informational
 | Draft
 |-
+| [[bip-0124.mediawiki|124]]
+| Hierarchical Deterministic Script Templates
+| Eric Lombrozo, William Swanson
+| Informational
+| Draft
+|-
 | [[bip-0125.mediawiki|125]]
 | Opt-in Full Replace-by-Fee Signaling
 | David Harding, Peter Todd
diff --git a/bip-0124.mediawiki b/bip-0124.mediawiki
new file mode 100644
index 0000000000..1c98db8700
--- /dev/null
+++ b/bip-0124.mediawiki
@@ -0,0 +1,123 @@
+
+  BIP:     BIP-124
+  Title:   Hierarchical Deterministic Script Templates
+  Authors: Eric Lombrozo , William Swanson
+  Status:  Draft
+  Type:    Informational
+  Created: 2015-11-20
+
+  Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-November/011795.html
+
+ +==Abstract== + +This BIP defines a script template format that can be used by wallets to deterministically generate scripts with specific authorization policies using the key derivation mechanism defined in BIP32. + +==Motivation== + +Currently existing wallets typically issue scripts in only a tiny handful of widely used formats. The most popular formats are pay-to-pubkey-hash and m-of-n pay-to-script-hash (BIP16). However, different wallets tend to use mutually incompatible derivation schemes to generate signing keys and construct scripts from them. Moreover, with the advent of hashlocked and timelocked contracts (BIP65, BIP112), it is necessary for different wallets to be able to cooperatively generate even more sophisticated scripts. + +In addition, there's a lot of ongoing work in the development of multilayered protocols that use the blockchain as a settlement layer (i.e. the Lightning Network). These efforts require sufficiently generalized templates to allow for rapidly evolving script designs. + +This BIP provides a generalized format for constructing a script template that guarantees that different wallets will all produce the same scripts for a given set of derivation paths according to BIP32. + +==Specification== + +===Keys=== + +An individual key is determined by a BIP32 derivation path and an index. For convenience, we introduce the following notation: + +'''A'''k = (derivation path for A)/k + +===Key Groups=== + +Let '''m'''i denote distinct BIP32 derivation paths. We define a key group of n keys as a set of key derivation paths with a free index k: + +{'''K'''k} = { '''m'''1/k, '''m'''2/k, '''m'''3/k, ..., '''m'''n/k } + +Key groups are useful for constructing scripts that are symmetric in a set of keys. Scripts are symmetric in a set of keys if the semantics of the script is unaffected by permutations of the keys. Key groups enforce a canonical form and can improve privacy. + +===Sorting=== + +We define a lexicographic sorting of the keys. (TODO: specification of sorting conventions - compressed pubkeys, encoding, etc...) + +Define {'''K'''k}j to be the jth element of the sorted keys for derivation index k. + +===Script Templates=== + +We construct script templates by inserting placeholders for data into a script. To denote a placeholder, we use the following notation: + +''Script''('''A''') = opcodes ['''A'''] opcodes + +We extend this notation to an arbitrary number of placeholders: + +''Script''('''X1''', '''X2''', ..., '''Xn''') = opcodes ['''X1'''] opcodes ['''X2'''] opcodes ... opcodes ['''Xn'''] opcodes + +We introduce the following convenient notation for sorted key groups: + +[{'''K'''k}] = [{'''K'''k}1] [{'''K'''k}2] ... [{'''K'''k}n] + +===Operations on Keys=== + +In some applications, we might want to insert the result of some operation performed on a key rather than the key itself into the script. For example, we might want to insert a Hash160 of key '''A'''k. We can use the following notation: + +[''Hash160''('''A'''k)] + +===Encoding=== + +TODO + +==Examples== + +===2-of-3 Multisig=== + +The script template is defined by: + +''Script''('''X''') = 2 ['''X'''] 3 OP_CHECKMULTISIG + +Letting '''K'''k = { '''m'''1/k, '''m'''2/k, '''m'''3/k }, the ''k''th script for this key group is denoted by ''Script''({'''K'''k}). + +===1-of-1 or 2-of-3=== + +The script template is defined by: + +''Script''('''A''', '''B''') =
+        OP_DUP ['''A'''] OP_CHECKSIG
+        OP_NOTIF
+                2 ['''B'''] 3 OP_CHECKMULTISIGVERIFY
+        OP_NOTIF
+        OP_ENDIF
+        OP_TRUE
+ +Let '''M'''k = '''m'''/k be a key of a superuser that can authorize all transactions and {'''K'''k} be a key group of three users that can only authorize transactions if at least two of them agree. + +The ''k''th script is given by ''Script''('''M'''k, {'''K'''k}). + +===Timelocked Contract=== + +The output is payable to Alice immediately if she knows the private key for '''A'''k. Bob must know the private key for '''B'''k and also wait for a timeout '''t''' before being able to spend the output. + +The script template is defined by: + +''Script''('''A''', '''B''', '''T''') =
+        OP_IF
+                OP_DUP OP_HASH160 [''Hash160''('''A''')] OP_EQUALVERIFY OP_CHECKSIG
+        OP_ELSE
+                ['''T'''] OP_CHECKLOCKTIMEVERIFY OP_DROP
+                OP_DUP OP_HASH160 [''Hash160''('''B''')] OP_EQUALVERIFY OP_CHECKSIG
+        OP_ENDIF + +The ''k''th script with timeout '''t''' is given by ''Script''('''A'''k, '''B'''k, '''t'''). + +==References== + +* [[bip-0016.mediawiki|BIP16 - Pay to Script Hash]] +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0065.mediawiki|BIP65 - OP_CHECKLOCKTIMEVERIFY]] +* [[bip-0112.mediawiki|BIP112 - CHECKSEQUENCEVERIFY]] +* [[https://lightning.network/lightning-network-paper.pdf|Lightning Network Whitepaper]] + +==Copyright== + +This document is placed in the public domain. + From fd6789cfc8674b1fd582dc7323b07abb2733b4e9 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Tue, 12 Jan 2016 19:16:46 -0500 Subject: [PATCH 0140/2326] Added BIP 83 --- README.mediawiki | 6 +++ bip-0083.mediawiki | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 bip-0083.mediawiki diff --git a/README.mediawiki b/README.mediawiki index fdfb988d7a..0df3d289f7 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -302,6 +302,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0083.mediawiki|83]] +| Dynamic Hierarchical Deterministic Key Trees +| Eric Lombrozo +| Standard +| Draft +|- | [[bip-0099.mediawiki|99]] | Motivation and deployment of consensus rule changes ([soft/hard]forks) | Jorge Timón diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki new file mode 100644 index 0000000000..d1da64592c --- /dev/null +++ b/bip-0083.mediawiki @@ -0,0 +1,92 @@ +
+  BIP:     BIP-83
+  Title:   Dynamic Hierarchical Deterministic Key Trees
+  Author:  Eric Lombrozo 
+  Status:  Draft
+  Type:    Standard
+  Created: 2015-11-16
+
+ +==Abstract== + +This BIP defines a scheme for key derivation that allows for dynamic creation of key hierarchies based on the algorithm described in BIP32. + +==Motivation== + +Several proposals have been made to try to standardize a structure for hierarchical deterministic wallets for the sake of interoperability (reference BIP32, BIP44, BIP45). However, all proposals to date have tried to impose a specific structure upfront without providing any flexibility for dynamic creation of new hierarchical levels with different semantics or mapping between different applications that use distinct structures. + +Instead of attempting to impose a specific structure upfront, this BIP proposes that we design the derivation in such a way that we can continue extending hierarchies arbitrarily and indefinitely. + +==Specification== + +BIP32 provides a hierarchical derivation scheme where every node in the tree can be either used to derive child nodes or used as a signing key for ECDSA. This means that as soon as we choose to use a node as a signing key, we can no longer derive children from that node. To draw an analogy to file systems, each node is either a file or a directory but never both. However, given the need to predictably know the location of new children, it is generally not a good idea to mix both signing keys and parent nodes at the same level in the hierarchy. This means that as soon as we've decided that a particular level in the hierarchy is to be used for signing keys, we've lost the ability to nest deeper levels into the tree. + +At every level of the hierarchy, we reserve the child with index 0 to allow further nesting, and for signing key parent nodes use child indices 1 to MAX_INDEX (231 - 1) for signing keys. We can use either hardened or nonhardened derivation. + +Let p denote a specific signing key parent node and k be an index greater than 0. The children signing keys are then: + +p / k + +with k > 0. + +To create sublevels, we derive the nested nodes: + +p / 0 / n + +with n ≥ 0. + +Each of these nodes can now contain signing key children of their own, and again we reserve index 0 to allow deeper nesting. + +==Notation== + +We propose the following shorthand for writing nested node derivations: + +p // n instead of p / 0 / n + +p //' n instead of p / 0' / n + +==Mappings== + +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. + +==Use Cases== + +===Account Hierarchies=== + +For all that follows, we assume that key indices k > 0 and parent node indices n ≥ 0. + +From a master seed m, we can construct a default account using the following derivations for nonhardened signing keys: + +m / 1 / k (for change/internal outputs) + +m / 2 / k (for invoice/external outputs) + +To create subaccount an, we use: + +an = m // n + +To generate keys for subaccount an, we use: + +an / 1 / k (for change/internal outputs) + +an / 2 / k (for invoice/external outputs) + +We can continue creating subaccounts indefinitely using this scheme. + +===Bidirectional Payment Channels=== + +In order to create a bidirectional payment channel, it is necessary that previous commitments be revokable. In order to revoke previous commitments, each party reveals a secret to the other that would allow them to steal the funds in the channel if a transaction for a previous commitment is inserted into the blockchain. + +By allowing for arbitrary nesting of sublevels, we can construct decision trees of arbitrary depth and revoke an entire branch by revealing a parent node used to derive all the children. + +==References== + +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[https://lightning.network/lightning-network-paper.pdf|Lightning Network Whitepaper]] + +==Copyright== + +This document is placed in the public domain. + From 5574301656f61142e45540e33dbe88b397a89a93 Mon Sep 17 00:00:00 2001 From: Peter Todd Date: Wed, 13 Jan 2016 14:52:18 -0500 Subject: [PATCH 0141/2326] Remove merge-mining suggest re: witness nonce --- bip-0141.mediawiki | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 7a5c28c122..64742564d5 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -154,15 +154,14 @@ Comparing with the last example, the scriptPubKey is 11 bytes smaller (with redu === Extensible commitment structure === -The new commitment in coinbase transaction is a hash of the witness root hash and a witness nonce. The nonce which currently has no consensus meaning, serves two purposes: +The new commitment in coinbase transaction is a hash of the witness root hash and a witness nonce. The nonce currently has no consensus meaning, but in the future allows new commitment values for future softforks. For example, if a new consensus-critical commitment is required in the future, the commitment in +coinbase becomes: -* It allows new commitment values for future softforks. For example, if a new consensus-critical commitment is required in the future, the commitment in coinbase becomes: - Double-SHA256(Witness root hash|Hash(new commitment|witness nonce)) :: For backward compatibility, the Hash(new commitment|witness nonce) will go to the coinbase witness, and the witness nonce will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way. -* Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, may utilize this witness nonce. However, they must not be committed directly as the nonce, or the external system may be forced to hardfork when Bitcoin introduces more consensus-critical commitments. Instead, they should use the nonce as the root of an extensible commitment tree, and should not make any assumption about the location and depth of their commitments in the tree. For example, in the external system, it may use a flag to indicate the actual location of the commitments with the Merkle paths provided. +Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, MUST NOT use the witness nonce to preserve the ability to do upgrades of the Bitcoin consensus protocol. The optional data space following the commitment also leaves room for metadata of future softforks. From d6dfcf167b8d568be2d671014ca7377356d1a74e Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Fri, 15 Jan 2016 22:14:45 +0000 Subject: [PATCH 0142/2326] Update reference implementation for BIP68 --- bip-0068.mediawiki | 265 ++++++++++++++++++++++++--------------------- 1 file changed, 143 insertions(+), 122 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 55905afcf7..e93d748807 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -49,139 +49,160 @@ The block produced time is equal to the median-time-past of its previous block. When the relative lock-time is block-based, it is interpreted as a minimum block-height constraint over the input's age. A relative block-based lock-time of zero indicates an input which can be included in any block. More generally, a relative block lock-time n can be included n blocks after the mining date of the output it is spending, or any block thereafter. -This is proposed to be accomplished by replacing IsFinalTx() and CheckFinalTx(), existing consensus and non-consensus code functions that return true if a transaction's lock-time constraints are satisfied and false otherwise, with LockTime() and CheckLockTime(), new functions that return a non-zero value if a transaction's lock-time or sequence number constraints are not satisfied and zero otherwise: +==Implementation== + +A reference implementation is provided by the following pull request + +https://github.com/bitcoin/bitcoin/pull/7184
-    enum {
-        /* Interpret sequence numbers as relative lock-time constraints. */
-        LOCKTIME_VERIFY_SEQUENCE = (1 << 0),
-    };
-    
-    /* Setting nSequence to this value for every input in a transaction
-     * disables nLockTime. */
-    static const uint32_t SEQUENCE_FINAL = 0xffffffff;
-    
-    /* If this flag set, CTxIn::nSequence is NOT interpreted as a
-     * relative lock-time. Setting the most significant bit of a
-     * sequence number disabled relative lock-time. */
-    static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31);
+enum {
+    /* Interpret sequence numbers as relative lock-time constraints. */
+    LOCKTIME_VERIFY_SEQUENCE = (1 << 0),
+};
     
-    /* If CTxIn::nSequence encodes a relative lock-time and this flag
-     * is set, the relative lock-time has units of 512 seconds,
-     * otherwise it specifies blocks with a granularity of 1. */
-    static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
+/* Setting nSequence to this value for every input in a transaction
+ * disables nLockTime. */
+static const uint32_t SEQUENCE_FINAL = 0xffffffff;
     
-    /* If CTxIn::nSequence encodes a relative lock-time, this mask is
-     * applied to extract that lock-time from the sequence field. */
-    static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
+/* If this flag set, CTxIn::nSequence is NOT interpreted as a
+ * relative lock-time. Setting the most significant bit of a
+ * sequence number disabled relative lock-time. */
+static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31);
     
-    /* In order to use the same number of bits to encode roughly the
-     * same wall-clock duration, and because blocks are naturally
-     * limited to occur every 600s on average, the minimum granularity
-     * for time-based relative lock-time is fixed at 512 seconds.
-     * Converting from CTxIn::nSequence to seconds is performed by
-     * multiplying by 512 = 2^9, or equivalently shifting up by
-     * 9 bits. */
-    static const int SEQUENCE_LOCKTIME_GRANULARITY = 9;
+/* If CTxIn::nSequence encodes a relative lock-time and this flag
+ * is set, the relative lock-time has units of 512 seconds,
+ * otherwise it specifies blocks with a granularity of 1. */
+static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
     
-    int64_t LockTime(const CTransaction &tx, int flags, const std::vector* prevHeights, const CBlockIndex& block)
-    {
-        assert(prevHeights == NULL || prevHeights->size() == tx.vin.size());
-        int64_t nBlockTime = (flags & LOCKTIME_MEDIAN_TIME_PAST)
-                                        ? block.GetAncestor(std::max(block.nHeight-1, 0))->GetMedianTimePast()
-                                        : block.GetBlockTime();
-
-        bool fEnforceBIP68 = static_cast(tx.nVersion) >= 2
-                          && flags & LOCKTIME_VERIFY_SEQUENCE;
-        
-        // Will be set to the equivalent height- and time-based nLockTime
-        // values that would be necessary to satisfy all relative lock-
-        // time constraints given our view of block chain history.
-        int nMinHeight = 0;
-        int64_t nMinTime = 0;
-        // Will remain equal to true if all inputs are finalized
-        // (CTxIn::SEQUENCE_FINAL).
-        bool fFinalized = true;
-        for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {
-            const CTxIn& txin = tx.vin[txinIndex];
-            // Set a flag if we witness an input that isn't finalized.
-            if (txin.nSequence == CTxIn::SEQUENCE_FINAL)
-                continue;
-            else
-                fFinalized = false;
+/* If CTxIn::nSequence encodes a relative lock-time, this mask is
+ * applied to extract that lock-time from the sequence field. */
+static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
     
-            // Do not enforce sequence numbers as a relative lock time
-            // unless we have been instructed to, and a view has been
-            // provided.
-            if (!fEnforceBIP68)
-                continue;
+/* In order to use the same number of bits to encode roughly the
+ * same wall-clock duration, and because blocks are naturally
+ * limited to occur every 600s on average, the minimum granularity
+ * for time-based relative lock-time is fixed at 512 seconds.
+ * Converting from CTxIn::nSequence to seconds is performed by
+ * multiplying by 512 = 2^9, or equivalently shifting up by
+ * 9 bits. */
+static const int SEQUENCE_LOCKTIME_GRANULARITY = 9;
     
-            // Sequence numbers with the most significant bit set are not
-            // treated as relative lock-times, nor are they given any
-            // consensus-enforced meaning at this point.
-            if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG)
-                continue;
-    
-            if (prevHeights == NULL)
-                continue;
-        
-            int nCoinHeight = (*prevHeights)[txinIndex];
-        
-            if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) {
-            
-                int64_t nCoinTime = block.GetAncestor(std::max(nCoinHeight-1, 0))->GetMedianTimePast();
-            
-                // Time-based relative lock-times are measured from the
-                // smallest allowed timestamp of the block containing the
-                // txout being spent, which is the median time past of the
-                // block prior.
-                nMinTime = std::max(nMinTime, nCoinTime + (int64_t)((txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) << CTxIn::SEQUENCE_LOCKTIME_GRANULARITY) - 1);
-            } else {
-                // We subtract 1 from relative lock-times because a lock-
-                // time of 0 has the semantics of "same block," so a lock-
-                // time of 1 should mean "next block," but nLockTime has
-                // the semantics of "last invalid block height."
-                nMinHeight = std::max(nMinHeight, nCoinHeight + (int)(txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) - 1);
-            }
+/**
+ * Calculates the block height and time which the transaction must be later than
+ * in order to be considered final in the context of BIP 68.  It also removes
+ * from the vector of input heights any entries which did not correspond to sequence
+ * locked inputs as they do not affect the calculation.
+ */
+static std::pair CalculateSequenceLocks(const CTransaction &tx, int flags, std::vector* prevHeights, const CBlockIndex& block)
+{
+    assert(prevHeights->size() == tx.vin.size());
+
+    // Will be set to the equivalent height- and time-based nLockTime
+    // values that would be necessary to satisfy all relative lock-
+    // time constraints given our view of block chain history.
+    // The semantics of nLockTime are the last invalid height/time, so
+    // use -1 to have the effect of any height or time being valid.
+    int nMinHeight = -1;
+    int64_t nMinTime = -1;
+
+    // tx.nVersion is signed integer so requires cast to unsigned otherwise
+    // we would be doing a signed comparison and half the range of nVersion
+    // wouldn't support BIP 68.
+    bool fEnforceBIP68 = static_cast(tx.nVersion) >= 2
+                      && flags & LOCKTIME_VERIFY_SEQUENCE;
+
+    // Do not enforce sequence numbers as a relative lock time
+    // unless we have been instructed to
+    if (!fEnforceBIP68) {
+        return std::make_pair(nMinHeight, nMinTime);
+    }
+
+    for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {
+        const CTxIn& txin = tx.vin[txinIndex];
+
+        // Sequence numbers with the most significant bit set are not
+        // treated as relative lock-times, nor are they given any
+        // consensus-enforced meaning at this point.
+        if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) {
+            // The height of this input is not relevant for sequence locks
+            (*prevHeights)[txinIndex] = 0;
+            continue;
         }
-    
-        // If all sequence numbers are CTxIn::SEQUENCE_FINAL, the
-        // transaction is considered final and nLockTime constraints
-        // are not enforced.
-        if (fFinalized)
-            return 0;
-
-        if ((int64_t)tx.nLockTime < LOCKTIME_THRESHOLD)
-            nMinHeight = std::max(nMinHeight, (int)tx.nLockTime);
-        else
-            nMinTime = std::max(nMinTime, (int64_t)tx.nLockTime);
-    
-        if (nMinHeight >= block.nHeight)
-            return nMinHeight;
-            
-        if (nMinTime >= nBlockTime)
-            return nMinTime;
-    
-        return 0;
-    }
- -Code conditional on the return value of IsFinalTx() / CheckLockTime() has to be updated as well, since the semantics of the return value has been inverted. - -==Example: Bidirectional payment channel== -A bidirectional payment channel can be established by two parties funding a single output in the following way: Alice funds a 1 BTC output which is the 2-of-2 multisig of Alice AND Bob, or Alice's key only after a sufficiently long timeout, e.g. 30 days or 4320 blocks. The channel-generating transaction is signed by Alice and broadcast to the network. - -Alice desires to send Bob a payment of 0.1 BTC. She does so by constructing a transaction spending the 1 BTC output and sending 0.1 BTC to Bob and 0.9 BTC back to herself. She provides her signature for the 2-of-2 multisig constraint, and sets a relative lock-time using the sequence number field such that the transaction will become valid 24-hours or 144 blocks before the refund timeout. Two more times Alice sends Bob a payment of 0.1 BTC, each time generating and signing her half of a transaction spending the 1btc output and sending 0.2 BTC, then 0.3 BTC to Bob with a relative lock-time of 29 days from creation of the channel. - -Bob now desires to send Alice a refund of 0.25 BTC. He does so by constructing a transaction spending the 1btc output and sending 0.95 BTC (= 0.7 BTC + 0.25 BTC) to Alice and 0.05 BTC to himself. Since Bob will still have in his logs the transaction giving him 0.7 BTC 29 days after the creation of the channel, Alice demands that this new transaction have a relative lock-time of 28 days so she has a full day to broadcast it before the next transaction matures. - -Alice and Bob continue to make payments to each other, decrementing the relative lock-time by one day each time the channel switches direction, until the present time is reached or either party desires to close out the channel. A close-out is performed by finalizing the input (nSequence = MAX_INT) and both parties signing. - -==Implementation== - -A reference implementation is provided by the following pull request + int nCoinHeight = (*prevHeights)[txinIndex]; + + if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) { + int64_t nCoinTime = block.GetAncestor(std::max(nCoinHeight-1, 0))->GetMedianTimePast(); + + // Time-based relative lock-times are measured from the + // smallest allowed timestamp of the block containing the + // txout being spent, which is the median time past of the + // block prior. + nMinTime = std::max(nMinTime, nCoinTime + (int64_t)((txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) << CTxIn::SEQUENCE_LOCKTIME_GRANULARITY) - 1); + } else { + // We subtract 1 from relative lock-times because a lock- + // time of 0 has the semantics of "same block," so a lock- + // time of 1 should mean "next block," but nLockTime has + // the semantics of "last invalid block height." + nMinHeight = std::max(nMinHeight, nCoinHeight + (int)(txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) - 1); + } + } + + return std::make_pair(nMinHeight, nMinTime); +} + +static bool EvaluateSequenceLocks(const CBlockIndex& block, std::pair lockPair) +{ + int64_t nBlockTime = block.pprev ? block.pprev->GetMedianTimePast() : 0; + if (lockPair.first >= block.nHeight || lockPair.second >= nBlockTime) + return false; + + return true; +} + +bool SequenceLocks(const CTransaction &tx, int flags, std::vector* prevHeights, const CBlockIndex& block) +{ + return EvaluateSequenceLocks(block, CalculateSequenceLocks(tx, flags, prevHeights, block)); +} + +bool CheckSequenceLocks(const CTransaction &tx, int flags) +{ + AssertLockHeld(cs_main); + + CBlockIndex* tip = chainActive.Tip(); + CBlockIndex index; + index.pprev = tip; + // CheckSequenceLocks() uses chainActive.Height()+1 to evaluate + // height based locks because when SequenceLocks() is called within + // CBlock::AcceptBlock(), the height of the block *being* + // evaluated is what is used. Thus if we want to know if a + // transaction can be part of the *next* block, we need to call + // SequenceLocks() with one more than chainActive.Height(). + index.nHeight = tip->nHeight + 1; + + // pcoinsTip contains the UTXO set for chainActive.Tip() + CCoinsViewMemPool viewMemPool(pcoinsTip, mempool); + std::vector prevheights; + prevheights.resize(tx.vin.size()); + for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) { + const CTxIn& txin = tx.vin[txinIndex]; + CCoins coins; + if (!viewMemPool.GetCoins(txin.prevout.hash, coins)) { + return error("%s: Missing input", __func__); + } + if (coins.nHeight == MEMPOOL_HEIGHT) { + // Assume all mempool transaction confirm in the next block + prevheights[txinIndex] = tip->nHeight + 1; + } else { + prevheights[txinIndex] = coins.nHeight; + } + } -https://github.com/bitcoin/bitcoin/pull/6312 + std::pair lockPair = CalculateSequenceLocks(tx, flags, &prevheights, index); + return EvaluateSequenceLocks(index, lockPair); +} +
==Acknowledgments== From 752e73c4205c981951df3feb7a7ed23eb3d5ef8b Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Sat, 16 Jan 2016 08:02:18 -0800 Subject: [PATCH 0143/2326] added copyright --- bip-coalesce-wildcard.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-coalesce-wildcard.mediawiki b/bip-coalesce-wildcard.mediawiki index c729d069fc..4c3a557ada 100644 --- a/bip-coalesce-wildcard.mediawiki +++ b/bip-coalesce-wildcard.mediawiki @@ -76,3 +76,7 @@ then the UTXO has been spent and the transaction is invalid. the user when their wallet contains many UTXOs that qualify it to benefit from a coalescing transaction. Wallets should not simply replace non-coalescing transactions with coalescing transactions in all instances. + +==Copyright== + +This document is placed in the public domain. From ea49ecb4fbf05b5f9dec3d79cbea47fa35ed27dc Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 14 Jan 2016 12:38:17 +0800 Subject: [PATCH 0144/2326] New witness program definition --- bip-0141.mediawiki | 88 ++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 7a5c28c122..a12151b56d 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -61,18 +61,22 @@ New rules for scriptSig: * In case the scriptPubKey pushes a version byte and witness program directly, the scriptSig must be exactly empty. * In case the redeemScript pushes a version byte and witness program, the scriptSig must be exactly the single push of the redeemScript. -If the version byte is 0, the witness program is the actual script: -* The script is executed after normal script evaluation but with data from the witness rather than the scriptSig. -* The program must not fail and must result in exactly a single TRUE on the stack. - -If the version byte is 1, the witness program must be 32 bytes, as a SHA256 hash of the actual script: -* The witness must consist of an input stack to feed to the program, followed by the serialized program. -* The serialized program is popped off the initial witness stack. SHA256 of the serialized program must match the hash pushed in the witness program. -* The serialized program is deserialized, and executed after normal script evaluation with the remaining witness stack. +If the version byte is 0, and the witness program is 20 bytes, +* It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program. +* The witness must consist of exactly 2 items. The first one is a signature, and the second one is a public key. +* 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, +* 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. +* The serialized script is popped off the initial witness stack. SHA256 of the serialized script must match the 32-byte witness program. +* The serialized script is deserialized, and executed after normal script evaluation with the remaining witness stack. * The script must not fail, and result in exactly a single TRUE on the stack. -* If the witness program is between 2 and 31 bytes, the script must fail. -If the version byte is 2 to 16, no further interpretation of the witness program or witness happens. +If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail. + +If the version byte is 1 to 16, no further interpretation of the witness program or witness happens. === Other consensus critical limits === @@ -94,35 +98,33 @@ The new rule is total ''sigop cost'' ≤ 80,000. == Examples == -=== Version 0 witness program === +=== P2WPKH witness program === -The following example is a version 0 witness program, equivalent to the existing Pay-to-Pubkey-Hash (P2PKH) output. +The following example is a version 0 pay-to-witness-public-key-hash (P2WPKH) witness program: witness: scriptSig: (empty) - scriptPubKey: 0 EQUALVERIFY CHECKSIG> - (0x001976A914{20-byte-hash}88AC) - -The '0' indicates the following push is a version 0 witness program. The witness program is deserialized and becomes: + scriptPubKey: 0 <20-byte-hash> + (0x0014{20-byte-hash}) - DUP HASH160 <20-byte-hash> EQUALVERIFY CHECKSIG +The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WPKH type. The witness must consist of exactly 2 items. The HASH160 of the pubkey in witness must match the witness program. -The script is executed with the data from witness +The signature is verified as - DUP HASH160 <20-byte-hash> EQUALVERIFY CHECKSIG + CHECKSIG -Comparing with a P2PKH output, the witness program equivalent occupies 2 more bytes in the scriptPubKey, while moving the signature and public key from scriptSig to witness. +Comparing with a traditional P2PKH output, the P2WPKH equivalent occupies 3 less bytes in the scriptPubKey, and moves the signature and public key from scriptSig to witness. -=== Version 1 witness program === +=== P2WSH witness program === -The following example is an 1-of-2 multi-signature version 1 witness program. +The following example is an 1-of-2 multi-signature version 0 pay-to-witness-script-hash (P2WSH) witness program. witness: 0 <1 2 CHECKMULTISIG> scriptSig: (empty) - scriptPubKey: 1 <32-byte-hash> - (0x5120{32-byte-hash}) + scriptPubKey: 0 <32-byte-hash> + (0x0020{32-byte-hash}) -The '1' in scriptPubKey indicates the following push is a version 1 witness program. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash in scriptPubKey, and deserialized: +The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WSH type. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash in scriptPubKey, and deserialized: 1 2 CHECKMULTISIG @@ -130,27 +132,27 @@ The script is executed with the remaining data from witness: 0 1 2 CHECKMULTISIG -Since the actual program is larger than 32 bytes, it cannot be accommodated in a version 0 witness program. A version 1 witness program allows arbitrarily large script as the 520-byte push limit is bypassed. +A P2WSH witness program allows arbitrarily large script as the 520-byte push limit is bypassed. -The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of P2SH. The increased size improves security against possible collision attacks, as 280 work is not infeasible anymore (By the end of 2015, 284 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent P2SH output but is moved to witness. +The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of BIP16 P2SH. The increased size improves security against possible collision attacks, as 280 work is not infeasible anymore (By the end of 2015, 284 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent BIP16 P2SH output but is moved to witness. -=== Witness program nested in Pay-to-Script-Hash === +=== Witness program nested in BIP16 P2SH === -The following example is the same 1-of-2 multi-signature version 1 witness program, but nested in a P2SH output. +The following example is the same 1-of-2 multi-signature P2WSH witness program, but nested in a BIP16 P2SH output. witness: 0 <1 2 CHECKMULTISIG> - scriptSig: <1 <32-byte-hash>> - (5120{32-byte-hash}) + scriptSig: <0 <32-byte-hash>> + (0x0020{32-byte-hash}) scriptPubKey: HASH160 <20-byte-hash> EQUAL - (0x76A914{20-byte-hash}88AC) + (0xA914{20-byte-hash}87) The only item in scriptSig is hashed with HASH160, compared against the 20-byte-hash in scriptPubKey, and interpreted as: - 1 <32-byte-hash> + 0 <32-byte-hash> -The version 1 witness program is then executed as described in the last example +The P2WSH witness program is then executed as described in the previous example -Comparing with the last example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. +Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. === Extensible commitment structure === @@ -160,11 +162,11 @@ The new commitment in coinbase transaction is a hash of the witness root hash an Double-SHA256(Witness root hash|Hash(new commitment|witness nonce)) -:: For backward compatibility, the Hash(new commitment|witness nonce) will go to the coinbase witness, and the witness nonce will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way. +For backward compatibility, the Hash(new commitment|witness nonce) will go to the coinbase witness, and the witness nonce will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way. * Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, may utilize this witness nonce. However, they must not be committed directly as the nonce, or the external system may be forced to hardfork when Bitcoin introduces more consensus-critical commitments. Instead, they should use the nonce as the root of an extensible commitment tree, and should not make any assumption about the location and depth of their commitments in the tree. For example, in the external system, it may use a flag to indicate the actual location of the commitments with the Merkle paths provided. -The optional data space following the commitment also leaves room for metadata of future softforks. +The optional data space following the commitment also leaves room for metadata of future softforks, and MUST NOT be used for other purpose. === Trust-free unconfirmed transaction dependency chain === @@ -211,7 +213,7 @@ With a soft fork, it is possible to introduce a separate witness structure to al == Backward compatibility == -As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases in version 0 witness programs which are provably unspendable with original script semantics). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs as anyone-can-spend scripts (except a few edge cases where the witness programs are equal to 0, which the script must fail). Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. Non-upgraded nodes are strongly encouraged to upgrade in order to take advantage of the new features. '''What a non-upgraded wallet can do''' @@ -253,14 +255,14 @@ Special thanks to Gregory Maxwell for originating many of the ideas in this BIP == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit2 +https://github.com/sipa/bitcoin/commits/segwit3 == References == -*[https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki BIP16 Pay to Script Hash] -*[https://github.com/bitcoin/bips/blob/master/bip-0142.mediawiki BIP142 Address Formats for Witness Program] -*[https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP143 Transaction signature verification for version 0 and version 1 witness program] -*[https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki BIP144 Segregated Witness (Peer Services)] +*[[bip-0016.mediawiki|BIP16 Pay to Script Hash]] +*[[bip-0142.mediawiki|BIP142 Address Formats for Segregated Witness]] +*[[bip-0143.mediawiki|BIP143 Transaction Signature Verification for Version 0 Witness Program]] +*[[bip-0144.mediawiki|BIP144 Segregated Witness (Peer Services)]] == Copyright == From 8e22af1d0a5de646b8f6cf4e9a78aa5792fcf7a5 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 14 Jan 2016 13:15:10 +0800 Subject: [PATCH 0145/2326] Title change and links update --- README.mediawiki | 2 +- bip-0143.mediawiki | 8 ++++---- bip-0144.mediawiki | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index fdfb988d7a..63fc568e81 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -417,7 +417,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Draft |- | [[bip-0143.mediawiki|143]] -| Transaction signature verification for version 0 and version 1 witness program +| Transaction Signature Verification for Version 0 Witness Program | Johnson Lau, Pieter Wuille | Standard | Draft diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 4aca2db6ba..3d7e8563f0 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -1,6 +1,6 @@
   BIP: 143
-  Title: Transaction signature verification for version 0 and version 1 witness program
+  Title: Transaction Signature Verification for Version 0 Witness Program
   Author: Johnson Lau 
           Pieter Wuille 
   Status: Draft
@@ -9,7 +9,7 @@
 
== Abstract == -This proposal defines a new transaction digest algorithm for signature verification in version 0 and version 1 witness program, in order to minimize redundant data hashing in verification, and to cover the input value by the signature. +This proposal defines a new transaction digest algorithm for signature verification in version 0 witness program, in order to minimize redundant data hashing in verification, and to cover the input value by the signature. == Motivation == There are 4 ECDSA signature verification codes in the original Bitcoin script system: CHECKSIG, CHECKSIGVERIFY, CHECKMULTISIG, CHECKMULTISIGVERIFY (“sigops”). According to the sighash type (ALL, NONE, SINGLE, ANYONECANPAY), a transaction digest is generated with a double SHA256 of a serialized subset of the transaction, and the signature is verified against this digest with a given public key. The detailed procedure is described in a Bitcoin Wiki article. [https://en.bitcoin.it/wiki/OP_CHECKSIG] @@ -22,7 +22,7 @@ Unfortunately, there are at least 2 weaknesses in the original transaction diges Deploying the aforementioned fixes in the original script system is not a simple task. That would be either a hardfork, or a softfork for new sigops without the ability to remove or insert stack items. However, the introduction of segregated witness softfork offers an opportunity to define a different set of script semantics without disrupting the original system, as the unupgraded nodes would always consider such a transaction output is spendable by arbitrary signature or no signature at all. [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141: Segregated Witness (Consensus layer)] == Specification == -A new transaction digest algorithm is defined, but only applicable to sigops in version 0 and version 1 witness program: +A new transaction digest algorithm is defined, but only applicable to sigops in version 0 witness program: Double SHA256 of the serialization of: 1. nVersion of the transaction 2. hashPrevouts @@ -122,7 +122,7 @@ As a soft fork, older software will continue to operate without modification. No == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit2 +https://github.com/sipa/bitcoin/commits/segwit3 == References == diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki index e3843a8f90..736fadd4d9 100644 --- a/bip-0144.mediawiki +++ b/bip-0144.mediawiki @@ -116,7 +116,7 @@ MSG_WITNESS_BLOCK requests will return a block message with transactions that ha Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork. == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit +https://github.com/sipa/bitcoin/commits/segwit3 == Copyright == This document is placed in the public domain. From b38742b8f45d886d236deb22e9530523af8994fc Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 14 Jan 2016 13:26:33 +0800 Subject: [PATCH 0146/2326] Title change and new address format --- README.mediawiki | 2 +- bip-0142.mediawiki | 178 ++++++++++++++++++++++----------------------- 2 files changed, 87 insertions(+), 93 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 63fc568e81..75c6eeb5bb 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -411,7 +411,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Draft |- | [[bip-0142.mediawiki|142]] -| Address Formats for Witness Program +| Address Format for Segregated Witness | Johnson Lau | Standard | Draft diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index fdf52027a2..7d7b1d26df 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -1,6 +1,6 @@
   BIP: 142
-  Title: Address Formats for Witness Program
+  Title: Address Format for Segregated Witness
   Author: Johnson Lau 
   Status: Draft
   Type: Standards Track
@@ -9,148 +9,142 @@
 
 == Abstract ==
 
-This BIP describes 2 new types of Bitcoin address to support native Segregated Witness (segwit) transactions. The first type resembles the original P2PKH base-58 address. The second type is a z-base-32 representation of a witness program with Damm algorithm checksum, which supports arbitrarily complex transactions, and is forward compatible to new version witness programs in the future.
+This BIP describes new types of Bitcoin address to support native segregated witness transactions with 20-byte and 32-byte program.
 
 == Motivation ==
 
-To define standard payment addresses for native segwit transactions to promote early adoption of the more efficient transaction method.
+To define standard payment address for native segregated witness (segwit) transactions to promote early adoption of the more efficient transaction method.
 
 == Specification ==
 
-=== P2PKH segwit address ===
+The new Bitcoin address format defined is for the Pay-to-Witness-Public-Key-Hash (P2WPKH) and Pay-to-Witness-Script-Hash (P2WSH) transaction described in segregated witness soft fork (BIP141). The scriptPubKey is an OP_0 followed by a push of 20-byte-hash (P2WPKH) or 32-byte hash (P2WSH).
 
-The first new Bitcoin address format defined is specific to pay-to-public-key-hash segwit transaction. The scriptPubKey is an OP_0 followed by a push of version 0 witness program:
-  OP_0  EQUALVERIFY CHECKSIG>
-The new address is encoded exactly in the same way as the original pay-to-public-key-hash address:
-  base58-encode: [1-byte version][20-byte-hash-value][4-byte checksum]
-Version byte is 0x19 for a main-network address, 0x41 for a testnet address. The following 20-byte is the public key hash. And the 4-byte checksum is the first four bytes of the double SHA256 hash of the version and public key hash.
+The new address is encoded in a simlar way as existing address formats:
+  
+  base58-encode:
+    [1-byte address version]
+    [1-byte witness program version]
+    [0x00]
+    [20/32-byte-hash]
+    [4-byte checksum]
+  
+For P2WPKH address, the address version is 6 (0x06) for a main-network address or 3 (0x03) for a testnet address.
 
-All addresses generated with this scheme will a constant length of 34 characters, with a "B" prefix for main-network and "T" prefix for testnet.
+For P2WSH address, the address version is 10 (0x0A) for a main-network address or 40 (0x28) for a testnet address.
 
-=== General segwit address ===
+The witness program version is an 1-byte value between 0 (0x00) and 16 (0x10). Only version 0 is defined in BIP141. Versions 1 to 16 are reserved for future extensions.
 
-The second new bitcoin address format defined is applicable to witness program of version 0 to 15 with a length of 2 to 32 bytes.
+Following the witness program version is a 0x00 padding to make sure that each witness program version will have an unique prefix.
 
-The z-base-32 character set is used:
-{|class="wikitable" style="width:40ex; text-align: center; margin: 0 auto 0 auto;"
-!width="12%"|Value
-!width="12%"|Symbol
-!width="12%"|Value
-!width="12%"|Symbol
-!width="12%"|Value
-!width="12%"|Symbol
-!width="12%"|Value
-!width="12%"|Symbol
+Following the padding is the program hash, 20 byte for a P2WPKH address and 32 byte for a P2WSH address.
+
+The 4-byte checksum is the first four bytes of the double SHA256 hash of the serialization of the previous items.
+
+All addresses generated with this scheme will have a constant length, with 36 digits for 20-byte and 53 digits for 32-byte. Different witness program version will have an unique prefix shown in the following table:
+
+{|class="wikitable" style="text-align: center;"
+|-
+!rowspan=3 style=""|Witness program version
+!colspan=4 style=""|Hash size
+|-
+!colspan=2 style=""|20-byte (36 digits)
+!colspan=2 style=""|32-byte (53 digits)
+|-
+!Mainnet
+!Testnet
+!Mainnet
+!Testnet
+|-
+|0||p2||QW||7Xh||T7n
+|-
+|1||p4||QY||7Xq||T7w
+|-
+|2||p6||Qa||7Xz||T85
+|-
+|3||p7||Qc||7Y9||T8E
+|-
+|4||pA||Qe||7YH||T8N
+|-
+|5||pB||Qf||7YS||T8X
+|-
+|6||pD||Qh||7Ya||T8g
+|-
+|7||pF||Qj||7Yj||T8p
+|-
+|8||pG||Qm||7Yt||T8y
 |-
-| 0 || y ||  8 || e || 16 || o || 24 || a
+|9||pJ||Qn||7Z2||T97
 |-
-| 1 || b ||  9 || j || 17 || t || 25 || 2
+|10||pL||Qp||7ZB||T9G
 |-
-| 2 || n || 10 || k || 18 || 1 || 26 || 4
+|11||pN||Qr||7ZK||T9Q
 |-
-| 3 || d || 11 || m || 19 || u || 27 || 5
+|12||pQ||Qt||7ZU||T9Z
 |-
-| 4 || r || 12 || c || 20 || w || 28 || h
+|13||pS||Qv||7Zc||T9i
 |-
-| 5 || f || 13 || p || 21 || i || 29 || 7
+|14||pT||Qw||7Zm||T9r
 |-
-| 6 || g || 14 || q || 22 || s || 30 || 6
+|15||pV||Qy||7Zv||TA1
+|-
+|16||pX||R1||7a4||TA9
 |-
-| 7 || 8 || 15 || x || 23 || z || 31 || 9
 |}
 
-It is case-insensitive and includes all alphanumeric characters excluding 0, 2, l, v. The order of alphabet is chosen so that less ambiguous alphabet characters will appear more frequently than others.
-
-An address is a 270-bit string in z-base-32 with the following components:
-
-  5 address version bits
-  5 length bits
-  4 witness program version bits
-  256 witness program bits
-
-The address version bits is 00001b for the main-network and 11001b for the testnet.
-
-Value of the length bits is the length of the witness program in byte minus 1.
-
-Witness program version bits indicates version of the witness program (v0 to v15).
-
-The witness program is padded with leading 0b to 256 bits.
-
-The 270-bit string is transformed to z-base-32 with 54 digits.
-
-The 54-digit raw address is then divided into 9 equal segments. For each segment, a checksum is calculated with Damm algorithm and appended to the end of the segment. This makes the length increases to 63 digits.
-
-A second round of checksum is calculated by taking the digits in the same position of the 9 segments, and appended to the end of the address. This is the final address with 69 digits.
-
 
 == Rationale ==
 
-The segregated witness soft fork (BIP x) defines 2 ways of encoding "witness program", a data push of 2 to 32 bytes:
+The BIP141 defines 2 ways of encoding "witness program", a data push of 2 to 32 bytes:
 
 * A native witness program output is a scriptPubKey with a push of version byte followed by a push of witness program, and nothing else;
-* A witness program in P2SH is a P2SH redeemScript with a push of version byte followed by a push of witness program, while the scriptPubKey looks like a normal P2SH output.
+* Segwit-in-P2SH is a BIP16 P2SH redeemScript with a push of version byte followed by a push of witness program, while the scriptPubKey looks like a normal P2SH output.
 
-As the P2SH address has been defined in 2012, using witness program in P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is less collision-resistance than a native witness program, and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method.
+As the BIP13 P2SH address has been defined in 2012, using segwit-in-P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method.
 
 The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Since then, better payment methods have been proposed or deployed, for example:
 *BIP47 Reusable Payment Codes for Hierarchical Deterministic Wallets
 *BIP63 Stealth Addresses
 *BIP70 Payment protocol
 
-However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. As P2PKH transactions are still dominating the blockchain, the author believes that the proposed P2PKH segwit addresses is the easiest way for wallets and services to adopt native witness program, which is particularly important in the context of scaling the capacity of the blockchain.
+However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. It is believed that the proposed P2WPKH and P2WSH address format is the easiest way for wallets and services to adopt native witness program, which is particularly important in the context of scaling the capacity of the blockchain.
 
-The P2PKH segwit addresses only allow simple payment to a single public key. For arbitrarily complex segwit transactions, the general segwit address is used. The use of z-base-32 eliminates case-sensitiveness and simplifies transformation to and from hexadecimals. The Damm algorithm checksum allows detection of all single-digit errors and all adjacent transposition errors. With the excellent upgradability of witness program, this proposal is also forward compatible to new version witness programs that is not longer than 32 bytes.
+While P2WPKH address is specific for simple payment to a single public key, P2WSH address allows arbitrarily complex segwit transactions, resemble to the BIP13 P2SH address.
 
 == Compatibility ==
 
-This proposal is not backward compatible, but it fails gracefully -- if an older implementation is given one of these new Bitcoin addresses, it will report the address as invalid and will refuse to create a transaction.
+This proposal is not backward compatible. However, an older implementation will report the new address type as invalid and will refuse to create a transaction.
 
-This proposal is forward compatible to any new witness program format with version 2 to 15 and length of 2 to 32 bytes.
+This proposal is forward compatible to the future versions of witness program of 20 and 32 bytes.
 
 == Example ==
 
-=== P2PKH segwit address ===
-
 The following public key,
+  
     0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
+ 
 when encoded as a P2PKH template, would become:
+  
     DUP HASH160 <010966776006953D5567439E5E39F86A0D273BEE> EQUALVERIFY CHECKSIG
+
 And the corresponding version 1 Bitcoin address is
+  
     16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
-When the same script is encoded as a version 0 witness program, the scriptPubKey becomes: 
-    OP_0 <0x76A914010966776006953D5567439E5E39F86A0D273BEE88AC>
-Using 0x19 as the address version, the equivalent witness program address is:
-    B4YZZ3nMBETWVF9ZSfotSwTxVnqhdkTi7r
-
-=== General segwit address ===
-
-With the same 25 bytes version 0 witness program in the last example:
-    OP_0 <0x76A914010966776006953D5567439E5E39F86A0D273BEE88AC>
-The address version bits is 00001b
-    00001b
-The lengths bits is 11000b (24 = 25 - 1)
-    00001-11000b
-The witness program version bits is 0000
-    00001-11000-0000b
-Appended by the zero-padded witness program
-    00001-11000-0000-0-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-11101...01100
-The 270-bit string is transformed to z-base-32 with 54 digits and split into 9 equal segments:
-    bayyyy -yyyyyy -yyq4wt -eyejc3 -5sybwi -8iksqo -h6mah9 -o4oprh -767nfc
-Calculate the Damm checksum for each segment:
-    For example: Damm(bayyyy) = 7
-    bayyyy7-yyyyyyy-yyq4wte-eyejc3q-5sybwic-8iksqoo-h6mah9w-o4oprhm-767nfc4
-Calculate the Damm checksum for digits in the same position of different segments:
-    For example: Damm(byye58ho7) = j
-    bayyyy7-yyyyyyy-yyq4wte-eyejc3q-5sybwic-8iksqoo-h6mah9w-o4oprhm-767nfc4-jwk86o
-
-== Implementation ==
-
-From arbitrary witness program to general segwit address: https://gist.github.com/jl2012/760b0f952715b8b6c608
+ 
+When the same public key is encoded as P2WPKH, the scriptPubKey becomes: 
+  
+    OP_0 <010966776006953D5567439E5E39F86A0D273BEE>
+
+Using 0x06 as witness version, followed 0x00 as witness version, and a 0x00 padding, the equivalent P2WPKH address is:
+  
+    p2xtZoXeX5X8BP8JfFhQK2nD3emtjch7UeFm
+ 
+== Reference implementation ==
 
 == References ==
 
 * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]]
-* [[bip-0016.mediawiki|BIP 16: Pay to Script Hash (aka "/P2SH/")]]
+* [[bip-0016.mediawiki|BIP 16: Pay to Script Hash]]
+* [[bip-0070.mediawiki|BIP 70: Payment Protocal]]
 * [[bip-0141.mediawiki|BIP 141: Segregated Witness]]
 
 == Copyright ==

From 0ee385bac444a6080b96b307036e7d265fb3d5e2 Mon Sep 17 00:00:00 2001
From: Andy Chase 
Date: Mon, 18 Jan 2016 17:34:06 -0800
Subject: [PATCH 0147/2326] Add Committee-based BIP Acceptance Process

---
 bip-andychase.mediawiki | 116 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 bip-andychase.mediawiki

diff --git a/bip-andychase.mediawiki b/bip-andychase.mediawiki
new file mode 100644
index 0000000000..cf0957288d
--- /dev/null
+++ b/bip-andychase.mediawiki
@@ -0,0 +1,116 @@
+
+  Title: Committee-based BIP Acceptance Process
+  Author: Andy Chase 
+  Status: Draft 
+  Type: Process 
+  Created: 2015-08-31
+
+ +== Abstract == + +The current process for accepting a BIP is not clearly defined. While [https://github.com/bitcoin/bips/blob/master/bip-0001.mediawiki BIP-0001] defines the process for writing and submitting a Bitcoin Improvement Proposal to the community it does not specify the precise method for which BIPs are considered accepted or rejected. + +This proposal sets up a method for determining BIP acceptance. + +This BIP has two parts: + +* It sets up a '''process''' which a BIP goes through for comments and acceptance. The Process is: +** BIP Draft +** Submitted for comments (2 weeks) +** Waiting on opinion (2 weeks) +** BIP becomes either Accepted or Deferred +* It sets up '''committees''' for reviewing comments and indicating acceptance under precise conditions. +** Committees are authorized groups that represent client authors, miners, merchants, and users (each as a segment). Each one must represent at least 1% stake in the Bitcoin ecosystem. + +BIP acceptance is defined as at least 70% of the represented percentage stake in 3 out of the 4 Bitcoin segments. + +== Copyright == + +This document is placed into the public domain. + +== Motivation == + +BIPs represent important improvements to Bitcoin infrastructure, and in order to foster continued innovation, the BIP process must have clearly defined stages and acceptance acknowledgement. + +== Rationale == + +A committee system is used to organize the essential concerns of each segment of the Bitcoin ecosystem. Although each segment may have many different viewpoints on each BIP, in order to seek a decisive yes/no on a BIP, a representational authoritative structure is sought. This structure should be fluid, allowing people to move away from committees that do not reflect their views and should be re-validated on each BIP evaluation. + +== Weaknesses == + +Each committee submits a declaration including their claim to represent a certain percentage of the Bitcoin ecosystem in some way. Though guidelines are given, it's up to each committee to prove their stake, and it's up to the reader of the opinions to decide if a BIP was truly accepted or rejected. + +The author doesn't believe this is a problem because a BIP cannot be forced on client authors, miners, merchants, or users. Ultimately this BIP is a tool for determining whether a BIP is overwhelmingly accepted. If one committee's validity claim becomes the factor that decides whether the BIP will succeed or fail, this process simply didn't return a clear answer and the BIP should be considered deferred. + +== 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. +** 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. +* '''Reported Opinions.''' +** After the waiting period has past, committees must submit a summary of the comments which they have received from their represented communities. +** The deadline for this opinion is four weeks after the BIP was submitted for comments. +** Committees cannot reverse their decision after the deadline, but at their request may flag their decision as "likely to change if another submit for comments is called". Committees can change their decision if a resubmit is called. +** Opinions must include: +*** One of the following statements: "Intend to accept", "Intent to implement", "Decline to accept", "Intend to accept, but decline to implement". +*** If rejected, the opinion must cite clear and specific reasons for rejecting including a checklist for what must happen or be change for their committee to accept the proposal. +*** If accepted, the committee must list why they accepted the proposal and also include concerns they have or what about the BIP that, if things changed, would cause the committee to likely reverse their decision if another submit for comments was called. +* '''Accepted.''' +** If at least 70% of the represented percentage stake in 3 out of 4 segments accept a proposal, the BIP is considered accepted. +** If a committee fails to submit an opinion, consider the opinion "Decline to accept". +** The BIP cannot be substantially changed at this point, but can be replaced. Minor changes or clarifications are allowed but must be recorded in the document. +* '''Deferred.''' +** If the acceptance test above is not met, the BIP is sent back into suggestions. +** BIP can be modified and re-submitted for a comments no sooner than two months after the date of the previous submit for comments is called. +** The BIP is marked rejected after two failed submission attempts. A rejected BIP can still be modified and re-submitted. + +== Committees == + +'''BIP Committees.''' + +* BIP Committees are representational structures that represent critical segments of the Bitcoin ecosystem. +* Each committee must prove and maintain a clear claim that they represent at least 1% of the Bitcoin ecosystem in some form. +* If an organization or community does not meet that requirement, it should conglomerate itself with other communities and organizations so that it does. +* The segments that committees can be based around are: +** Bitcoin software +** Exchanges/Merchants/services/payment processors +** Mining operators +** User communities +* A person may be represented by any number of segments, but a committee cannot re-use the same resource as another committee in the same segment. + +'''Committee Declarations.''' +* At any point, a Committee Declaration can be posted. +* This Declaration must contain details about: +** The segment the Committee is representing +** Who the committee claim to represent and it's compositional makeup (if made up of multiple miner orgs, user orgs, companies, clients, etc). +** Proof of claim and minimum 1% stake via: +*** Software: proof of ownership and user base (Min 1% of Bitcoin userbase) +*** Merchant: proof of economic activity (Min 1% of Bitcoin economic activity) +*** Mining: proof of work (Min 1% of Hashpower) +*** For a user organization, auditable signatures qualifies for a valid committee (Min 1% of Bitcoin userbase) +** Who is running the committee, their names and roles +** How represented members can submit comments to the committee +** A code of conduct and code of ethics which the committee promises to abide by +* A committee declaration is accepted if: +** The declaration includes all of the required elements +** The stake is considered valid +** Committee validation is considered when considering the results of opinions submitted by committee on a BIP. A committee must have met the required stake percentage before a BIP is submitted for comments, and have maintained that stake until a valid opinion is submitted. +* Committees can dissolve at any time or submit a declaration at any time +* Declaration must have been submitted no later than the third day following a BIP's request for comments to be eligible for inclusion in a BIP + +== BIP Process Management Role == + +BIPs, Opinions, and Committee Declaration must be public at all times. + +A BIP Process Manager should be chosen who is in charge of: + +* Declaring where and how BIPs, Opinions, and Committee Declaration should be posted and updated officially. +* Maintaining the security and authenticity of BIPs, Opinions, and Committee Declarations +* Publishing advisory documents about what kinds of proof of stakes are valid and what kinds should be rejected. +* Naming a series of successors for the roles of the BIP Process Manager and BIP Editor (BIP-001) as needed. + +== Conditions for activation == + +In order for this process BIP to become active, it must succeed by its own rules. At least a 4% sample of the Bitcoin community must be represented, with at least one committee in each segment included. Once at least one committee has submitted a declaration, a request for comments will be called and the process should be completed from there. + From bcf0ea37840d9feba5fd6c16285e034f9a8e2688 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 19 Jan 2016 01:37:57 +0000 Subject: [PATCH 0148/2326] Assign BIP 131 --- README.mediawiki | 6 ++++++ bip-coalesce-wildcard.mediawiki => bip-0131.mediawiki | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) rename bip-coalesce-wildcard.mediawiki => bip-0131.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 1ce3a76f76..75841029b9 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -410,6 +410,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0131.mediawiki|131]] +| "Coalescing Transaction" Specification (wildcard inputs) +| Chris Priest +| Standard +| Draft +|- | [[bip-0140.mediawiki|140]] | Normalized TXID | Christian Decker diff --git a/bip-coalesce-wildcard.mediawiki b/bip-0131.mediawiki similarity index 99% rename from bip-coalesce-wildcard.mediawiki rename to bip-0131.mediawiki index 4c3a557ada..c30ef54cd1 100644 --- a/bip-coalesce-wildcard.mediawiki +++ b/bip-0131.mediawiki @@ -1,5 +1,5 @@
-  BIP: (no number)
+  BIP: 131
   Title: "Coalescing Transaction" Specification (wildcard inputs)
   Author: Chris Priest 
   Status: Draft

From 4ee32820b9da4e1c4aee43187ecc54e1835291e8 Mon Sep 17 00:00:00 2001
From: Andreas Schildbach 
Date: Tue, 19 Jan 2016 14:38:09 +0100
Subject: [PATCH 0149/2326] Fix typo in proposed BIP144.

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

diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index 736fadd4d9..5503044a00 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -73,7 +73,7 @@ The serialization has the following structure:
 | The block number or timestamp until which the transaction is locked
 |}
 
-Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witness) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeeded, such a transaction would contain no inputs and a single output.
+Parsers supporting this BIP will be able to distinguish between the old serialization format (without the witness) and this one. The marker byte is set to zero so that this structure will never parse as a valid transaction in a parser that does not support this BIP. If parsing were to succeed, such a transaction would contain no inputs and a single output.
 
 If the witness is empty, the old serialization format should be used. 
 

From 144dbaa9557e04625f188e19cc8334515de5b597 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 19 Jan 2016 20:54:35 +0800
Subject: [PATCH 0150/2326] Introducing the term "witnessScript" in BIP141

---
 bip-0141.mediawiki | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 74fbf0f688..4614822f18 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -57,9 +57,13 @@ If there are more than one scriptPubKey matching the pattern, the one with highe
 
 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 32 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".
 
+Witness verification logic is either
+# triggered by a scriptPubKey that is exactly a push of a version byte, plus a push of a witness program, or
+# 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.
+
 New rules for scriptSig:
-* In case the scriptPubKey pushes a version byte and witness program directly, the scriptSig must be exactly empty.
-* In case the redeemScript pushes a version byte and witness program, the scriptSig must be exactly the single push of the redeemScript.
+* In case 1, the scriptSig must be exactly empty.
+* In case 2, the scriptSig must be exactly a push of the BIP16 redeemScript.
 
 If the version byte is 0, and the witness program is 20 bytes,
 * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
@@ -69,9 +73,9 @@ If the version byte is 0, and the witness program is 20 bytes,
 
 If the version byte is 0, and the witness program is 32 bytes,
 * 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.
-* The serialized script is popped off the initial witness stack. SHA256 of the serialized script must match the 32-byte witness program.
-* The serialized script is deserialized, and executed after normal script evaluation with the remaining witness stack.
+* The witness must consist of an input stack to feed to the script, followed by a serialized script ("witnessScript").
+* The witnessScript is popped off the initial witness stack. SHA256 of the witnessScript must match the 32-byte witness program.
+* The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack.
 * The script must not fail, and result in exactly a single TRUE on the stack.
 
 If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.
@@ -124,7 +128,7 @@ The following example is an 1-of-2 multi-signature version 0 pay-to-witness-scri
     scriptPubKey: 0 <32-byte-hash>
                   (0x0020{32-byte-hash})
 
-The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WSH type. The last item in the witness is popped off, hashed with SHA256, compared against the 32-byte-hash in scriptPubKey, and deserialized:
+The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WSH type. The last item in the witness (the "witnessScript") is popped off, hashed with SHA256, compared against the 32-byte-hash in scriptPubKey, and deserialized:
 
     1   2 CHECKMULTISIG
 
@@ -150,7 +154,7 @@ The only item in scriptSig is hashed with HASH160, compared against the 20-byte-
 
     0 <32-byte-hash>
 
-The P2WSH witness program is then executed as described in the previous example
+The P2WSH witness program is then executed as described in the previous example.
 
 Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0.
 

From 7f68752bee6b259878f81c29dab4e9d1ec5f738f Mon Sep 17 00:00:00 2001
From: Gregory Sanders 
Date: Tue, 19 Jan 2016 11:48:15 -0500
Subject: [PATCH 0151/2326] Tidy up Witness Program section

---
 bip-0141.mediawiki | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 4614822f18..c769abdadd 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -57,21 +57,17 @@ If there are more than one scriptPubKey matching the pattern, the one with highe
 
 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 32 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".
 
-Witness verification logic is either
-# triggered by a scriptPubKey that is exactly a push of a version byte, plus a push of a witness program, or
-# 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.
+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.
+# 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.
 
-New rules for scriptSig:
-* In case 1, the scriptSig must be exactly empty.
-* In case 2, the scriptSig must be exactly a push of the BIP16 redeemScript.
-
-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:
 * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
-* The witness must consist of exactly 2 items. The first one is a signature, and the second one is a public key.
-* HASH160 of the public key must match the 20-byte witness program.
+* The witness must consist of exactly 2 items. 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:
 * 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 is popped off the initial witness stack. SHA256 of the witnessScript must match the 32-byte witness program.

From d6af2d163c69bafea5c4252280b4b4a08a301a98 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Tue, 19 Jan 2016 17:59:41 +0000
Subject: [PATCH 0152/2326] Assign BIP 132

---
 README.mediawiki                              | 6 ++++++
 bip-andychase.mediawiki => bip-0132.mediawiki | 7 ++++---
 2 files changed, 10 insertions(+), 3 deletions(-)
 rename bip-andychase.mediawiki => bip-0132.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index 1ce3a76f76..fb6e8a3121 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -410,6 +410,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0132.mediawiki|132]]
+| Committee-based BIP Acceptance Process
+| Andy Chase
+| Process
+| Draft
+|-
 | [[bip-0140.mediawiki|140]]
 | Normalized TXID
 | Christian Decker
diff --git a/bip-andychase.mediawiki b/bip-0132.mediawiki
similarity index 99%
rename from bip-andychase.mediawiki
rename to bip-0132.mediawiki
index cf0957288d..814e20a521 100644
--- a/bip-andychase.mediawiki
+++ b/bip-0132.mediawiki
@@ -1,8 +1,9 @@
 
+  BIP: 132
   Title: Committee-based BIP Acceptance Process
-  Author: Andy Chase 
-  Status: Draft 
-  Type: Process 
+  Author: Andy Chase
+  Status: Draft
+  Type: Process
   Created: 2015-08-31
 
From 9d99270419bd9ce114ac19a1f77886077f0b50aa Mon Sep 17 00:00:00 2001 From: Sam Wood Date: Tue, 19 Jan 2016 21:37:47 -0800 Subject: [PATCH 0153/2326] Adds a missing BIP 141 segwit BIP reference Adding a missing reference to BIP 141 for clarity. --- bip-0144.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki index 5503044a00..1106c3939a 100644 --- a/bip-0144.mediawiki +++ b/bip-0144.mediawiki @@ -77,7 +77,7 @@ Parsers supporting this BIP will be able to distinguish between the old serializ If the witness is empty, the old serialization format should be used. -Witness objects can be extended to contain other kinds of witness data not yet specified. This BIP is agnostic to the witness data structure, defined in BIPxxxx (Consensus Segwit BIP), and treats it as an arbitrary byte array. +Witness objects can be extended to contain other kinds of witness data not yet specified. This BIP is agnostic to the witness data structure, defined in [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141] (Consensus segwit BIP), and treats it as an arbitrary byte array. * '''Rationale for not having an independent message type with its own serialization''': this would require separate "tx" and "block" messages, and all RPC calls operating on raw transactions would need to be duplicated, or need inefficinent or nondeterministic guesswork to know which type is to be used. From e9f9be266f8f79ab0442b7cf528892db60a17cb8 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 20 Jan 2016 13:43:31 +0100 Subject: [PATCH 0154/2326] Fix little typo in p2wpkh address creation --- bip-0142.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index 7d7b1d26df..7e09a2eb15 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -134,7 +134,7 @@ When the same public key is encoded as P2WPKH, the scriptPubKey becomes: OP_0 <010966776006953D5567439E5E39F86A0D273BEE> -Using 0x06 as witness version, followed 0x00 as witness version, and a 0x00 padding, the equivalent P2WPKH address is: +Using 0x06 as address version, followed 0x00 as witness program version, and a 0x00 padding, the equivalent P2WPKH address is: p2xtZoXeX5X8BP8JfFhQK2nD3emtjch7UeFm From 4866fcd392d86244fe96d3b13852b74db0f1760f Mon Sep 17 00:00:00 2001 From: Jorn Cruijsen Date: Wed, 20 Jan 2016 17:19:58 +0100 Subject: [PATCH 0155/2326] Typos and grammar --- bip-0142.mediawiki | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index 7e09a2eb15..ce7d5f5db4 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -19,7 +19,7 @@ To define standard payment address for native segregated witness (segwit) transa The new Bitcoin address format defined is for the Pay-to-Witness-Public-Key-Hash (P2WPKH) and Pay-to-Witness-Script-Hash (P2WSH) transaction described in segregated witness soft fork (BIP141). The scriptPubKey is an OP_0 followed by a push of 20-byte-hash (P2WPKH) or 32-byte hash (P2WSH). -The new address is encoded in a simlar way as existing address formats: +The new address is encoded in a way similar to existing address formats: base58-encode: [1-byte address version] @@ -32,23 +32,23 @@ For P2WPKH address, the address version is 6 (0x06) for a main-network address o For P2WSH address, the address version is 10 (0x0A) for a main-network address or 40 (0x28) for a testnet address. -The witness program version is an 1-byte value between 0 (0x00) and 16 (0x10). Only version 0 is defined in BIP141. Versions 1 to 16 are reserved for future extensions. +The witness program version is a 1-byte value between 0 (0x00) and 16 (0x10). Only version 0 is defined in BIP141. Versions 1 to 16 are reserved for future extensions. -Following the witness program version is a 0x00 padding to make sure that each witness program version will have an unique prefix. +Following the witness program version is a 0x00 padding to make sure that each witness program version will have a unique prefix. Following the padding is the program hash, 20 byte for a P2WPKH address and 32 byte for a P2WSH address. The 4-byte checksum is the first four bytes of the double SHA256 hash of the serialization of the previous items. -All addresses generated with this scheme will have a constant length, with 36 digits for 20-byte and 53 digits for 32-byte. Different witness program version will have an unique prefix shown in the following table: +All addresses generated with this scheme will have a constant length, with 36 digits for 20-byte and 53 digits for 32-byte. Different witness program versions will have a unique prefix, as shown in the following table: {|class="wikitable" style="text-align: center;" |- !rowspan=3 style=""|Witness program version !colspan=4 style=""|Hash size |- -!colspan=2 style=""|20-byte (36 digits) -!colspan=2 style=""|32-byte (53 digits) +!colspan=2 style=""|20-byte (36 characters) +!colspan=2 style=""|32-byte (53 characters) |- !Mainnet !Testnet @@ -94,12 +94,12 @@ All addresses generated with this scheme will have a constant length, with 36 di == Rationale == -The BIP141 defines 2 ways of encoding "witness program", a data push of 2 to 32 bytes: +BIP141 defines 2 ways of encoding a "witness program", a data push of 2 to 32 bytes: * A native witness program output is a scriptPubKey with a push of version byte followed by a push of witness program, and nothing else; * Segwit-in-P2SH is a BIP16 P2SH redeemScript with a push of version byte followed by a push of witness program, while the scriptPubKey looks like a normal P2SH output. -As the BIP13 P2SH address has been defined in 2012, using segwit-in-P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary payment method. +Considering the BIP13 P2SH address has been defined in 2012, using segwit-in-P2SH allows most existing wallets to pay a segwit-compatible wallet without any upgrade. However, this method requires more block space and is only a short-term solution to make the transition smoother. Eventually, all users are expected to use the more efficient native witness program as the primary method of payment. The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Since then, better payment methods have been proposed or deployed, for example: *BIP47 Reusable Payment Codes for Hierarchical Deterministic Wallets @@ -108,13 +108,13 @@ The drawbacks of Bitcoin addresses have been extensively discussed in BIP13. Sin However, none of these are as widely adopted as the suboptimal base-58 scriptPubKey template addresses, which is still a standard for the whole eco-system, from wallets, block explorers, merchants, exchanges, to end users. It is believed that the proposed P2WPKH and P2WSH address format is the easiest way for wallets and services to adopt native witness program, which is particularly important in the context of scaling the capacity of the blockchain. -While P2WPKH address is specific for simple payment to a single public key, P2WSH address allows arbitrarily complex segwit transactions, resemble to the BIP13 P2SH address. +While P2WPKH address is specific for simple payment to a single public key, P2WSH address allows arbitrarily complex segwit transactions, similar to the BIP13 P2SH address. == Compatibility == -This proposal is not backward compatible. However, an older implementation will report the new address type as invalid and will refuse to create a transaction. +This proposal is not backward-compatible. However, an older implementation will report the new address type as invalid, and refuse to create a transaction. -This proposal is forward compatible to the future versions of witness program of 20 and 32 bytes. +This proposal is forward-compatible with future versions of witness programs of 20 and 32 bytes. == Example == @@ -126,7 +126,7 @@ when encoded as a P2PKH template, would become: DUP HASH160 <010966776006953D5567439E5E39F86A0D273BEE> EQUALVERIFY CHECKSIG -And the corresponding version 1 Bitcoin address is +With the corresponding version 1 Bitcoin address being: 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM @@ -134,7 +134,7 @@ When the same public key is encoded as P2WPKH, the scriptPubKey becomes: OP_0 <010966776006953D5567439E5E39F86A0D273BEE> -Using 0x06 as address version, followed 0x00 as witness program version, and a 0x00 padding, the equivalent P2WPKH address is: +Using 0x06 as address version, followed by 0x00 as witness program version, and a 0x00 padding, the equivalent P2WPKH address is: p2xtZoXeX5X8BP8JfFhQK2nD3emtjch7UeFm From 8c78781cf08aff281b938e7f0ec8cf8fad66c39a Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 20 Jan 2016 13:16:22 -0800 Subject: [PATCH 0156/2326] - Remove Acronyms section - Update InvoiceRequest notification_url definition to use SHOULD instead of MAY - Capitalize MUST, SHOULD, etc. - Update InvoiceRequest Message Creation steps to specifically define behavior for empty amount or amount out of bounds - Add implementation section with references to Addressimo reference Store & Forward server and a client implementation in functest_ir.py - Add flow diagrams for BIP70 extension and moble-to-mobile example with store and forward service --- bip-invoicerequest-extension.mediawiki | 44 ++++++++++++++----------- bip-ir/bip70-extension.png | Bin 0 -> 70596 bytes bip-ir/mobile-sf-bip70-extension.png | Bin 0 -> 89414 bytes 3 files changed, 25 insertions(+), 19 deletions(-) create mode 100644 bip-ir/bip70-extension.png create mode 100644 bip-ir/mobile-sf-bip70-extension.png diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 9fd4cb8b49..1d181c2081 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -46,15 +46,6 @@ In short we wanted to make bitcoin more human, while at the same time improving | Receiver || Entity receiving a value transfer |} -==Acronyms== -{| class="wikitable" -! Acronym !! Expanded !! Description -|- -| IR || InvoiceRequest || A request to create and return an encrypted PaymentRequest -|- -| RPR || ReturnPaymentRequest || A message returned based on a submitted InvoiceRequest containing an encrypted PaymentRequest -|} - ==New Messages== ===InvoiceRequest=== @@ -85,7 +76,7 @@ message InvoiceRequest { |- | pki_data || Depends on pki_type |- -| notification_url || Secure (usually HTTPS) location where a ReturnPaymentRequest (see below) may be sent when ready +| notification_url || Secure (usually HTTPS) location where a ReturnPaymentRequest (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} @@ -127,29 +118,29 @@ message ReturnPaymentRequest { This overview flow is illustrated below: - + ===Message Interaction Details=== ====InvoiceRequest==== -Sender must transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting InvoiceRequest -messages must set appropriate Content-Type headers as specified here: +Sender MUST transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting InvoiceRequest +messages MUST set appropriate Content-Type headers as specified here:
Content-Type: application/bitcoin-invoicerequest
====ReturnPaymentRequest==== -Receiver must transmit ReturnPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -ReturnPaymentRequest messages must set appropriate Content-Type headers as specified here: +Receiver MUST transmit ReturnPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting +ReturnPaymentRequest messages MUST set appropriate Content-Type headers as specified here:
Content-Type: application/bitcoin-returnpaymentrequest
====Message or Communication Errors==== -An invalid or unparsable message or communications error must be communicated to the party that initiated the communication. This -should be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). +An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This +SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair * nonce MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example) -* Amount is optional +* Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD be rejected with HTTP status code 406. * Set notification_url to URL that the Receiver will submit completed ReturnPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: @@ -160,7 +151,7 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key -* The nonce must not be repeated. The service receiving the InvoiceRequest may use whatever method to make sure that the nonce is never repeated. +* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. * Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID @@ -186,6 +177,21 @@ should be done through standard HTTP Status Code messaging ([https://tools.ietf. ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) +==Implementation== +A reference implementation for a Store & Forward server supporting this proposal can be found here: [https://github.com/netkicorp/addressimo Addressimo] +A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: [https://github.com/netkicorp/addressimo/blob/master/functest/functest_ir.py InvoiceRequest Client Reference Implementation] + +==BIP70 Extension== +The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70. + + + +==Mobile to Mobile Example== +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use +of an InvoiceRequest, a Store & Forward server, and a ReturnPaymentRequest. + + + ==Reference== * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] diff --git a/bip-ir/bip70-extension.png b/bip-ir/bip70-extension.png new file mode 100644 index 0000000000000000000000000000000000000000..2df7c2df95ba4d5d03100e653f7cac55240e8fed GIT binary patch literal 70596 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 kBAh0}sgO2=m4PK+SG^iR`B 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 (RX0}*i-nL0b|jV0hi&Iq=viiDhD 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 literal 0 HcmV?d00001 diff --git a/bip-ir/mobile-sf-bip70-extension.png b/bip-ir/mobile-sf-bip70-extension.png new file mode 100644 index 0000000000000000000000000000000000000000..daf093a004b104f085d632a66424367ba5a66783 GIT binary patch literal 89414 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

rM> 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̳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 Date: Wed, 20 Jan 2016 13:19:25 -0800 Subject: [PATCH 0157/2326] Fix Implementation section spacing --- bip-invoicerequest-extension.mediawiki | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 1d181c2081..c905e296eb 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -178,8 +178,13 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) ==Implementation== -A reference implementation for a Store & Forward server supporting this proposal can be found here: [https://github.com/netkicorp/addressimo Addressimo] -A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: [https://github.com/netkicorp/addressimo/blob/master/functest/functest_ir.py InvoiceRequest Client Reference Implementation] +A reference implementation for a Store & Forward server supporting this proposal can be found here: + +[https://github.com/netkicorp/addressimo Addressimo] + +A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: + +[https://github.com/netkicorp/addressimo/blob/master/functest/functest_ir.py InvoiceRequest Client Reference Implementation] ==BIP70 Extension== The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70. From 6fccd1ee05e593815e7b7f4db0f45f19604fe99d Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 19 Jun 2015 18:14:36 -0500 Subject: [PATCH 0158/2326] Draft Bitcoin Improvement Proposals for voting pool HD wallets Two informational BIPs are submitted for voting pool HD wallets. This wallet format follows the BIP43 recommendation to use reserved BIP numbers to avoid namespace collisions. The purpose of the wallet formats is to efficiently implement multisig, FIFO cold storage for bulk bitcoins and for colored bitcoins. --- bip-0080.mediawiki | 71 ++++++++++++++++++++++++++++++++++++++++++++++ bip-0081.mediawiki | 68 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 bip-0080.mediawiki create mode 100644 bip-0081.mediawiki diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki new file mode 100644 index 0000000000..e2f2565446 --- /dev/null +++ b/bip-0080.mediawiki @@ -0,0 +1,71 @@ +

+  BIP:     80
+  Title:   Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
+  Authors: Justus Ranvier 
+           Jimmy Song 
+  Status:  Draft
+  Type:    Informational
+  Created: 2014-08-11
+
+ +==Abstract== + +This BIP defines a logical hierarchy for non-colored voting pool deterministic multisig wallets based on an algorithm described in BIP-0032 (BIP32 from now on) and purpose scheme described in BIP-0043 (BIP43 from now on). + +This BIP is a particular application of BIP43 and is based on BIP44. + +==Motivation== + +The hierarchy proposed in this paper allows the handling of multiple coins and multiple series from a single seed. + +==Path levels== + +We define the following 4 levels in BIP32 path: + +
+m / purpose' / coin_type' / series' / address_index
+
+ +Apostrophe in the path indicates that BIP32 hardened derivation is used. + +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. + +Hardened derivation is used at this level. + +===Coin type=== + +One master node (seed) can be used for unlimited number of independent cryptocoins such as Bitcoin, Litecoin or Namecoin. However, sharing the same space for various cryptocoins has some disadvantages. + +This level creates a separate subtree for every cryptocoin, avoiding reusing addresses across cryptocoins and improving privacy issues. + +Coin type is a constant, set for each cryptocoin. The list of registered coin type constants should be obtained from BIP44. + +Hardened derivation is used at this level. + +===Series=== + +Series are used by voting pools in order to implement FIFO cold storage. By directing deposits into multiple series, the private keys for most of the deposits can be kept offline, and a limited portion can be brought online to process withdrawals. + +Hardened derivation is used at this level. + +===Index=== + +Public/private keypairs are numbered from index 0 in sequentially increasing manner. This number is used as child index in BIP32 derivation. + +Public keys obtained at this level of the heirarchy are used to construct multisig deposit scripts, using a schema that is shared between the members as an out-of-band contract. + +Public derivation is used at this level. + +==Compatible wallets== + +* [[https://github.com/conformal/btcd|btcd]] is the reference Bitcoin wallet for voting pools. + +==Reference== + +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] +* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki new file mode 100644 index 0000000000..ee3e0ac0c4 --- /dev/null +++ b/bip-0081.mediawiki @@ -0,0 +1,68 @@ +
+  BIP:     81
+  Title:   Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
+  Authors: Justus Ranvier 
+           Jimmy Song 
+  Status:  Draft
+  Type:    Informational
+  Created: 2014-08-11
+
+ +==Abstract== + +This BIP defines a logical hierarchy for colored coin voting pool deterministic multisig wallets based on an algorithm described in BIP-0032 (BIP32 from now on) and purpose scheme described in BIP-0043 (BIP43 from now on). + +This BIP is a particular application of BIP43 and is based on BIP44. + +==Motivation== + +The hierarchy proposed in this paper allows the handling of multiple color definitions from a single seed. + +==Path levels== + +We define the following 8 levels in BIP32 path: + +
+m / purpose' / series' / (5 color definition levels) / address_index
+
+ +Apostrophe in the path indicates that BIP32 hardened derivation is used. + +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. + +Hardened derivation is used at this level. + +===Color Definition=== + +Index values which can be applied to a BIP32 node are limited to 4 bytes (32 bits). + +Since this is not sufficient to identify color definitions without a risk of collision, multiple levels are used. + +Color definitions are first shortened to 20 bytes using the Bitcoin hash160 function. + +The resulting 20 bytes are split into five groups in little endian format, and where each group is used as the seed for the five levels of color definition levels + +Public derivation is used at these levels, even when the index exceeds 2^31. + +===Index=== + +Public/private keypairs are numbered from index 0 in sequentially increasing manner. This number is used as child index in BIP32 derivation. + +Public keys obtained at this level of the heirarchy are used to construct multisig deposit scripts, using a schema that is shared between the members as an out-of-band contract. + +Public derivation is used at this level. + +==Compatible wallets== + +* [[https://github.com/conformal/btcd|btcd]] is the reference Bitcoin wallet for voting pools. + +==Reference== + +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] +* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] +* [[bip-0080.mediawiki|BIP44 - Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets]] From 6d963a9d5469ed61148496e2901e31fc948ca02a Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 10 Jul 2015 12:24:18 -0500 Subject: [PATCH 0159/2326] update readme --- README.mediawiki | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.mediawiki b/README.mediawiki index 87e6117b1f..045fd28f60 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -302,6 +302,18 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0080.mediawiki|80]] +| Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets +| Monetas +| Informational +| Draft +|- +| [[bip-0081.mediawiki|81]] +| Hierarchy for Colored Voting Pool Deterministic Multisig Wallets +| Monetas +| Informational +| Draft +|- | [[bip-0083.mediawiki|83]] | Dynamic Hierarchical Deterministic Key Trees | Eric Lombrozo From b079e559fbc41bd52f5d8d7d7d07c790f53421bc Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 10 Jul 2015 13:15:06 -0500 Subject: [PATCH 0160/2326] update btcwallet links --- bip-0080.mediawiki | 2 +- bip-0081.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki index e2f2565446..2d150755bc 100644 --- a/bip-0080.mediawiki +++ b/bip-0080.mediawiki @@ -62,7 +62,7 @@ Public derivation is used at this level. ==Compatible wallets== -* [[https://github.com/conformal/btcd|btcd]] is the reference Bitcoin wallet for voting pools. +* [[https://github.com/btcsuite/btcwallet|btcwallet]] is the reference Bitcoin wallet for voting pools. ==Reference== diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki index ee3e0ac0c4..eba33ec24b 100644 --- a/bip-0081.mediawiki +++ b/bip-0081.mediawiki @@ -58,7 +58,7 @@ Public derivation is used at this level. ==Compatible wallets== -* [[https://github.com/conformal/btcd|btcd]] is the reference Bitcoin wallet for voting pools. +* [[https://github.com/btcsuite/btcwallet|btcwallet]] is the reference Bitcoin wallet for voting pools. ==Reference== From 558ee51faf06d47e2b6ec57444159ba11e3c6802 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Fri, 10 Jul 2015 14:02:55 -0500 Subject: [PATCH 0161/2326] correct link description --- bip-0081.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki index eba33ec24b..bc8d7fbb6d 100644 --- a/bip-0081.mediawiki +++ b/bip-0081.mediawiki @@ -65,4 +65,4 @@ Public derivation is used at this level. * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] * [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] * [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] -* [[bip-0080.mediawiki|BIP44 - Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets]] +* [[bip-0080.mediawiki|BIP80 - Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets]] From 7bf68e9f2cc90431e27ae2cef491eafdb1b4e0fb Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 19 Jan 2016 12:35:35 +0800 Subject: [PATCH 0162/2326] Add example --- bip-0143.mediawiki | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 3d7e8563f0..a377736f2a 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -112,6 +112,69 @@ Refer to the reference implementation, reproduced below, for the precise algorit return ss.GetHash(); +== Example == + + + The following is an unsigned transaction: + 0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000 + + nVersion: 01000000 + txin: 02 fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f 00000000 00 eeffffff + ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a 01000000 00 ffffffff + txout: 02 202cb20600000000 1976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac + 9093510d00000000 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac + nLockTime: 11000000 + + The first input comes from an ordinary P2PK: + scriptPubKey: 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac value: 6.25 + + The second input comes from a P2WPKH witness program: + scriptPubKey: 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, value: 6 + + To sign it with a nHashType of 1 (SIGHASH_ALL): + + hashPrevouts: + dSHA256(fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000) + = 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37 + + hashSequence: + dSHA256(eeffffffffffffff) + = 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b + + hashOutputs: + dSHA256(202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac) + = 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5 + + hash preimage: 0100000096b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd3752b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3bef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a010000001976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac0046c32300000000ffffffff863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e51100000001000000 + + nVersion: 01000000 + hashPrevouts: 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37 + hashSequence: 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b + outpoint: ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000 + scriptCode: 1976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac + amount: 0046c32300000000 + nSequence: ffffffff + hashOutputs: 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5 + nLockTime: 11000000 + nHashType: 01000000 + + sigHash: c37af31116d1b27caf68aae9e3ac82f1477929014d5b917657d0eb49478cb670 + signature: 304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee + + The serialized signed transaction is: 01000000000102fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000494830450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac000247304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee0121025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee635711000000 + + nVersion: 01000000 + marker: 00 + flag: 01 + txin: 02 fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f 00000000 494830450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01 eeffffff + ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a 01000000 00 ffffffff + txout: 02 202cb20600000000 1976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac + 9093510d00000000 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac + witness 00 + 02 47304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01 21025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357 + nLockTime: 11000000 + +The new serialization format is described in BIP144 [[bip-0144.mediawiki|BIP144: Segregated Witness (Peer Services)]] == Deployment == This proposal is deployed with Segregated Witness softfork (BIP 141) From c25f1e7b5f548a2cbda63dbf2ebdf946cf30a527 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 19 Jan 2016 17:18:59 +0800 Subject: [PATCH 0163/2326] Clarify scriptCode --- bip-0143.mediawiki | 50 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index a377736f2a..093e477e31 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -24,35 +24,41 @@ Deploying the aforementioned fixes in the original script system is not a simple == Specification == A new transaction digest algorithm is defined, but only applicable to sigops in version 0 witness program: Double SHA256 of the serialization of: - 1. nVersion of the transaction - 2. hashPrevouts - 3. hashSequence - 4. transaction id and output index of the output spent by this input - 5. subscript of the input - 6. value of the output spent by this input - 7. nSequence of the input - 8. hashOutputs - 9. nLocktime of the transaction - 10. sighash type of the signature - -The items 1, 4, 5, 7, 9, 10 have the same meaning as the original algorithm. + 1. nVersion of the transaction (4-byte little endian) + 2. hashPrevouts (32-byte hash) + 3. hashSequence (32-byte hash) + 4. outpoint (32-byte hash + 4-byte little endian) + 5. scriptCode of the input (varInt for the length + script) + 6. value of the output spent by this input (8-byte little endian) + 7. nSequence of the input (4-byte little endian) + 8. hashOutputs (32-byte hash) + 9. nLocktime of the transaction (4-byte little endian) + 10. sighash type of the signature (4-byte little endian) + +The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. + +The item 5: +*For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac. +*For P2WSH witness program, +**if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is a varInt for the length of the witnessScript, followed by the witnessScript. +**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, and prepended by a varInt for the length of the trancated script. The item 6 is a 8-byte value of the amount of bitcoin spent in this input. -hashPrevouts: -*If the ANYONECANPAY flag is not set, hashPrevouts is the double SHA256 of the serialization of all transaction ids and output indexes involved in this transaction; -*Otherwise, hashPrevouts is a uint256 of 0x0000......0000. +hashPrevouts: +*If the ANYONECANPAY flag is not set, hashPrevouts is the double SHA256 of the serialization of all input outpoints; +*Otherwise, hashPrevouts is a uint256 of 0x0000......0000. -hashSequence: +hashSequence: *If none of the ANYONECANPAY, SINGLE, NONE sighash type is set, hashSequence is the double SHA256 of the serialization of nSequence of all inputs; -*Otherwise, hashSequence is a uint256 of 0x0000......0000. +*Otherwise, hashSequence is a uint256 of 0x0000......0000. -hashOutputs: -*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output scriptPubKey with value; -*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output scriptPubKey with value of the same index as the input; -*Otherwise, hashOutputs is a uint256 of 0x0000......0000. +hashOutputs: +*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output value (8-byte little endian) with scriptPubKey (varInt for the length + script); +*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output value with scriptPubKey of the same index as the input; +*Otherwise, hashOutputs is a uint256 of 0x0000......0000. -The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verification may be reused in other inputs of the same transaction, so that the time complexity of the whole hashing process reduces from O(n2) to O(n). +The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verification may be reused in other inputs of the same transaction, so that the time complexity of the whole hashing process reduces from O(n2) to O(n). Refer to the reference implementation, reproduced below, for the precise algorithm: From 7e4dec0d9368a3b8c795fa25fe813932e16a57fb Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 21 Jan 2016 22:53:32 +0800 Subject: [PATCH 0164/2326] Links to reference implementation --- bip-0141.mediawiki | 2 +- bip-0142.mediawiki | 2 ++ bip-0143.mediawiki | 6 +++--- bip-0144.mediawiki | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 74fbf0f688..dc49743497 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -254,7 +254,7 @@ Special thanks to Gregory Maxwell for originating many of the ideas in this BIP == Reference Implementation == -https://github.com/sipa/bitcoin/commits/segwit3 +https://github.com/sipa/bitcoin/commits/segwit == References == diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index 7d7b1d26df..6e90757b96 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -140,6 +140,8 @@ Using 0x06 as witness version, followed 0x00 as witness version, and a 0x00 padd == Reference implementation == +https://github.com/theuni/bitcoin/commit/ede1b57058ac8efdefe61f67395affb48f2c0d80 + == References == * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]] diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 093e477e31..29e5e07eb1 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -1,4 +1,4 @@ -
+
   BIP: 143
   Title: Transaction Signature Verification for Version 0 Witness Program
   Author: Johnson Lau 
@@ -41,7 +41,7 @@ The item 5:
 *For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac.
 *For P2WSH witness program,
 **if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is a varInt for the length of the witnessScript, followed by the witnessScript.
-**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, and prepended by a varInt for the length of the trancated script.
+**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, and prepended by a varInt for the length of the truncated script.
 
 The item 6 is a 8-byte value of the amount of bitcoin spent in this input.
 
@@ -191,7 +191,7 @@ As a soft fork, older software will continue to operate without modification. No
 
 == Reference Implementation ==
 
-https://github.com/sipa/bitcoin/commits/segwit3
+https://github.com/sipa/bitcoin/commits/segwit
 
 == References ==
 
diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index 736fadd4d9..e3843a8f90 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -116,7 +116,7 @@ MSG_WITNESS_BLOCK requests will return a block message with transactions that ha
 Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 
 == Reference Implementation ==
-https://github.com/sipa/bitcoin/commits/segwit3
+https://github.com/sipa/bitcoin/commits/segwit
 
 == Copyright ==
 This document is placed in the public domain.

From ec5b1c097e55ebb01d75c2253987e5772d98d112 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Thu, 21 Jan 2016 23:24:10 +0800
Subject: [PATCH 0165/2326] Clarifying the behavior of OP_CODESEPERATOR

---
 bip-0143.mediawiki | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 29e5e07eb1..72ef22d714 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -35,6 +35,8 @@ 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)
 
+All components in the original algorithm, including the behavior OP_CODESEPERATOR, remains unchanged. The only difference is the way of serialization and the inclusion of amount being spent.
+
 The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. 
 
 The item 5:

From 1ae904c0115a109ee78c9d8c9ca6cb88b9bdfde4 Mon Sep 17 00:00:00 2001
From: Guilherme Salgado 
Date: Thu, 21 Jan 2016 12:32:11 +0000
Subject: [PATCH 0166/2326] Add Copyright sections to bip-0080 and bip-0081

---
 bip-0080.mediawiki | 4 ++++
 bip-0081.mediawiki | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki
index 2d150755bc..f28bb70f8f 100644
--- a/bip-0080.mediawiki
+++ b/bip-0080.mediawiki
@@ -64,6 +64,10 @@ Public derivation is used at this level.
 
 * [[https://github.com/btcsuite/btcwallet|btcwallet]] is the reference Bitcoin wallet for voting pools.
 
+==Copyright==
+
+This document is placed in the public domain.
+
 ==Reference==
 
 * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki
index bc8d7fbb6d..5157c09492 100644
--- a/bip-0081.mediawiki
+++ b/bip-0081.mediawiki
@@ -60,6 +60,10 @@ Public derivation is used at this level.
 
 * [[https://github.com/btcsuite/btcwallet|btcwallet]] is the reference Bitcoin wallet for voting pools.
 
+==Copyright==
+
+This document is placed in the public domain.
+
 ==Reference==
 
 * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]

From 5bb4115c11d06bd4324ac9c0ffa859e17f7c2286 Mon Sep 17 00:00:00 2001
From: Thomas Kerin 
Date: Sat, 23 Jan 2016 01:31:45 +0000
Subject: [PATCH 0167/2326] typo in references

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

diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki
index 112a47295d..ff831cbe06 100644
--- a/bip-0142.mediawiki
+++ b/bip-0142.mediawiki
@@ -146,7 +146,7 @@ https://github.com/theuni/bitcoin/commit/ede1b57058ac8efdefe61f67395affb48f2c0d8
 
 * [[bip-0013.mediawiki|BIP 13: Address Format for pay-to-script-hash]]
 * [[bip-0016.mediawiki|BIP 16: Pay to Script Hash]]
-* [[bip-0070.mediawiki|BIP 70: Payment Protocal]]
+* [[bip-0070.mediawiki|BIP 70: Payment Protocol]]
 * [[bip-0141.mediawiki|BIP 141: Segregated Witness]]
 
 == Copyright ==

From 174845b3cd8de3978f321386a713d77e9d6cf08c Mon Sep 17 00:00:00 2001
From: Kirill Fomichev 
Date: Sat, 23 Jan 2016 13:40:03 +0500
Subject: [PATCH 0168/2326] BIP 141: fix URLs

---
 bip-0141.mediawiki | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 7266e9d753..ecfb56220c 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -21,7 +21,7 @@ The entirety of the transaction's effects are determined by output consumption (
 
 By removing this data from the transaction structure committed to the transaction merkle tree, several problems are fixed:
 
-# '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was signed are no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach ([https://github.com/bitcoin/bips/edit/master/bip-0062.mediawiki BIP62]):
+# '''Nonintentional malleability becomes impossible'''. Since signature data is no longer part of the transaction hash, changes to how the transaction was signed are no longer relevant to transaction identification. As a solution of transaction malleability, this is superior to the canonical signature approach ([https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki BIP62]):
 #* It prevents involuntary transaction malleability for any type of scripts, as long as all inputs are signed (with at least one CHECKSIG or CHECKMULTISIG operation)
 #* In the case of an m-of-n CHECKMULTISIG script, a transaction is malleable only with agreement of m private key holders (as opposed to only 1 private key holder with BIP62)
 #* It prevents involuntary transaction malleability due to unknown ECDSA signature malleability
@@ -206,9 +206,9 @@ The 32-byte limitation for witness program could be easily extended through a so
 
 === Per-input lock-time and relative-lock-time ===
 
-Currently there is only one nLockTime field in a transaction and all inputs must share the same value. [https://github.com/bitcoin/bips/edit/master/bip-0068.mediawiki BIP68] enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution.
+Currently there is only one nLockTime field in a transaction and all inputs must share the same value. [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP68] enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution.
 
-With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like [https://github.com/bitcoin/bips/edit/master/bip-0065.mediawiki BIP65] and [https://github.com/bitcoin/bips/edit/master/bip-0112.mediawiki BIP112]).
+With a soft fork, it is possible to introduce a separate witness structure to allow per-input lock-time and relative-lock-time, and a new script system that could sign and manipulate the new data (like [https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP65] and [https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP112]).
 
 == Backward compatibility ==
 

From b915ba5378df097644d3d2b66aca86c3a5f09112 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Sun, 24 Jan 2016 19:10:39 +0800
Subject: [PATCH 0169/2326] Clarify txid and wtxid

---
 bip-0141.mediawiki | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 7266e9d753..9a5068efe9 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -34,13 +34,35 @@ By removing this data from the transaction structure committed to the transactio
 
 ==Specification==
 
+=== Transaction ID ===
+
+A new data structure, witness, is defined. Each transaction will have 2 IDs.
+
+Definition of txid remains unchanged: the double SHA256 of the traditional serialization format:
+  
+  [nVersion][txins][txouts][nLockTime]
+  
+A new wtxid is defined: the double SHA256 of the new serialization with witness data:
+  
+  [nVersion][marker][flag][txins][txouts][witness][nLockTime]
+  
+Format of nVersion, txins, txouts, and nLockTime are same as traditional serialization.
+
+The marker MUST be 0x00.
+
+The flag MUST be a 1-byte non-zero value. Currently, 0x01 MUST be used.
+
+The witness is a serialization of all witness data of the transaction. Each txin is associated with a witness field. A witness field starts with a var_int to indicate the number of stack items for the txin. It is followed by stack items, with each item starts with a var_int to indicate the length. Witness data is NOT script and is not restricted by the 520-byte push limit.
+
+A non-witness program (defined hereinafter) txin MUST be associated with an empty witness field, represented by a 0x00. If all txins are not witness program, a transaction's wtxid is equal to its txid.
+
 === Commitment structure ===
 
-A new block rule is added which requires a commitment to the witness hashes, the double SHA256 of a transaction including witnesses. The witness hash of coinbase transaction is assumed to be 0x0000....0000.
+A new block rule is added which requires a commitment to the wtxid. The wtxid of coinbase transaction is assumed to be 0x0000....0000.
 
-A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header.
+A witness root hash is calculated with all those wtxid as leaves, in a way similar to the hashMerkleRoot in the block header.
 
-The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is:
+The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is:
   
    1-byte - OP_RETURN (0x6a)
    1-byte - Push the following 36 bytes (0x24)

From ecdfa0a029b7dc25a1a10dbf773e73f8c2b01769 Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Sun, 24 Jan 2016 04:41:29 -0800
Subject: [PATCH 0170/2326] Script witness encoding.

---
 bip-0144.mediawiki | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index 233fbc33ca..9b2422bbb3 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -63,8 +63,8 @@ The serialization has the following structure:
 | A list of one or more transaction outputs
 |-
 | 1+
-| witness
-| witness
+| script_witnesses
+| script_witnesses[]
 | The witness structure as a serialized byte array
 |-
 | 4
@@ -77,7 +77,7 @@ Parsers supporting this BIP will be able to distinguish between the old serializ
 
 If the witness is empty, the old serialization format should be used. 
 
-Witness objects can be extended to contain other kinds of witness data not yet specified. This BIP is agnostic to the witness data structure, defined in [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141] (Consensus segwit BIP), and treats it as an arbitrary byte array.
+Currently, the only witness objects type supported are script witnesses which consist of a stack of byte arrays. It is encoded as a var_int item count followed by each item encoded as a var_int length followed by a string of bytes. Each txin has its own script witness. The number of script witnesses is not explicitly encoded as it is implied by txin_count. Empty script witnesses are encoded as a zero byte. The order of the script witnesses follows the same order as the associated txins.
 
 * '''Rationale for not having an independent message type with its own serialization''': this would require separate "tx" and "block" messages, and all RPC calls operating on raw transactions would need to be duplicated, or need inefficinent or nondeterministic guesswork to know which type is to be used.
 

From 6d701a3ea852e908ef2d308fb5bf8ef14bd2d6e8 Mon Sep 17 00:00:00 2001
From: Jonathan Cross 
Date: Sun, 24 Jan 2016 16:47:40 +0100
Subject: [PATCH 0171/2326] Improvements to BIP 122

Grammar, punctuation and labeling improvements meant to clarify the BIP and improve readability.
---
 bip-0122.mediawiki | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki
index d59e353793..17003aa51d 100644
--- a/bip-0122.mediawiki
+++ b/bip-0122.mediawiki
@@ -10,13 +10,13 @@
 
 ==Abstract==
 
-This BIP propose an URI scheme for looking up blocks, transactions, addresses on a Blockchain explorer, or in general to make proper Blockchain references
+This BIP proposes a URI scheme for looking up blocks, transactions and addresses on a Blockchain explorer, or in general to make proper Blockchain references.
 
 ==Motivation==
 
 The purpose of this URI scheme is to enable users to handle all the requests for details about blocks, transactions, etc. with their preferred tool (being that a web service or a local application).
-Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction, or let him choose from a limited list of possible alternatives.
-Other times resorting to cut&paste is needed.
+Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction or allows the user to choose from a set of alternatives.
+Resorting to copy + paste into a browser is often required.
 The same happens with posts and messages that reference some particular txs or blocks, if they provide links at all.
 
 ==Specification==
@@ -30,7 +30,7 @@ Where:
 {| class="wikitable"
 ! style="text-align: center;" | Element
 ! colspan="2" style="text-align: center;" | Description
-! 
+! Required?
 |-
 | chain
 | colspan="2" | '''chain ID''' (see below) of the desired chain, leading 0s included. If omitted (which would be the usual case), Bitcoin main net is assumed.
@@ -39,7 +39,7 @@ Where:
 | rowspan="3" | type
 | tx
 | for transactions.
-| rowspan="3" | 
+| rowspan="3" | required 
 |-
 | block
 | for blocks (supports both hash or height).
@@ -49,7 +49,7 @@ Where:
 |-
 | hash
 | colspan="2" | the relevant hash to refer to (leading zeros included), or block height.
-| 
+| required
 |}
 
 ====ABNF grammar====
@@ -104,20 +104,20 @@ A transaction on Bitcoin test net:
 
 ==Rationale==
 
-From the point of view of a wallet (or other Blockchain related tool) developer that need to show any kind of Blockchain references, using this scheme mean that he can simply make it a blockchain: link and be done with it, without having to worry about any specific Blockchain explorer or provide a means for the user to select one.
+From the point of view of a wallet (or other Blockchain related tool) developers which need to reference Blockchain data, using this scheme mean that he can simply make it a `blockchain:` link without having to worry about any specific Blockchain explorer or provide a means for the user to select one.
 
-Blockchain explorers in turn will simply offer to handle the blockchain: URI, the first time the user visit their website, or launch/install the application, or even set themselves if there isn't already one.
+Blockchain explorers in turn will simply offer to handle the `blockchain:` URI schema, the first time the user visit their website, or launch/install the application, or even set themselves if there isn't already one.
 
-Users get the convenience of using always their preferred explorer, which can be especially handy on mobile devices, where juggling with cut&paste is far from ideal.
+Users can link directly to their preferred block explorer (avoiding copy + paste which can be awkward on mobile devices).
 
 == Sample implementation ==
 
 [https://github.com/MarcoPon/blockchain-exploration Demo Blockchain: URI handler on GitHub]
 
 ==Acknowledgements==
-Thanks to Btc Drak for suggesting to provide support for different networks.
-Thanks to Jorge Timon for the idea of using genesis blocks hashes to identify them.
-Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for suggestions about the structure and hierarchy of the URI scheme.
+
+Thanks to Btc Drak for suggesting support for different networks and Jorge Timon for the suggestion that we could identify each network by its genesis block hash.
+Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for help with the structure and hierarchy of the URI scheme.
 
 ==Copyright==
 

From 64a7c45e84dbfcd6c36620f3e72258bf78b9d937 Mon Sep 17 00:00:00 2001
From: Thomas Kerin 
Date: Sun, 24 Jan 2016 17:21:17 +0000
Subject: [PATCH 0172/2326] typo

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

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 7266e9d753..1c8abc9c6d 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -92,7 +92,7 @@ The new rule is total ''block cost'' ≤ 4,000,000.
 
 Sigops per block is currently limited to 20,000. We change this restriction as follows:
 
-''Sigop cost'' is defined. The cost of a sigop in traditoinal script is 4, while the cost of a sigop in witness program is 1.
+''Sigop cost'' is defined. The cost of a sigop in traditional script is 4, while the cost of a sigop in witness program is 1.
 
 The new rule is total ''sigop cost'' ≤ 80,000.
 

From 6a315c023f13d83c58aab98cf8668d74cf7566c7 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 26 Jan 2016 01:59:00 +0800
Subject: [PATCH 0173/2326] BIP141 Non-upgraded wallet description

---
 bip-0141.mediawiki | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 7114ddd2dc..b62d54d2a0 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -239,14 +239,13 @@ As a soft fork, older software will continue to operate without modification.  N
 '''What a non-upgraded wallet can do'''
 
 * Receiving bitcoin from non-upgraded and upgraded wallets
-* Sending bitcoin to non-upgraded wallets
-* Sending bitcoin to upgraded wallets using a P2SH address (less efficient)
-* Sending bitcoin to upgraded wallets using a native witness program (more efficient) through [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki BIP70] payment protocol
+* Sending bitcoin to non-upgraded and upgraded wallets with traditional P2PKH address (without any benefit of segregated witness)
+* Sending bitcoin to upgraded wallets using a P2SH address
+* Sending bitcoin to upgraded wallets using a native witness program through [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki BIP70] payment protocol
 
 '''What a non-upgraded wallet cannot do'''
 
 * Validating segregated witness transaction. It assumes such a transaction is always valid
-* Sending bitcoin to upgraded wallets using a native witness program if BIP70 is not supported
 
 == Deployment ==
 
@@ -281,7 +280,6 @@ https://github.com/sipa/bitcoin/commits/segwit
 == References ==
 
 *[[bip-0016.mediawiki|BIP16 Pay to Script Hash]]
-*[[bip-0142.mediawiki|BIP142 Address Formats for Segregated Witness]]
 *[[bip-0143.mediawiki|BIP143 Transaction Signature Verification for Version 0 Witness Program]]
 *[[bip-0144.mediawiki|BIP144 Segregated Witness (Peer Services)]]
 

From 4bf562569e43e7521d3bf3c91cb4cb11f5365bd4 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 26 Jan 2016 11:48:30 +0800
Subject: [PATCH 0174/2326] BIP141: Add 520 bytes witness stack limit

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

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index b62d54d2a0..ec6b14674a 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -52,7 +52,7 @@ The marker MUST be 0x00.
 
 The flag MUST be a 1-byte non-zero value. Currently, 0x01 MUST be used.
 
-The witness is a serialization of all witness data of the transaction. Each txin is associated with a witness field. A witness field starts with a var_int to indicate the number of stack items for the txin. It is followed by stack items, with each item starts with a var_int to indicate the length. Witness data is NOT script and is not restricted by the 520-byte push limit.
+The witness is a serialization of all witness data of the transaction. Each txin is associated with a witness field. A witness field starts with a var_int to indicate the number of stack items for the txin. It is followed by stack items, with each item starts with a var_int to indicate the length. Witness data is NOT script.
 
 A non-witness program (defined hereinafter) txin MUST be associated with an empty witness field, represented by a 0x00. If all txins are not witness program, a transaction's wtxid is equal to its txid.
 
@@ -85,20 +85,20 @@ There are two cases in which witness validation logic are triggered. Each case d
 
 If the version byte is 0, and the witness program is 20 bytes:
 * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
-* The witness must consist of exactly 2 items. The first one a signature, and the second one a public key.
+* 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:
 * 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 is popped off the initial witness stack. SHA256 of the witnessScript must match the 32-byte witness program.
-* The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack.
+* The witnessScript (≤ 10,000 bytes) is popped off the initial witness stack. SHA256 of the witnessScript must match the 32-byte witness program.
+* The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack (≤ 520 bytes for each stack item).
 * The script must not fail, and result in exactly a single TRUE on the stack.
 
 If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.
 
-If the version byte is 1 to 16, no further interpretation of the witness program or witness happens.
+If the version byte is 1 to 16, no further interpretation of the witness program or witness happens, and there is no size restriction for the witness. These versions are reserved for future extensions.
 
 === Other consensus critical limits ===
 

From e327e501676884f1366199439ef2d716b557fe13 Mon Sep 17 00:00:00 2001
From: Paolo Agazzone 
Date: Tue, 26 Jan 2016 18:20:11 +0100
Subject: [PATCH 0175/2326] Added bip39 Italian wordlist

---
 bip-0039/bip-0039-wordlists.md | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md
index 203ba06f5a..aef1a230a2 100644
--- a/bip-0039/bip-0039-wordlists.md
+++ b/bip-0039/bip-0039-wordlists.md
@@ -6,6 +6,7 @@
 * [Chinese (Simplified)](chinese_simplified.txt)
 * [Chinese (Traditional)](chinese_traditional.txt)
 * [French](french.txt)
+* [Italian](italian.txt)
 
 ##Wordlists (Special Considerations)
 
@@ -57,3 +58,26 @@ Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
 15. No words in conflict with the spelling corrections of 1990 (http://goo.gl/Y8DU4z).
 16. No embarrassing words (in a very, very large scope) or belonging to a particular religion.
 17. No identical words with the Spanish wordlist (as Y75QMO wants).
+
+### Italian
+
+Credits: @paoloaga @Polve
+
+Words chosen using the following rules:
+
+1. Simple and common italian words.
+2. Length between 4 and 8 characters.
+3. First 4 letters must be unique between all words.
+4. No accents or special characters.
+5. No complex verb forms.
+6. No plural words.
+7. No words that remind negative/sad/bad things.
+8. If both female/male words are available, choose male version.
+9. No words with double vocals (like: lineetta).
+10. No words already used in other language mnemonic sets.
+11. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must be at least other 3 different letters.
+12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there not must be the same sequence of 3 or more letters.
+
+Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good. 
+
+All the words have been manually selected and automatically checked against the rules.

From d3f34b99d05a45fe8ed9ac53cd0fabc4532fe4a3 Mon Sep 17 00:00:00 2001
From: Paolo Agazzone 
Date: Tue, 26 Jan 2016 18:20:11 +0100
Subject: [PATCH 0176/2326] Added bip39 Italian wordlist

---
 bip-0039/bip-0039-wordlists.md |   24 +
 bip-0039/italian.txt           | 2048 ++++++++++++++++++++++++++++++++
 2 files changed, 2072 insertions(+)
 create mode 100644 bip-0039/italian.txt

diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md
index 203ba06f5a..aef1a230a2 100644
--- a/bip-0039/bip-0039-wordlists.md
+++ b/bip-0039/bip-0039-wordlists.md
@@ -6,6 +6,7 @@
 * [Chinese (Simplified)](chinese_simplified.txt)
 * [Chinese (Traditional)](chinese_traditional.txt)
 * [French](french.txt)
+* [Italian](italian.txt)
 
 ##Wordlists (Special Considerations)
 
@@ -57,3 +58,26 @@ Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
 15. No words in conflict with the spelling corrections of 1990 (http://goo.gl/Y8DU4z).
 16. No embarrassing words (in a very, very large scope) or belonging to a particular religion.
 17. No identical words with the Spanish wordlist (as Y75QMO wants).
+
+### Italian
+
+Credits: @paoloaga @Polve
+
+Words chosen using the following rules:
+
+1. Simple and common italian words.
+2. Length between 4 and 8 characters.
+3. First 4 letters must be unique between all words.
+4. No accents or special characters.
+5. No complex verb forms.
+6. No plural words.
+7. No words that remind negative/sad/bad things.
+8. If both female/male words are available, choose male version.
+9. No words with double vocals (like: lineetta).
+10. No words already used in other language mnemonic sets.
+11. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must be at least other 3 different letters.
+12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there not must be the same sequence of 3 or more letters.
+
+Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good. 
+
+All the words have been manually selected and automatically checked against the rules.
diff --git a/bip-0039/italian.txt b/bip-0039/italian.txt
new file mode 100644
index 0000000000..c47370f4ee
--- /dev/null
+++ b/bip-0039/italian.txt
@@ -0,0 +1,2048 @@
+abaco
+abbaglio
+abbinato
+abete
+abisso
+abolire
+abrasivo
+abrogato
+accadere
+accenno
+accusato
+acetone
+achille
+acido
+acqua
+acre
+acrilico
+acrobata
+acuto
+adagio
+addebito
+addome
+adeguato
+aderire
+adipe
+adottare
+adulare
+affabile
+affetto
+affisso
+affranto
+aforisma
+afoso
+africano
+agave
+agente
+agevole
+aggancio
+agire
+agitare
+agonismo
+agricolo
+agrumeto
+aguzzo
+alabarda
+alato
+albatro
+alberato
+albo
+albume
+alce
+alcolico
+alettone
+alfa
+algebra
+aliante
+alibi
+alimento
+allagato
+allegro
+allievo
+allodola
+allusivo
+almeno
+alogeno
+alpaca
+alpestre
+altalena
+alterno
+alticcio
+altrove
+alunno
+alveolo
+alzare
+amalgama
+amanita
+amarena
+ambito
+ambrato
+ameba
+america
+ametista
+amico
+ammasso
+ammenda
+ammirare
+ammonito
+amore
+ampio
+ampliare
+amuleto
+anacardo
+anagrafe
+analista
+anarchia
+anatra
+anca
+ancella
+ancora
+andare
+andrea
+anello
+angelo
+angolare
+angusto
+anima
+annegare
+annidato
+anno
+annuncio
+anonimo
+anticipo
+anzi
+apatico
+apertura
+apode
+apparire
+appetito
+appoggio
+approdo
+appunto
+aprile
+arabica
+arachide
+aragosta
+araldica
+arancio
+aratura
+arazzo
+arbitro
+archivio
+ardito
+arenile
+argento
+argine
+arguto
+aria
+armonia
+arnese
+arredato
+arringa
+arrosto
+arsenico
+arso
+artefice
+arzillo
+asciutto
+ascolto
+asepsi
+asettico
+asfalto
+asino
+asola
+aspirato
+aspro
+assaggio
+asse
+assoluto
+assurdo
+asta
+astenuto
+astice
+astratto
+atavico
+ateismo
+atomico
+atono
+attesa
+attivare
+attorno
+attrito
+attuale
+ausilio
+austria
+autista
+autonomo
+autunno
+avanzato
+avere
+avvenire
+avviso
+avvolgere
+azione
+azoto
+azzimo
+azzurro
+babele
+baccano
+bacino
+baco
+badessa
+badilata
+bagnato
+baita
+balcone
+baldo
+balena
+ballata
+balzano
+bambino
+bandire
+baraonda
+barbaro
+barca
+baritono
+barlume
+barocco
+basilico
+basso
+batosta
+battuto
+baule
+bava
+bavosa
+becco
+beffa
+belgio
+belva
+benda
+benevole
+benigno
+benzina
+bere
+berlina
+beta
+bibita
+bici
+bidone
+bifido
+biga
+bilancia
+bimbo
+binocolo
+biologo
+bipede
+bipolare
+birbante
+birra
+biscotto
+bisesto
+bisnonno
+bisonte
+bisturi
+bizzarro
+blando
+blatta
+bollito
+bonifico
+bordo
+bosco
+botanico
+bottino
+bozzolo
+braccio
+bradipo
+brama
+branca
+bravura
+bretella
+brevetto
+brezza
+briglia
+brillante
+brindare
+broccolo
+brodo
+bronzina
+brullo
+bruno
+bubbone
+buca
+budino
+buffone
+buio
+bulbo
+buono
+burlone
+burrasca
+bussola
+busta
+cadetto
+caduco
+calamaro
+calcolo
+calesse
+calibro
+calmo
+caloria
+cambusa
+camerata
+camicia
+cammino
+camola
+campale
+canapa
+candela
+cane
+canino
+canotto
+cantina
+capace
+capello
+capitolo
+capogiro
+cappero
+capra
+capsula
+carapace
+carcassa
+cardo
+carisma
+carovana
+carretto
+cartolina
+casaccio
+cascata
+caserma
+caso
+cassone
+castello
+casuale
+catasta
+catena
+catrame
+cauto
+cavillo
+cedibile
+cedrata
+cefalo
+celebre
+cellulare
+cena
+cenone
+centesimo
+ceramica
+cercare
+certo
+cerume
+cervello
+cesoia
+cespo
+ceto
+chela
+chiaro
+chicca
+chiedere
+chimera
+china
+chirurgo
+chitarra
+ciao
+ciclismo
+cifrare
+cigno
+cilindro
+ciottolo
+circa
+cirrosi
+citrico
+cittadino
+ciuffo
+civetta
+civile
+classico
+clinica
+cloro
+cocco
+codardo
+codice
+coerente
+cognome
+collare
+colmato
+colore
+colposo
+coltivato
+colza
+coma
+cometa
+commando
+comodo
+computer
+comune
+conciso
+condurre
+conferma
+congelare
+coniuge
+connesso
+conoscere
+consumo
+continuo
+convegno
+coperto
+copione
+coppia
+copricapo
+corazza
+cordata
+coricato
+cornice
+corolla
+corpo
+corredo
+corsia
+cortese
+cosmico
+costante
+cottura
+covato
+cratere
+cravatta
+creato
+credere
+cremoso
+crescita
+creta
+criceto
+crinale
+crisi
+critico
+croce
+cronaca
+crostata
+cruciale
+crusca
+cucire
+cuculo
+cugino
+cullato
+cupola
+curatore
+cursore
+curvo
+cuscino
+custode
+dado
+daino
+dalmata
+damerino
+daniela
+dannoso
+danzare
+datato
+davanti
+davvero
+debutto
+decennio
+deciso
+declino
+decollo
+decreto
+dedicato
+definito
+deforme
+degno
+delegare
+delfino
+delirio
+delta
+demenza
+denotato
+dentro
+deposito
+derapata
+derivare
+deroga
+descritto
+deserto
+desiderio
+desumere
+detersivo
+devoto
+diametro
+dicembre
+diedro
+difeso
+diffuso
+digerire
+digitale
+diluvio
+dinamico
+dinnanzi
+dipinto
+diploma
+dipolo
+diradare
+dire
+dirotto
+dirupo
+disagio
+discreto
+disfare
+disgelo
+disposto
+distanza
+disumano
+dito
+divano
+divelto
+dividere
+divorato
+doblone
+docente
+doganale
+dogma
+dolce
+domato
+domenica
+dominare
+dondolo
+dono
+dormire
+dote
+dottore
+dovuto
+dozzina
+drago
+druido
+dubbio
+dubitare
+ducale
+duna
+duomo
+duplice
+duraturo
+ebano
+eccesso
+ecco
+eclissi
+economia
+edera
+edicola
+edile
+editoria
+educare
+egemonia
+egli
+egoismo
+egregio
+elaborato
+elargire
+elegante
+elencato
+eletto
+elevare
+elfico
+elica
+elmo
+elsa
+eluso
+emanato
+emblema
+emesso
+emiro
+emotivo
+emozione
+empirico
+emulo
+endemico
+enduro
+energia
+enfasi
+enoteca
+entrare
+enzima
+epatite
+epilogo
+episodio
+epocale
+eppure
+equatore
+erario
+erba
+erboso
+erede
+eremita
+erigere
+ermetico
+eroe
+erosivo
+errante
+esagono
+esame
+esanime
+esaudire
+esca
+esempio
+esercito
+esibito
+esigente
+esistere
+esito
+esofago
+esortato
+esoso
+espanso
+espresso
+essenza
+esso
+esteso
+estimare
+estonia
+estroso
+esultare
+etilico
+etnico
+etrusco
+etto
+euclideo
+europa
+evaso
+evidenza
+evitato
+evoluto
+evviva
+fabbrica
+faccenda
+fachiro
+falco
+famiglia
+fanale
+fanfara
+fango
+fantasma
+fare
+farfalla
+farinoso
+farmaco
+fascia
+fastoso
+fasullo
+faticare
+fato
+favoloso
+febbre
+fecola
+fede
+fegato
+felpa
+feltro
+femmina
+fendere
+fenomeno
+fermento
+ferro
+fertile
+fessura
+festivo
+fetta
+feudo
+fiaba
+fiducia
+fifa
+figurato
+filo
+finanza
+finestra
+finire
+fiore
+fiscale
+fisico
+fiume
+flacone
+flamenco
+flebo
+flemma
+florido
+fluente
+fluoro
+fobico
+focaccia
+focoso
+foderato
+foglio
+folata
+folclore
+folgore
+fondente
+fonetico
+fonia
+fontana
+forbito
+forchetta
+foresta
+formica
+fornaio
+foro
+fortezza
+forzare
+fosfato
+fosso
+fracasso
+frana
+frassino
+fratello
+freccetta
+frenata
+fresco
+frigo
+frollino
+fronde
+frugale
+frutta
+fucilata
+fucsia
+fuggente
+fulmine
+fulvo
+fumante
+fumetto
+fumoso
+fune
+funzione
+fuoco
+furbo
+furgone
+furore
+fuso
+futile
+gabbiano
+gaffe
+galateo
+gallina
+galoppo
+gambero
+gamma
+garanzia
+garbo
+garofano
+garzone
+gasdotto
+gasolio
+gastrico
+gatto
+gaudio
+gazebo
+gazzella
+geco
+gelatina
+gelso
+gemello
+gemmato
+gene
+genitore
+gennaio
+genotipo
+gergo
+ghepardo
+ghiaccio
+ghisa
+giallo
+gilda
+ginepro
+giocare
+gioiello
+giorno
+giove
+girato
+girone
+gittata
+giudizio
+giurato
+giusto
+globulo
+glutine
+gnomo
+gobba
+golf
+gomito
+gommone
+gonfio
+gonna
+governo
+gracile
+grado
+grafico
+grammo
+grande
+grattare
+gravoso
+grazia
+greca
+gregge
+grifone
+grigio
+grinza
+grotta
+gruppo
+guadagno
+guaio
+guanto
+guardare
+gufo
+guidare
+ibernato
+icona
+identico
+idillio
+idolo
+idra
+idrico
+idrogeno
+igiene
+ignaro
+ignorato
+ilare
+illeso
+illogico
+illudere
+imballo
+imbevuto
+imbocco
+imbuto
+immane
+immerso
+immolato
+impacco
+impeto
+impiego
+importo
+impronta
+inalare
+inarcare
+inattivo
+incanto
+incendio
+inchino
+incisivo
+incluso
+incontro
+incrocio
+incubo
+indagine
+india
+indole
+inedito
+infatti
+infilare
+inflitto
+ingaggio
+ingegno
+inglese
+ingordo
+ingrosso
+innesco
+inodore
+inoltrare
+inondato
+insano
+insetto
+insieme
+insonnia
+insulina
+intasato
+intero
+intonaco
+intuito
+inumidire
+invalido
+invece
+invito
+iperbole
+ipnotico
+ipotesi
+ippica
+iride
+irlanda
+ironico
+irrigato
+irrorare
+isolato
+isotopo
+isterico
+istituto
+istrice
+italia
+iterare
+labbro
+labirinto
+lacca
+lacerato
+lacrima
+lacuna
+laddove
+lago
+lampo
+lancetta
+lanterna
+lardoso
+larga
+laringe
+lastra
+latenza
+latino
+lattuga
+lavagna
+lavoro
+legale
+leggero
+lembo
+lentezza
+lenza
+leone
+lepre
+lesivo
+lessato
+lesto
+letterale
+leva
+levigato
+libero
+lido
+lievito
+lilla
+limatura
+limitare
+limpido
+lineare
+lingua
+liquido
+lira
+lirica
+lisca
+lite
+litigio
+livrea
+locanda
+lode
+logica
+lombare
+londra
+longevo
+loquace
+lorenzo
+loto
+lotteria
+luce
+lucidato
+lumaca
+luminoso
+lungo
+lupo
+luppolo
+lusinga
+lusso
+lutto
+macabro
+macchina
+macero
+macinato
+madama
+magico
+maglia
+magnete
+magro
+maiolica
+malafede
+malgrado
+malinteso
+malsano
+malto
+malumore
+mana
+mancia
+mandorla
+mangiare
+manifesto
+mannaro
+manovra
+mansarda
+mantide
+manubrio
+mappa
+maratona
+marcire
+maretta
+marmo
+marsupio
+maschera
+massaia
+mastino
+materasso
+matricola
+mattone
+maturo
+mazurca
+meandro
+meccanico
+mecenate
+medesimo
+meditare
+mega
+melassa
+melis
+melodia
+meninge
+meno
+mensola
+mercurio
+merenda
+merlo
+meschino
+mese
+messere
+mestolo
+metallo
+metodo
+mettere
+miagolare
+mica
+micelio
+michele
+microbo
+midollo
+miele
+migliore
+milano
+milite
+mimosa
+minerale
+mini
+minore
+mirino
+mirtillo
+miscela
+missiva
+misto
+misurare
+mitezza
+mitigare
+mitra
+mittente
+mnemonico
+modello
+modifica
+modulo
+mogano
+mogio
+mole
+molosso
+monastero
+monco
+mondina
+monetario
+monile
+monotono
+monsone
+montato
+monviso
+mora
+mordere
+morsicato
+mostro
+motivato
+motosega
+motto
+movenza
+movimento
+mozzo
+mucca
+mucosa
+muffa
+mughetto
+mugnaio
+mulatto
+mulinello
+multiplo
+mummia
+munto
+muovere
+murale
+musa
+muscolo
+musica
+mutevole
+muto
+nababbo
+nafta
+nanometro
+narciso
+narice
+narrato
+nascere
+nastrare
+naturale
+nautica
+naviglio
+nebulosa
+necrosi
+negativo
+negozio
+nemmeno
+neofita
+neretto
+nervo
+nessuno
+nettuno
+neutrale
+neve
+nevrotico
+nicchia
+ninfa
+nitido
+nobile
+nocivo
+nodo
+nome
+nomina
+nordico
+normale
+norvegese
+nostrano
+notare
+notizia
+notturno
+novella
+nucleo
+nulla
+numero
+nuovo
+nutrire
+nuvola
+nuziale
+oasi
+obbedire
+obbligo
+obelisco
+oblio
+obolo
+obsoleto
+occasione
+occhio
+occidente
+occorrere
+occultare
+ocra
+oculato
+odierno
+odorare
+offerta
+offrire
+offuscato
+oggetto
+oggi
+ognuno
+olandese
+olfatto
+oliato
+oliva
+ologramma
+oltre
+omaggio
+ombelico
+ombra
+omega
+omissione
+ondoso
+onere
+onice
+onnivoro
+onorevole
+onta
+operato
+opinione
+opposto
+oracolo
+orafo
+ordine
+orecchino
+orefice
+orfano
+organico
+origine
+orizzonte
+orma
+ormeggio
+ornativo
+orologio
+orrendo
+orribile
+ortensia
+ortica
+orzata
+orzo
+osare
+oscurare
+osmosi
+ospedale
+ospite
+ossa
+ossidare
+ostacolo
+oste
+otite
+otre
+ottagono
+ottimo
+ottobre
+ovale
+ovest
+ovino
+oviparo
+ovocito
+ovunque
+ovviare
+ozio
+pacchetto
+pace
+pacifico
+padella
+padrone
+paese
+paga
+pagina
+palazzina
+palesare
+pallido
+palo
+palude
+pandoro
+pannello
+paolo
+paonazzo
+paprica
+parabola
+parcella
+parere
+pargolo
+pari
+parlato
+parola
+partire
+parvenza
+parziale
+passivo
+pasticca
+patacca
+patologia
+pattume
+pavone
+peccato
+pedalare
+pedonale
+peggio
+peloso
+penare
+pendice
+penisola
+pennuto
+penombra
+pensare
+pentola
+pepe
+pepita
+perbene
+percorso
+perdonato
+perforare
+pergamena
+periodo
+permesso
+perno
+perplesso
+persuaso
+pertugio
+pervaso
+pesatore
+pesista
+peso
+pestifero
+petalo
+pettine
+petulante
+pezzo
+piacere
+pianta
+piattino
+piccino
+picozza
+piega
+pietra
+piffero
+pigiama
+pigolio
+pigro
+pila
+pilifero
+pillola
+pilota
+pimpante
+pineta
+pinna
+pinolo
+pioggia
+piombo
+piramide
+piretico
+pirite
+pirolisi
+pitone
+pizzico
+placebo
+planare
+plasma
+platano
+plenario
+pochezza
+poderoso
+podismo
+poesia
+poggiare
+polenta
+poligono
+pollice
+polmonite
+polpetta
+polso
+poltrona
+polvere
+pomice
+pomodoro
+ponte
+popoloso
+porfido
+poroso
+porpora
+porre
+portata
+posa
+positivo
+possesso
+postulato
+potassio
+potere
+pranzo
+prassi
+pratica
+precluso
+predica
+prefisso
+pregiato
+prelievo
+premere
+prenotare
+preparato
+presenza
+pretesto
+prevalso
+prima
+principe
+privato
+problema
+procura
+produrre
+profumo
+progetto
+prolunga
+promessa
+pronome
+proposta
+proroga
+proteso
+prova
+prudente
+prugna
+prurito
+psiche
+pubblico
+pudica
+pugilato
+pugno
+pulce
+pulito
+pulsante
+puntare
+pupazzo
+pupilla
+puro
+quadro
+qualcosa
+quasi
+querela
+quota
+raccolto
+raddoppio
+radicale
+radunato
+raffica
+ragazzo
+ragione
+ragno
+ramarro
+ramingo
+ramo
+randagio
+rantolare
+rapato
+rapina
+rappreso
+rasatura
+raschiato
+rasente
+rassegna
+rastrello
+rata
+ravveduto
+reale
+recepire
+recinto
+recluta
+recondito
+recupero
+reddito
+redimere
+regalato
+registro
+regola
+regresso
+relazione
+remare
+remoto
+renna
+replica
+reprimere
+reputare
+resa
+residente
+responso
+restauro
+rete
+retina
+retorica
+rettifica
+revocato
+riassunto
+ribadire
+ribelle
+ribrezzo
+ricarica
+ricco
+ricevere
+riciclato
+ricordo
+ricreduto
+ridicolo
+ridurre
+rifasare
+riflesso
+riforma
+rifugio
+rigare
+rigettato
+righello
+rilassato
+rilevato
+rimanere
+rimbalzo
+rimedio
+rimorchio
+rinascita
+rincaro
+rinforzo
+rinnovo
+rinomato
+rinsavito
+rintocco
+rinuncia
+rinvenire
+riparato
+ripetuto
+ripieno
+riportare
+ripresa
+ripulire
+risata
+rischio
+riserva
+risibile
+riso
+rispetto
+ristoro
+risultato
+risvolto
+ritardo
+ritegno
+ritmico
+ritrovo
+riunione
+riva
+riverso
+rivincita
+rivolto
+rizoma
+roba
+robotico
+robusto
+roccia
+roco
+rodaggio
+rodere
+roditore
+rogito
+rollio
+romantico
+rompere
+ronzio
+rosolare
+rospo
+rotante
+rotondo
+rotula
+rovescio
+rubizzo
+rubrica
+ruga
+rullino
+rumine
+rumoroso
+ruolo
+rupe
+russare
+rustico
+sabato
+sabbiare
+sabotato
+sagoma
+salasso
+saldatura
+salgemma
+salivare
+salmone
+salone
+saltare
+saluto
+salvo
+sapere
+sapido
+saporito
+saraceno
+sarcasmo
+sarto
+sassoso
+satellite
+satira
+satollo
+saturno
+savana
+savio
+saziato
+sbadiglio
+sbalzo
+sbancato
+sbarra
+sbattere
+sbavare
+sbendare
+sbirciare
+sbloccato
+sbocciato
+sbrinare
+sbruffone
+sbuffare
+scabroso
+scadenza
+scala
+scambiare
+scandalo
+scapola
+scarso
+scatenare
+scavato
+scelto
+scenico
+scettro
+scheda
+schiena
+sciarpa
+scienza
+scindere
+scippo
+sciroppo
+scivolo
+sclerare
+scodella
+scolpito
+scomparto
+sconforto
+scoprire
+scorta
+scossone
+scozzese
+scriba
+scrollare
+scrutinio
+scuderia
+scultore
+scuola
+scuro
+scusare
+sdebitare
+sdoganare
+seccatura
+secondo
+sedano
+seggiola
+segnalato
+segregato
+seguito
+selciato
+selettivo
+sella
+selvaggio
+semaforo
+sembrare
+seme
+seminato
+sempre
+senso
+sentire
+sepolto
+sequenza
+serata
+serbato
+sereno
+serio
+serpente
+serraglio
+servire
+sestina
+setola
+settimana
+sfacelo
+sfaldare
+sfamato
+sfarzoso
+sfaticato
+sfera
+sfida
+sfilato
+sfinge
+sfocato
+sfoderare
+sfogo
+sfoltire
+sforzato
+sfratto
+sfruttato
+sfuggito
+sfumare
+sfuso
+sgabello
+sgarbato
+sgonfiare
+sgorbio
+sgrassato
+sguardo
+sibilo
+siccome
+sierra
+sigla
+signore
+silenzio
+sillaba
+simbolo
+simpatico
+simulato
+sinfonia
+singolo
+sinistro
+sino
+sintesi
+sinusoide
+sipario
+sisma
+sistole
+situato
+slitta
+slogatura
+sloveno
+smarrito
+smemorato
+smentito
+smeraldo
+smilzo
+smontare
+smottato
+smussato
+snellire
+snervato
+snodo
+sobbalzo
+sobrio
+soccorso
+sociale
+sodale
+soffitto
+sogno
+soldato
+solenne
+solido
+sollazzo
+solo
+solubile
+solvente
+somatico
+somma
+sonda
+sonetto
+sonnifero
+sopire
+soppeso
+sopra
+sorgere
+sorpasso
+sorriso
+sorso
+sorteggio
+sorvolato
+sospiro
+sosta
+sottile
+spada
+spalla
+spargere
+spatola
+spavento
+spazzola
+specie
+spedire
+spegnere
+spelatura
+speranza
+spessore
+spettrale
+spezzato
+spia
+spigoloso
+spillato
+spinoso
+spirale
+splendido
+sportivo
+sposo
+spranga
+sprecare
+spronato
+spruzzo
+spuntino
+squillo
+sradicare
+srotolato
+stabile
+stacco
+staffa
+stagnare
+stampato
+stantio
+starnuto
+stasera
+statuto
+stelo
+steppa
+sterzo
+stiletto
+stima
+stirpe
+stivale
+stizzoso
+stonato
+storico
+strappo
+stregato
+stridulo
+strozzare
+strutto
+stuccare
+stufo
+stupendo
+subentro
+succoso
+sudore
+suggerito
+sugo
+sultano
+suonare
+superbo
+supporto
+surgelato
+surrogato
+sussurro
+sutura
+svagare
+svedese
+sveglio
+svelare
+svenuto
+svezia
+sviluppo
+svista
+svizzera
+svolta
+svuotare
+tabacco
+tabulato
+tacciare
+taciturno
+tale
+talismano
+tampone
+tannino
+tara
+tardivo
+targato
+tariffa
+tarpare
+tartaruga
+tasto
+tattico
+taverna
+tavolata
+tazza
+teca
+tecnico
+telefono
+temerario
+tempo
+temuto
+tendone
+tenero
+tensione
+tentacolo
+teorema
+terme
+terrazzo
+terzetto
+tesi
+tesserato
+testato
+tetro
+tettoia
+tifare
+tigella
+timbro
+tinto
+tipico
+tipografo
+tiraggio
+tiro
+titanio
+titolo
+titubante
+tizio
+tizzone
+toccare
+tollerare
+tolto
+tombola
+tomo
+tonfo
+tonsilla
+topazio
+topologia
+toppa
+torba
+tornare
+torrone
+tortora
+toscano
+tossire
+tostatura
+totano
+trabocco
+trachea
+trafila
+tragedia
+tralcio
+tramonto
+transito
+trapano
+trarre
+trasloco
+trattato
+trave
+treccia
+tremolio
+trespolo
+tributo
+tricheco
+trifoglio
+trillo
+trincea
+trio
+tristezza
+triturato
+trivella
+tromba
+trono
+troppo
+trottola
+trovare
+truccato
+tubatura
+tuffato
+tulipano
+tumulto
+tunisia
+turbare
+turchino
+tuta
+tutela
+ubicato
+uccello
+uccisore
+udire
+uditivo
+uffa
+ufficio
+uguale
+ulisse
+ultimato
+umano
+umile
+umorismo
+uncinetto
+ungere
+ungherese
+unicorno
+unificato
+unisono
+unitario
+unte
+uovo
+upupa
+uragano
+urgenza
+urlo
+usanza
+usato
+uscito
+usignolo
+usuraio
+utensile
+utilizzo
+utopia
+vacante
+vaccinato
+vagabondo
+vagliato
+valanga
+valgo
+valico
+valletta
+valoroso
+valutare
+valvola
+vampata
+vangare
+vanitoso
+vano
+vantaggio
+vanvera
+vapore
+varano
+varcato
+variante
+vasca
+vedetta
+vedova
+veduto
+vegetale
+veicolo
+velcro
+velina
+velluto
+veloce
+venato
+vendemmia
+vento
+verace
+verbale
+vergogna
+verifica
+vero
+verruca
+verticale
+vescica
+vessillo
+vestale
+veterano
+vetrina
+vetusto
+viandante
+vibrante
+vicenda
+vichingo
+vicinanza
+vidimare
+vigilia
+vigneto
+vigore
+vile
+villano
+vimini
+vincitore
+viola
+vipera
+virgola
+virologo
+virulento
+viscoso
+visione
+vispo
+vissuto
+visura
+vita
+vitello
+vittima
+vivanda
+vivido
+viziare
+voce
+voga
+volatile
+volere
+volpe
+voragine
+vulcano
+zampogna
+zanna
+zappato
+zattera
+zavorra
+zefiro
+zelante
+zelo
+zenzero
+zerbino
+zibetto
+zinco
+zircone
+zitto
+zolla
+zotico
+zucchero
+zufolo
+zulu
+zuppa

From 32bde7b58dbe6a43c836d76cd476aa666413fadc Mon Sep 17 00:00:00 2001
From: Daniel Cousens 
Date: Fri, 29 Jan 2016 11:13:17 +1100
Subject: [PATCH 0177/2326] add BIP39 javascript library

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

diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index da59124cc2..40e73a4503 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -139,4 +139,4 @@ Haskell - https://github.com/haskoin/haskoin
 
 .NET C# (PCL) - https://github.com/NicolasDorier/NBitcoin
 
-JavaScript - https://github.com/bitpay/bitcore-mnemonic
+JavaScript - https://github.com/bitpay/bitcore-mnemonic, https://github.com/bitcoinjs/bip39

From c7cc74d523f0d8750115e58fa84648a8c76998f3 Mon Sep 17 00:00:00 2001
From: Daniel Cousens 
Date: Fri, 29 Jan 2016 11:16:44 +1100
Subject: [PATCH 0178/2326] Add BIP38 Javascript implementation

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

diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki
index 4fc3207bda..d87c5cf4d9 100644
--- a/bip-0038.mediawiki
+++ b/bip-0038.mediawiki
@@ -210,6 +210,9 @@ Added to alpha version of Casascius Bitcoin Address Utility for Windows availabl
 
 Click "Tools" then "PPEC Keygen" (provisional name)
 
+==Other implementations==
+* Javascript - https://github.com/bitcoinjs/bip38
+
 ==Test vectors==
 
 ===No compression, no EC multiply===

From 736fb3057fd4d7c6eda30df6b790b97269503c8d Mon Sep 17 00:00:00 2001
From: Eric Lombrozo 
Date: Thu, 28 Jan 2016 16:39:15 -0800
Subject: [PATCH 0179/2326] Updated BIP table

---
 bip-0123.mediawiki | 182 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 182 insertions(+)

diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki
index 776529a729..348c6c06d6 100644
--- a/bip-0123.mediawiki
+++ b/bip-0123.mediawiki
@@ -82,6 +82,13 @@ The applications layer specifies high level structures, abstractions, and conven
 | Standard
 | Active
 |-
+| [[bip-0009.mediawiki|9]]
+| Consensus (soft fork)
+| Version bits with timeout and delay
+| Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
+| Informational
+| Draft
+|- 
 | [[bip-0010.mediawiki|10]]
 | Applications
 | Multi-Sig Transaction Distribution
@@ -391,11 +398,186 @@ The applications layer specifies high level structures, abstractions, and conven
 | Standard
 | Draft
 |-
+| [[bip-0080.mediawiki|80]]
+| Applications
+| Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
+| Monetas
+| Informational
+| Draft
+|-
+| [[bip-0083.mediawiki|83]]
+| Applications
+| Dynamic Hierarchical Deterministic Key Trees
+| Eric Lombrozo
+| Standard
+| Draft
+|-
+| [[bip-0099.mediawiki|99]]
+| Informational
+| Motivation and deployment of consensus rule changes ([soft/hard]forks)
+| Jorge Timón
+| Informational / Process
+| Draft
+|-
 | [[bip-0101.mediawiki|101]]
 | Consensus (hard fork)
 | Increase maximum block size
 | Gavin Andresen
 | Standard
 | Draft
+|-
+| [[bip-0102.mediawiki|102]]
+| Consensus (hard fork)
+| Block size increase to 2MB
+| Jeff Garzik
+| Standard
+| Draft
+|-
+| [[bip-0103.mediawiki|103]]
+| Consensus (hard fork)
+| Block size following technological growth
+| Pieter Wuille
+| Standard
+| Draft
+|-
+| [[bip-0105.mediawiki|105]]
+| Consensus (hard fork)
+| Consensus based block size retargetting algorithm
+| BtcDrak
+| Standard
+| Draft
+|-
+| [[bip-0106.mediawiki|106]]
+| Consensus (hard fork)
+| Dynamically Controlled Bitcoin Block Size Max Cap
+| Upal Chakraborty
+| Standard
+| Draft
+|-
+| [[bip-0107.mediawiki|107]]
+| Consensus (hard fork)
+| Dynamic limit on the block size
+| Washington Y. Sanchez
+| Standard
+| Draft
+|-
+| [[bip-0111.mediawiki|111]]
+| Peer Services
+| NODE_BLOOM service bit
+| Matt Corallo, Peter Todd
+| Standard
+| Draft
+|-
+| [[bip-0112.mediawiki|112]]
+| Consensus (soft fork)
+| CHECKSEQUENCEVERIFY
+| BtcDrak, Mark Friedenbach, Eric Lombrozo
+| Standard
+| Draft
+|-
+| [[bip-0113.mediawiki|113]]
+| Consensus (soft fork)
+| Median time-past as endpoint for locktime calculations
+| Thomas Kerin, Mark Friedenbach
+| Standard
+| Draft
+|-
+| [[bip-0120.mediawiki|120]]
+| Applications
+| Proof of Payment
+| Kalle Rosenbaum
+| Standard
+| Draft
+|-
+| [[bip-0121.mediawiki|121]]
+| Applications
+| Proof of Payment URI scheme
+| Kalle Rosenbaum
+| Standard
+| Draft
+|-
+| [[bip-0122.mediawiki|122]]
+| Applications
+| URI scheme for Blockchain references / exploration
+| Marco Pontello
+| Standard
+| Draft
+|-
+| [[bip-0123.mediawiki|123]]
+| Process
+| BIP Classification
+| Eric Lombrozo
+| Standard
+| Draft
+|-
+| [[bip-0124.mediawiki|124]]
+| Applications
+| Hierarchical Deterministic Script Templates
+| Eric Lombrozo, William Swanson
+| Standard
+| Draft
+|-
+| [[bip-0125.mediawiki|125]]
+| Peer Services
+| Opt-in Full Replace-by-Fee Signaling
+| David Harding, Peter Todd
+| Standard
+| Draft
+|-
+| [[bip-0130.mediawiki|130]]
+| Peer Services
+| sendheaders message
+| Suhas Daftuar
+| Standard
+| Draft
+|-
+| [[bip-0131.mediawiki|131]]
+| Consensus (hard fork)
+| "Coalescing Transaction" Specification (wildcard inputs)
+| Chris Priest
+| Standard
+| Draft
+|-
+| [[bip-0132.mediawiki|132]]
+| Process
+| Committee-based BIP Acceptance Process
+| Andy Chase
+| Process
+| Draft
+|-
+| [[bip-0140.mediawiki|140]]
+| Consensus (soft fork)
+| Normalized TXID
+| Christian Decker
+| Standard
+| Draft
+|-
+| [[bip-0141.mediawiki|141]]
+| Consensus (soft fork)
+| Segregated Witness (Consensus layer)
+| Eric Lombrozo, Johnson Lau, Pieter Wuille
+| Standard
+| Draft
+|-
+| [[bip-0142.mediawiki|142]]
+| Applications
+| Address Format for Segregated Witness
+| Johnson Lau
+| Standard
+| Draft
+|-
+| [[bip-0143.mediawiki|143]]
+| Consensus (soft fork)
+| Transaction Signature Verification for Version 0 Witness Program
+| Johnson Lau, Pieter Wuille
+| Standard
+| Draft
+|-
+| [[bip-0144.mediawiki|144]]
+| Peer Services
+| Segregated Witness (Peer Services)
+| Eric Lombrozo, Pieter Wuille
+| Standard
+| Draft 
 |}
 

From 6edf4efed8a8691b80ad4c19de93e6c4e0d844a3 Mon Sep 17 00:00:00 2001
From: Toby Padilla 
Date: Thu, 28 Jan 2016 17:38:40 -0800
Subject: [PATCH 0180/2326] BIP74 Draft

---
 README.mediawiki   |  6 +++++
 bip-0074.mediawiki | 59 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)
 create mode 100644 bip-0074.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index 045fd28f60..eda7fbfdd7 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -302,6 +302,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0074.mediawiki|74]]
+| Support zero value OP_RETURN in Payment Requests
+| Toby Padilla
+| Standard
+| Draft
+|-
 | [[bip-0080.mediawiki|80]]
 | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
 | Monetas
diff --git a/bip-0074.mediawiki b/bip-0074.mediawiki
new file mode 100644
index 0000000000..0790b12f31
--- /dev/null
+++ b/bip-0074.mediawiki
@@ -0,0 +1,59 @@
+
+  BIP: 74
+  Title: Allow zero value OP_RETURN in Payment Protocol
+  Author: Toby Padilla 
+
+ +==Abstract== + +This BIP alters the Payment Protocol to allow for zero value OP_RETURN outputs in serialized PaymentRequests. + +==Motivation== + +The Payment Protocol (defined in BIP70) gives merchants a way to build sophisticated transactions by serializing one or more outputs in the form of a PaymentRequest. The PaymentRequest is then served over http/https to a customer's wallet where the serialized transaction can be executed. + +While the Payment Protocol allows for any valid script in its outputs, it also ignores outputs with zero value. This means BIP70 implementations can encode an OP_RETURN script but must provide a greater than dust value for that output. The end result is a successful PaymentRequest transaction with an OP_RETURN but the value assigned to that output is lost forever. + +This BIP allows for zero value OP_RETURN outputs in serialized PaymentRequests. The change means that OP_RETURN scripts will work as they were originally intended from within PaymentRequests without permanently destroying Bitcoin value. Zero value non-OP_RETURN scripts should continue to be ignored. + +In addition to fixing the issue of destroyed value, this change opens up new use cases that were previously impossible. + +While storing data on the blockchain is controversial, when used responsibly OP_RETURN provides a powerful mechanism for attaching metadata to a transaction. This BIP effectively decouples the creation of transactions containing OP_RETURN data from the execution of those transactions. The result are positive benefits for both merchants and wallets/customers. + +By supporting this BIP, wallets can participate in current and future, unforeseen use cases that benefit from metadata stored in OP_RETURN. Until now OP_RETURN transactions have typically been created and submitted by custom software. If a wallet can process a PaymentRequest with OP_RETURN data as proposed by this BIP, it will support potentially sophisticated Bitcoin applications without the wallet developer having to have prior knowledge of that application. + +An example might be a merchant that adds the hash of a plain text invoice to the checkout transaction. The merchant could construct the PaymentRequest with the invoice hash in an OP_RETURN and pass it to the customer's wallet. The wallet could then submit the transaction, including the invoice hash from the PaymentRequest. The wallet will have encoded a proof of purchase to the blockchain without the wallet developer having to coordinate with the merchant software or add features beyond this BIP. + +Merchants and Bitcoin application developers benefit from this BIP because they can now construct transactions that include OP_RETURN data in a keyless environment. Again, prior to this BIP, transactions that used OP_RETURN (with zero value) needed to be constructed and executed in the same software. By separating the two concerns, this BIP allows merchant software to create transactions with OP_RETURN metadata on a server without storing public or private Bitcoin keys. This greatly enhances security where OP_RETURN applications currently need access to a private key to sign transactions. + +==Specification== + +The specification for this BIP is straightforward. BIP70 should be fully implemented with the following changes: + +* Outputs where the script is an OP_RETURN and the value is zero should be accepted by the wallet. + +BIP70 has special handling for the case with multiple zero value outputs: + +
+If the sum of outputs.amount is zero, the customer will be asked how much to pay, and the bitcoin client may choose any or all of the Outputs (if there are more than one) for payment. If the sum of outputs.amount is non-zero, then the customer will be asked to pay the sum, and the payment shall be split among the Outputs with non-zero amounts (if there are more than one; Outputs with zero amounts shall be ignored). +
+ +This behavior should be retained with the exception of OP_RETURN handling. In the case of a multiple output transaction where the sum of the output values is zero, the user should be prompted for a value and that value should be distributed over any or all outputs ''except'' the OP_RETURN output. In the case where the sum of outputs.amount is non-zero then any OP_RETURN outputs should not be ignored but no value should be assigned to them. + +Payment requests also must contain at least one payable output (i.e. no payment requests with ''just'' an OP_RETURN). + +==Rationale== + +As with the discussion around vanilla OP_RETURN, the practice of storing data on the blockchain is controversial. While blockchain and network bloat is an undeniable issue, the benefits that come from attaching metadata to transactions has proven to be too powerful to dismiss entirely. In the absence of OP_RETURN support the Bitcoin ecosystem has seen alternative, less elegant and more wasteful methods employed for Blockchain data storage. + +As it exists today, BIP70 allows for OP_RETURN data storage at the expense of permanently destroyed Bitcoin. Even fully removing support for OP_RETURN values in the Payment Protocol would still leave the door open to suboptimal data encoding via burning a larger than dust value to an output with a false address designed to encode data. + +This BIP offers all of the same benefits that come from the OP_RETURN compromise. Mainly that OP_RETURN scripts are provably unspendable and thus can be pruned from the UTXO pool. Without supporting this BIP, wallets that support BIP70 will allow for wasteful data storage. + +==Compatibility== + +Since this BIP still supports OP_RETURN statements with a greater than zero value, it should be fully backwards compatible with any existing implementations. + +==Copyright== + +This document is placed in the public domain. From 3b058bba32645a834c6da306db1a68d4a24ca236 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 30 Jan 2016 18:46:54 +0000 Subject: [PATCH 0181/2326] Initial draft of GBT updated for SegWit --- bip-segwit-gbt.mediawiki | 94 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 bip-segwit-gbt.mediawiki diff --git a/bip-segwit-gbt.mediawiki b/bip-segwit-gbt.mediawiki new file mode 100644 index 0000000000..75b5097ac8 --- /dev/null +++ b/bip-segwit-gbt.mediawiki @@ -0,0 +1,94 @@ +
+  BIP: x
+  Title: getblocktemplate Updates for Segregated Witness
+  Author: Luke Dashjr 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-01-30
+
+ +==Abstract== + +This BIP describes modifications to the getblocktemplate JSON-RPC call ([[bip-0022.mediawiki|BIP 22]]) to support segregated witness as defined by [[bip-0141.mediawiki|BIP 141]]. + +==Specification== + +The notion of "cost" is introduced + +===Block Template=== + +The template Object is revised to include these keys: + +{| class="wikitable" +!colspan=4| template +|- +! Key !! Required !! Type !! Description +|- +| costlimit || {{No}} || Number || total cost allowed in blocks +|- +| sigoplimit || {{No}} || Number || total sigop cost allowed in blocks divided by 4 +|- +| version || {{Yes}} || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5) +|} + +====Transactions Object Format==== + +The Objects listed in the response's "transactions" key is revised to include these keys: + +{| class="wikitable" +!colspan=3|template "transactions" element +|- +! Key !! Type !! Description +|- +| txid || String || transaction id encoded in hexadecimal; required for transactions with witness data +|- +| cost || Number || numeric cost of the transaction, as counted for purposes of the block's costlimit; if key is not present, cost is unknown and clients MUST NOT assume it is zero, although they MAY choose to calculate it themselves +|- +| hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal +|} + +Transactions with witness data may only be included if the template's block version is at least 5. + +===Block Assembly with Witness Transactions=== + +When block assembly is done without witness transactions, no changes are made by this BIP, and it should be assembled as previously. + +When witness transactions are included in the block, the primary merkle root MUST be calculated with those transactions' "txid" field instead of "hash". A secondary merkle root MUST be calculated as per [[bip-0141.mediawiki#Commitment_structure|BIP 141's commitment structure specification]] to be inserted into the generation (coinbase) transaction. + +Servers MUST NOT include a commitment in the "coinbasetxn" key on the template. Clients MUST insert the commitment as an additional output at the end of the final generation (coinbase) transaction. Only if the template includes a "mutable" key (see [[bip-0023.mediawiki#Mutations|BIP 23 Mutations]]) including "generation", the client MAY in that case place the commitment output in any position it chooses, provided that no later output matches the commitment pattern. + +==Motivation== + +Segregated witness substatially changes the structure of blocks, so the previous getblocktemplate specification is no longer sufficient. +It additionally also adds a new way of counting resource limits, and so GBT must be extended to convey this information correctly as well. + +==Rationale== + +Why doesn't "costlimit" simply redefine the existing "sizelimit"? +* "sizelimit" is already enforced by clients by counting the sum of bytes in transactions' "data" keys. +* Servers may wish to limit the overall size of a block, independently from the "cost" of the block. + +Why is "sigoplimit" redefined instead of a new "sigopcostlimit" being added? +* The old limit was already arbitrarily defined, and could not be counted by clients on their own anyway. The concept of "sigop cost" is merely a change in the arbitrary formula used. + +Why is "sigoplimit" divided by 4? +* To resemble the previous values. (FIXME: is this a good reason? maybe we shouldn't divide it?) + +Why is the witness commitment required to be added to the end of the generation transaction rather than anywhere else? +* Servers which do not allow modification of the generation outputs ought to be checking this as part of the validity of submissions. By requiring a specific placement, they can simply strip the commitment and do a byte-for-byte comparison of the outputs. Placing it at the end avoids the possibility of a later output matching the pattern and overriding it. + +Why shouldn't the server simply add the commitment upfront in the "coinbasetxn", and simply send the client stripped transaction data? +* It would become impossible for servers to specify only "coinbasevalue", since clients would no longer have the information required to construct the commitment. +* getblocktemplate is intended to be a *decentralised* mining protocol, and allowing clients to be blinded to the content of the block works contrary to that purpose. +* BIP 23's "transactions" mutations allow the client to modify the transaction-set on their own, which is impossible without the complete transaction data. + +==Reference Implementation== + +* [https://github.com/bitcoin/libblkmaker/tree/segwit libblkmaker] +* [https://github.com/luke-jr/eloipool/tree/segwit Eloipool] +* [https://github.com/bitcoin/bitcoin/pull/7404/files Bitcoin Core] + +==See Also== +* [[bip-0022.mediawiki|BIP 22: getblocktemplate - Fundamentals]] +* [[bip-0023.mediawiki|BIP 23: getblocktemplate - Pooled Mining]] +* [[bip-0141.mediawiki|BIP 141: Segregated Witness (Consensus layer)]] From 8235f61042deff2c3aa18ba2e1dd613d0c123803 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 1 Feb 2016 16:10:40 +0100 Subject: [PATCH 0182/2326] update location of slip-0044 --- bip-0044.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index f9d12549f4..ef7254c1de 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -149,10 +149,10 @@ All these constants are used as hardened derivation. This BIP is not a central directory for the registered coin types, please visit SatoshiLabs that maintains the full list: -[[http://doc.satoshilabs.com/slips/slip-0044.html|SLIP-0044 : Registered coin types for BIP-0044]] +[[https://github.com/satoshilabs/slips/blob/master/slip-0044.md|SLIP-0044 : Registered coin types for BIP-0044]] To register a new coin type, an existing wallet that implements the standard -is required. This can be done [[https://github.com/satoshilabs/docs/blob/master/slips/slip-0044.rst|here]]. +is required and a pull request to the above file should be created. ==Examples== From d3aa9b3f5759c7899ef2d9f11e5287d026507e6e Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 20:02:03 +0000 Subject: [PATCH 0183/2326] Fix typo --- bip-segwit-gbt.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-segwit-gbt.mediawiki b/bip-segwit-gbt.mediawiki index 75b5097ac8..0ad10c28ef 100644 --- a/bip-segwit-gbt.mediawiki +++ b/bip-segwit-gbt.mediawiki @@ -59,7 +59,7 @@ Servers MUST NOT include a commitment in the "coinbasetxn" key on the template. ==Motivation== -Segregated witness substatially changes the structure of blocks, so the previous getblocktemplate specification is no longer sufficient. +Segregated witness substantially changes the structure of blocks, so the previous getblocktemplate specification is no longer sufficient. It additionally also adds a new way of counting resource limits, and so GBT must be extended to convey this information correctly as well. ==Rationale== From f31f7d43473fadcfafbc886b15e8c488654839c2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 20:14:22 +0000 Subject: [PATCH 0184/2326] Promote Accepted->Final BIPs 11, 14, 21, 22, 23, 31, 32, 34, 35, 37, 65 --- README.mediawiki | 22 +++++++++++----------- bip-0011.mediawiki | 2 +- bip-0014.mediawiki | 2 +- bip-0021.mediawiki | 2 +- bip-0022.mediawiki | 2 +- bip-0023.mediawiki | 2 +- bip-0031.mediawiki | 2 +- bip-0032.mediawiki | 2 +- bip-0034.mediawiki | 2 +- bip-0035.mediawiki | 2 +- bip-0037.mediawiki | 2 +- bip-0065.mediawiki | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index eda7fbfdd7..4bfdc5484c 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -35,7 +35,7 @@ Those proposing changes should consider that ultimately consent may rest with th | M-of-N Standard Transactions | Gavin Andresen | Standard -| Accepted +| Final |- style="background-color: #ffcfcf" | [[bip-0012.mediawiki|12]] | OP_EVAL @@ -53,7 +53,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Protocol Version and User Agent | Amir Taaki, Patrick Strateman | Standard -| Accepted +| Final |- style="background-color: #ffcfcf" | [[bip-0015.mediawiki|15]] | Aliases @@ -95,19 +95,19 @@ Those proposing changes should consider that ultimately consent may rest with th | URI Scheme | Nils Schneider, Matt Corallo | Standard -| Accepted +| Final |- style="background-color: #cfffcf" | [[bip-0022.mediawiki|22]] | getblocktemplate - Fundamentals | Luke Dashjr | Standard -| Accepted +| Final |- style="background-color: #cfffcf" | [[bip-0023.mediawiki|23]] | getblocktemplate - Pooled Mining | Luke Dashjr | Standard -| Accepted +| Final |- style="background-color: #cfffcf" | [[bip-0030.mediawiki|30]] | Duplicate transactions @@ -119,13 +119,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Pong message | Mike Hearn | Standard -| Accepted +| Final |- style="background-color: #cfffcf" | [[bip-0032.mediawiki|32]] | Hierarchical Deterministic Wallets | Pieter Wuille | Informational -| Accepted +| Final |- | [[bip-0033.mediawiki|33]] | Stratized Nodes @@ -137,13 +137,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Block v2, Height in coinbase | Gavin Andresen | Standard -| Accepted +| Final |- style="background-color: #cfffcf" | [[bip-0035.mediawiki|35]] | mempool message | Jeff Garzik | Standard -| Accepted +| Final |- | [[bip-0036.mediawiki|36]] | Custom Services @@ -155,7 +155,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Bloom filtering | Mike Hearn, Matt Corallo | Standard -| Accepted +| Final |- | [[bip-0038.mediawiki|38]] | Passphrase-protected private key @@ -252,7 +252,7 @@ Those proposing changes should consider that ultimately consent may rest with th | OP_CHECKLOCKTIMEVERIFY | Peter Todd | Standard -| Accepted +| Final |- | [[bip-0066.mediawiki|66]] | Strict DER signatures diff --git a/bip-0011.mediawiki b/bip-0011.mediawiki index 2499ac0376..4b12340d54 100644 --- a/bip-0011.mediawiki +++ b/bip-0011.mediawiki @@ -2,7 +2,7 @@ BIP: 11 Title: M-of-N Standard Transactions Author: Gavin Andresen - Status: Accepted + Status: Final Type: Standards Track Created: 2011-10-18 Post-History: 2011-10-02 diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki index 111eb78bed..cf7594b2e6 100644 --- a/bip-0014.mediawiki +++ b/bip-0014.mediawiki @@ -3,7 +3,7 @@ Title: BIP Protocol Version and User Agent Author: Amir Taaki Patrick Strateman - Status: Accepted + Status: Final Type: Standards Track Created: 2011-11-10 Post-History: 2011-11-02 diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index 270692646a..4cbbc03426 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -3,7 +3,7 @@ Title: URI Scheme Author: Nils Schneider Matt Corallo - Status: Accepted + Status: Final Type: Standards Track Created: 2012-01-29
diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki index b39f957333..35b59be7d0 100644 --- a/bip-0022.mediawiki +++ b/bip-0022.mediawiki @@ -2,7 +2,7 @@ BIP: 22 Title: getblocktemplate - Fundamentals Author: Luke Dashjr - Status: Accepted + Status: Final Type: Standards Track Created: 2012-02-28
diff --git a/bip-0023.mediawiki b/bip-0023.mediawiki index a53b00bf8d..874e60a120 100644 --- a/bip-0023.mediawiki +++ b/bip-0023.mediawiki @@ -2,7 +2,7 @@ BIP: 23 Title: getblocktemplate - Pooled Mining Author: Luke Dashjr - Status: Accepted + Status: Final Type: Standards Track Created: 2012-02-28
diff --git a/bip-0031.mediawiki b/bip-0031.mediawiki index 8adcd2955c..1bfe143c44 100644 --- a/bip-0031.mediawiki +++ b/bip-0031.mediawiki @@ -2,7 +2,7 @@ BIP: 31 Title: Pong message Author: Mike Hearn - Status: Accepted + Status: Final Type: Standards Track Created: 2012-04-11
diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index ac0ed99163..52e20320f5 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -8,7 +8,7 @@ RECENT CHANGES: BIP: 32 Title: Hierarchical Deterministic Wallets Author: Pieter Wuille - Status: Accepted + Status: Final Type: Informational Created: 2012-02-11
diff --git a/bip-0034.mediawiki b/bip-0034.mediawiki index 245985c740..1d88781d69 100644 --- a/bip-0034.mediawiki +++ b/bip-0034.mediawiki @@ -2,7 +2,7 @@ BIP: 34 Title: Block v2, Height in Coinbase Author: Gavin Andresen - Status: Accepted + Status: Final Type: Standards Track Created: 2012-07-06
diff --git a/bip-0035.mediawiki b/bip-0035.mediawiki index cdadd1d72a..c66735ca75 100644 --- a/bip-0035.mediawiki +++ b/bip-0035.mediawiki @@ -2,7 +2,7 @@ BIP: 35 Title: mempool message Author: Jeff Garzik - Status: Accepted + Status: Final Type: Standards Track Created: 2012-08-16
diff --git a/bip-0037.mediawiki b/bip-0037.mediawiki index 77b917b399..93296b5d88 100644 --- a/bip-0037.mediawiki +++ b/bip-0037.mediawiki @@ -2,7 +2,7 @@ BIP: 37 Title: Connection Bloom filtering Author: Mike Hearn , Matt Corallo - Status: Accepted + Status: Final Type: Standards Track Created: 2012-10-24
diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index df995deb55..99298bf191 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -2,7 +2,7 @@ BIP: 65 Title: OP_CHECKLOCKTIMEVERIFY Author: Peter Todd - Status: Accepted + Status: Final Type: Standards Track Created: 2014-10-01
From e22ad0cd715af88cabecffe1afcc4258740dc85f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 20:36:37 +0000 Subject: [PATCH 0185/2326] Revert "Update BIP-21 URI scheme for payment code support" This reverts commit 2e6e5cf9589778ea55c7e71aa27e2b9ff122b737. --- bip-0021.mediawiki | 9 --------- 1 file changed, 9 deletions(-) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index 270692646a..00d9a5375b 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -56,7 +56,6 @@ The scheme component ("bitcoin:") is case-insensitive, and implementations must *address: bitcoin address *message: message that describes the transaction to the user ([[#Examples|see examples below]]) *size: amount of base bitcoin units ([[#Transfer amount/size|see below]]) -*paycode: payment code (BIP-47) *(others): optional, for future extensions ==== Transfer amount/size ==== @@ -68,11 +67,6 @@ I.e. amount=50.00 or amount=50 is treated as 50 BTC, and amount=50,000.00 is inv Bitcoin clients MAY display the amount in any format that is not intended to deceive the user. They SHOULD choose a format that is foremost least confusing, and only after that most reasonable given the amount requested. For example, so long as the majority of users work in BTC units, values should always be displayed in BTC by default, even if mBTC or TBC would otherwise be a more logical interpretation of the amount. - -==== Payment code ==== - -If a URI provides a payment code, and if the client supports BIP-47, then the resulting transaction SHOULD construct a transaction per BIP-47 instead of using the address provided in the URI. - == Rationale == ===Payment identifiers, not person identifiers=== @@ -128,6 +122,3 @@ Characters must be URI encoded properly. === 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. -==References== - -* [[bip-0047.mediawiki|BIP47 - Reusable Payment Codes for Hierarchical Deterministic Wallets]] From ebba30aa86452590f2d505e0ed058f0b64586258 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 22:34:17 +0000 Subject: [PATCH 0186/2326] New BIP to revise BIP 1 --- bip-biprevised.mediawiki | 91 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 bip-biprevised.mediawiki diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki new file mode 100644 index 0000000000..7b3c00b444 --- /dev/null +++ b/bip-biprevised.mediawiki @@ -0,0 +1,91 @@ +
+  BIP: x
+  Title: BIP Status and Comments
+  Status: Draft
+  Type: Process
+  Created: 2016-02-01
+
+ +==Abstract== + +BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. +Additionally, some BIPs have been adopted which are deemed unadvisable or unsafe by experts in the field, and there is no indication of this at present. +Finally, BIP 1 only allows a single copyright license generally considered deprecated, or publication under the public domain (which is not legally recognised in all jurisdictions). +This BIP intends to address these problems by more specifically defining the Status field, recommending a forum for people to comment on BIPs, and expanding the list of allowable BIP licenses. + +==Copyright== + +This BIP is dual-licensed under the Open Publication License and BSD 2-clause license. + +==Specification== + +===BIP status field=== + +Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. + +A BIP may only change status from Draft (or Rejected) to Accepted, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status. + +BIPs should be changed from Draft or Accepted status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a BIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Accepted status if it meets the criteria required as described in the previous paragraph. + +An Accepted BIP may progress to Final only when specific criteria reflecting real-world adoption has occurred. This is different for each BIP depending on the nature of its proposed changes, which will be expanded on below. Evaluation of this status change should be objectively verifiable, and/or be discussed on the development mailing list. + +When a Final BIP is no longer relevant, its status may be changed to Replaced or Obsolete (which is equivalent to Replaced). This change must also be objectively verifiable and/or discussed. + +A process BIP may change status from Draft to Active when it achieves consensus on the mailing list. + +====Progression to Final status==== + +See BIP 123 for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. + +A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9), as well as not meeting the inverse criteria for a hard-fork BIP (that is, economic consensus may reject a soft-fork BIP despite miner adoption). Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold. + +A hard-fork BIP requires consensus from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Consensus must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish pre-Final status consensus to adopt a BIP). This consensus cannot be reached merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document). + +Peer services BIPs should be observed to be adopted by at least 1% of public listening nodes for one month. + +API/RPC and application layer BIPs must be implemented by at least two independent and compatible software applications. + +Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [Bitcoin Core's doc/bips.md file](https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md) as well as [Bitcoin Wallet for Android's wallet/README.specs file](https://github.com/schildbach/bitcoin-wallet/blob/master/wallet/README.specs). + +====Formally defining consensus==== + +A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. + +===BIP comments=== + +Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. + +Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 . + +Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances: + +* Unanimously Recommended for implementation +* Unanimously Discourage for implementation +* Mostly Recommended for implementation, with some Discouragement +* Mostly Discouraged for implementation, with some Recommendation + +To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other. + +===BIP licensing=== + +New BIPs may be accepted with the following licenses: + +====Recommended licenses==== + +* OSI-approved BSD 1, 2, or 3 clause licenses +* Creative Commons CC0 1.0 Universal +* GNU All-Permissive License + +====Not recommented, but acceptable licenses==== + +* Apache License, version 2.0 +* Apple's Common Documentation License, version 1.0 +* Boost Software License, version 1.0 +* Creative Commons Attribution 4.0 International +* Creative Commons Attribution-ShareAlike 4.0 International +* Expat/MIT/X11 license +* GNU Affero General Public License (AGPL), version 3 +* GNU Free Documentation License +* GNU General Public License (GPL), version 2 or 3 +* GNU Lesser General Public License (LGPL), version 2.1 or 3 +* Open Publication License, version 1.0 From 6e34af58f9923f1af64c7a0b3d1920ad0ef69d25 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 23:18:33 +0000 Subject: [PATCH 0187/2326] bip-biprevised: See Also links --- bip-biprevised.mediawiki | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 7b3c00b444..39853af32f 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -35,7 +35,7 @@ A process BIP may change status from Draft to Active when it achieves consensus ====Progression to Final status==== -See BIP 123 for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. +See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9), as well as not meeting the inverse criteria for a hard-fork BIP (that is, economic consensus may reject a soft-fork BIP despite miner adoption). Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold. @@ -89,3 +89,8 @@ New BIPs may be accepted with the following licenses: * GNU General Public License (GPL), version 2 or 3 * GNU Lesser General Public License (LGPL), version 2.1 or 3 * Open Publication License, version 1.0 + +==See Also== + +* [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] +* [[bip-0123.mediawiki|BIP 123: BIP Classification]] From c61f4d83009fa11bc72203e0ecdface08f4626f2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 23:20:58 +0000 Subject: [PATCH 0188/2326] Bugfix: bip-biprevised: MediaWiki linking --- bip-biprevised.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 39853af32f..efbfa78a7e 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -45,7 +45,7 @@ Peer services BIPs should be observed to be adopted by at least 1% of public lis API/RPC and application layer BIPs must be implemented by at least two independent and compatible software applications. -Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [Bitcoin Core's doc/bips.md file](https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md) as well as [Bitcoin Wallet for Android's wallet/README.specs file](https://github.com/schildbach/bitcoin-wallet/blob/master/wallet/README.specs). +Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md Bitcoin Core's doc/bips.md file] as well as [https://github.com/schildbach/bitcoin-wallet/blob/master/wallet/README.specs Bitcoin Wallet for Android's wallet/README.specs file]. ====Formally defining consensus==== From cfbde44a3c7020ee26be39205ab685c383a3b4d1 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 23:29:07 +0000 Subject: [PATCH 0189/2326] bip-biprevised: Link licenses, and remove obsolete Apple licence and non-existent OSI-approved 1-clause BSD license --- bip-biprevised.mediawiki | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index efbfa78a7e..07749629b1 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -72,23 +72,23 @@ New BIPs may be accepted with the following licenses: ====Recommended licenses==== -* OSI-approved BSD 1, 2, or 3 clause licenses -* Creative Commons CC0 1.0 Universal -* GNU All-Permissive License +* [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] +* [https://opensource.org/licenses/BSD-3-Clause OSI-approved BSD 3-clause license] +* [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] +* [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] ====Not recommented, but acceptable licenses==== -* Apache License, version 2.0 -* Apple's Common Documentation License, version 1.0 -* Boost Software License, version 1.0 -* Creative Commons Attribution 4.0 International -* Creative Commons Attribution-ShareAlike 4.0 International -* Expat/MIT/X11 license -* GNU Affero General Public License (AGPL), version 3 -* GNU Free Documentation License -* GNU General Public License (GPL), version 2 or 3 -* GNU Lesser General Public License (LGPL), version 2.1 or 3 -* Open Publication License, version 1.0 +* [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] +* [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0] +* [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International] +* [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International] +* [https://opensource.org/licenses/MIT Expat/MIT/X11 license] +* [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer] +* [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License] +* [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer] +* [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] +* [http://opencontent.org/openpub/ Open Publication License, version 1.0] ==See Also== From 97655c211a7454b4bcc01acefd4b88f979e7853f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 23:49:37 +0000 Subject: [PATCH 0190/2326] bip-biprevised: Clarify licensing of literal code inclusion in BIPs --- bip-biprevised.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 07749629b1..18ec1ddd17 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -77,6 +77,8 @@ New BIPs may be accepted with the following licenses: * [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] * [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] +In addition, it is recommended that literal code included in the BIP be available under the same license terms as the project it modifies, when that license is acceptable within a BIP. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms (listed below, as not recommended but acceptable) as well as one of the above with the rest of the BIP text. + ====Not recommented, but acceptable licenses==== * [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] From fe0870ed0630f663c6d2df8626780b5800241a56 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 2 Feb 2016 00:37:08 +0000 Subject: [PATCH 0191/2326] bip-biprevised: Add Rationales and clarify literal code licensing --- bip-biprevised.mediawiki | 43 +++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 18ec1ddd17..93af1b8dab 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -17,9 +17,9 @@ This BIP intends to address these problems by more specifically defining the Sta This BIP is dual-licensed under the Open Publication License and BSD 2-clause license. -==Specification== +==BIP status field== -===BIP status field=== +===Specification=== Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. @@ -51,7 +51,24 @@ Software authors are encouraged to publish summaries of what BIPs their software A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. -===BIP comments=== +===Rationale=== + +Why can the economic consensus veto a soft-fork? + +* The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economic consensus can decide to replace them with another group of would-be miners who do not support the soft-fork. + +What is the ideal percentage of listening nodes needed to adopt peer services proposals? + +* This is unknown, and set rather arbitrarily at this time. For a random selection of peers to have at least one other peer implementing the extension, 13% or more would be necessary, but nodes could continue to scan the network for such peers with perhaps some reasonable success. Furthermore, service bits exist to help identification upfront. + +Should two software projects need to release an implementation of API/RPC and application layer BIPs? + +* With only one implementation of these, there is no other program for which a standard interface is used with or needed. +* Even if there are only two projects, some standard coordination between them exists. + +==BIP comments== + +===Specification=== Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. @@ -66,10 +83,19 @@ Summary tones may be chosen from the following, but this BIP does not intend to To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other. -===BIP licensing=== +===Rationale=== + +Will BIP comments be censored or limited to particular participants/"experts"? + +* The Bitcoin Wiki moderators have control over that venue and may make reasonable moderation attempts. Admitted non-experts should refrain from commenting outside of their area of knowledge. However, comments should not be censored, and participation should be open to the public. +* If the Bitcoin Wiki were to abuse its position, the venue for comments can always be changed. + +==BIP licensing== New BIPs may be accepted with the following licenses: +===Specification=== + ====Recommended licenses==== * [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] @@ -77,7 +103,7 @@ New BIPs may be accepted with the following licenses: * [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] * [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] -In addition, it is recommended that literal code included in the BIP be available under the same license terms as the project it modifies, when that license is acceptable within a BIP. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms (listed below, as not recommended but acceptable) as well as one of the above with the rest of the BIP text. +In addition, it is recommended that literal code included in the BIP be dual-licensed under the same license terms as the project it modifies. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms as well as one of the above with the rest of the BIP text. ====Not recommented, but acceptable licenses==== @@ -92,6 +118,13 @@ In addition, it is recommended that literal code included in the BIP be availabl * [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] * [http://opencontent.org/openpub/ Open Publication License, version 1.0] +===Rationale=== + +Why are there software licenses included? + +* Some BIPs, especially consensus layer, may include literal code in the BIP itself which may not be available under the exact license terms of the BIP. +* Despite this, not all software licenses would be acceptable for content included in BIPs. + ==See Also== * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] From a715f2cdb18c9881bfba97a188e870cc12c5ecd8 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 1 Feb 2016 19:36:45 -0800 Subject: [PATCH 0192/2326] Added example use case. --- bip-invoicerequest-extension.mediawiki | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index c905e296eb..80d9f1ece5 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -35,10 +35,16 @@ The motivation for this extension to BIP70 is twofold: * Give the user the ability to decide who to release payment details to * Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements * Allow for an open standards based way to meet regulatory requirements -* Automate the creation and maintenance of an "address book" of payees, without relying on static addresses or BIP32 X-Pubs which can become outdated and/or compromise privacy +* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. +==Example Use Case== + +Let's say a Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, and there is always the risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the corresponding private key. + +With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding an entry to one's address book could be done by scanning a QR code, sending a URI through a text message or e-mail, or searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented. + ==Definitions== {| class="wikitable" | Sender || Entity wishing to transfer value that they control From 81741909838adc2e2c0f4d7f3c66f54a01e6e010 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 2 Feb 2016 04:14:26 +0000 Subject: [PATCH 0193/2326] bip-biprevised: Add Rationale for defining of the economy --- bip-biprevised.mediawiki | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 93af1b8dab..a4746de2da 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -53,6 +53,17 @@ A proposal is said to have achieved consensus if it has been open to discussion ===Rationale=== +How is the entire Bitcoin economy defined by people selling goods/services and holders? + +* For Bitcoin to function as a currency, it must be accepted as payment. Bitcoins have no value if you cannot acquire anything in exchange for them. If everyone accepting such payments requires a particular set of consensus rules, "bitcoins" are de facto defined by that set of rules - this is already the case today. If those consensus rules are expected to broaden (as with a hard-fork), those merchants need to accept payments made under the new set of rules, or they will reject "bitcoins" as invalid. Holders are relevant to the degree in that they choose the merchants they wish to spend their bitcoins with, and could also as a whole decide to sell under one set of consensus rules or the other, thus flooding the market with bitcoins and crashing the price. + +Why aren't included in the economy? + +* Some entities may, to some degree, also be involved in offering goods and/or services in exchange for bitcoins, thus in that capacity (but not their capacity as ) be involved in the economy. +* Miners are not included in the economy, because they merely *rely on* others to sell/spend their otherwise-worthless mined produce. Therefore, they must accept everyone else's direction in deciding the consensus rules. +* Exchanges are not included in the economy, because they merely provide services of connecting the merchants and users who wish to trade. Even if all exchanges were to defect from Bitcoin, those merchants and users can always trade directly and/or establish their own exchanges. +* Developers are not included in the economy, since they merely write code, and it is up to others to decide to use that code or not. + Why can the economic consensus veto a soft-fork? * The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economic consensus can decide to replace them with another group of would-be miners who do not support the soft-fork. From 9906db4b7a1ee58f688431f02af500de3ac351df Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 2 Feb 2016 06:10:52 +0000 Subject: [PATCH 0194/2326] bip-biprevised: Add Rationale explaining how-it-is --- bip-biprevised.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index a4746de2da..29de31a5a3 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -64,6 +64,10 @@ Why aren't included in the economy? * Exchanges are not included in the economy, because they merely provide services of connecting the merchants and users who wish to trade. Even if all exchanges were to defect from Bitcoin, those merchants and users can always trade directly and/or establish their own exchanges. * Developers are not included in the economy, since they merely write code, and it is up to others to decide to use that code or not. +But they're doing something important and have invested a lot in Bitcoin! Shouldn't they be included in such an important decision? + +* This BIP does not aim to address what "should" be the basis of decisions. Such a statement, no matter how perfect in its justification, would be futile without some way to enforce it. The BIP process does not aim to be a kind of "governance" of Bitcoin, merely to provide a collaborative repository for proposing and providing information on standards. It can only hope to achieve accuracy in regard to the "Status" field by striving to reflect the reality of *how things actually are*, rather than *how they should be*. + Why can the economic consensus veto a soft-fork? * The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economic consensus can decide to replace them with another group of would-be miners who do not support the soft-fork. From ae7cc37fe00e17e433a3b2d536737be5439c7ac0 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 2 Feb 2016 07:51:09 +0000 Subject: [PATCH 0195/2326] bip-biprevised: Address comments by Dave Scotese and Ryan Grant --- bip-biprevised.mediawiki | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki index 29de31a5a3..b9efbc6448 100644 --- a/bip-biprevised.mediawiki +++ b/bip-biprevised.mediawiki @@ -49,7 +49,7 @@ Software authors are encouraged to publish summaries of what BIPs their software ====Formally defining consensus==== -A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. +A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. Objections are assumed to be either substantiated or obstructive, and when giving a determination of an objection being obstructive, clear reasoning must be offered. ===Rationale=== @@ -76,26 +76,35 @@ What is the ideal percentage of listening nodes needed to adopt peer services pr * This is unknown, and set rather arbitrarily at this time. For a random selection of peers to have at least one other peer implementing the extension, 13% or more would be necessary, but nodes could continue to scan the network for such peers with perhaps some reasonable success. Furthermore, service bits exist to help identification upfront. -Should two software projects need to release an implementation of API/RPC and application layer BIPs? +Why is it necessary for at least two software projects to release an implementation of API/RPC and application layer BIPs, before they become Final? -* With only one implementation of these, there is no other program for which a standard interface is used with or needed. -* Even if there are only two projects, some standard coordination between them exists. +* If there is only one implementation of a specification, there is no other program for which a standard interface is used with or needed. +* Even if there are only two projects rather than more, some standard coordination between them exists. + +What if a BIP is proposed that only makes sense for a single specific project? + +* The BIP process exists for standardisation between independent projects. If something only affects one project, it should be done through that project's own internal processes, and never be proposed as a BIP in the first place. ==BIP comments== ===Specification=== -Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. +Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format]. If a BIP is not yet completed, reviewers should plan to review the new version and remove or revise their comments as applicable, updating the timestamp in the review. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 . Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances: +* No comments yet. * Unanimously Recommended for implementation * Unanimously Discourage for implementation * Mostly Recommended for implementation, with some Discouragement * Mostly Discouraged for implementation, with some Recommendation +For example, the preamble to BIP 1 would be updated to include the (markup) line: + + Comments: [https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 No comments yet.] + To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other. ===Rationale=== From ddd34bf496f2cbd1fad7e2ac14c080ffa1b88e0a Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 2 Feb 2016 07:54:03 +0000 Subject: [PATCH 0196/2326] Bugfix: bip-biprevised: Preamble cannot use links due to

---
 bip-biprevised.mediawiki | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index b9efbc6448..7c7599546c 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -103,7 +103,8 @@ Summary tones may be chosen from the following, but this BIP does not intend to
 
 For example, the preamble to BIP 1 would be updated to include the (markup) line:
 
-    Comments: [https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 No comments yet.]
+    Comments-Summary: No comments yet.
+    Comments-URI: https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001
 
 To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other.
 

From c79db0a9eced8e6baa76a7f16153572e5749321b Mon Sep 17 00:00:00 2001
From: emeth- 
Date: Tue, 2 Feb 2016 06:19:47 -0600
Subject: [PATCH 0197/2326] fix typo

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

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index 7c7599546c..094d156f51 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -130,7 +130,7 @@ New BIPs may be accepted with the following licenses:
 
 In addition, it is recommended that literal code included in the BIP be dual-licensed under the same license terms as the project it modifies. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms as well as one of the above with the rest of the BIP text.
 
-====Not recommented, but acceptable licenses====
+====Not recommended, but acceptable licenses====
 
 * [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0]
 * [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0]

From 56eb7958bd380010117a68bb438c5683026ee6a5 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Tue, 2 Feb 2016 19:03:28 +0000
Subject: [PATCH 0198/2326] bip-biprevised: Clarify informational nature of
 Final status change criteria

---
 bip-biprevised.mediawiki | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index 7c7599546c..174c9f9be4 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -47,6 +47,8 @@ API/RPC and application layer BIPs must be implemented by at least two independe
 
 Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md Bitcoin Core's doc/bips.md file] as well as [https://github.com/schildbach/bitcoin-wallet/blob/master/wallet/README.specs Bitcoin Wallet for Android's wallet/README.specs file].
 
+These criteria are considered objective ways to observe the de facto adoption of the BIP, and are not to be used as reasons to oppose or reject a BIP. Should a BIP become actually and unambiguously adopted despite not meeting the criteria outlined here, it should still be updated to Final status.
+
 ====Formally defining consensus====
 
 A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. Objections are assumed to be either substantiated or obstructive, and when giving a determination of an objection being obstructive, clear reasoning must be offered.

From c5f9a101111276b5e27cbe2bca1cd4942ebca508 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Tue, 2 Feb 2016 19:07:14 +0000
Subject: [PATCH 0199/2326] bip-biprevised: Allow for a second forum for BIP
 comments

---
 bip-biprevised.mediawiki | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index 174c9f9be4..4e30f242b1 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -95,6 +95,8 @@ Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary ton
 
 Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 .
 
+In order to avoid possible abuse of Bitcoin Wiki moderation, BIPs may also choose to list a second forum for BIP comments.
+
 Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances:
 
 * No comments yet.

From 4edd6d2badd9a6ad2ff09bb6792fe0d0e365a7de Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Wed, 3 Feb 2016 07:02:36 +0000
Subject: [PATCH 0200/2326] Lots of formatting fixes

---
 README.mediawiki   | 98 +++++++++++++++++++++++-----------------------
 bip-0001.mediawiki |  1 +
 bip-0009.mediawiki |  7 +++-
 bip-0010.mediawiki |  4 +-
 bip-0014.mediawiki |  2 +-
 bip-0015.mediawiki |  2 +-
 bip-0032.mediawiki |  2 +-
 bip-0037.mediawiki |  3 +-
 bip-0038.mediawiki |  4 +-
 bip-0039.mediawiki | 16 ++++----
 bip-0043.mediawiki | 12 +++---
 bip-0044.mediawiki | 12 +++---
 bip-0045.mediawiki | 14 +++----
 bip-0047.mediawiki | 13 +++---
 bip-0067.mediawiki |  5 ++-
 bip-0069.mediawiki | 12 +++---
 bip-0070.mediawiki |  3 +-
 bip-0074.mediawiki |  3 ++
 bip-0080.mediawiki | 12 +++---
 bip-0081.mediawiki | 12 +++---
 bip-0083.mediawiki | 10 ++---
 bip-0099.mediawiki |  2 +-
 bip-0107.mediawiki |  2 +-
 bip-0111.mediawiki |  3 +-
 bip-0112.mediawiki |  6 +--
 bip-0113.mediawiki |  2 +-
 bip-0122.mediawiki |  2 +-
 bip-0123.mediawiki |  2 +-
 bip-0124.mediawiki | 12 +++---
 bip-0125.mediawiki |  3 +-
 bip-0132.mediawiki |  2 +-
 bip-0144.mediawiki |  2 +-
 32 files changed, 147 insertions(+), 138 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index eda7fbfdd7..8067faeee4 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -24,13 +24,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
 | Informational
 | Draft
-|-
+|- style="background-color: #ffcfcf"
 | [[bip-0010.mediawiki|10]]
 | Multi-Sig Transaction Distribution
 | Alan Reiner
 | Informational
 | Withdrawn
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0011.mediawiki|11]]
 | M-of-N Standard Transactions
 | Gavin Andresen
@@ -48,13 +48,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Gavin Andresen
 | Standard
 | Final
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0014.mediawiki|14]]
 | Protocol Version and User Agent
 | Amir Taaki, Patrick Strateman
 | Standard
 | Accepted
-|- style="background-color: #ffcfcf"
+|-
 | [[bip-0015.mediawiki|15]]
 | Aliases
 | Amir Taaki
@@ -62,7 +62,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Deferred
 |- style="background-color: #cfffcf"
 | [[bip-0016.mediawiki|16]]
-| Pay To Script Hash
+| Pay to Script Hash
 | Gavin Andresen
 | Standard
 | Final
@@ -90,19 +90,19 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Luke Dashjr
 | Standard
 | Replaced
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0021.mediawiki|21]]
 | URI Scheme
 | Nils Schneider, Matt Corallo
 | Standard
 | Accepted
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0022.mediawiki|22]]
 | getblocktemplate - Fundamentals
 | Luke Dashjr
 | Standard
 | Accepted
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0023.mediawiki|23]]
 | getblocktemplate - Pooled Mining
 | Luke Dashjr
@@ -114,13 +114,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Pieter Wuille
 | Standard
 | Final
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0031.mediawiki|31]]
 | Pong message
 | Mike Hearn
 | Standard
 | Accepted
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0032.mediawiki|32]]
 | Hierarchical Deterministic Wallets
 | Pieter Wuille
@@ -132,13 +132,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Amir Taaki
 | Standard
 | Draft
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0034.mediawiki|34]]
-| Block v2, Height in coinbase
+| Block v2, Height in Coinbase
 | Gavin Andresen
 | Standard
 | Accepted
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0035.mediawiki|35]]
 | mempool message
 | Jeff Garzik
@@ -150,34 +150,34 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Stefan Thomas
 | Standard
 | Draft
-|- style="background-color: #cfffcf"
+|- style="background-color: #ffffcf"
 | [[bip-0037.mediawiki|37]]
-| Bloom filtering
+| Connection Bloom filtering
 | Mike Hearn, Matt Corallo
 | Standard
 | Accepted
 |-
 | [[bip-0038.mediawiki|38]]
 | Passphrase-protected private key
-| Mike Caldwell
+| Mike Caldwell, Aaron Voisine
 | Standard
 | Draft
 |-
 | [[bip-0039.mediawiki|39]]
 | Mnemonic code for generating deterministic keys
-| Slush
+| Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe
 | Standard
 | Draft
 |-
 | 40
 | Stratum wire protocol
-| Slush
+| Marek Palatinus
 | Standard
 | BIP number allocated
 |-
 | 41
 | Stratum mining protocol
-| Slush
+| Marek Palatinus
 | Standard
 | BIP number allocated
 |-
@@ -189,19 +189,19 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0043.mediawiki|43]]
 | Purpose Field for Deterministic Wallets
-| Slush
+| Marek Palatinus, Pavol Rusnak
 | Standard
 | Draft
 |-
 | [[bip-0044.mediawiki|44]]
 | Multi-Account Hierarchy for Deterministic Wallets
-| Slush
+| Marek Palatinus, Pavol Rusnak
 | Standard
 | Draft
 |-
 | [[bip-0045.mediawiki|45]]
 | Structure for Deterministic P2SH Multisignature Wallets
-| Manuel Araoz
+| Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia
 | Standard
 | Draft
 |-
@@ -223,13 +223,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Amir Taaki
 | Standard
 | Draft
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0061.mediawiki|61]]
-| "reject" P2P message
+| Reject P2P message
 | Gavin Andresen
 | Standard
 | Final
-|-
+|- style="background-color: #ffcfcf"
 | [[bip-0062.mediawiki|62]]
 | Dealing with malleability
 | Pieter Wuille
@@ -243,80 +243,80 @@ Those proposing changes should consider that ultimately consent may rest with th
 | BIP number allocated
 |-
 | [[bip-0064.mediawiki|64]]
-| getutxos message
+| getutxo message
 | Mike Hearn
 | Standard
 | Draft
-|-
+|- style="background-color: #ffffcf"
 | [[bip-0065.mediawiki|65]]
 | OP_CHECKLOCKTIMEVERIFY
 | Peter Todd
 | Standard
 | Accepted
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0066.mediawiki|66]]
 | Strict DER signatures
 | Pieter Wuille
 | Standard
-| Draft
+| Final
 |-
 | [[bip-0067.mediawiki|67]]
-| Deterministic P2SH multi-signature addresses
-| Thomas Kerin
+| Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
+| Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries
 | Standard
 | Draft
 |-
 | [[bip-0068.mediawiki|68]]
-| Relative lock-time through consensus-enforced sequence numbers
-| Mark Friedenbach, BtcDrak, Nicolas Dorier
+| Relative lock-time using consensus-enforced sequence numbers
+| Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona
 | Standard
 | Draft
 |-
 | [[bip-0069.mediawiki|69]]
 | Lexicographical Indexing of Transaction Inputs and Outputs
 | Kristov Atlas
-| Standard
+| Informational
 | Draft
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0070.mediawiki|70]]
-| Payment protocol
-| Gavin Andresen
+| Payment Protocol
+| Gavin Andresen, Mike Hearn
 | Standard
 | Final
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0071.mediawiki|71]]
-| Payment protocol MIME types
+| Payment Protocol MIME types
 | Gavin Andresen
 | Standard
 | Final
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0072.mediawiki|72]]
-| Payment protocol URIs
+| bitcoin: uri extensions for Payment Protocol
 | Gavin Andresen
 | Standard
 | Final
 |-
 | [[bip-0073.mediawiki|73]]
-| Use "Accept" header with Payment Request URLs
+| Use "Accept" header for response type negotiation with Payment Request URLs
 | Stephen Pair
 | Standard
 | Draft
 |-
 | [[bip-0074.mediawiki|74]]
-| Support zero value OP_RETURN in Payment Requests
+| Allow zero value OP_RETURN in Payment Protocol
 | Toby Padilla
 | Standard
 | Draft
 |-
 | [[bip-0080.mediawiki|80]]
 | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
-| Monetas
+| Justus Ranvier, Jimmy Song
 | Informational
 | Draft
 |-
 | [[bip-0081.mediawiki|81]]
 | Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
-| Monetas
+| Justus Ranvier, Jimmy Song
 | Informational
 | Draft
 |-
@@ -329,7 +329,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | [[bip-0099.mediawiki|99]]
 | Motivation and deployment of consensus rule changes ([soft/hard]forks)
 | Jorge Timón
-| Informational / Process
+| Informational
 | Draft
 |-
 | [[bip-0101.mediawiki|101]]
@@ -376,7 +376,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0112.mediawiki|112]]
 | CHECKSEQUENCEVERIFY
-| BtcDrak, Mark Friedenbach
+| BtcDrak, Mark Friedenbach, Eric Lombrozo
 | Standard
 | Draft
 |-
@@ -407,7 +407,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | [[bip-0123.mediawiki|123]]
 | BIP Classification
 | Eric Lombrozo
-| Informational
+| Process
 | Draft
 |-
 | [[bip-0124.mediawiki|124]]
@@ -418,7 +418,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0125.mediawiki|125]]
 | Opt-in Full Replace-by-Fee Signaling
-| David Harding, Peter Todd
+| David A. Harding, Peter Todd
 | Standard
 | Draft
 |-
diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki
index e1abaddc99..4f91a3944a 100644
--- a/bip-0001.mediawiki
+++ b/bip-0001.mediawiki
@@ -1,6 +1,7 @@
 
   BIP: 1
   Title: BIP Purpose and Guidelines
+  Author: Amir Taaki 
   Status: Active
   Type: Process
   Created: 2011-08-19
diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index b160810f06..78298f09ee 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -1,9 +1,12 @@
 
   BIP: 9
   Title: Version bits with timeout and delay
-  Author: Pieter Wuille , Peter Todd , Greg Maxwell , Rusty Russell 
+  Author: Pieter Wuille 
+          Peter Todd 
+          Greg Maxwell 
+          Rusty Russell 
   Status: Draft
-  Type: Informational Track
+  Type: Informational
   Created: 2015-10-04
 
diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki index 4307f3e42a..d15cd77e5d 100644 --- a/bip-0010.mediawiki +++ b/bip-0010.mediawiki @@ -1,8 +1,8 @@
   BIP: 10
   Title: Multi-Sig Transaction Distribution
-  Author: Alan Reiner
-  Status: Withdrawn 
+  Author: Alan Reiner 
+  Status: Withdrawn
   Type: Informational
   Created: 2011-10-28
 
diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki index 111eb78bed..2cfb3277f2 100644 --- a/bip-0014.mediawiki +++ b/bip-0014.mediawiki @@ -1,6 +1,6 @@
   BIP: 14
-  Title: BIP Protocol Version and User Agent
+  Title: Protocol Version and User Agent
   Author: Amir Taaki 
           Patrick Strateman 
   Status: Accepted
diff --git a/bip-0015.mediawiki b/bip-0015.mediawiki
index c08498f16b..b90539da3c 100644
--- a/bip-0015.mediawiki
+++ b/bip-0015.mediawiki
@@ -1,6 +1,6 @@
 
   BIP: 15
-  Title: BIP Aliases
+  Title: Aliases
   Author: Amir Taaki 
   Status: Deferred
   Type: Standards Track
diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki
index ac0ed99163..ec5ddf4e42 100644
--- a/bip-0032.mediawiki
+++ b/bip-0032.mediawiki
@@ -7,7 +7,7 @@ RECENT CHANGES:
 
   BIP: 32
   Title: Hierarchical Deterministic Wallets
-  Author: Pieter Wuille
+  Author: Pieter Wuille 
   Status: Accepted
   Type: Informational
   Created: 2012-02-11
diff --git a/bip-0037.mediawiki b/bip-0037.mediawiki
index 77b917b399..224fef5223 100644
--- a/bip-0037.mediawiki
+++ b/bip-0037.mediawiki
@@ -1,7 +1,8 @@
 
   BIP: 37
   Title: Connection Bloom filtering
-  Author: Mike Hearn , Matt Corallo 
+  Author: Mike Hearn 
+          Matt Corallo 
   Status: Accepted
   Type: Standards Track
   Created: 2012-10-24
diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki
index 4fc3207bda..6107e0a538 100644
--- a/bip-0038.mediawiki
+++ b/bip-0038.mediawiki
@@ -1,8 +1,8 @@
 
   BIP: 38
   Title: Passphrase-protected private key
-  Authors: Mike Caldwell
-           Aaron Voisine 
+  Author: Mike Caldwell 
+          Aaron Voisine 
   Status: Draft (Some confusion applies: The announcements for this never made it to the list, so it hasn't had public discussion)
   Type: Standards Track
   Created: 2012-11-20
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index da59124cc2..c44ad3e84e 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -1,12 +1,12 @@
 
-  BIP:     BIP-0039
-  Title:   Mnemonic code for generating deterministic keys
-  Authors: Marek Palatinus 
-           Pavol Rusnak 
-           Aaron Voisine 
-           Sean Bowe 
-  Status:  Draft
-  Type:    Standards Track
+  BIP: 39
+  Title: Mnemonic code for generating deterministic keys
+  Author: Marek Palatinus 
+          Pavol Rusnak 
+          Aaron Voisine 
+          Sean Bowe 
+  Status: Draft
+  Type: Standards Track
   Created: 2013-09-10
 
diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki index 8f20fc8c25..4c57935e4d 100644 --- a/bip-0043.mediawiki +++ b/bip-0043.mediawiki @@ -1,10 +1,10 @@
-  BIP:     BIP-0043
-  Title:   Purpose Field for Deterministic Wallets
-  Authors: Marek Palatinus 
-           Pavol Rusnak 
-  Status:  Draft
-  Type:    Standards Track
+  BIP: 43
+  Title: Purpose Field for Deterministic Wallets
+  Author: Marek Palatinus 
+          Pavol Rusnak 
+  Status: Draft
+  Type: Standards Track
   Created: 2014-04-24
 
diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index ef7254c1de..6012ff52b7 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -1,10 +1,10 @@
-  BIP:     BIP-0044
-  Title:   Multi-Account Hierarchy for Deterministic Wallets
-  Authors: Marek Palatinus 
-           Pavol Rusnak 
-  Status:  Draft
-  Type:    Standards Track
+  BIP: 44
+  Title: Multi-Account Hierarchy for Deterministic Wallets
+  Author: Marek Palatinus 
+          Pavol Rusnak 
+  Status: Draft
+  Type: Standards Track
   Created: 2014-04-24
 
diff --git a/bip-0045.mediawiki b/bip-0045.mediawiki index f93319d47f..1550467d16 100644 --- a/bip-0045.mediawiki +++ b/bip-0045.mediawiki @@ -1,11 +1,11 @@
-  BIP:     BIP-0045
-  Title:   Structure for Deterministic P2SH Multisignature Wallets
-  Authors: Manuel Araoz 
-           Ryan X. Charles 
-           Matias Alejo Garcia 
-  Status:  Draft
-  Type:    Standards Track
+  BIP: 45
+  Title: Structure for Deterministic P2SH Multisignature Wallets
+  Author: Manuel Araoz 
+          Ryan X. Charles 
+          Matias Alejo Garcia 
+  Status: Draft
+  Type: Standards Track
   Created: 2014-04-25
 
diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index c3c5058603..1a05730d16 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,17 +1,14 @@ RECENT CHANGES: - * (18 Dec 2015) Update explanations to resolve FAQs - * (12 Oct 2015) Revise blinding method for notification transactions - * (21 Sep 2015) Correct base58check version byte
-  BIP:     47
-  Title:   Reusable Payment Codes for Hierarchical Deterministic Wallets
-  Authors: Justus Ranvier 
-  Status:  Draft
-  Type:    Informational
+  BIP: 47
+  Title: Reusable Payment Codes for Hierarchical Deterministic Wallets
+  Author: Justus Ranvier 
+  Status: Draft
+  Type: Informational
   Created: 2015-04-24
 
diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki index 8be5c9b265..d26df9c568 100644 --- a/bip-0067.mediawiki +++ b/bip-0067.mediawiki @@ -1,8 +1,9 @@ -
   BIP: 67
   Title: Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
-  Author: Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries
+  Author: Thomas Kerin 
+          Jean-Pierre Rupp 
+          Ruben de Vries 
   Status: Draft
   Type: Standards Track
   Created: 2015-02-08
diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki
index e23ff04205..0eca369f61 100644
--- a/bip-0069.mediawiki
+++ b/bip-0069.mediawiki
@@ -1,10 +1,10 @@
 
-  BIP:     BIP: 69
-  Title:   Lexicographical Indexing of Transaction Inputs and Outputs
-  Authors: Kristov Atlas 
-  Editors: Daniel Cousens 
-  Status:  Draft
-  Type:    Informational
+  BIP: 69
+  Title: Lexicographical Indexing of Transaction Inputs and Outputs
+  Author: Kristov Atlas 
+  Editor: Daniel Cousens 
+  Status: Draft
+  Type: Informational
   Created: 2015-06-12
 
diff --git a/bip-0070.mediawiki b/bip-0070.mediawiki index 3642784937..e3c17cf087 100644 --- a/bip-0070.mediawiki +++ b/bip-0070.mediawiki @@ -1,7 +1,8 @@
   BIP: 70
   Title: Payment Protocol
-  Authors: Gavin Andresen , Mike Hearn 
+  Author: Gavin Andresen 
+          Mike Hearn 
   Status: Final
   Type: Standards Track
   Created: 2013-07-29
diff --git a/bip-0074.mediawiki b/bip-0074.mediawiki
index 0790b12f31..a860b38159 100644
--- a/bip-0074.mediawiki
+++ b/bip-0074.mediawiki
@@ -2,6 +2,9 @@
   BIP: 74
   Title: Allow zero value OP_RETURN in Payment Protocol
   Author: Toby Padilla 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-01-29
 
==Abstract== diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki index f28bb70f8f..7c13a6ed3b 100644 --- a/bip-0080.mediawiki +++ b/bip-0080.mediawiki @@ -1,10 +1,10 @@
-  BIP:     80
-  Title:   Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
-  Authors: Justus Ranvier 
-           Jimmy Song 
-  Status:  Draft
-  Type:    Informational
+  BIP: 80
+  Title: Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
+  Author: Justus Ranvier 
+          Jimmy Song 
+  Status: Draft
+  Type: Informational
   Created: 2014-08-11
 
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki index 5157c09492..774166ea60 100644 --- a/bip-0081.mediawiki +++ b/bip-0081.mediawiki @@ -1,10 +1,10 @@
-  BIP:     81
-  Title:   Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
-  Authors: Justus Ranvier 
-           Jimmy Song 
-  Status:  Draft
-  Type:    Informational
+  BIP: 81
+  Title: Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
+  Author: Justus Ranvier 
+          Jimmy Song 
+  Status: Draft
+  Type: Informational
   Created: 2014-08-11
 
diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki index d1da64592c..f6aa8e7772 100644 --- a/bip-0083.mediawiki +++ b/bip-0083.mediawiki @@ -1,9 +1,9 @@
-  BIP:     BIP-83
-  Title:   Dynamic Hierarchical Deterministic Key Trees
-  Author:  Eric Lombrozo 
-  Status:  Draft
-  Type:    Standard
+  BIP: 83
+  Title: Dynamic Hierarchical Deterministic Key Trees
+  Author: Eric Lombrozo 
+  Status: Draft
+  Type: Standards Track
   Created: 2015-11-16
 
diff --git a/bip-0099.mediawiki b/bip-0099.mediawiki index b416e6866d..3e0a43a886 100644 --- a/bip-0099.mediawiki +++ b/bip-0099.mediawiki @@ -3,7 +3,7 @@ Title: Motivation and deployment of consensus rule changes ([soft/hard]forks) Author: Jorge Timón Status: Draft - Type: Informational / Process + Type: Informational Created: 2015-06-20 Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-June/008936.html
diff --git a/bip-0107.mediawiki b/bip-0107.mediawiki index 4e96173a29..86edd9952e 100644 --- a/bip-0107.mediawiki +++ b/bip-0107.mediawiki @@ -1,7 +1,7 @@
   BIP: 107
   Title: Dynamic limit on the block size
-  Author: Dr Washington Y. Sanchez 
+  Author: Washington Y. Sanchez 
   Status: Draft
   Type: Standards Track
   Created: 2015-09-11
diff --git a/bip-0111.mediawiki b/bip-0111.mediawiki
index d3bd630b8e..e0ae9e85c1 100644
--- a/bip-0111.mediawiki
+++ b/bip-0111.mediawiki
@@ -1,7 +1,8 @@
 
   BIP: 111
   Title: NODE_BLOOM service bit
-  Author: Matt Corallo , Peter Todd 
+  Author: Matt Corallo 
+          Peter Todd 
   Status: Draft
   Type: Standards Track
   Created: 2015-08-20
diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki
index 643c617676..9c2d199ac1 100644
--- a/bip-0112.mediawiki
+++ b/bip-0112.mediawiki
@@ -1,9 +1,9 @@
 
   BIP: 112
   Title: CHECKSEQUENCEVERIFY
-  Authors: BtcDrak 
-           Mark Friedenbach 
-           Eric Lombrozo 
+  Author: BtcDrak 
+          Mark Friedenbach 
+          Eric Lombrozo 
   Status: Draft
   Type: Standards Track
   Created: 2015-08-10
diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki
index 190fb4cc13..15fa4f3fdf 100644
--- a/bip-0113.mediawiki
+++ b/bip-0113.mediawiki
@@ -2,7 +2,7 @@
   BIP: 113
   Title: Median time-past as endpoint for lock-time calculations
   Author: Thomas Kerin 
-          Mark Friedenbach 	
+          Mark Friedenbach 
   Status: Draft
   Type: Standards Track
   Created: 2015-08-10
diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki
index 17003aa51d..5386dd27a5 100644
--- a/bip-0122.mediawiki
+++ b/bip-0122.mediawiki
@@ -4,7 +4,7 @@
   Author: Marco Pontello 
   Status: Draft
   Type: Standards Track
-  Created: 29 August 2015
+  Created: 2015-08-29
   Post-History: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010712.html
 
diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki index 348c6c06d6..3d40326b78 100644 --- a/bip-0123.mediawiki +++ b/bip-0123.mediawiki @@ -2,7 +2,7 @@ BIP: 123 Layer: Process Title: BIP Classification - Author: Eric Lombrozo + Author: Eric Lombrozo Status: Draft Type: Process Created: 2015-08-26 diff --git a/bip-0124.mediawiki b/bip-0124.mediawiki index 1c98db8700..2f9f4ad74c 100644 --- a/bip-0124.mediawiki +++ b/bip-0124.mediawiki @@ -1,11 +1,11 @@
-  BIP:     BIP-124
-  Title:   Hierarchical Deterministic Script Templates
-  Authors: Eric Lombrozo , William Swanson
-  Status:  Draft
-  Type:    Informational
+  BIP: 124
+  Title: Hierarchical Deterministic Script Templates
+  Author: Eric Lombrozo 
+          William Swanson 
+  Status: Draft
+  Type: Informational
   Created: 2015-11-20
-
   Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-November/011795.html
 
diff --git a/bip-0125.mediawiki b/bip-0125.mediawiki index 63788e9df5..7d884690af 100644 --- a/bip-0125.mediawiki +++ b/bip-0125.mediawiki @@ -1,7 +1,8 @@
   BIP: 125
   Title: Opt-in Full Replace-by-Fee Signaling
-  Author: David A. Harding , Peter Todd 
+  Author: David A. Harding 
+          Peter Todd 
   Status: Draft
   Type: Standards Track
   Created: 2015-12-04
diff --git a/bip-0132.mediawiki b/bip-0132.mediawiki
index 814e20a521..90c09b1b72 100644
--- a/bip-0132.mediawiki
+++ b/bip-0132.mediawiki
@@ -1,7 +1,7 @@
 
   BIP: 132
   Title: Committee-based BIP Acceptance Process
-  Author: Andy Chase
+  Author: Andy Chase 
   Status: Draft
   Type: Process
   Created: 2015-08-31
diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index 9b2422bbb3..2da222cfa3 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -5,7 +5,7 @@
           Pieter Wuille 
   Status: Draft
   Type: Standards Track
-  Created: 2015-12
+  Created: 2016-01-08
 
==Abstract== From 3cc727b99fddc8af5a64fa32edeaeb571ccb5b4b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 3 Feb 2016 19:07:55 +0000 Subject: [PATCH 0201/2326] BIP 67: Update email for Thomas Kerin --- bip-0067.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki index d26df9c568..3864c63cd6 100644 --- a/bip-0067.mediawiki +++ b/bip-0067.mediawiki @@ -1,7 +1,7 @@
   BIP: 67
   Title: Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
-  Author: Thomas Kerin 
+  Author: Thomas Kerin 
           Jean-Pierre Rupp 
           Ruben de Vries 
   Status: Draft

From 37ef0f9f79295ae8f1cb1a5c7950e59c1302fef9 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Wed, 3 Feb 2016 19:20:12 +0000
Subject: [PATCH 0202/2326] bip-biprevised: Avoid "consensus" outside of
 "consensus rules", and move formal definition thereof to the only location it
 matters (Process BIPs becoming Active)

---
 bip-biprevised.mediawiki | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index 4e30f242b1..a7de3a1e23 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -31,15 +31,15 @@ An Accepted BIP may progress to Final only when specific criteria reflecting rea
 
 When a Final BIP is no longer relevant, its status may be changed to Replaced or Obsolete (which is equivalent to Replaced). This change must also be objectively verifiable and/or discussed.
 
-A process BIP may change status from Draft to Active when it achieves consensus on the mailing list.
+A process BIP may change status from Draft to Active when it achieves rough consensus on the mailing list. Such a proposal is said to have rough consensus if it has been open to discussion on the development mailing list for at least one month, and no person maintains any unaddressed substantiated objections to it. Addressed or obstructive objections may be ignored/overruled by general agreement that they have been sufficiently addressed, but clear reasoning must be given in such circumstances.
 
 ====Progression to Final status====
 
 See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123.
 
-A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9), as well as not meeting the inverse criteria for a hard-fork BIP (that is, economic consensus may reject a soft-fork BIP despite miner adoption). Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold.
+A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9), as well as not meeting the inverse criteria for a hard-fork BIP (that is, economic agreement to block the soft-fork with a hard-fork, may be cause to reject that soft-fork BIP despite miner adoption). Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold.
 
-A hard-fork BIP requires consensus from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Consensus must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish pre-Final status consensus to adopt a BIP). This consensus cannot be reached merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document).
+A hard-fork BIP requires adoption from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Adoption must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish agreement before adoption of the BIP). This economic adoption cannot be established merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document).
 
 Peer services BIPs should be observed to be adopted by at least 1% of public listening nodes for one month.
 
@@ -49,10 +49,6 @@ Software authors are encouraged to publish summaries of what BIPs their software
 
 These criteria are considered objective ways to observe the de facto adoption of the BIP, and are not to be used as reasons to oppose or reject a BIP. Should a BIP become actually and unambiguously adopted despite not meeting the criteria outlined here, it should still be updated to Final status.
 
-====Formally defining consensus====
-
-A proposal is said to have achieved consensus if it has been open to discussion in applicable forums for communication for at least one month, and has not maintained any substantiated objection by any person. Should objections to be made on a strictly obstructive basis, those obstructing may be ignored/overruled by agreement that they are merely being obstructive from all other persons involved in the discussion. Objections are assumed to be either substantiated or obstructive, and when giving a determination of an objection being obstructive, clear reasoning must be offered.
-
 ===Rationale===
 
 How is the entire Bitcoin economy defined by people selling goods/services and holders?
@@ -70,9 +66,9 @@ But they're doing something important and have invested a lot in Bitcoin! Should
 
 * This BIP does not aim to address what "should" be the basis of decisions. Such a statement, no matter how perfect in its justification, would be futile without some way to enforce it. The BIP process does not aim to be a kind of "governance" of Bitcoin, merely to provide a collaborative repository for proposing and providing information on standards. It can only hope to achieve accuracy in regard to the "Status" field by striving to reflect the reality of *how things actually are*, rather than *how they should be*.
 
-Why can the economic consensus veto a soft-fork?
+How can economic agreement veto a soft-fork?
 
-* The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economic consensus can decide to replace them with another group of would-be miners who do not support the soft-fork.
+* The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economy can decide to replace them with another group of would-be miners who do not support the soft-fork.
 
 What is the ideal percentage of listening nodes needed to adopt peer services proposals?
 
@@ -158,3 +154,4 @@ Why are there software licenses included?
 
 * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]]
 * [[bip-0123.mediawiki|BIP 123: BIP Classification]]
+* [https://tools.ietf.org/html/rfc7282 RBF 7282: On Consensus and Humming in the IETF]

From 3f859450dd209796bf50bf344cb8bf0a212c5417 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Wed, 3 Feb 2016 21:09:08 +0000
Subject: [PATCH 0203/2326] BIP 80/81: Update email for Justus Ranvier

BIP 47/69 are fine as-is
---
 bip-0080.mediawiki | 2 +-
 bip-0081.mediawiki | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki
index 7c13a6ed3b..13d8597df8 100644
--- a/bip-0080.mediawiki
+++ b/bip-0080.mediawiki
@@ -1,7 +1,7 @@
 
   BIP: 80
   Title: Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
-  Author: Justus Ranvier 
+  Author: Justus Ranvier 
           Jimmy Song 
   Status: Draft
   Type: Informational
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki
index 774166ea60..b306075198 100644
--- a/bip-0081.mediawiki
+++ b/bip-0081.mediawiki
@@ -1,7 +1,7 @@
 
   BIP: 81
   Title: Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
-  Author: Justus Ranvier 
+  Author: Justus Ranvier 
           Jimmy Song 
   Status: Draft
   Type: Informational

From 04fce4aa75f6c69b57850070c2e837cd7671f233 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Thu, 4 Feb 2016 04:10:30 +0000
Subject: [PATCH 0204/2326] bip-biprevised: Clarify soft-fork blocking by ec.
 consensus

---
 bip-biprevised.mediawiki | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/bip-biprevised.mediawiki b/bip-biprevised.mediawiki
index a7de3a1e23..b496149ad0 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-biprevised.mediawiki
@@ -37,7 +37,7 @@ A process BIP may change status from Draft to Active when it achieves rough cons
 
 See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123.
 
-A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9), as well as not meeting the inverse criteria for a hard-fork BIP (that is, economic agreement to block the soft-fork with a hard-fork, may be cause to reject that soft-fork BIP despite miner adoption). Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold.
+A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9). In addition, if the economy seems willing to make a "no confidence" hard-fork (such as a change in proof-of-work algorithm), the soft-fork does not become Final for as long as such a hard-fork has potentially-majority support, or at most three months. Soft-fork BIPs may also set additional requirements for their adoption. Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold.
 
 A hard-fork BIP requires adoption from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Adoption must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish agreement before adoption of the BIP). This economic adoption cannot be established merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document).
 
@@ -70,6 +70,10 @@ How can economic agreement veto a soft-fork?
 
 * The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economy can decide to replace them with another group of would-be miners who do not support the soft-fork.
 
+What happens if the economy decides to hard-fork away from a controversial soft-fork, more than three months later?
+
+* The controversial soft-fork, in this circumstance, changes from Final to Replaced status to reflect the nature of the hard-fork replacing the previous (final) soft-fork.
+
 What is the ideal percentage of listening nodes needed to adopt peer services proposals?
 
 * This is unknown, and set rather arbitrarily at this time. For a random selection of peers to have at least one other peer implementing the extension, 13% or more would be necessary, but nodes could continue to scan the network for such peers with perhaps some reasonable success. Furthermore, service bits exist to help identification upfront.

From a2e87c208f45072f266f9d5788664209aaeccfcc Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Thu, 4 Feb 2016 04:12:03 +0000
Subject: [PATCH 0205/2326] Assign BIP 2: BIP Status and Comments

---
 README.mediawiki                               | 6 ++++++
 bip-biprevised.mediawiki => bip-0002.mediawiki | 5 +++--
 2 files changed, 9 insertions(+), 2 deletions(-)
 rename bip-biprevised.mediawiki => bip-0002.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index eda7fbfdd7..389d21e573 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -19,6 +19,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Process
 | Active
 |-
+| [[bip-0002.mediawiki|2]]
+| BIP Status and Comments
+| Luke Dashjr
+| Process
+| Draft
+|-
 | [[bip-0009.mediawiki|9]]
 | Version bits with timeout and delay
 | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
diff --git a/bip-biprevised.mediawiki b/bip-0002.mediawiki
similarity index 99%
rename from bip-biprevised.mediawiki
rename to bip-0002.mediawiki
index b496149ad0..ee3ae3a03c 100644
--- a/bip-biprevised.mediawiki
+++ b/bip-0002.mediawiki
@@ -1,9 +1,10 @@
 
-  BIP: x
+  BIP: 2
   Title: BIP Status and Comments
+  Author: Luke Dashjr 
   Status: Draft
   Type: Process
-  Created: 2016-02-01
+  Created: 2016-02-03
 
==Abstract== From 2d909ad98a999a77bfcf8393a60166f1eabd22a4 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 5 Feb 2016 02:13:31 +0800 Subject: [PATCH 0206/2326] BIP34 correction --- bip-0034.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0034.mediawiki b/bip-0034.mediawiki index 245985c740..3c0e770f4d 100644 --- a/bip-0034.mediawiki +++ b/bip-0034.mediawiki @@ -19,7 +19,7 @@ Bitcoin blocks and transactions are versioned binary structures. Both currently ==Specification== # Treat transactions with a version greater than 1 as non-standard (official Satoshi client will not mine or relay them). -# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 300 or so years), following bytes are little-endian representation of the number. Height is the height of the mined block in the block chain, where the genesis block is height zero (0). +# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 150 or so years with 223-1 blocks), following bytes are little-endian representation of the number (including a sign bit). Height is the height of the mined block in the block chain, where the genesis block is height zero (0). # 75% rule: If 750 of the last 1,000 blocks are version 2 or greater, reject invalid version 2 blocks. (testnet3: 51 of last 100) # 95% rule ("Point of no return"): If 950 of the last 1,000 blocks are version 2 or greater, reject all version 1 blocks. (testnet3: 75 of last 100) From 4a515ee2dc5917066a8b126187cd733f4d252a82 Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Thu, 4 Feb 2016 20:38:33 +0000 Subject: [PATCH 0207/2326] Minor update of implementation for BIP68 This patch syncronised latest implementation Adds comments, adds assert() --- bip-0068.mediawiki | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index e93d748807..3183cff651 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -89,10 +89,10 @@ static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff; static const int SEQUENCE_LOCKTIME_GRANULARITY = 9; /** - * Calculates the block height and time which the transaction must be later than - * in order to be considered final in the context of BIP 68. It also removes - * from the vector of input heights any entries which did not correspond to sequence - * locked inputs as they do not affect the calculation. + * Calculates the block height and previous block's median time past at + * which the transaction will be considered final in the context of BIP 68. + * Also removes from the vector of input heights any entries which did not + * correspond to sequence locked inputs as they do not affect the calculation. */ static std::pair CalculateSequenceLocks(const CTransaction &tx, int flags, std::vector* prevHeights, const CBlockIndex& block) { @@ -134,6 +134,14 @@ static std::pair CalculateSequenceLocks(const CTransaction &tx, in if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) { int64_t nCoinTime = block.GetAncestor(std::max(nCoinHeight-1, 0))->GetMedianTimePast(); + // NOTE: Subtract 1 to maintain nLockTime semantics + // BIP 68 relative lock times have the semantics of calculating + // the first block or time at which the transaction would be + // valid. When calculating the effective block time or height + // for the entire transaction, we switch to using the + // semantics of nLockTime which is the last invalid block + // time or height. Thus we subtract 1 from the calculated + // time or height. // Time-based relative lock-times are measured from the // smallest allowed timestamp of the block containing the @@ -141,10 +149,6 @@ static std::pair CalculateSequenceLocks(const CTransaction &tx, in // block prior. nMinTime = std::max(nMinTime, nCoinTime + (int64_t)((txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) << CTxIn::SEQUENCE_LOCKTIME_GRANULARITY) - 1); } else { - // We subtract 1 from relative lock-times because a lock- - // time of 0 has the semantics of "same block," so a lock- - // time of 1 should mean "next block," but nLockTime has - // the semantics of "last invalid block height." nMinHeight = std::max(nMinHeight, nCoinHeight + (int)(txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_MASK) - 1); } } @@ -154,7 +158,8 @@ static std::pair CalculateSequenceLocks(const CTransaction &tx, in static bool EvaluateSequenceLocks(const CBlockIndex& block, std::pair lockPair) { - int64_t nBlockTime = block.pprev ? block.pprev->GetMedianTimePast() : 0; + assert(block.pprev); + int64_t nBlockTime = block.pprev->GetMedianTimePast(); if (lockPair.first >= block.nHeight || lockPair.second >= nBlockTime) return false; @@ -189,7 +194,7 @@ bool CheckSequenceLocks(const CTransaction &tx, int flags) const CTxIn& txin = tx.vin[txinIndex]; CCoins coins; if (!viewMemPool.GetCoins(txin.prevout.hash, coins)) { - return error("%s: Missing input", __func__); + return error("%s: Missing input", __func__); } if (coins.nHeight == MEMPOOL_HEIGHT) { // Assume all mempool transaction confirm in the next block From d21c27b96efc0072d4884fb321b3b171c340c4ac Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 00:04:55 +0000 Subject: [PATCH 0208/2326] bip-0002: Clarify that BIP comments are intended for final reviews, not suggestions to drafts --- bip-0002.mediawiki | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index bf0a768f5c..6690bc2851 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -92,7 +92,12 @@ What if a BIP is proposed that only makes sense for a single specific project? ===Specification=== -Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format]. If a BIP is not yet completed, reviewers should plan to review the new version and remove or revise their comments as applicable, updating the timestamp in the review. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). +Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. +Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format]. +The comments page should generally only be used to post final comments for a completed BIP. +If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review. + +Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still cross-post their review on the comments page, provided they plan to review any new versions and remove or revise their comments as applicable. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 . From 8c50a8012ea4fcabf35f06683d7859c0bcef8e6c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 00:18:02 +0000 Subject: [PATCH 0209/2326] bip-0002: Rewrite Abstract, and move rationale previously included in it to the applicable Rationale sections --- bip-0002.mediawiki | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 6690bc2851..4d3bab0b0d 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -9,10 +9,7 @@ ==Abstract== -BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. -Additionally, some BIPs have been adopted which are deemed unadvisable or unsafe by experts in the field, and there is no indication of this at present. -Finally, BIP 1 only allows a single copyright license generally considered deprecated, or publication under the public domain (which is not legally recognised in all jurisdictions). -This BIP intends to address these problems by more specifically defining the Status field, recommending a forum for people to comment on BIPs, and expanding the list of allowable BIP licenses. +This BIP describes objective criteria that can be used to determine when a BIP Status should be changed, to ensure it is a reliable metric documenting actual usage of the proposal. It also adds a way for final comment on completed BIPs, by adding to them a reference to a wiki page and summary of the tone thereof. Finally, it extends the list of allowable BIP licenses to include many more popular options. ==Copyright== @@ -52,6 +49,10 @@ These criteria are considered objective ways to observe the de facto adoption of ===Rationale=== +Why is this necessary at all? + +* BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. As a result, many BIPs with significant real-world use have been left as Draft or Accepted status longer than appropriate. By giving objective criteria to judge the progression of BIPs, this proposal aims to help keep the Status accurate and up-to-date. + How is the entire Bitcoin economy defined by people selling goods/services and holders? * For Bitcoin to function as a currency, it must be accepted as payment. Bitcoins have no value if you cannot acquire anything in exchange for them. If everyone accepting such payments requires a particular set of consensus rules, "bitcoins" are de facto defined by that set of rules - this is already the case today. If those consensus rules are expected to broaden (as with a hard-fork), those merchants need to accept payments made under the new set of rules, or they will reject "bitcoins" as invalid. Holders are relevant to the degree in that they choose the merchants they wish to spend their bitcoins with, and could also as a whole decide to sell under one set of consensus rules or the other, thus flooding the market with bitcoins and crashing the price. @@ -65,7 +66,7 @@ Why aren't included in the economy? But they're doing something important and have invested a lot in Bitcoin! Shouldn't they be included in such an important decision? -* This BIP does not aim to address what "should" be the basis of decisions. Such a statement, no matter how perfect in its justification, would be futile without some way to enforce it. The BIP process does not aim to be a kind of "governance" of Bitcoin, merely to provide a collaborative repository for proposing and providing information on standards. It can only hope to achieve accuracy in regard to the "Status" field by striving to reflect the reality of *how things actually are*, rather than *how they should be*. +* This BIP does not aim to address what "should" be the basis of decisions. Such a statement, no matter how perfect in its justification, would be futile without some way to force others to use it. The BIP process does not aim to be a kind of forceful "governance" of Bitcoin, merely to provide a collaborative repository for proposing and providing information on standards, which people may voluntarily adopt or not. It can only hope to achieve accuracy in regard to the "Status" field by striving to reflect the reality of *how things actually are*, rather than *how they should be*. How can economic agreement veto a soft-fork? @@ -120,6 +121,10 @@ To avoid doubt: comments and status are unrelated metrics to judge a BIP, and ne ===Rationale=== +What is the purpose of BIP comments? + +* Various BIPs have been adopted (the criteria required for "Final" Status) despite being considered generally inadvisable. Some presently regard BIPs as a "good idea" simply by virtue of them being assigned a BIP number. Due to the low barrier of entry for submission of new BIPs, it seems advisable for a way for reviewers to express their opinions on them in a way that is consumable to the public without needing to review the entire development discussion. + Will BIP comments be censored or limited to particular participants/"experts"? * The Bitcoin Wiki moderators have control over that venue and may make reasonable moderation attempts. Admitted non-experts should refrain from commenting outside of their area of knowledge. However, comments should not be censored, and participation should be open to the public. @@ -155,6 +160,12 @@ In addition, it is recommended that literal code included in the BIP be dual-lic ===Rationale=== +BIP 1 allowed the Open Publication License or releasing into the public domain; was this insufficient? + +* The OPL is generally regarded as obsolete, and not a license suitable for new publications. +* Many are unfamiliar with the OPL terms, and may just prefer to use the public domain rather than license under uncertain terms. +* Public domain is not universally recognised as a legitimate action, thus it is inadvisable. + Why are there software licenses included? * Some BIPs, especially consensus layer, may include literal code in the BIP itself which may not be available under the exact license terms of the BIP. From 438bb6bbab2822b1a093957b006f9f109b8a13e0 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 00:22:05 +0000 Subject: [PATCH 0210/2326] bip-0002: Be more specific on how additional comments forums can be specified --- bip-0002.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 4d3bab0b0d..2558f20584 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -102,7 +102,7 @@ Some BIPs receive exposure outside the development community prior to completion Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 . -In order to avoid possible abuse of Bitcoin Wiki moderation, BIPs may also choose to list a second forum for BIP comments. +In order to avoid possible abuse of Bitcoin Wiki moderation, BIPs may choose to list a second forum for BIP comments, in addition to the Bitcoin Wiki. In this case, the second forum's URI should be listed below the Bitcoin Wiki's URI. Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances: @@ -112,10 +112,11 @@ Summary tones may be chosen from the following, but this BIP does not intend to * Mostly Recommended for implementation, with some Discouragement * Mostly Discouraged for implementation, with some Recommendation -For example, the preamble to BIP 1 would be updated to include the (markup) line: +For example, the preamble to BIP 1 might be updated to include the line: Comments-Summary: No comments yet. Comments-URI: https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 + https://some-other-wiki.org/BIP_1_Comments To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other. From fc352d54e825c04527d5573bed90fb8a3463fe2f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 01:06:08 +0000 Subject: [PATCH 0211/2326] bip-0002: Be more explicit on the need for review to primarily occur on the ML during drafting --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 2558f20584..571361c1fe 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -98,7 +98,7 @@ Reviewers of the BIP who consider themselves qualified, should post their own co The comments page should generally only be used to post final comments for a completed BIP. If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review. -Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still cross-post their review on the comments page, provided they plan to review any new versions and remove or revise their comments as applicable. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). +Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still post their review on the comments page, provided they first post it to the mailing list and plan to later remove or revise it as applicable based on the completed version. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 . From 54a753d6c913077acd5621989fa51c04b88ea4ad Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 01:08:39 +0000 Subject: [PATCH 0212/2326] bip-0002: Note that the comments must address the proposal itself --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 571361c1fe..e5e50ba02f 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -95,7 +95,7 @@ What if a BIP is proposed that only makes sense for a single specific project? Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format]. -The comments page should generally only be used to post final comments for a completed BIP. +The comments page should generally only be used to post final comments for a completed BIP, and must address the proposal itself (explicitly *not* including the merits of the author(s) nor discussions/processes involved in the drafting of it). If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review. Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still post their review on the comments page, provided they first post it to the mailing list and plan to later remove or revise it as applicable based on the completed version. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). From 32231cddc6db33f2557a0bd0e6a143b90c99203f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 5 Feb 2016 01:32:59 +0000 Subject: [PATCH 0213/2326] Revert "bip-0002: Note that the comments must address the proposal itself" This reverts commit 54a753d6c913077acd5621989fa51c04b88ea4ad. --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index e5e50ba02f..571361c1fe 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -95,7 +95,7 @@ What if a BIP is proposed that only makes sense for a single specific project? Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page. Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format]. -The comments page should generally only be used to post final comments for a completed BIP, and must address the proposal itself (explicitly *not* including the merits of the author(s) nor discussions/processes involved in the drafting of it). +The comments page should generally only be used to post final comments for a completed BIP. If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review. Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still post their review on the comments page, provided they first post it to the mailing list and plan to later remove or revise it as applicable based on the completed version. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month). From 04bc8408cf146995470efbe03863316da53477c8 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 5 Feb 2016 20:30:12 -0800 Subject: [PATCH 0214/2326] BIP 68 Nit: fix spelling Contrats -> Contracts --- bip-0068.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 3183cff651..b7bb0db1f1 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -249,5 +249,5 @@ BIP112: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP113: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki -Hashed Timelock Contrats (HTLCs): https://github.com/ElementsProject/lightning/raw/master/doc/deployable-lightning.pdf +Hashed Timelock Contracts (HTLCs): https://github.com/ElementsProject/lightning/raw/master/doc/deployable-lightning.pdf From 072173f3c5290a355e5696b669c3703fcdd47ae3 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 9 Feb 2016 04:56:36 +0000 Subject: [PATCH 0215/2326] bip-0050: Final update to what actually occurred --- bip-0050.mediawiki | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/bip-0050.mediawiki b/bip-0050.mediawiki index 9ff29d6f0f..3107070014 100644 --- a/bip-0050.mediawiki +++ b/bip-0050.mediawiki @@ -8,27 +8,29 @@
==What went wrong== -A block that had a larger number of total transaction inputs than previously seen was mined and broadcasted. Bitcoin 0.8 nodes were able to handle this, but some pre-0.8 Bitcoin nodes rejected it, causing an unexpected hard fork of the chain. The pre-0.8 incompatible chain at that point had around 60% of the hash power ensuring the split did not automatically resolve. +A block that had a larger number of total transaction inputs than previously seen was mined and broadcasted. Bitcoin 0.8 nodes were able to handle this, but some pre-0.8 Bitcoin nodes rejected it, causing an unexpected fork of the blockchain. The pre-0.8-incompatible chain (from here on, the 0.8 chain) at that point had around 60% of the mining hash power ensuring the split did not automatically resolve (as would have occurred if the pre-0.8 chain outpaced the 0.8 chain in total work, forcing 0.8 nodes to reorganise to the pre-0.8 chain). -In order to restore a canonical chain as soon as possible, BTCGuild and Slush downgraded their Bitcoin 0.8 nodes to 0.7 so their pools would also reject the larger block. This placed majority hashpower on the chain without the larger block. +In order to restore a canonical chain as soon as possible, BTCGuild and Slush downgraded their Bitcoin 0.8 nodes to 0.7 so their pools would also reject the larger block. This placed majority hashpower on the chain without the larger block, thus eventually causing the 0.8 nodes to reorganise to the pre-0.8 chain. During this time there was at least [https://bitcointalk.org/index.php?topic=152348.0 one large double spend]. However, it was done by someone experimenting to see if it was possible and was not intended to be malicious. ==What went right== * The split was detected very quickly. -* The right people were online and available in IRC or could be raised via Skype. -* Marek Palatinus and Michael Marsee quickly downgraded their nodes to restore a pre-0.8 chain as canonical, despite the fact that this caused them to sacrifice significant amounts of money and they were the ones running the bug-free version. +* The right people were online and available in IRC or could be contacted directly. +* Marek Palatinus (Slush) and Michael Marsee (Eleuthria of BTCGuild) quickly downgraded their nodes to restore a pre-0.8 chain as canonical, despite the fact that this caused them to sacrifice significant amounts of money. * Deposits to the major exchanges and payments via BitPay were also suspended (and then un-suspended) very quickly. -* Fortunately, the only attack on a merchant was done by someone who was not intending to actually steal money +* Fortunately, the only attack on a merchant was done by someone who was not intending to actually steal money. ==Root cause== -Bitcoin versions prior to 0.8 configure an insufficient number of Berkeley DB locks to process large but technically valid blocks. Berkeley DB locks have to be manually configured by API users depending on anticipated load. The manual says this: +Bitcoin versions prior to 0.8 configure an insufficient number of Berkeley DB locks to process large but otherwise valid blocks. Berkeley DB locks have to be manually configured by API users depending on anticipated load. The manual says this: :The recommended algorithm for selecting the maximum number of locks, lockers, and lock objects is to run the application under stressful conditions and then review the lock system's statistics to determine the maximum number of locks, lockers, and lock objects that were used. Then, double these values for safety. +With the insufficiently high BDB lock configuration, it implicitly had become a network consensus rule determining block validity (albeit an inconsistent and unsafe rule, since the lock usage could vary from node to node). + Because max-sized blocks had been successfully processed on the testnet, it did not occur to anyone that there could be blocks that were smaller but require more locks than were available. Prior to 0.7 unmodified mining nodes self-imposed a maximum block size of 500,000 bytes, which further prevented this case from being triggered. 0.7 made the target size configurable and miners had been encouraged to increase this target in the week prior to the incident. -Bitcoin 0.8 does not use Berkeley DB. It uses LevelDB instead, which does not require this kind of pre-configuration. Therefore it was able to process the forking block successfully. +Bitcoin Core 0.8 did not use Berkeley DB. It switched to LevelDB instead, which did not implement the same locking limits as BDB. Therefore it was able to process the forking block successfully. Note that BDB locks are also required during processing of re-organizations. Versions prior to 0.8 may be unable to process some valid re-orgs. @@ -39,10 +41,10 @@ This would be an issue even if the entire network was running version 0.7.2. It ===Immediately=== '''Done''': Release a version 0.8.1, forked directly from 0.8.0, that, for the next two months has the following new rules: -# Reject blocks that could cause more than 10,000 locks to be taken. +# Reject blocks that would probably could cause more than 10,000 locks to be taken. # Limit the maximum block-size created to 500,000 bytes -# Release a patch for older versions that implements the same rules, but also increases the maximum number of locks to 120,000 -# Create a web page on bitcoin.org that will urge users to upgrade to 0.8.1, but will tell them how to set DB_CONFIG to 120,000 locks if they absolutely cannot. +# Release a patch for older versions that implements the same rules, but also increases the maximum number of locks to 537,000 +# Create a web page on bitcoin.org that will urge users to upgrade to 0.8.1, but will tell them how to set DB_CONFIG to 537,000 locks if they absolutely cannot. # Over the next 2 months, send a series of alerts to users of older versions, pointing to the web page. ===Alert system=== @@ -70,3 +72,7 @@ A double spend attack was successful, despite that both sides of the chain heard ===Resolution=== On 16 August, 2013 block 252,451 (0x0000000000000024b58eeb1134432f00497a6a860412996e7a260f47126eed07) was accepted by the main network, forking unpatched nodes off the network. + +==Copyright== + +This document is placed in the public domain. From 421577d6cf26bb21bebcb4da5f04e183d2859d0a Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 9 Feb 2016 05:12:38 +0000 Subject: [PATCH 0216/2326] Assign BIP 145: getblocktemplate Updates for Segregated Witness --- README.mediawiki | 6 ++++++ bip-segwit-gbt.mediawiki => bip-0145.mediawiki | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) rename bip-segwit-gbt.mediawiki => bip-0145.mediawiki (97%) diff --git a/README.mediawiki b/README.mediawiki index 045fd28f60..b6e8fa4991 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -463,6 +463,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Eric Lombrozo, Pieter Wuille | Standard | Draft +|- +| [[bip-0145.mediawiki|145]] +| getblocktemplate Updates for Segregated Witness +| Luke Dashjr +| Standard +| Draft |} diff --git a/bip-segwit-gbt.mediawiki b/bip-0145.mediawiki similarity index 97% rename from bip-segwit-gbt.mediawiki rename to bip-0145.mediawiki index 0ad10c28ef..9274b6cf17 100644 --- a/bip-segwit-gbt.mediawiki +++ b/bip-0145.mediawiki @@ -1,5 +1,5 @@
-  BIP: x
+  BIP: 145
   Title: getblocktemplate Updates for Segregated Witness
   Author: Luke Dashjr 
   Status: Draft
@@ -92,3 +92,7 @@ Why shouldn't the server simply add the commitment upfront in the "coinbasetxn",
 * [[bip-0022.mediawiki|BIP 22: getblocktemplate - Fundamentals]]
 * [[bip-0023.mediawiki|BIP 23: getblocktemplate - Pooled Mining]]
 * [[bip-0141.mediawiki|BIP 141: Segregated Witness (Consensus layer)]]
+
+==Copyright==
+
+This BIP is dual-licensed under the Open Publication License and BSD 2-clause license.

From ebf5c289882d7128e71a91e0a5bd90c1e8e90464 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Wed, 3 Feb 2016 21:47:48 +0000
Subject: [PATCH 0217/2326] Travis: Initial formatting tests

---
 .travis.yml           |   7 +++
 scripts/buildtable.pl | 136 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+)
 create mode 100644 .travis.yml
 create mode 100755 scripts/buildtable.pl

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..ed99de0fca
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,7 @@
+os: linux
+language: generic
+sudo: false
+script:
+    - scripts/buildtable.pl >/tmp/table.mediawiki || exit 1
+    - 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; newdiff=$(diff -s /tmp/before.diff /tmp/after.diff -u | grep '^+'); if [ -n "$newdiff" ]; then echo "$newdiff"; exit 1; fi; else echo 'Cannot build previous commit table for comparison'; fi
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
new file mode 100755
index 0000000000..568b8eb0f4
--- /dev/null
+++ b/scripts/buildtable.pl
@@ -0,0 +1,136 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+my $topbip = 9999;
+
+my %RequiredFields = (
+	BIP => undef,
+	Title => undef,
+	Author => undef,
+	Status => undef,
+	Type => undef,
+	Created => undef,
+);
+my %MayHaveMulti = (
+	Author => undef,
+	'Post-History' => undef,
+);
+my %DateField = (
+	Created => undef,
+);
+my %EmailField = (
+	Author => undef,
+	Editor => undef,
+);
+my %MiscField = (
+	'Post-History' => undef,
+);
+
+my %ValidLayer = (
+	Process => undef,
+);
+my %ValidStatus = (
+	Draft => undef,
+	Deferred => undef,
+	Accepted => "background-color: #ffffcf",
+	Rejected => "background-color: #ffcfcf",
+	Withdrawn => "background-color: #ffcfcf",
+	Final => "background-color: #cfffcf",
+	Active => "background-color: #cfffcf",
+	Replaced => "background-color: #ffcfcf",
+);
+my %ValidType = (
+	'Standards Track' => 'Standard',
+	'Informational' => undef,
+	'Process' => undef,
+);
+
+my %emails;
+
+my $bipnum = 0;
+while (++$bipnum <= $topbip) {
+	my $fn = sprintf "bip-%04d.mediawiki", $bipnum;
+	-e $fn || next;
+	open my $F, "<$fn";
+	while (<$F> !~ m[^(?:\xef\xbb\xbf)?
$]) {
+			die "No 
 in $fn" if eof $F;
+	}
+	my %found;
+	my ($title, $author, $status, $type);
+	my ($field, $val);
+	while (<$F>) {
+		m[^
$] && last; + if (m[^ ([\w-]+)\: (.*\S)$]) { + $field = $1; + $val = $2; + die "Duplicate $field field in $fn" if exists $found{$field}; + } elsif (m[^ ( +)(.*\S)$]) { + die "Continuation of non-field in $fn" unless defined $field; + die "Too many spaces in $fn" if length $1 != 2 + length $field; + die "Not allowed for multi-value in $fn" unless exists $MayHaveMulti{$field}; + $val = $2; + } else { + die "Bad line in $fn preamble"; + } + ++$found{$field}; + die "Extra spaces in $fn" if $val =~ /^\s/; + if ($field eq 'BIP') { + die "$fn claims to be BIP $val" if $val ne $bipnum; + } elsif ($field eq 'Title') { + $title = $val; + } elsif ($field eq 'Author') { + $val =~ m/^(\S[^<@>]*\S) \<([^@>]*\@[\w.]+\.\w+)\>$/ or die "Malformed Author line in $fn"; + my ($authorname, $authoremail) = ($1, $2); + $authoremail =~ s/(?<=\D)$bipnum(?=\D)//g; + $emails{$authorname}->{$authoremail} = undef; + if (defined $author) { + $author .= ", $authorname"; + } else { + $author = $authorname; + } + } elsif ($field eq 'Status') { + if ($bipnum == 38) { # HACK + $val =~ s/\s+\(.*\)$//; + } + die "Invalid status in $fn" unless exists $ValidStatus{$val}; + $status = $val; + } elsif ($field eq 'Type') { + die "Invalid type in $fn" unless exists $ValidType{$val}; + if (defined $ValidType{$val}) { + $type = $ValidType{$val}; + } else { + $type = $val; + } + } elsif ($field eq 'Layer') { # BIP 123 + die "Invalid layer $val in $fn" unless exists $ValidLayer{$val}; + } elsif (exists $DateField{$field}) { + die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/; + } elsif (exists $EmailField{$field}) { + $val =~ m/^(\S[^<@>]*\S) \<[^@>]*\@[\w.]+\.\w+\>$/ or die "Malformed $field line in $fn"; + } elsif (not exists $MiscField{$field}) { + die "Unknown field $field in $fn"; + } + } + for my $field (keys %RequiredFields) { + die "Missing $field in $fn" unless $found{$field}; + } + print "|-"; + if (defined $ValidStatus{$status}) { + print " style=\"" . $ValidStatus{$status} . "\""; + } + print "\n"; + print "| [[${fn}|${bipnum}]]\n"; + print "| ${title}\n"; + print "| ${author}\n"; + print "| ${type}\n"; + print "| ${status}\n"; + close $F; +} + +for my $author (sort keys %emails) { + my @emails = sort keys %{$emails{$author}}; + my $email_count = @emails; + next unless $email_count > 1; + warn "NOTE: $author has $email_count email addresses: @emails\n"; +} From 42777fed36a9482fc0d35733204b2fdaecec36b1 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 9 Feb 2016 05:26:28 +0000 Subject: [PATCH 0218/2326] bip-0145: Remove incomplete thought --- bip-0145.mediawiki | 2 -- 1 file changed, 2 deletions(-) diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index 9274b6cf17..b90725e05f 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -13,8 +13,6 @@ This BIP describes modifications to the getblocktemplate JSON-RPC call ([[bip-00 ==Specification== -The notion of "cost" is introduced - ===Block Template=== The template Object is revised to include these keys: From 9bb5acaec764b41c23d5d4364bc2d5bba87910d4 Mon Sep 17 00:00:00 2001 From: Thomas Kerin Date: Tue, 9 Feb 2016 18:52:38 +0000 Subject: [PATCH 0219/2326] Typo --- bip-0050.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0050.mediawiki b/bip-0050.mediawiki index 3107070014..dbec7aaf60 100644 --- a/bip-0050.mediawiki +++ b/bip-0050.mediawiki @@ -41,7 +41,7 @@ This would be an issue even if the entire network was running version 0.7.2. It ===Immediately=== '''Done''': Release a version 0.8.1, forked directly from 0.8.0, that, for the next two months has the following new rules: -# Reject blocks that would probably could cause more than 10,000 locks to be taken. +# Reject blocks that would probably cause more than 10,000 locks to be taken. # Limit the maximum block-size created to 500,000 bytes # Release a patch for older versions that implements the same rules, but also increases the maximum number of locks to 537,000 # Create a web page on bitcoin.org that will urge users to upgrade to 0.8.1, but will tell them how to set DB_CONFIG to 537,000 locks if they absolutely cannot. From 37b988a035b25b75fb0c8cf0a36030a5756cb0e2 Mon Sep 17 00:00:00 2001 From: Dan Gershony Date: Wed, 10 Feb 2016 17:23:28 +0000 Subject: [PATCH 0220/2326] Adding crypzo to BIP44 supported wallets --- bip-0044.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 6012ff52b7..64358d8c86 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -267,7 +267,7 @@ is required and a pull request to the above file should be created. * [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]]) * [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]]) * [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]]) - +* [[https://www.crypzo.com/|Crypzo]] ==Reference== * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] From 0c0ac09ccf8586335ea93cd1d0ae550862a370e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B8=BFtcDrak?= Date: Wed, 10 Feb 2016 17:25:52 +0000 Subject: [PATCH 0221/2326] Correct typo Bitcoin Core didn't exist until 0.9. --- bip-0050.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0050.mediawiki b/bip-0050.mediawiki index 3107070014..a595321657 100644 --- a/bip-0050.mediawiki +++ b/bip-0050.mediawiki @@ -30,7 +30,7 @@ With the insufficiently high BDB lock configuration, it implicitly had become a Because max-sized blocks had been successfully processed on the testnet, it did not occur to anyone that there could be blocks that were smaller but require more locks than were available. Prior to 0.7 unmodified mining nodes self-imposed a maximum block size of 500,000 bytes, which further prevented this case from being triggered. 0.7 made the target size configurable and miners had been encouraged to increase this target in the week prior to the incident. -Bitcoin Core 0.8 did not use Berkeley DB. It switched to LevelDB instead, which did not implement the same locking limits as BDB. Therefore it was able to process the forking block successfully. +Bitcoin 0.8 did not use Berkeley DB. It switched to LevelDB instead, which did not implement the same locking limits as BDB. Therefore it was able to process the forking block successfully. Note that BDB locks are also required during processing of re-organizations. Versions prior to 0.8 may be unable to process some valid re-orgs. From 7ae2624bb3258544bfed8eb623d38f14f1b30468 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 10 Feb 2016 09:43:21 -0800 Subject: [PATCH 0222/2326] - Update e-mail addresses for Justin and Matt - Add 2 new use cases and add Wallet Name to the Address Book section of optional ways to add entries to an address book --- bip-invoicerequest-extension.mediawiki | 41 ++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 80d9f1ece5..62d70470be 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -1,8 +1,8 @@
   BIP:     XXX
   Title:   Out of Band Address Exchange using Encrypted PaymentRequests
-  Authors: Matt David 
-           Justin Newton 
+  Authors: Justin Newton 
+           Matt David 
            Aaron Voisine 
            James MacWhyte 
   Status:  Draft
@@ -39,11 +39,42 @@ The motivation for this extension to BIP70 is twofold:
 
 In short we wanted to make bitcoin more human, while at the same time improving transaction privacy.
 
-==Example Use Case==
+==Example Use Cases==
 
-Let's say a Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, and there is always the risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the corresponding private key.
+# Address Book
 
-With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding an entry to one's address book could be done by scanning a QR code, sending a URI through a text message or e-mail, or searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented.
+Let's say a Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could 
+send multiple payments to known entities without having to request an address every time. Static addresses compromise 
+privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but 
+watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, 
+and there is always the risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the 
+corresponding private key.
+
+With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding 
+an entry to one's address book could be done by using a Wallet Name, scanning a QR code, sending a URI through a text message or e-mail, or 
+searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background 
+to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, 
+or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented.
+
+# Individual Permissioned Address Release
+
+Let's say a Bitcoin wallet developer would like to offer the ability for a user to individually release address information 
+to a new potential sending party only if they can confirm the identity of the potential sending party. BIP70 specifies that 
+the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity 
+information of the potential receiving party.
+
+With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity 
+information about the potential sending party via an included certificate. This allows the potential receiving party to 
+make a more informed decision regarding to whom they are releasing payment and identity information.
+
+# Using Store & Forward Servers
+
+Let's say a Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address 
+exchange. This is a common case for mobile and offline wallets.
+
+With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward 
+service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address 
+or payment information, only delete encrypted messages.
 
 ==Definitions==
 {| class="wikitable"

From 6cf43331706934e6e5c97e4a57e0f6be8eb0899e Mon Sep 17 00:00:00 2001
From: Gavin Andresen 
Date: Thu, 28 Jan 2016 10:53:43 -0500
Subject: [PATCH 0223/2326] BIP102 variation for a 2mb block size bump

---
 README.mediawiki   |  6 ++++
 bip-0109.mediawiki | 78 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 bip-0109.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index 3e9215de35..13012595ba 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -374,6 +374,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0109.mediawiki|109]]
+| 2MB size limit with sigop and sighash limits
+| Gavin Andresen
+| Standard
+| Draft
+|-
 | [[bip-0111.mediawiki|111]]
 | NODE_BLOOM service bit
 | Matt Corallo, Peter Todd
diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki
new file mode 100644
index 0000000000..e7cf9e731b
--- /dev/null
+++ b/bip-0109.mediawiki
@@ -0,0 +1,78 @@
+
+  BIP: 109
+  Title: Block size increase to 2MB
+  Author: Gavin Andresen 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-01-28
+
+ +==Abstract== + +One-time increase in total amount of transaction data permitted in a block from 1MB to 2MB, with limits on signature operations and hashing. + +==Motivation== + +# Continue current economic policy. +# Exercise hard fork network upgrade. +# Mitigate potential CPU exhaustion attacks + +==Specification== + +=== MAX_BLOCK_SIZE increased to 2,000,000 bytes === + +The maximum number of bytes in a canonically serialized block shall be increased from +1,000,000 bytes to 2,000,000 bytes. + +=== Switch to accurately-counted sigop limit of 20,000 per block === + +The existing MAX_SIGOPS limit of 20,000 signature operations per block shall be retained, +but only ECDSA verifications actually performed to validate the block shall be counted. + +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. +* 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 === + +The amount of data hashed to compute signature hashes is limited to 1,300,000,000 bytes per block. The same rules for counting are used as for counting signature operations. + +=== Activation: 75% hashpower support trigger, followed by 28-day 'grace period' === + +Solo miners or mining pool operators express their support for this BIP by setting the fourth-highest-bit in the block's 32-bit version number (0x10000000 in hex). The first block with that bit set, a timestamp less than or equal to the expiration time, and with at least 750 out of 1000 blocks preceding it (with heights H-1000..H-1) with that bit set, shall define the beginning of a grace period. Blocks with timestamps greater than or equal to the triggering block's timestamp plus 28 days (60*60*24*28 seconds) shall be subject to the new limits. + +As always, miners are expected to use their best judgement for what is best for the entire Bitcoin ecosystem when making decisions about what consensus-level changes to support. + +=== Expiration: 1-Jan-2018 === + +If this BIP is not triggered before 1-Jan-2018 00:00:00 GMT it should be considered withdrawn. + +Miners that support this BIP should set bit 0x10000000 in the block version until 1-Jan-2018. After that date, that bit can be safely re-used for future consensus rule upgrades. + +==Backward compatibility== + +Fully validating older clients are not compatible with this change. +The first block exceeding the old limits on block size or inaccurately counted signature operations will partition older clients off the new network. + +SPV (simple payment validation) wallets are compatible with this change. + +==Rationale== + +In the short term, an increase is needed to handle increasing transaction volume. + +The limits on signature operations and amount of signature hashing done prevent possible CPU exhaustion attacks by "rogue miners" producing very expensive-to-validate two megabyte blocks. The signature hashing limit is chosen to be impossible to reach with any non-attack transaction or block, to minimize the impact on existing mining or wallet software. + +The choices of constants for the deployment scheme were motivated by prior experience with upgrades to the Bitcoin consensus rules: + +* 0x10000000 was chosen to be compatible with the BIP 9 proposal for parallel deployment of soft forks +* 75% was chosen instead of 95% to minimize the opportunity for a single large mining pool or miner to be able to veto an increase, either because of ideological opposition or threat of violence or extortion. +* A four-week grace period after the voting period was chosen as a balance between giving people sufficient time to upgrade and keeping people's attention on the urgent need to upgrade. + +==Implementation== + +https://github.com/gavinandresen/bitcoin-git/tree/two_mb_bump + +See also http://gavinandresen.ninja/a-guided-tour-of-the-2mb-fork From c469bd930b3caca250f885785375474aacc55759 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Thu, 11 Feb 2016 09:27:01 -0500 Subject: [PATCH 0224/2326] Add copyright --- bip-0109.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki index e7cf9e731b..5e67e395de 100644 --- a/bip-0109.mediawiki +++ b/bip-0109.mediawiki @@ -76,3 +76,7 @@ The choices of constants for the deployment scheme were motivated by prior exper https://github.com/gavinandresen/bitcoin-git/tree/two_mb_bump See also http://gavinandresen.ninja/a-guided-tour-of-the-2mb-fork + +==Copyright== + +This work is placed in the public domain. From 0e7466abc281aaf9b6f620b0c6004f8fae592df5 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Thu, 11 Feb 2016 11:37:13 -0500 Subject: [PATCH 0225/2326] Tweaked BIP 109 title --- README.mediawiki | 2 +- bip-0109.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 13012595ba..5a01d4d27f 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -375,7 +375,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Draft |- | [[bip-0109.mediawiki|109]] -| 2MB size limit with sigop and sighash limits +| Two million byte size limit with sigop and sighash limits | Gavin Andresen | Standard | Draft diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki index 5e67e395de..667ef5f53a 100644 --- a/bip-0109.mediawiki +++ b/bip-0109.mediawiki @@ -1,6 +1,6 @@
   BIP: 109
-  Title: Block size increase to 2MB
+  Title: Two million byte size limit with sigop and sighash limits
   Author: Gavin Andresen 
   Status: Draft
   Type: Standards Track

From 0c956f8f64288b5a1a7c4c7c7d9f2beac74bb7cc Mon Sep 17 00:00:00 2001
From: Gavin Andresen 
Date: Thu, 11 Feb 2016 15:25:06 -0500
Subject: [PATCH 0226/2326] Withdraw BIP 101 proposal

---
 README.mediawiki   | 2 +-
 bip-0101.mediawiki | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index 3e9215de35..d723f007ea 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -342,7 +342,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Increase maximum block size
 | Gavin Andresen
 | Standard
-| Draft
+| Withdrawn
 |-
 | [[bip-0102.mediawiki|102]]
 | Block size increase to 2MB
diff --git a/bip-0101.mediawiki b/bip-0101.mediawiki
index a76db0f949..cc8cfd5f9e 100644
--- a/bip-0101.mediawiki
+++ b/bip-0101.mediawiki
@@ -2,7 +2,7 @@
   BIP: 101
   Title: Increase maximum block size
   Author: Gavin Andresen 
-  Status: Draft
+  Status: Withdrawn
   Type: Standards Track
   Created: 2015-06-22
 
From 0e48a2466c18de67fa0e1c80facb9b7cdf598f3e Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Fri, 12 Feb 2016 04:10:24 +0000 Subject: [PATCH 0227/2326] Update BIP68 implementation to match spec --- bip-0068.mediawiki | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index b7bb0db1f1..fd17ea5d60 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -64,21 +64,21 @@ enum { /* Setting nSequence to this value for every input in a transaction * disables nLockTime. */ static const uint32_t SEQUENCE_FINAL = 0xffffffff; - + +/* Below flags apply in the context of BIP 68*/ /* If this flag set, CTxIn::nSequence is NOT interpreted as a - * relative lock-time. Setting the most significant bit of a - * sequence number disabled relative lock-time. */ + * relative lock-time. */ static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31); - + /* If CTxIn::nSequence encodes a relative lock-time and this flag * is set, the relative lock-time has units of 512 seconds, * otherwise it specifies blocks with a granularity of 1. */ static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22); - + /* If CTxIn::nSequence encodes a relative lock-time, this mask is * applied to extract that lock-time from the sequence field. */ static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff; - + /* In order to use the same number of bits to encode roughly the * same wall-clock duration, and because blocks are naturally * limited to occur every 600s on average, the minimum granularity @@ -87,7 +87,7 @@ static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff; * multiplying by 512 = 2^9, or equivalently shifting up by * 9 bits. */ static const int SEQUENCE_LOCKTIME_GRANULARITY = 9; - + /** * Calculates the block height and previous block's median time past at * which the transaction will be considered final in the context of BIP 68. @@ -174,16 +174,17 @@ bool SequenceLocks(const CTransaction &tx, int flags, std::vector* prevHeig bool CheckSequenceLocks(const CTransaction &tx, int flags) { AssertLockHeld(cs_main); + AssertLockHeld(mempool.cs); CBlockIndex* tip = chainActive.Tip(); CBlockIndex index; index.pprev = tip; // CheckSequenceLocks() uses chainActive.Height()+1 to evaluate // height based locks because when SequenceLocks() is called within - // CBlock::AcceptBlock(), the height of the block *being* - // evaluated is what is used. Thus if we want to know if a - // transaction can be part of the *next* block, we need to call - // SequenceLocks() with one more than chainActive.Height(). + // ConnectBlock(), the height of the block *being* + // evaluated is what is used. + // Thus if we want to know if a transaction can be part of the + // *next* block, we need to use one more than chainActive.Height() index.nHeight = tip->nHeight + 1; // pcoinsTip contains the UTXO set for chainActive.Tip() From e51082150c8948aa08a5ebac998c581a81d1f0e4 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 12 Feb 2016 09:00:21 -0600 Subject: [PATCH 0228/2326] BIP1: fix typo in old changelog line --- bip-0001.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 4f91a3944a..df4e3cd27d 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -175,6 +175,6 @@ This document was derived heavily from Python's PEP-0001. In many places text wa ==Changelog== -10 Oct 2015 - Added clarifications about sumission process and BIP number assignment. +10 Oct 2015 - Added clarifications about submission process and BIP number assignment. 01 Jan 2016 - Clarified early stages of BIP idea championing, collecting community feedback, etc. From aa7719688c535803f47a860b1f400a91adeefcd4 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 12 Feb 2016 09:04:11 -0600 Subject: [PATCH 0229/2326] BIP1: formatfix for auxiliary file subsection --- bip-0001.mediawiki | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index df4e3cd27d..44fbe8b293 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -85,9 +85,9 @@ Each BIP should have the following parts: ==BIP Formats and Templates== -BIPs should be written in mediawiki or markdown format. Image files should be included in a subdirectory for that BIP. +BIPs should be written in mediawiki or markdown format. -==BIP Header Preamble== +===BIP Header Preamble=== Each BIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required. @@ -129,9 +129,10 @@ The Created header records the date that the BIP was assigned a number, while Po BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on. BIPs may also have a Superseded-By header indicating that a BIP has been rendered obsolete by a later document; the value is the number of the BIP that replaces the current document. The newer BIP must have a Replaces header containing the number of the BIP that it rendered obsolete. -Auxiliary Files -BIPs may include auxiliary files such as diagrams. Such files must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). +===Auxiliary Files=== + +BIPs may include auxiliary files such as diagrams. Image files should be included in a subdirectory for that BIP. Auxiliary files must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). ==Transferring BIP Ownership== From cde1e50d9d3cd522463216889485fe5324a4df3d Mon Sep 17 00:00:00 2001 From: paveljanik Date: Fri, 12 Feb 2016 18:52:13 +0100 Subject: [PATCH 0230/2326] ISM: Proper case --- bip-0112.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 9c2d199ac1..71fbc2a132 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -350,7 +350,7 @@ https://github.com/bitcoin/bitcoin/pull/6564 ==Deployment== -This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). Exact details TDB. +This BIP is to be deployed by either version-bits BIP9 or by IsSuperMajority(). Exact details TDB. It is recommended to deploy BIP68 and BIP113 at the same time as this BIP. From 545017feb4bcb9ad00c435c528643a483d6ffa16 Mon Sep 17 00:00:00 2001 From: paveljanik Date: Fri, 12 Feb 2016 19:01:52 +0100 Subject: [PATCH 0231/2326] PR 6564 -> 7524 New PR number. --- bip-0112.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 71fbc2a132..cb9f2066f0 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -345,7 +345,7 @@ semantics and detailed rationale for those semantics. A reference implementation is provided by the following pull request: -https://github.com/bitcoin/bitcoin/pull/6564 +https://github.com/bitcoin/bitcoin/pull/7524 ==Deployment== From 92586a1e3891bffd58046ea3eaa2fc682a82ecf4 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Fri, 12 Feb 2016 17:33:05 -0500 Subject: [PATCH 0232/2326] Set background to withdrawn color --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index d723f007ea..32333af8eb 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -337,7 +337,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Jorge Timón | Informational | Draft -|- +|- style="background-color: #ffcfcf" | [[bip-0101.mediawiki|101]] | Increase maximum block size | Gavin Andresen From a712fe5e22eb05968a5862fe4efebed9fb0c5ce7 Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Sat, 13 Feb 2016 12:14:03 +0000 Subject: [PATCH 0233/2326] Update BIP112 reference example --- bip-0112.mediawiki | 204 ++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 106 deletions(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index cb9f2066f0..336f9fc331 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -229,117 +229,109 @@ The 2-way pegged sidechain requires a new REORGPROOFVERIFY opcode, the semantics Refer to the reference implementation, reproduced below, for the precise semantics and detailed rationale for those semantics. - - /* If this flag set, CTxIn::nSequence is NOT interpreted as a - * relative lock-time. */ - static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31); - - /* If CTxIn::nSequence encodes a relative lock-time and this flag - * is set, the relative lock-time has units of 512 seconds, - * otherwise it specifies blocks with a granularity of 1. */ - static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22); - - /* If CTxIn::nSequence encodes a relative lock-time, this mask is - * applied to extract that lock-time from the sequence field. */ - static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff; +
+/* Below flags apply in the context of BIP 68 */
+/* If this flag set, CTxIn::nSequence is NOT interpreted as a
+ * relative lock-time. */
+static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31);
+
+/* If CTxIn::nSequence encodes a relative lock-time and this flag
+ * is set, the relative lock-time has units of 512 seconds,
+ * otherwise it specifies blocks with a granularity of 1. */
+static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
+
+/* If CTxIn::nSequence encodes a relative lock-time, this mask is
+ * applied to extract that lock-time from the sequence field. */
+static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
    
-    case OP_NOP3:
-    {
-        if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) {
-            // not enabled; treat as a NOP3
-            if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) {
-                return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS);
-            }
-            break;
+case OP_NOP3:
+{
+    if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) {
+        // not enabled; treat as a NOP3
+        if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) {
+            return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS);
         }
-    
-        if (stack.size() < 1)
-            return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
-     
-        // Note that elsewhere numeric opcodes are limited to
-        // operands in the range -2**31+1 to 2**31-1, however it is
-        // legal for opcodes to produce results exceeding that
-        // range. This limitation is implemented by CScriptNum's
-        // default 4-byte limit.
-        //
-        // Thus as a special case we tell CScriptNum to accept up
-        // to 5-byte bignums, which are good until 2**39-1, well
-        // beyond the 2**32-1 limit of the nSequence field itself.
-        const CScriptNum nSequence(stacktop(-1), fRequireMinimal, 5);
-    
-        // In the rare event that the argument may be < 0 due to
-        // some arithmetic being done first, you can always use
-        // 0 MAX CHECKSEQUENCEVERIFY.
-        if (nSequence < 0)
-            return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);
-    
-        // To provide for future soft-fork extensibility, if the
-        // operand has the disabled lock-time flag set,
-        // CHECKSEQUENCEVERIFY behaves as a NOP.
-        if ((nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) != 0)
-            break;
-    
-        // Compare the specified sequence number with the input.
-        if (!checker.CheckSequence(nSequence))
-            return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);
-    
         break;
     }
-    
-    bool TransactionSignatureChecker::CheckSequence(const CScriptNum& nSequence) const
-    {
-        // Relative lock times are supported by comparing the passed
-        // in operand to the sequence number of the input.
-        const int64_t txToSequence = (int64_t)txTo->vin[nIn].nSequence;
-    
-        // Fail if the transaction's version number is not set high
-        // enough to trigger BIP 68 rules.
-        if (static_cast(txTo->nVersion) < 2)
-            return false;
-    
-        // Sequence numbers with their most significant bit set are not
-        // defined by BIP68. Testing that the transaction's sequence
-        // number do not have this bit set prevents using this property
-        // to get around a CHECKSEQUENCEVERIFY check.
-        if (txToSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG)
-            return false;
-    
-        // Mask off any bits that do not have BIP68 consensus-enforced meaning
-        // before doing the integer comparisons of ::VerifySequence.
-        const uint32_t nLockTimeMask = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG
-                                     | CTxIn::SEQUENCE_LOCKTIME_MASK;
-        
-        if (!::VerifySequence(txToSequence & nLockTimeMask,
-                              CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG,
-                              nSequence & nLockTimeMask))
-            return false;
-    
-        return true;
-    }
-    
-    static bool VerifySequence(int64_t txToSequence, int64_t nThreshold, const CScriptNum& nSequence)
-    {
-        // There are two kinds of nLockTime: lock-by-blockheight
-        // and lock-by-blocktime, distinguished by whether
-        // nSequence < nThreshold (CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG).
-        //
-        // We want to compare apples to apples, so fail the script
-        // unless the type of nSequence being tested is the same as
-        // the nSequence in the transaction.
-        if (!(
-            (txToSequence <  nThreshold && nSequence <  nThreshold) ||
-            (txToSequence >= nThreshold && nSequence >= nThreshold)
-        ))
-            return false;
-    
-        // Now that we know we're comparing apples-to-apples, the
-        // comparison is a simple numeric one.
-        if (nSequence > txToSequence)
-            return false;
-    
-        return true;
-    }
 
+    if (stack.size() < 1)
+       return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
+
+    // Note that elsewhere numeric opcodes are limited to
+    // operands in the range -2**31+1 to 2**31-1, however it is
+    // legal for opcodes to produce results exceeding that
+    // range. This limitation is implemented by CScriptNum's
+    // default 4-byte limit.
+    //
+    // Thus as a special case we tell CScriptNum to accept up
+    // to 5-byte bignums, which are good until 2**39-1, well
+    // beyond the 2**32-1 limit of the nSequence field itself.
+    const CScriptNum nSequence(stacktop(-1), fRequireMinimal, 5);
+
+    // In the rare event that the argument may be < 0 due to
+    // some arithmetic being done first, you can always use
+    // 0 MAX CHECKSEQUENCEVERIFY.
+    if (nSequence < 0)
+        return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);
+
+    // To provide for future soft-fork extensibility, if the
+    // operand has the disabled lock-time flag set,
+    // CHECKSEQUENCEVERIFY behaves as a NOP.
+    if ((nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) != 0)
+        break;
+
+    // Compare the specified sequence number with the input.
+    if (!checker.CheckSequence(nSequence))
+        return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);
+
+    break;
+}
+    
+bool TransactionSignatureChecker::CheckSequence(const CScriptNum& nSequence) const
+{
+    // Relative lock times are supported by comparing the passed
+    // in operand to the sequence number of the input.
+    const int64_t txToSequence = (int64_t)txTo->vin[nIn].nSequence;
+
+    // Fail if the transaction's version number is not set high
+    // enough to trigger BIP 68 rules.
+    if (static_cast(txTo->nVersion) < 2)
+        return false;
+
+    // Sequence numbers with their most significant bit set are not
+    // consensus constrained. Testing that the transaction's sequence
+    // number do not have this bit set prevents using this property
+    // to get around a CHECKSEQUENCEVERIFY check.
+    if (txToSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG)
+        return false;
+
+    // Mask off any bits that do not have consensus-enforced meaning
+    // before doing the integer comparisons
+    const uint32_t nLockTimeMask = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG | CTxIn::SEQUENCE_LOCKTIME_MASK;
+    const int64_t txToSequenceMasked = txToSequence & nLockTimeMask;
+    const CScriptNum nSequenceMasked = nSequence & nLockTimeMask;
+
+    // There are two kinds of nSequence: lock-by-blockheight
+    // and lock-by-blocktime, distinguished by whether
+    // nSequenceMasked < CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.
+    //
+    // We want to compare apples to apples, so fail the script
+    // unless the type of nSequenceMasked being tested is the same as
+    // the nSequenceMasked in the transaction.
+    if (!(
+        (txToSequenceMasked <  CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked <  CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) ||
+        (txToSequenceMasked >= CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked >= CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG)
+    ))
+        return false;
+
+    // Now that we know we're comparing apples-to-apples, the
+    // comparison is a simple numeric one.
+    if (nSequenceMasked > txToSequenceMasked)
+        return false;
+
+    return true;
+}
+
==Reference Implementation== From 7f12be52d34e16c4acfdec59ec84b136a800af44 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 13 Feb 2016 22:56:50 +0100 Subject: [PATCH 0234/2326] [BIP 2] License header in preamble --- bip-0002.mediawiki | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 571361c1fe..e6477e6990 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -133,31 +133,39 @@ Will BIP comments be censored or limited to particular participants/"experts"? ==BIP licensing== -New BIPs may be accepted with the following licenses: - ===Specification=== +New BIPs may be accepted with the following licenses. Each new BIP must identify at least one acceptable license in its preamble. The License header in the preamble must be placed after the Created header. Each license must be referenced by their respecitve abbreviation given below. + +For example, a preamble might include the following License header: + + License: PD + CC-0 + MIT + ====Recommended licenses==== -* [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] -* [https://opensource.org/licenses/BSD-3-Clause OSI-approved BSD 3-clause license] -* [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] -* [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] +* BSD-2-Clause: [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] +* BSD-3-Clause: [https://opensource.org/licenses/BSD-3-Clause OSI-approved BSD 3-clause license] +* CC-0: [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] +* GNU-ALL-PERMISSIVE: [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] In addition, it is recommended that literal code included in the BIP be dual-licensed under the same license terms as the project it modifies. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms as well as one of the above with the rest of the BIP text. ====Not recommended, but acceptable licenses==== -* [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] -* [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0] -* [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International] -* [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International] -* [https://opensource.org/licenses/MIT Expat/MIT/X11 license] -* [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer] -* [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License] -* [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer] -* [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] -* [http://opencontent.org/openpub/ Open Publication License, version 1.0] +* ALv2: [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] +* BSL-1.0 [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0] +* CC-BY-4.0 [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International] +* CC-BY-SA-4.0 [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International] +* MIT [https://opensource.org/licenses/MIT Expat/MIT/X11 license] +* AGPL-3.0 [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer] +* FDL-1.3 [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License] +* GPL-2.0 [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer] +* LGPL-2.1 [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] +* OPL-1.0 [http://opencontent.org/openpub/ Open Publication License, version 1.0] + +Additionally, PD is used to express that the work is placed in the public domain. ===Rationale=== From 62d19677c8d39ef82c37f0f11f6d29a672f0489e Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 15 Feb 2016 17:19:37 -0800 Subject: [PATCH 0235/2326] - Add encrypted invoicerequest requirement - Change ReturnPaymentRequest message name to EncryptedPaymentRequest - Add Payment Request (with Store & Forward server) use-case documentation - Add initial public key retrieval ideas --- bip-invoicerequest-extension.mediawiki | 98 +++++++++++++++++++------- 1 file changed, 72 insertions(+), 26 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 62d70470be..b496e70823 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -85,8 +85,28 @@ or payment information, only delete encrypted messages. ==New Messages== +===EncryptedInvoiceRequest=== +The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret. +
+message EncryptedInvoiceRequest {
+    required bytes encrypted_invoice_request = 1;           // Encrypted Serialized InvoiceRequest
+    required bytes sender_public_key = 2;                   // Sender's EC Public Key
+    required bytes invoice_request_hash = 3;                // SHA256 of Serialized InvoiceRequest
+}
+
+ +{| class="wikitable" +! Field Name !! Description +|- +| encrypted_invoice_request || AES-256-CBC Encrypted Serialized InvoiceRequest +|- +| sender_public_key || Sender's EC Public Key +|- +| invoice_request_hash || SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest +|} + ===InvoiceRequest=== -The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a ReturnPaymentRequest. +The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a EncryptedPaymentRequest.
 message InvoiceRequest {
@@ -95,7 +115,7 @@ message InvoiceRequest {
         optional uint64 amount = 3 [default = 0];           // amount is integer-number-of-satoshis
         optional string pki_type = 4 [default = "none"];    // none / x509+sha256
         optional bytes  pki_data = 5;                       // Depends on pki_type
-        optional string notification_url = 6;               // URL to notify on ReturnPaymentRequest ready
+        optional string notification_url = 6;               // URL to notify on EncryptedPaymentRequest ready
         optional bytes  signature = 7;                      // PKI-dependent signature
 }
 
@@ -113,18 +133,18 @@ message InvoiceRequest { |- | pki_data || Depends on pki_type |- -| notification_url || Secure (usually HTTPS) location where a ReturnPaymentRequest (see below) SHOULD be sent when ready +| notification_url || Secure (usually HTTPS) location where a EncryptedPaymentRequest (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} -===ReturnPaymentRequest=== +===EncryptedPaymentRequest=== -The ReturnPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest. +The EncryptedPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest.
-message ReturnPaymentRequest {
-        required bytes encrypted_payment_request = 1;      // Encrypted, Serialized PaymentRequest
+message EncryptedPaymentRequest {
+        required bytes encrypted_payment_request = 1;      // Encrypted Serialized PaymentRequest
         required bytes receiver_public_key = 2;            // Receiver's EC Public Key
         required bytes payment_request_hash = 3;           // SHA256 of Serialized PaymentRequest
 }
@@ -139,18 +159,21 @@ message ReturnPaymentRequest {
 | payment_request_hash      || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest
 |}
 
-==InvoiceRequest / ReturnPaymentRequest Process==
+==Encrypted InvoiceRequest / PaymentRequest Process==
 
 ===Overview===
 
 # Sender creates InvoiceRequest
-# Sender transmits InvoiceRequest to Receiver
+# Sender encrypts the InvoiceRequest
+# Sender creates EncryptedInvoiceRequest (containing an encrypted InvoiceRequest)
+# Sender transmits EncryptedInvoiceRequest to Receiver
+# Receiver decrypts and validates EncryptedPaymentRequest
 # Receiver validates InvoiceRequest
 # Receiver creates PaymentRequest
 # Receiver encrypts the PaymentRequest
-# Receiver creates ReturnPaymentRequest (containing an encrypted PaymentRequest)
-# Receiver transmits ReturnPaymentRequest to Sender
-# Sender validates ReturnPaymentRequest
+# Receiver creates EncryptedPaymentRequest (containing an encrypted PaymentRequest)
+# Receiver transmits EncryptedPaymentRequest to Sender
+# Sender validates EncryptedPaymentRequest
 # Sender decrypts and validates encrypted PaymentRequest
 
 This overview flow is illustrated below:
@@ -159,15 +182,15 @@ This overview flow is illustrated below:
 
 ===Message Interaction Details===
 
-====InvoiceRequest====
-Sender MUST transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting InvoiceRequest 
-messages MUST set appropriate Content-Type headers as specified here:
-
Content-Type: application/bitcoin-invoicerequest
+===EncryptedInvoiceRequest=== +Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP, Sending transmitting +EncryptedInvoiceRequest message MUST set appropriate Content-Type headers as specified here: +
Content-Type: application/bitcoin-encrypted-invoicerequest
-====ReturnPaymentRequest==== -Receiver MUST transmit ReturnPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -ReturnPaymentRequest messages MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-returnpaymentrequest
+====EncryptedPaymentRequest==== +Receiver MUST transmit EncryptedPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting +EncryptedPaymentRequest messages MUST set appropriate Content-Type headers as specified here: +
Content-Type: application/bitcoin-encrypted-paymentrequest
====Message or Communication Errors==== An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This @@ -178,7 +201,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * sender_public_key MUST be set to the public key of an EC keypair * nonce MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example) * Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD be rejected with HTTP status code 406. -* Set notification_url to URL that the Receiver will submit completed ReturnPaymentRequest to +* Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: ** Set pki_type to "x509+sha256" @@ -186,6 +209,14 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. ** Sign InvoiceRequest with signature = "" using the X509 Certificate's private key ** Set signature value to the computed signature +===EncryptedInvoiceRequest Message Creation=== +* Create an EncryptedInvoiceRequest +* Retrieve endpoint public key to use in ECDH Point Generation as specified in Initial Public Key Retrieval for InvoiceRequest Encryption (see below) +* sender_public_key MUST be set to the public key of an EC keypair +* invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) +* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see blow) +* encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest + ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key * The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. @@ -193,14 +224,14 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID -===ReturnPaymentRequest Message Creation and PaymentRequest Encryption=== +===EncryptedPaymentRequest Message Creation and PaymentRequest Encryption=== * Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) -* Create ReturnPaymentRequest message +* Create EncryptedPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) -===ReturnPaymentRequest Validation and Decryption=== +===EncryptedPaymentRequest Validation and Decryption=== * Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest @@ -214,6 +245,21 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) +===Initial Public Key Retrieval for InvoiceRequest Encryption=== +Initial public key retrieval for InvoiceRequest encryption can be done in a number of ways including, but not limited to, the following: +* Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +* Key Server lookup - Key Server looked based on keyserver identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +* QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] + +==Payment Messages with a Store & Foward Server== +[https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Payment Payment] messages are used in the same way +with the following exception: + +When a Store & Forward server is in use during the Payment Protocol exchange, a Payment message generated as the result of a +received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the Payment message is appropriately correlated +to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD BE done in order to decrease spam requests. The accepted +Payment message IS NOT validated as the Store & Forward server does not have access to the original Payment Request. + ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: @@ -230,11 +276,11 @@ The following flowchart is borrowed from BIP70 and expanded upon in order to vis ==Mobile to Mobile Example== The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use -of an InvoiceRequest, a Store & Forward server, and a ReturnPaymentRequest. +of an InvoiceRequest, a Store & Forward server, and a EncryptedPaymentRequest. -==Reference== +==References== * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] From db2bf0218051f331ecc10688816990bcd68ef341 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 15 Feb 2016 17:29:33 -0800 Subject: [PATCH 0236/2326] - Updated Mobile-to-Mobile image to visually include Payment and PaymentACK messages with Store & Forward server --- bip-ir/mobile-sf-bip70-extension.png | Bin 89414 -> 105862 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bip-ir/mobile-sf-bip70-extension.png b/bip-ir/mobile-sf-bip70-extension.png index daf093a004b104f085d632a66424367ba5a66783..5de96d553b88e29b1817f89b0ae81a8f99d594b5 100644 GIT binary patch literal 105862 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
Content-Type: application/bitcoin-encrypted-invoicerequest
@@ -214,7 +214,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * Retrieve endpoint public key to use in ECDH Point Generation as specified in Initial Public Key Retrieval for InvoiceRequest Encryption (see below) * sender_public_key MUST be set to the public key of an EC keypair * invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) -* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see blow) +* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest ===InvoiceRequest Validation=== @@ -247,8 +247,8 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. ===Initial Public Key Retrieval for InvoiceRequest Encryption=== Initial public key retrieval for InvoiceRequest encryption can be done in a number of ways including, but not limited to, the following: -* Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -* Key Server lookup - Key Server looked based on keyserver identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +* Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +* Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] * QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] ==Payment Messages with a Store & Foward Server== @@ -258,7 +258,7 @@ with the following exception: When a Store & Forward server is in use during the Payment Protocol exchange, a Payment message generated as the result of a received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the Payment message is appropriately correlated to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD BE done in order to decrease spam requests. The accepted -Payment message IS NOT validated as the Store & Forward server does not have access to the original Payment Request. +Payment message IS NOT validated as the Store & Forward server does not have access to the original PaymentRequest. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: From 961c51c3b2fd26cdd78239012f3dbbb78a05e5a2 Mon Sep 17 00:00:00 2001 From: Justin Newton Date: Tue, 16 Feb 2016 10:51:40 -0800 Subject: [PATCH 0238/2326] editied Abstract added "the identity of" to the first bullet of the abstract. --- bip-invoicerequest-extension.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 62d70470be..16624ac833 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -14,7 +14,7 @@ This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol. -# It allows the requestor of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know who they are transacting with. +# It allows the requestor of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. # It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details. From 4e6ff9f14995a61ac6a2312d713c6d7e1ed40087 Mon Sep 17 00:00:00 2001 From: Justin Newton Date: Tue, 16 Feb 2016 10:52:47 -0800 Subject: [PATCH 0239/2326] changed justin's email back to @netkic.om changed Justin's email back to @netki.com --- bip-invoicerequest-extension.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 62d70470be..e6d80dd9a4 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -1,7 +1,7 @@

rM> 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̳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 Date: Mon, 15 Feb 2016 17:35:23 -0800 Subject: [PATCH 0237/2326] - Fixed typos and added a bit more explanation for the Wallet Name public key retrieval example --- bip-invoicerequest-extension.mediawiki | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index b496e70823..6594fd27c8 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -133,7 +133,7 @@ message InvoiceRequest { |- | pki_data || Depends on pki_type |- -| notification_url || Secure (usually HTTPS) location where a EncryptedPaymentRequest (see below) SHOULD be sent when ready +| notification_url || Secure (usually HTTPS) location where an EncryptedPaymentRequest (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} @@ -183,7 +183,7 @@ This overview flow is illustrated below: ===Message Interaction Details=== ===EncryptedInvoiceRequest=== -Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP, Sending transmitting +Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP, Sender transmitting EncryptedInvoiceRequest message MUST set appropriate Content-Type headers as specified here:

   BIP:     XXX
   Title:   Out of Band Address Exchange using Encrypted PaymentRequests
-  Authors: Justin Newton 
+  Authors: Justin Newton 
            Matt David 
            Aaron Voisine 
            James MacWhyte 

From d9bf987b99aee368769cce289e3c158ac2c7386d Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Tue, 16 Feb 2016 10:56:08 -0800
Subject: [PATCH 0240/2326] Add indents for point 2 of the Motivation section

---
 bip-invoicerequest-extension.mediawiki | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index 6594fd27c8..ff033d840b 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -31,17 +31,17 @@ The motivation for this extension to BIP70 is twofold:
 
 # Allow a sender of funds the option of sharing their identity with the receiver.  This information could then be used to:
 
-* Make bitcoin logs more human readable 
-* Give the user the ability to decide who to release payment details to 
-* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements 
-* Allow for an open standards based way to meet regulatory requirements
-* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience
+#* Make bitcoin logs more human readable 
+#* Give the user the ability to decide who to release payment details to 
+#* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements 
+#* Allow for an open standards based way to meet regulatory requirements
+#* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience
 
 In short we wanted to make bitcoin more human, while at the same time improving transaction privacy.
 
 ==Example Use Cases==
 
-# Address Book
+1. Address Book
 
 Let's say a Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could 
 send multiple payments to known entities without having to request an address every time. Static addresses compromise 
@@ -56,7 +56,7 @@ searching a public repository. When the user wishes to make a payment, their wal
 to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, 
 or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented.
 
-# Individual Permissioned Address Release
+2. Individual Permissioned Address Release
 
 Let's say a Bitcoin wallet developer would like to offer the ability for a user to individually release address information 
 to a new potential sending party only if they can confirm the identity of the potential sending party. BIP70 specifies that 
@@ -67,7 +67,7 @@ With this BIP, Bitcoin wallets could prompt a wallet user to release payment inf
 information about the potential sending party via an included certificate. This allows the potential receiving party to 
 make a more informed decision regarding to whom they are releasing payment and identity information.
 
-# Using Store & Forward Servers
+3. Using Store & Forward Servers
 
 Let's say a Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address 
 exchange. This is a common case for mobile and offline wallets.

From 79cc9bdaa6ce42eab9a311236e7bbcfe352b0a29 Mon Sep 17 00:00:00 2001
From: Justin Newton 
Date: Tue, 16 Feb 2016 13:19:16 -0800
Subject: [PATCH 0241/2326] Update to add 3rd motivation

Adding allow for store and forward servers as a way to server payment protocol
---
 bip-invoicerequest-extension.mediawiki | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index 7adbfc340f..95144ddd29 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -25,9 +25,11 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S
 
 The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today.
 
-The motivation for this extension to BIP70 is twofold:
+The motivation for this extension to BIP70 is threefold:
 
-# Ensure that the payment details can only be seen by the participants in the transaction, and not any third party.  By encrypting at the application layer we protect the payment request from being intercepted by a man in the middle, and allow mobile and desktop wallets to use a server to act as a “store and forward server” or “meet point” for serving Payment Requests without having to worry the server operator can spy on their transactions.
+# Ensure that the payment details can only be seen by the participants in the transaction, and not any third party.  
+
+# Enhance the Paument Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests.
 
 # Allow a sender of funds the option of sharing their identity with the receiver.  This information could then be used to:
 

From f41e886f258961d65b696fbd9be01cb1515ca8c6 Mon Sep 17 00:00:00 2001
From: Justin Newton 
Date: Tue, 16 Feb 2016 13:41:56 -0800
Subject: [PATCH 0242/2326] Request Matt to update use case 3

Asking matt to update use case 3 to include other mods made for store and forward servers.
---
 bip-invoicerequest-extension.mediawiki | 1 +
 1 file changed, 1 insertion(+)

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index 7adbfc340f..fd9c03235c 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -75,6 +75,7 @@ exchange. This is a common case for mobile and offline wallets.
 With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward 
 service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address 
 or payment information, only delete encrypted messages.
+[MATT PLEASE INCLUDE TEXT HERE REGARDING OTHER STORE AND FORWARD MODIFICATIONS]
 
 ==Definitions==
 {| class="wikitable"

From 7509fae0be1f0f0effa1d6a1109a4a03afed8850 Mon Sep 17 00:00:00 2001
From: Sandro Machado 
Date: Tue, 16 Feb 2016 22:18:45 +0000
Subject: [PATCH 0243/2326] Update bip-0021.mediawiki

---
 bip-0021.mediawiki | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki
index e7094e58e0..92a0589079 100644
--- a/bip-0021.mediawiki
+++ b/bip-0021.mediawiki
@@ -122,3 +122,5 @@ Characters must be URI encoded properly.
 === 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.
 
+=== Bitcoin libraries ===
+* [[BitcoinPaymentURI|https://github.com/SandroMachado/BitcoinPaymentURI]] Java library to process and generate Bitcoin payment URI's.

From 101718fc6a93cce398db76c1aeb7100d839fe619 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Tue, 16 Feb 2016 15:22:18 -0800
Subject: [PATCH 0244/2326] - Move Definitions section up - Seperate Process
 sections into regular and encrypted InvoiceRequest processes and flow
 diagrams

---
 bip-invoicerequest-extension.mediawiki       |  54 +++++++++++++------
 bip-ir/encrypted-invoice-request-process.png | Bin 0 -> 164633 bytes
 bip-ir/invoice-request-process.png           | Bin 0 -> 107506 bytes
 3 files changed, 38 insertions(+), 16 deletions(-)
 create mode 100644 bip-ir/encrypted-invoice-request-process.png
 create mode 100644 bip-ir/invoice-request-process.png

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index ff033d840b..60e2d85690 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -39,6 +39,13 @@ The motivation for this extension to BIP70 is twofold:
 
 In short we wanted to make bitcoin more human, while at the same time improving transaction privacy.
 
+==Definitions==
+{| class="wikitable"
+| Sender    || Entity wishing to transfer value that they control
+|-
+| Receiver  || Entity receiving a value transfer
+|}
+
 ==Example Use Cases==
 
 1. Address Book
@@ -76,13 +83,6 @@ With this BIP, returned payment information is encrypted with an ECDH-computed s
 service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address 
 or payment information, only delete encrypted messages.
 
-==Definitions==
-{| class="wikitable"
-| Sender    || Entity wishing to transfer value that they control
-|-
-| Receiver  || Entity receiving a value transfer
-|}
-
 ==New Messages==
 
 ===EncryptedInvoiceRequest===
@@ -159,15 +159,30 @@ message EncryptedPaymentRequest {
 | payment_request_hash      || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest
 |}
 
-==Encrypted InvoiceRequest / PaymentRequest Process==
+==InvoiceRequest / PaymentRequest Process==
+The process overview for using InvoiceRequests and receiving encrypted PaymentRequests is defined below in two sections. 
+Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and therefore MUST follow the Encrypted InvoiceRequest Overview process.
 
-===Overview===
+===Non-Encrypted InvoiceRequest Overview===
+# Sender creates InvoiceRequest
+# Sender transmits InvoiceRequest to Receiver
+# Receiver validates InvoiceRequest
+# Receiver creates PaymentRequest
+# Receiver encrypts the PaymentRequest
+# Receiver creates EncryptedPaymentRequest (containing an encrypted PaymentRequest)
+# Receiver transmits EncryptedPaymentRequest to Sender
+# Sender validates EncryptedPaymentRequest
+# Sender decrypts and validates encrypted PaymentRequest
+
+
 
+===Encrypted InvoiceRequest Overview===
+# Sender retrieves Receiver InvoiceRequest Public Key
 # Sender creates InvoiceRequest
 # Sender encrypts the InvoiceRequest
 # Sender creates EncryptedInvoiceRequest (containing an encrypted InvoiceRequest)
 # Sender transmits EncryptedInvoiceRequest to Receiver
-# Receiver decrypts and validates EncryptedPaymentRequest
+# Receiver decrypts and validates EncryptedInvoiceRequest
 # Receiver validates InvoiceRequest
 # Receiver creates PaymentRequest
 # Receiver encrypts the PaymentRequest
@@ -176,26 +191,33 @@ message EncryptedPaymentRequest {
 # Sender validates EncryptedPaymentRequest
 # Sender decrypts and validates encrypted PaymentRequest
 
-This overview flow is illustrated below:
+NOTE: See section Initial Public Key Retrieval for InvoiceRequest Encryption below for possible options to retrieve Receiver InvoiceRequet public keys.
 
-
+
 
-===Message Interaction Details===
+==Message Interaction Details==
 
 ===EncryptedInvoiceRequest===
-Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP, Sender transmitting
+Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting
 EncryptedInvoiceRequest message MUST set appropriate Content-Type headers as specified here:
 
Content-Type: application/bitcoin-encrypted-invoicerequest
-====EncryptedPaymentRequest==== +===InvoiceRequest=== +Sender MUST transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting +InvoiceRequest message MUST set appropriate Content-Type headers as specified here: +
Content-Type: application/bitcoin-invoicerequest
+ +===EncryptedPaymentRequest=== Receiver MUST transmit EncryptedPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting EncryptedPaymentRequest messages MUST set appropriate Content-Type headers as specified here:
Content-Type: application/bitcoin-encrypted-paymentrequest
-====Message or Communication Errors==== +===Message or Communication Errors=== An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). +==Process Step Details== + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair diff --git a/bip-ir/encrypted-invoice-request-process.png b/bip-ir/encrypted-invoice-request-process.png new file mode 100644 index 0000000000000000000000000000000000000000..beb5df1f02252605624de50490ca9f41425a8906 GIT binary patch literal 164633 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 YyYp*&*@`V+%HJuc&i*25^4FXG6Y7t4OaK4? literal 0 HcmV?d00001 diff --git a/bip-ir/invoice-request-process.png b/bip-ir/invoice-request-process.png new file mode 100644 index 0000000000000000000000000000000000000000..47a4fac55888c91a501a69ba2988261518a659d7 GIT binary patch literal 107506 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%0A(*Gqd7kD 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 literal 0 HcmV?d00001 From 0c3d6d15aedcedffac0e72e34edba3b0370f488d Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 17 Feb 2016 16:11:59 -0800 Subject: [PATCH 0245/2326] Include grammar fixes from Dawn --- bip-invoicerequest-extension.mediawiki | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 2c0e787d72..0fc83397b8 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -14,20 +14,27 @@ This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol. -# It allows the requestor of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. +# It allows the requestor (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. # It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. +==Definitions== +{| class="wikitable" +| Sender || Entity wishing to transfer value that they control +|- +| Receiver || Entity receiving a value transfer +|} + ==Motivation== The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. The motivation for this extension to BIP70 is threefold: -# Ensure that the payment details can only be seen by the participants in the transaction, and not any third party. +# Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party. # Enhance the Paument Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests. @@ -41,13 +48,6 @@ The motivation for this extension to BIP70 is threefold: In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. -==Definitions== -{| class="wikitable" -| Sender || Entity wishing to transfer value that they control -|- -| Receiver || Entity receiving a value transfer -|} - ==Example Use Cases== 1. Address Book @@ -56,7 +56,7 @@ Let's say a Bitcoin wallet developer would like to offer the ability to store an send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, -and there is always the risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the +and there is always a risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the corresponding private key. With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding @@ -68,7 +68,7 @@ or destroyed, no communication will be possible, and the sending of funds to a " 2. Individual Permissioned Address Release Let's say a Bitcoin wallet developer would like to offer the ability for a user to individually release address information -to a new potential sending party only if they can confirm the identity of the potential sending party. BIP70 specifies that +to a new potential sending party only if they can confirm the identity of the potential sending party. Currently, BIP70 specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. @@ -311,3 +311,4 @@ of an InvoiceRequest, a Store & Forward server, and a EncryptedPaymentRequest. * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] * [https://tools.ietf.org/html/rfc6979 RFC6979] +* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] From b01c6b7089926f76e5786aeeb796ee3fb35a3e28 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Thu, 18 Feb 2016 17:47:48 -0800 Subject: [PATCH 0246/2326] Added EncryptedPayment and ACK, other readability and consistency fixes --- bip-invoicerequest-extension.mediawiki | 123 +++++++++++++++++-------- 1 file changed, 87 insertions(+), 36 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 0fc83397b8..ee99d17515 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -36,7 +36,7 @@ The motivation for this extension to BIP70 is threefold: # Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party. -# Enhance the Paument Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests. +# Enhance the Payment Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests. # Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: @@ -52,7 +52,7 @@ In short we wanted to make bitcoin more human, while at the same time improving 1. Address Book -Let's say a Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could +A Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, @@ -67,18 +67,14 @@ or destroyed, no communication will be possible, and the sending of funds to a " 2. Individual Permissioned Address Release -Let's say a Bitcoin wallet developer would like to offer the ability for a user to individually release address information -to a new potential sending party only if they can confirm the identity of the potential sending party. Currently, BIP70 specifies that -the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity -information of the potential receiving party. +A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, BIP70 specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity -information about the potential sending party via an included certificate. This allows the potential receiving party to -make a more informed decision regarding to whom they are releasing payment and identity information. +information about the potential sending party via an included certificate. This gives the receiving party more control over who receives their payment and identity information, and could be helpful for businesses that need to follow KYC policies or wallets that want to focus on privacy. 3. Using Store & Forward Servers -Let's say a Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address +A Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address exchange. This is a common case for mobile and offline wallets. With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward @@ -92,20 +88,20 @@ or payment information, only delete encrypted messages. The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret.
 message EncryptedInvoiceRequest {
-    required bytes encrypted_invoice_request = 1;           // Encrypted Serialized InvoiceRequest
-    required bytes sender_public_key = 2;                   // Sender's EC Public Key
-    required bytes invoice_request_hash = 3;                // SHA256 of Serialized InvoiceRequest
+    required bytes encrypted_invoice_request = 1;
+    required bytes sender_public_key = 2;
+    required bytes invoice_request_hash = 3;
 }
 
{| class="wikitable" ! Field Name !! Description |- -| encrypted_invoice_request || AES-256-CBC Encrypted Serialized InvoiceRequest +| encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest |- -| sender_public_key || Sender's EC Public Key +| sender_public_key || Sender's EC public key |- -| invoice_request_hash || SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest +| invoice_request_hash || SHA256 Hash of non-encrypted, serialized InvoiceRequest |} ===InvoiceRequest=== @@ -113,20 +109,20 @@ The InvoiceRequest message allows a Sender to send information to the Receiver s
 message InvoiceRequest {
-        required bytes  sender_public_key = 1;              // Sender's EC Public Key
-        required uint64 nonce = 2;                          // Microseconds since epoch
-        optional uint64 amount = 3 [default = 0];           // amount is integer-number-of-satoshis
-        optional string pki_type = 4 [default = "none"];    // none / x509+sha256
-        optional bytes  pki_data = 5;                       // Depends on pki_type
-        optional string notification_url = 6;               // URL to notify on EncryptedPaymentRequest ready
-        optional bytes  signature = 7;                      // PKI-dependent signature
+        required bytes  sender_public_key = 1;
+        required uint64 nonce = 2;
+        optional uint64 amount = 3 [default = 0];
+        optional string pki_type = 4 [default = "none"];
+        optional bytes  pki_data = 5;
+        optional string notification_url = 6;
+        optional bytes  signature = 7;
 }
 
{| class="wikitable" ! Field Name !! Description |- -| sender_public_key || Sender's EC Public Key +| sender_public_key || Sender's EC public key |- | nonce || Microseconds since epoch |- @@ -147,19 +143,61 @@ The EncryptedPaymentRequest message is an encapsulating message that allows the
 message EncryptedPaymentRequest {
-        required bytes encrypted_payment_request = 1;      // Encrypted Serialized PaymentRequest
-        required bytes receiver_public_key = 2;            // Receiver's EC Public Key
-        required bytes payment_request_hash = 3;           // SHA256 of Serialized PaymentRequest
+        required bytes encrypted_payment_request = 1;
+        required bytes receiver_public_key = 2;
+        required bytes payment_request_hash = 3;
 }
 
{| class="wikitable" ! Field Name
!! Description |- -| encrypted_payment_request || AES-256-CBC Encrypted Serialized PaymentRequest +| encrypted_payment_request || AES-256-CBC encrypted, serialized PaymentRequest |- -| receiver_public_key || Receiver's EC Public Key +| receiver_public_key || Receiver's EC public key |- -| payment_request_hash || SHA256 Hash of Non-Encrypted, Serialized PaymentRequest +| payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest +|} + +===EncryptedPayment=== + +The EncryptedPayment message allows a BIP70 Payment message to be transmitted through a third party without revealing the details of the transaction. This message allows Store & Forward servers or other third parties to match and authenticate PaymentRequest and Payment messages without revealing the details of the transaction, thereby protecting privacy. + +
+message EncryptedPayment {
+        required bytes encrypted_payment = 1;
+        required bytes payment_request_hash = 2;
+        required bytes signature = 3;
+}
+
+{| class="wikitable" +! Field Name !! Description +|- +| encrypted_payment || A standard BIP70 Payment message, serialized and encrypted with the payee's public key +|- +| payment_request_hash || SHA256 Hash of original non-encrypted, serialized PaymentRequest. Some other identifier linking this message to the original request can also be used. +|- +| signature || A signature of this message, serialized with a value of "" for signature. +|} + +===EncryptedPaymentACK=== + +An encrypted version of the BIP70 PaymentAck. + +
+message EncryptedPaymentACK {
+        required bytes encrypted_payment_ack = 1;
+        required bytes payment_request_hash = 2;
+        required bytes signature = 3;
+}
+
+{| class="wikitable" +! Field Name !! Description +|- +| encrypted_payment || A standard BIP70 PaymentACK message, serialized and encrypted with the payer's public key +|- +| payment_request_hash || The payment_request_hash provided in the EncryptedPayment message. +|- +| signature || A signature of this message, serialized with a value of "" for signature. |} ==InvoiceRequest / PaymentRequest Process== @@ -176,6 +214,8 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther # Receiver transmits EncryptedPaymentRequest to Sender # Sender validates EncryptedPaymentRequest # Sender decrypts and validates encrypted PaymentRequest +# The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages + @@ -193,8 +233,9 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther # Receiver transmits EncryptedPaymentRequest to Sender # Sender validates EncryptedPaymentRequest # Sender decrypts and validates encrypted PaymentRequest +# The PaymentRequest is processed according to BIP70, including optional EncryptedPayment and EncryptedPaymentACK messages -NOTE: See section Initial Public Key Retrieval for InvoiceRequest Encryption below for possible options to retrieve Receiver InvoiceRequet public keys. +NOTE: See section Initial Public Key Retrieval for InvoiceRequest Encryption below for possible options to retrieve Receiver InvoiceRequest public keys. @@ -215,6 +256,16 @@ Receiver MUST transmit EncryptedPaymentRequest to Sender (or Sender's agent) via EncryptedPaymentRequest messages MUST set appropriate Content-Type headers as specified here:
Content-Type: application/bitcoin-encrypted-paymentrequest
+===EncryptedPayment=== +Receiver MUST transmit EncryptedPayment to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting +EncryptedPayment messages MUST set appropriate Content-Type headers as specified here: +
Content-Type: application/bitcoin-encrypted-payment
+ +===EncryptedPaymentACK=== +Receiver MUST transmit EncryptedPaymentACK to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting +EncryptedPaymentACK messages MUST set appropriate Content-Type headers as specified here: +
Content-Type: application/bitcoin-encrypted-paymentack
+ ===Message or Communication Errors=== An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). @@ -277,13 +328,13 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] ==Payment Messages with a Store & Foward Server== -[https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Payment Payment] messages are used in the same way -with the following exception: +When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a +received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the EncryptedPayment message is appropriately correlated +to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD be done in order to decrease spam requests. The accepted +Payment message is NOT validated as the Store & Forward server does not have access to the original PaymentRequest. + +Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching payment request hash and payee signature is received, after which the server MAY reject all further EncryptedPayment messages matching that payment request hash. This feature SHOULD be used for updating payment request metadata or replacing invalid transactions with valid ones; clients MUST NOT assume payment requests that have not received an ACK will not be broadcast to the Bitcoin network by the payee. -When a Store & Forward server is in use during the Payment Protocol exchange, a Payment message generated as the result of a -received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the Payment message is appropriately correlated -to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD BE done in order to decrease spam requests. The accepted -Payment message IS NOT validated as the Store & Forward server does not have access to the original PaymentRequest. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: From 8e8c9778e903de3246fa529682e7178241829e16 Mon Sep 17 00:00:00 2001 From: Matt David Date: Sun, 21 Feb 2016 14:00:02 -0800 Subject: [PATCH 0247/2326] - Add memo to InvoiceRequest message - Add ephemeral_public_key and requires_payment_message fields to EncryptedPaymentRequest + updated descriptions - Update EncryptedPayment and EncryptedPaymentACK message descriptions to use ECDH-derived key for signature instead of each side's public key - Slim down message content-types - Add EncryptedPayment and EncryptedPaymentACK creation detail steps - Add updated paymentrequest.proto to bip-ir/ directory - Add additional flow diagrams for various mobile-to-mobile / Store & Forward scenarios --- bip-invoicerequest-extension.mediawiki | 130 ++++++++++++------ bip-ir/bip70-extension.png | Bin 70596 -> 88989 bytes bip-ir/mobile-sf-bip70-extension.png | Bin 105862 -> 0 bytes ...mobile-sf-encrypted-ir-without-payment.png | Bin 0 -> 106744 bytes bip-ir/mobile-sf-ir-with-payment.png | Bin 0 -> 113169 bytes bip-ir/mobile-sf-ir-without-payment.png | Bin 0 -> 92902 bytes bip-ir/overview_flow.png | Bin 67368 -> 0 bytes bip-ir/paymentrequest.proto | 84 +++++++++++ 8 files changed, 173 insertions(+), 41 deletions(-) delete mode 100644 bip-ir/mobile-sf-bip70-extension.png create mode 100755 bip-ir/mobile-sf-encrypted-ir-without-payment.png create mode 100755 bip-ir/mobile-sf-ir-with-payment.png create mode 100755 bip-ir/mobile-sf-ir-without-payment.png delete mode 100644 bip-ir/overview_flow.png create mode 100644 bip-ir/paymentrequest.proto diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index ee99d17515..814845d50b 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -80,9 +80,10 @@ exchange. This is a common case for mobile and offline wallets. With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address or payment information, only delete encrypted messages. -[MATT PLEASE INCLUDE TEXT HERE REGARDING OTHER STORE AND FORWARD MODIFICATIONS] ==New Messages== +Updated [/bip-ir/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as +the messages newly defined in this BIP. ===EncryptedInvoiceRequest=== The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret. @@ -99,7 +100,7 @@ message EncryptedInvoiceRequest { |- | encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest |- -| sender_public_key || Sender's EC public key +| sender_public_key || Sender's EC public key |- | invoice_request_hash || SHA256 Hash of non-encrypted, serialized InvoiceRequest |} @@ -114,8 +115,9 @@ message InvoiceRequest { optional uint64 amount = 3 [default = 0]; optional string pki_type = 4 [default = "none"]; optional bytes pki_data = 5; - optional string notification_url = 6; - optional bytes signature = 7; + optional string memo = 6; + optional string notification_url = 7; + optional bytes signature = 8; }
@@ -132,6 +134,8 @@ message InvoiceRequest { |- | pki_data || Depends on pki_type |- +| memo || Human-readable description of invoice request for the receiver +|- | notification_url || Secure (usually HTTPS) location where an EncryptedPaymentRequest (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature @@ -145,7 +149,9 @@ The EncryptedPaymentRequest message is an encapsulating message that allows the message EncryptedPaymentRequest { required bytes encrypted_payment_request = 1; required bytes receiver_public_key = 2; - required bytes payment_request_hash = 3; + required bytes ephemeral_public_key = 3; + required bytes payment_request_hash = 4; + optional bool requires_payment_message = 5; }
{| class="wikitable" @@ -155,7 +161,11 @@ message EncryptedPaymentRequest { |- | receiver_public_key || Receiver's EC public key |- +| ephemeral_public_key || Public Key of ECDH-derived keypair +|- | payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest +|- +| requires_payment_message || Internal PaymentRequest requires follow-up Payment message |} ===EncryptedPayment=== @@ -172,11 +182,11 @@ message EncryptedPayment { {| class="wikitable" ! Field Name !! Description |- -| encrypted_payment || A standard BIP70 Payment message, serialized and encrypted with the payee's public key +| encrypted_payment || AES-256-CBC encrypted, serialized standard BIP70 Payment message |- | payment_request_hash || SHA256 Hash of original non-encrypted, serialized PaymentRequest. Some other identifier linking this message to the original request can also be used. |- -| signature || A signature of this message, serialized with a value of "" for signature. +| signature || Signature of this message using the ECDH-derived key calculated for the EncryptedPaymentRequest, serialized with a value of "" for signature. |} ===EncryptedPaymentACK=== @@ -193,11 +203,11 @@ message EncryptedPaymentACK { {| class="wikitable" ! Field Name !! Description |- -| encrypted_payment || A standard BIP70 PaymentACK message, serialized and encrypted with the payer's public key +| encrypted_payment_ack || AES-256-CBC encrypted, serialized standard BIP70 PaymentACK message |- -| payment_request_hash || The payment_request_hash provided in the EncryptedPayment message. +| payment_request_hash || The payment_request_hash provided in the EncryptedPayment message. |- -| signature || A signature of this message, serialized with a value of "" for signature. +| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. |} ==InvoiceRequest / PaymentRequest Process== @@ -241,30 +251,21 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther ==Message Interaction Details== -===EncryptedInvoiceRequest=== -Sender MUST transmit EncryptedInvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting -EncryptedInvoiceRequest message MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-encrypted-invoicerequest
- -===InvoiceRequest=== -Sender MUST transmit InvoiceRequest to Receiver (or Receiver's agent) via TLS-protected HTTP. Sender transmitting -InvoiceRequest message MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-invoicerequest
- -===EncryptedPaymentRequest=== -Receiver MUST transmit EncryptedPaymentRequest to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -EncryptedPaymentRequest messages MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-encrypted-paymentrequest
- -===EncryptedPayment=== -Receiver MUST transmit EncryptedPayment to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -EncryptedPayment messages MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-encrypted-payment
- -===EncryptedPaymentACK=== -Receiver MUST transmit EncryptedPaymentACK to Sender (or Sender's agent) via TLS-protected HTTP. Receiver transmitting -EncryptedPaymentACK messages MUST set appropriate Content-Type headers as specified here: -
Content-Type: application/bitcoin-encrypted-paymentack
+===New Message Content Types=== +Messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined per message type here: +{| class="wikitable" +! Message Type !! Content Type +|- +| EncryptedInvoiceRequest || application/bitcoin-encrypted-invoicerequest +|- +| InvoiceRequest || application/bitcoin-invoicerequest +|- +| EncryptedPaymentRequest || application/bitcoin-encrypted-paymentrequest +|- +| EncryptedPayment || application/bitcoin-encrypted-payment +|- +| EncryptedPaymentACK || application/bitcoin-encrypted-paymentack +|} ===Message or Communication Errors=== An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This @@ -277,6 +278,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * sender_public_key MUST be set to the public key of an EC keypair * nonce MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example) * Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD be rejected with HTTP status code 406. +* Memo is optional. This MAY be set to a human readable description of the InvoiceRequest * Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to * If NOT including certificate, set pki_type to "none" * If including certificate: @@ -305,6 +307,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * Create EncryptedPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) +* Set ephemeral_public_key to the public key of the previously determined ECDH-derived key * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) ===EncryptedPaymentRequest Validation and Decryption=== @@ -327,14 +330,42 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] * QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -==Payment Messages with a Store & Foward Server== +==EncryptedPayment and EncryptedPaymentACK Details== + +===EncryptedPayment Message Creation=== +* Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) +* Create EncryptedPayment message +* Set encrypted_payment to be the encrypted value of the Payment +* Set payment_request_hash to be the value of the associated, received EncryptedPaymentRequest +* Set signature to "" +* Sign the serialized EncryptedPayment message with the previously calculated ECDH-derived key +* Set signature to the result of the signature operation above + +===EncryptedPaymentACK Message Creation=== +* Encrypt the serialized PaymentACK using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) +* Create EncryptedPaymentACK message +* Set encrypted_payment_ack to be the encrypted value of the PaymentACK +* Set payment_request_hash to be the value of the associated, received EncryptedPaymentRequest +* Set signature to "" +* Sign the serialized EncryptedPaymentACK message with the Receiver's EC public key +* Set signature to the result of the signature operation above + +**SIGNATURE NOTE:** The EncryptedPayment message is signed with the ECDH-derived key as both the Sender and Receiver +have the ECDH-derived key, however the EncryptedPaymentACK message is signed with the Receiver's EC key because only the +Sender has access to it. This prevents both EncryptedPaymentACK spam and EncryptedPaymentACKs from being submitted by the Sender. + +==Payment / PaymentACK Messages with a Store & Foward Server== When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the EncryptedPayment message is appropriately correlated to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD be done in order to decrease spam requests. The accepted Payment message is NOT validated as the Store & Forward server does not have access to the original PaymentRequest. -Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching payment request hash and payee signature is received, after which the server MAY reject all further EncryptedPayment messages matching that payment request hash. This feature SHOULD be used for updating payment request metadata or replacing invalid transactions with valid ones; clients MUST NOT assume payment requests that have not received an ACK will not be broadcast to the Bitcoin network by the payee. - +Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with +matching payment request hash and Receiver signature is received, after which the server MAY reject all further EncryptedPayment +messages matching that payment request hash. This feature SHOULD be used for updating Payment metadata or replacing +invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. +If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent +the Receiver from broadcasting both transactions and getting paid twice. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: @@ -350,15 +381,32 @@ The following flowchart is borrowed from BIP70 and expanded upon in order to vis -==Mobile to Mobile Example== +==Mobile to Mobile Examples== + +===EncryptedPayment Required=== +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use +of an InvoiceRequest, a Store & Forward server, an EncryptedPaymentRequest (with require_payment_message = true), an +EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits the transaction to the bitcoin network. + + + +===No EncryptedPayment Required=== +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use +of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). +In this case, the Sender submits the transaction to the bitcoin network. + + + +===Using EncryptedInvoiceRequest Message=== The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use -of an InvoiceRequest, a Store & Forward server, and a EncryptedPaymentRequest. +of an EncryptedInvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). +In this case, the Sender submits the transaction to the bitcoin network. - + ==References== -* [[bip-0070.mediawiki|BIP70 - Payment Protocol]] +* [bip-0070.mediawiki|BIP70 - Payment Protocol] * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] * [https://tools.ietf.org/html/rfc6979 RFC6979] diff --git a/bip-ir/bip70-extension.png b/bip-ir/bip70-extension.png index 2df7c2df95ba4d5d03100e653f7cac55240e8fed..d235992fffc85637fcc901af4b22d3776a246432 100644 GIT binary patch literal 88989 zcmeFac|6wb);9h%MMPw*6j8}M7m~RQnNw66Oc^o{p^Tx3q9iIpBaxvAB~wU}G^=C? zQ7MvS_B+n*$==W2Pw)Htynl9o?tORd>-vuCJkPa`b*y8Z#h4oFvNA7VrYMS4Ur)!J zqUd@liq?o}7QQ*lu!9wU%=XmV>_bs3oaBEr)TvZHic%7Hwy^TGGBQ-L^Kg^0vG=fb zkP2|~#L*O`svh8JW4GJESJ2kM(b;{CQ2*_6Awg&RHA0q(Mlwd8+73?6dV9ScHtaRF zu-m)aPT5{aU5!~aKm`|YbMUnh3~+OG_fZL0BlPpSD)>ykmKGBHd5G`sHA0%?hJsc` zrh?iY-VTC_QY$6xWMyRqS1C)$Dk{m#DM|>+$;c{7%P33B%1Fw{s>sTy$jJ!)`Hzqq zGd`($+wW2_*ID=H?ePEB2s!!sda6iE`}_M#`O8arcsokVDl02X%g9N~$w}e}NuNM> zUz-3)cOT(DF7nrPbR2x_yq!ILoju$I$#rdPJ^Xyv2nmrJ{r%6M@8#zC_l?|r{>zqDJ?4{BmJLFvbX#D98W)Q*PoAOZzt{G>fq+!?(2i|WdGxNo=zUV9zISU|K*l{ z|NLKXj4?4X`upDh@p;|c{^PBEeAn)Q3H~(ce>~I2BGA)8+T6j%!_V8!VeKBgitvAW zdtc{W{|wH*T#5YhU!UC}!1=$NMt=F@w4YPqj}cPEyQ*k=JJ|Socw2aQxT^gz%S`_= zp`f<*&sin7!pO$X*`3%`R8{)lPx@!X|GA!nj*YK_8fN55Nf|jwIav!?c@>3KDhl$F zGD<2kGBYmn$C3Yb4I>YG=UsvS=^9EZ3UV{AG2_U8zXn#2y^XKU|It-u9y{YY_I4_} zJiOg(eAS%YY#be=J>4BurT_VI#*u%|D-~@IR}XJImV=tSs`P*Qdd68l=bDPXyN|Dp zyPbo+jvBs@a(1>?u~n2^rKoJLB&jHGBQL42QqEq|#$Iukq`ZQxg8i;l_A*KmT-wCj8NSZOb;dE|>HlwU@gFYpKW?Sx?1LE^ zIAi8w{{Hl48yvj;_1nLGaCQFal{{^{eH_S|TO;(>qWjy8{q3d5IX~B~ij5udXKHq2 zNjTW6O8?8Z|2)>;Xa0Gb^Z(xg{NwsFPXF)s@ON@>|KAqWAD8-h)PKK-kH;=we;aQH zO-Ia$|FhNp$94bp#DBkmsx*lJuFn5D6n}jCuOsx=oc*68s!AN23T6YI%;x7P$f`>J zkMI7u^B>1skx_N^`+58-IT`$e@P~i?Jay*J|9md^N-P*5!HVV<{#ezGXSng|BYAvb)5fR4gZfn{PRlxk1ss)a=&jf z(;C10{M%f=G||ihew%BiHGcW|x4C|4qL~N$HrGsR{POc}bN$jpGY|M}u9?>O<>%k# z`lX3x9`M^-Gp+H<&%e#}OB2mJ;J3METH}|Wf1B%-{zWWjbDELZLVLMXyyUG%{9{+zx@2$T)#BY%maR#Yo;}R z`T4iGercka2mChIOl$n|^KWzg(nK>4_-(G4*7)V;|J7W~|8xL4xTEdQAN_qh_-&O z6_?|WRRjHBo@gElQ=sACNI1Jfa6dN}%W$i0|63>9n00pXl6$`K?d#vxcSz`kl@kv= z2gC8!H?;d&)h9le=4Cyu)>2OYG-&R>$I-v>xO~r1j#{`?C6DfBSe+93P)L1pSvP4mgo#TFG6RU9&@vUJ|;!EfJ=o<7a8Y}vB&mo9aF|Mb$-+44tS{Wou}jAlA@>XfIKSNN$@3nU~ZZCqTK?d zri=;$UJi~6bWI(mGJlw@K5=3qsH>+(c=hUqvuDqaK60e?oNhcjCuhXKfM;pIS6Vy} zo_~de1lOUjRaI4U8#k<7%V2D5-1PXdrm->G(D&~h@88dg(V;zQI7>*&%#5S2uW#qB zUCXT}r*egimhRUPs{GdTh-1+rR&H)?Dhw}h_3Bm6{?;}24i1{@*Ry>6`ZZu=phLIk z()siBii(OIZDL|#?6EZkMMVei+*y;Go4eD_F5=_!oVyhj)Rrw33_^ZL1pF59h0_&e3vg@#=vQH z;7?{oMn=Ac3(sx2;gV%`Zr1UnB%9s4SsWZ3oLpSAbafeZ=nJhRxbk)AkLnFQjI|P) zS9Uuqi>aifq^dme*fGJQdI@LF9O-$KE{y51WXTd3sQU22RqO%+b1B%1{CnTN?$IMg z4pFWl%!;gyIXoX<=Fi=?Z(r}HPug3zF08GsZF>H^yDE*v_m82lTD!^AG_0;pPc?Xq ztFW+8&(N?sf^n{AM-@X?ceiM%rKKe=4-XHzX2LL)hK7dPySnHXE?j7FWefN6<;!K{ z{F)=aG(a{Oj*gDauU=)sj!n;=MJ6S2yFAOH*}Z#r$FS${hiInx^XEs$#@_9`7ytEL z4NC`G)Yc;RB@z;I-zQU`R32h)Qp(r)RaLJ7Z<0LVx1xX=L9{K zn=8>$;=_2!B)t|E9>9a2KYw0OSXetC{^(H->uuW}mj?Pg%iYZB;^LCE`PyH;1q1}1UEa7p zfai?YU+*l=Ko;QfySC%Wh4o7QU--YYmB+t(XWJ1hbd;&FvC-*e-l8o< z?uRj}wRh}D-*>#{uW39ic?ZvHV`EbsJid}mKrJpIft~WmySZTg{K~pIrXxp=IK8JSfinkK7oOeyGB0bxB{r-` zu`#!=f19+-*o%jcFB${U(RycJv1iAA&!m=T&$zyP`BG3=sCoAQ>*MRr8=Q9U_GuCe zi;SeVE)C#V<S(WwU}9yhxwG#F92`A0FgU0+KK$A2_8vDSW#!6e&yLg8vU77sonGZ3BqqlErpQCr z!h(y^*sy^Uh8-9h(mBYs$h15p_-~)tXNNKInw|>I-CD$U@5mzUO`A^0T=D5??0tKC zRo~~&WcF^{xRH%-Jfoq(P&IUl-@m`L2F}u}r*VgsB5Ok1tw-NiID_DLEGPIKuzO%s#3l3T76bg#_*Y0t9f0d5Zq(M6R$E(}&4A%< z$tfR2@oD$Avcnk}g03ya9CHQK=qa-9_I!Tb`=&_x^-Z@2nzlPW2V8f2w3uH#gx~*5 zOXY)PX&UO`DMjtJvf#(Lo8_%GZ}tkGQsm<1?il|3M#=9Z*V%LDj-EJiK*Z#Xpo+?= zq6Tk0SRd}HprAmbyFRI-qa*x;(`EJ{`%_7^JK}}7KPc29Z4(Oq#cmx?JxR-ZBAD-&z>6!AiJ$v$G zp5Mo3;a9FmVk|N+C1s44i|?zpl|6Rs*g)@NVb#4uOhxW*wL(JFC=Gr6*%vQfB#~rn z_;W0*OBQy-rWcJ1aE4N#cR2u=I3+y+6JjUT$=% zqM;!!qPpz%!MOtO2D=|v-EiR+5)wk7F}<=yan8b(bFeNW^75p3d(%6=cHXlp4UoO* z`bwzuVt#%+CPC$+M{~*J;s{?~-w~c>Z;4f_cu$@@S+()ShD*jvR;*x>J2|J~^b+1( z4JqML+infGUAthtWy=EM7286_jXHE1@7|>g2?=p(Emf9~kjOZ9j?T!)h|NlQBj8C~ z+#J9VVK{Eb#?;C}yL*wGs#Ndm8{)efQ)i2ah(zlMv276@F0_7o({1asyltm_6nk7! zPM)-R-*B?Gr9{5xqny;zrS$T<8Y*HqMIv9ql^>kVx%~LStPbD$;nBpVPIf@CB63aO1HD6rK)V~!a`?t z;}<_Zub)`=`t=s2sqwL~C-)OYvWtsT=q&0>Pv=NVNGMs#H$LwU*oL)v=F}<=slIP} z_UySHGP&2l#H5ERlv}2(d~&&Qsvc&1)o{xt6M?bu{_^$XCMMJG8OG99`)9%ZYGq7J zOgKF_A$k1t=?7cqjb{LmoKoD)^ZfG0SjzN<%X25Z^YPTwhRV@K06XW=!ETFdyNqZx zUc7jr5Ip94D|A|o@nG@M z*PS?uu3ih>IA>2^^HD0{@@28_eXkPd&6}qr)26v@-7MC{swqB-<7Z1=V@~_{i8gk! zE>K`!U~t>-)4K5RaDKi`QY_!??j13^w(B7im7Se!_U5MB2TW@2YZ`Nzna?6Fa#B~X zUq6r09NbhjmH0A$$J6W1Pa{thEYUt-3IxOWe&OP-a$5ky z&&KjfAB&A;p%E;!G7KIY5;fwTRTdJi=Ge$@(~~Y^L#rNJUzUYX?7e5ta?0M$PJ5Mm zOM6Dp-4x6G?P+$6WmyRBW8Yuyh${Ws8L#ebS{7d9^SwHTQ`z#Gw3w1oijSYO@;4Kc zOQIVtGL7F(Oyt~F9+F0PSM0px)|&|kOEiMO4_gpoMx~m*4Gw1EvQ_fg_;2@>uwcdV ziNV+e*WtcbcWFiqjMLR5eQ6bTHSpCxdeoCqkpB*0%L1o%yc&XgWMl4e*;H$ku9oKW z-QTyXjss@o`f}{mZGUOTsEq+NH8t05YnbH}6u4CKCL2ozK5_K|H9P~Lq1C`3WmH$| zY#;B-c~fY|C@L<_NnzqIX6$0wdTrO?fw(QA&NlYl)b*yh}loDXrYj3~wd6t=W zuhZF#jIftV!vFEtm8ZNu)h8f;^nrREJHwnS8v?l zzLnqO*xdZXv$K{Jz4d~Wg4=5awz^ONIiXB{w=eBSgZqWv0+pOm4XmOW)hf9K`={p2 z@A>GxLPX@?x+DDh6d>N?W6Rbnt%wUgd;Pk?f;D@udnyKFF*{t-kd~6Vh$Y8z7G~qK9gg9<{LJ2_Owi$19W0x6bTIt#hc_EU|S?+&G7E*F~oF%k}VrICi#5l9iABV z=`h;>Jb!E74=Ki|!cc;rfOK`JtkCJHwvUe!q%AY1M>^x_!(QLmt-E&Z+R}Be{CU~g zH7GryqXQ{trnNjh3uF#_etb?>SuodPq~o9f6GfI{L}kgTB)Vkj9q+9t8KMpxU{2dc zzFysI->1&Z!XgaxORE7`Iy5o*?W$QuzIDkl%JlQ=8>1Q(21&u=!yFWr{_CRV%=*LU z&o9kn{LH#=rKg5fwwaZcUTbSBeOSo&=T&TVj(9fpKb&UskwvTZOibdbrgt^5%7Ssh zOYpb~F3(obYAEi0G4Xn`CHnTaE<%ot&=Ou!qRb~Q$Nlsp$6lIMtM?eNahox*cysANKLZmG$@U-{)uF zB%@9!OV4=M|$+dRE!L?5Q0sQBUi!_)liwPk19LZ`R!T^#^=+R@E? zD?0iKP4C3%!4TlG-dEQ|f`WoP-#5$$Nc7@l5l_n7e&-MXK?cAK@N?9O6FiLFYwYFb z!z~^pAf~y{&Z(_z4P#W&mTkB9)Zn=ac0F7Ww|LDdx3+s772awAEWOuPk*|SHX6tGWCO*uWw;=sK3sCfH! z(b(7+f#Qv4*2H2eX<1tSSpTq0W5Po{u&-G*GBUFL<&My(w6sO}qMJS%os?sM=cvTO zOh6>12|Q>aRs#eDRwfct#tSpmao4T`7uF}g8~xVPe9dt#V;5bC3S40M)R?%dn;Rb0 zu*-#xj!t6pReIod{)D;F@$tIAb_t1z5m*43`iaZ=xoXQYfqQHbun9{NMnjj7mNr@Q zelnkV==gE2iNOcbO-)T2$x_<_SPSJek*w1(vgsgJA=XsW1l|(}od^fO-Px3(S#bS& zS6G2uCPpvI`~vf?ho_?Oi>F3wVh$LPKRjszW;(~hg|Q_*J!dhdWEMp@KfRa<=gP#y zR8gNKUhWY-1sGZyGP&UGZU5;fKU(C6Hy)lZKZ|1Lb5DjE-fpnwvh~0X|#_P6kUrY%~O0sU=yqQ0x zKg;pa8RS2;QU+cV9b zt7~e?F14d94wGw%sOW5+^8;lht3`&l!=Zc|ylQ#bYth8}14AD+SeJ(^0^Y171lOWP zla*&mSy))S5Z+pD`K|9T%YBprGsv;qVmyqUS3L`?G(@_*Y-yZ4b_0x z?EL%_k4J0o-8+XBqZBY8NbMYGuS{9(|AlvY5_Yq?vscmm?X8;CpVd7*J;Tb%)W8+i zJ<3deVtvQIe>=aDCp9`c+MgBzr|b&%?ldy?L~46!^qDpLLVn~FB9 zxs>VIR^%aoM7+Gt11!}^Pqv{FZ*T9WB99#bfq|KLgMshg*XC@xVw$r_GS|AqJTtSS z;iNqAmdFEG=gyrQ5D>uBvrORhqeI-{1`1Yn46|lcJ%7%frs5~|IKZpBo||x0AQaQD zOGs}ot$;@<)7MN-PCkgJvLQnLtox5L~>FLW`%e32;idO>6M3Lr#yhn=qdL3^Y1f^O)nGi@%iSxIpa~P zGAEF-X+ZG(W6OG5@2p0ix=|?m@S@c`U={?@Jlx%-s_x#6qF=ap@e$Z0WUznib5R?T z>vN$&Z5VP{_ZB7J&##k;o}27+bUavETFR{6vc>t~b0j+Jetdabhzrhp>fTZujt@4~ z(Hx-YC&k**LBJu64tbu~^!ZIuXGJ)jK=30n^AK#7!0%&EKr5hvmX;P7pv=~owk4r` zhvGv$+&x0U#ni?NNT=RC?tt|MvY4O^%*hDghD_ivC7<_mkh_Ys2qCv{bbWP|0l1~& zbWZDz%lSvUA0*o$OP~ID4POQZ1`_rHPT1>9i?YPFTU^_2`Bvg7Rt)6{z_BBf(E$IA z)aD+>;V>dB-jtgnkOV1ez`lLSDUXn!sx_}KKXiy0{4@tUyXm_Wv3W7z1k^@H%0s6^ zBzBbX<1u#x--*=`imrL*y;WC5Nhu@n+xzBXFJVmT5jW-`vcOSUK&p`|Q&Wh z(+ima;V)pryTGO$?d@Uf4lkH}B>>RDTyKnlfg#}g$E2#HRG{4I>S{p|5#7wSuHW82 zBufWmO0K7ardX1Yk`f={<+4L`fwJid2_%PSX*1FZ0MpADJDHNg*K%iHQS}vheSLjU z;kxhy+si|?eaY8&_4;)c0uqAWgp1|wdV~F?o*lH{P&>N1EWVt`#}j95yS);T|Kh-{ z375F?^75)rTW`9CBXa^>9k{rdIz zywl6ppQr$-;K!#3);+iV`)h%c z3NfD6CEg5#2Q@dJhq*3eS35^XN2k>PmAt$>_jVI~eN8MF073BgM^jQpTJO1HV%RseeiJfAf^$JX8XsF%qAu#65C7p zIF}o0SXrfbMtuhsOhKNDb4j?ezP*PP-lGa!SXAIcEMmetgPBJJ<|^w!lGFR*%0fW& zfu|f z>a1-p3tkE8PxZHJATT zN=i;R1~w3(MQtU<Z(r zm(mDQgcJgnV&~vMUKR_=(&)sA6ZS4H2I`YToZa2s92}1^EcaVlQc0fb?(Tj*GgA}L zX`oNb6Bv?CR~+n>A||Dw85XMWA451VQXC0D58!^~W=xJbikDlhcaB0_tY~;G^s) zj>kxYvH4S{jlxM9ES0@5y3opO;EnHKJ`y=F2OQ|6w zuI6huE%3QvxLg?ZEN@RwLDWovKTlM7)xCIe0+l-xAi@i%_i=JO#-wwqKQ2nf1jS!r z)HQ)QP7IWQ-7zJGL?&c$ZXN5P=x9NqvvBhX;o&sdmoFbfz5>jR;@NP2n+c5XJJ_Ya zK*>{ZW1jU%@Z}#qJiSz<3Z#iFYvWnm{1|fK(UB2TLqk+{khc?x%I)o~Bp&JQhOpuJ z>}>t=>8aHm9PoulNJUymU0oflkTl0Z01ys}nTg3XU=6qnc)Jy=SD%iKwzaeSa49`R zXzSLkS8v{2zGlsuQ|h5*15=2LkHI!%qXPFV%S?EIvbTLq=LnW0(i4O0Zf{l!36WV; za_g2khB6xuNDd=&iGyR2T2KnmjdM$}7kwDpVpXe;-hP0+QEx9{3Pk!PCnT6koe*8N zED94#bKy!?!IOsTkPG+%_=ASY*!%sX*{)p|3rt>sG)6hgxiM9lJ`AY57d}ZxMzm+L~+lAy&dukMhZN zK>N!vIACdp_JxKb6T>Qa0za_caQD-TtedT@Oc9YdIBu%h!59jhW#KNM`L zBIkYk`t6%Aa4zD*3fa$qB+rmi@0}Qt{qXUlIVw|;&ZvG|y1X%m`CcAUhGVEE0@$3m z>Go#b%9Sh0JjYvdad2p28lOLRP8+4KbMxhQu~U0T1~O%&sb?U{j~QIRE5gkKF`otU z`uO-9V~mc_DJ3tVD^`VCN_q7#Im!*Bg8BID+SnE1;<2e|Y0jTsT&Wsk&;YM2zH0mv z038!GIrb@kdJoTs^oza~iMN1{~6=7BZzObX3pHfy)d4jpo z+jT#2=}|pYj1n<+>wz4EcI?=3dGoc43AqTRnn~i87ZKacK?wWxx28RN_N=$Re0sUi zS*%hHY7F!gESptbd0rLsZ7EF#!k0z!dEf{QDhqL>d(V8-jC82T+N*@V21^QDd+hLG z)-)wA;O42RagQf2UtS{o6o(l+a+XJ18EUgSsIU;@!%uTEf1bg?5A|AYoa591v>Q8I26whM9B_KaQ9R)5H zRFVGX%_jjZoN!gH#fyzm6`~JAar{B|t&pK!4jNM@iR@?tyF4k7fr#l(rOPL@%F4hM=BE#ndo4yD0sB0Mp>^0>rblzsJH}dp^(ri z)j&C#3}Ck=WO(G}5L}3Yy9c#tL}l6BJuo!#)s7S%^g$z%>*?sAKu=tgjXDsb8hp#< zk!g&Up0;)b)r6%Xs;HPm3J75Sk0&N-Bd~S#^%;VSnB2*+(c0Q@`}XZ%^hUdR;XVR9 zI-M}C;1`>a0<4ghjt`mqZW-kV0@9LJ0}$bCL4gdhB25Mib=)Z{aCC4PuE;^1QVUi= zwe!}V&kM41ayF3kA~BdELEzKN{7c7=A2(0VX>-@hcEaptqHX|4w@7RNvAlW9mU$E^ zA&^zbXMP>~{O!ZWoJ~g~A|kZtZcprQ28qK&eSUk}GI|3zJLf0o^|?4XwQUPiP}mS{ z5SNlVLNx&d#zfcMyLS)+aLKd*DUVfV6H*o)=Fk2tzL0%((u_b)E}^PM<4QF`zrJJO;Mlx% z>r=2a+zW!h66gr8i-Wtz@;`R)AR`9{10y3R)sdnClKE;;(Iw;zEInq67cc%9Yl4DQ zVU?!sGu96ZimN-O2ZJYIv8vsOzsrHg;gQJni)z!;@kNqLt3i-?@~1I8pLGUO z`E8iY(8Ub(q=!C1tw0}Bpo;rFswGbcI_`cTt_Wm1!VfnG2VVCvVmR0PrwD5u0pGtp zQWxiP2ZXS=;j*!#>vS}PGlx)9(Db{R}c041gJi$HlwzdIcWh$Lqvu`DAZDkXJcp!{m zZeV0|frVF!o!U~cQ#1SFbM6w2P`n>a2FQ-2(+(I05eRc!Ku2ITA3?&m7GClkrek=Am`Z&=sDuiZ){{a*6^l7{Mk1(p`*QtD(;E*)=Ef? z>XlENe1x*ZIdB0o^70WVfnf?o0esR1$XC-&wq5h8IDO=bivO26s9e~n!JCeJ$}dNe zZ;7hokKvT(h$Nr|I1ao`Q2&&iloW-imjTWWq5Ll1FVeBAJ3Uc4XJTCZ)FIWb#-d*K zu6^<=S02dBT!NJo3$9iOmHcz-4%1Q~lGX*VO`>Q69a$9M2elLPp!vEpC(uMjc6JQv zUN-4GF*?i2bf>KMLR&*L4jAoo#l?IO!yyrkf>dyzVG)O@>bdWED0y@Mg4Wg5RX{S6 zdF9GsusigOjKa#w^MPRmg;3*fZf<5u_kpm+O*vN)LIMIdx z0zdeylJ8VS+RR919kV@FSoP zbRi%_5ch=4$mWfaiHR;QW(F)xRS*#&SQGekmbT4Elj8W5%>$&~wzTjg)>ipqUXua^ zEcx-{M<7SWo9=JLhVIYf;knqPe(=D7SqoOVOH8yu(}CQ)>RTIFlj#6!Hz-w5Wr>1w z0#(6_iB$u?a0Kj<5V%QHi$P^DfbNc1w0aLyn)BNdAKkif5Qt#pxK(~UYic6;jZOL6 z52LUk43CP^I_H5!s;FFmzhy>U4f%^Uq#D*CfgK^E7pj8@ z?`2yZ9h&;+c9&u$>RBD{-t7mRK8KW?h)i{aG!dX6wKB^#Uj~h&wpfxDUIL!QLg^;J z(~_Gg|H7&9wtx5_I&?D>X-rFLASY&a!HpYH`T5c-U7M++dP|2sEs5vmnB8ND$%cXs z^HaohFKA&X50##WNK?LA@7)~AwhfgMhyv>F-xn=p4PlmQQm=aTYCf=+mW9RfD*e1t zp9A3X&SGI|$xf89rF6;e#;8FW)85}74?kwxTwnt_`yR;8NV>xl-{4?ClW$UDx^VHL z5F{|>*%nHLAiXM1H||#RZEpk-1r8q)y7teX4|jFhTjW{K$J3!E!?lMGPE_q=w}W&t z^i;7(Uf}^*qGMt>jGGWmWS|Eibpq&UfCL!_E#Uu?&O-+>n6B$4JOsdWD z+O=!Mc$oCFU=|`!0)D-0kxdKpEqxmQeWzGIzaxs`L@dmq2}LbosF2?um@6QaTVAv< z1qdkvf>?w(o3~}Fw+S81z+jec`!*QL3q>Un!Gg#GE}x6P>jZ1+EcA9&O$MMH5hifa zu=x175LX>dN@9Sr08F__-NwOL(#pZX!A?$2p!0g}hz#k_$LO5(yefHAPmm`zGcWH5 zUf2fA3*kY4RcGPmzQD!J2a%R7nHR$~ybYxsP%<`WbcQN9jZPXKz`DuG$(YO;KP$wWj ziI$Fza7G~gn7vlX$W(y9F|)RwBeWmoj3&)qFzu$+*11jDi^bP;ed^YZvfaG2O{8tn z9y81zxBxAYERTK1cKX8jrt0jY9|7{7Nc!{e1htWu^gCTyUFvj3h?-(0@_^SBLWQ-MS+TGzU3#5nj1J)iXydA;@{v2 zJDQiOPt{BFmF?5in(8N1yxZ&R;fN<86JK>ZXl(;CFI{5Hwh&Vg3eJ1ywBZ-3}Ish>|y4G}J`h zj#McqCKeXDfnAYNM5zX7>%=G)5t3zh^cJ zppppt-$mUe0mTv!$~N}1z+FsWWSCiL5%zi2_Ms*Ll|;q;`}#^}tcyK0GY3MUdq$kF z%zNp-_Q6I6=h5!Nj96=Tu~-Wr_OQv_JsM*OCKW8jPA4ZOB!}ew$dT6JW^np6;C`Yw z_b5ZusNmYn4ij>1za2CxM}&INazY?}qPR*@`d0X=&ht6h*)|YLl4^|0i`*En`7C!b z#Kpyvm0lfBZ-3D9wQzMmeE!(b2RaXr{&`X1r9Z|XXtuJl(trjWWoym&#cO0ha$u!# zASGjF{m|bUMPTT&97|G>tOP0`#rzK1{b0WlGan--80v2mfD6)v@&xOa4a?GI`-Kv( zOF}&^qYNiKWR1TUNi>lf9kebjWx)&KUyG56k*uzzJX8RPn)x0>;8!W0*g}sswXXN? z&w{Fj0)nulkOPH-3e1E@Q3@Wr-XwU#=I$(_E(RPir@0|;o93!|0 zGx8{E>~I@Z5FmrFsReCuG&MCYJ!EV)3a(o5Kj2wNl{boGB~tj=0F$n-uj?0Uyn>#U zsM?VRYJ=aUp&%^LxnPhav!~Arq`BbAl{}!g!$7lnR(8Jqys5PUEEp|Fq+Dnnkb_RY zy!$q3-QZ(IbQnace9GbJ_2%y0yWWXShY7?G@6c^bS zE)-8aUwZpovcJIXWtYz$O|MR}L<)&aZ>^pl6WGM4H;181ZbG7tML`3#y;H-nwv}pL z?{spv-&p{DfrB|5RdZokSu>j{kGWfmgGRmK+m%+YwgblIli5k3YETGW38evY1sxp+ zkOg<(VV8w`LXwt|pFbD6OK8)XKcb%j@Bjc!7Znir9KECk>m=}z8J;P8M4f+QwHjsS2LWNG*Hxq@HA!j+Jc;yJ{GQHHdT z4#pOf)e)mm3t`0SJ_vXNwkwt>T~HPzBCDOQu5qYv6UYW!UIjcQi#gcWdS@X7^=QP= zgeY>+Nb^yQ zWRdS@E3$m?s1lH%AmFR*pY_;v(6V}t4A>Z+lv^7x#{!@T_!fRb;vayXKxVk{q%wrC4nlaDWQ>`(*G8iJR#q| zaxtldGvC|R{!pn0wps@kX{U`%IL3~2B~*2)u<%H*A5lm46N!BPOTp)+OuDdD@hqT4 zv>`zUwKT8H4wNZrNI-7%7!FZq-8x&;k*lKE@gh;HgSz9N)rbB_Sfbr@&C$g0l!AUo zmEGnOiHX9hi%0VpHmF}pEQb7tgUalwJfyKa5q@)=@QN0QVuW}mEHUWMDC5@XXrRfu zmoJl%l{>?w`XV}m6}ixKzXl_O64547jld7*kmi{O1(gnrg2+ukua(gm)sxY!L+j8N z<4Gu7>F+Z(ANXG2(5@A65mVUx|#rvqB^TF zk*flOC&X{TJEbd`?B zI&(f{@AFM`d%?h?C~_Q5Qy=m$!Yv^7Z0zmo3%=XTkIKR+1!pb5k!O%sXVPVZ`FVoN za;-B#Id|#d#cQ@Sdq78Mgx9|W*x7`38&RmTk-qA_z2$cf@r3aG+}@6mvB5kBy$Se> z0FS*c@-V^D)DkJ|S3wWN4X4NZq1C&OCI|jSi=0u}s2bg08gUCbpDD&i&(bm(Wz$}0 zE~ zZ_eZAH^fv7?e~WzV~>CU@>QL`Xwf#?#pGB%qxWvWMdvZEk^?4z;+fOxP)B(T7tF2F z`ry%{OJQM@jb6i5W3^k!K|^_=*B*p!3NHiLpw&PRKvn`{9h3z&65VqbxkBs`8KF&} zK}S81-tc`pD;{ocv%P!AMCJx=vamScZ|M43JY}fe6Bh!yJ@UW_tmSb z4iC!Jf+uo6eE}+p0`#i-?7$sE+BE$9)W?FJA!wDpna@h0IVadWKW^~Rr{3P6K_5#f z{WG8P1s*i*Z#7>UdZ6d+o4Mlk-|8r++Tt;<&cU|{Y`etW!DEFuTwPPMWcl&~{j)<3 zo;dNM{A2J2V>tcZ72O*=M#nF)wRDZU8yg>~y5iQqXP#*PD(w)%k<>P`O>Y4P!6y&} zR?{1|zz5GkjvyTf>hGN`u+O#U^O*?sgXqx%_Fv!Uzhm%K$Wc9dVc~P3eW~BuB*xWc z6%-`o<0DGba@xM|6$!aOA`rGpcv7a;Kzj7b*xGpZ(gV2F6EpRQ< z&fC+sWni{)Q<1Wz^Tl@)EDeq+yN!pXm|wzKj8%1Zff9J_k*2)?0tW4uhaI0xeaIPUgmC2 zjQARg+ByvdG)5GpB4DARY6MNiQCpDT+uHbi@J;0WPU~$q(I{Y75k^CWfnJKDtFjVB z&L0f`{~`AC>FLYspAd2kf<^TCy;rQN=fZnp?p9V+(IS?0hE1en*;dxnFqBUYFNB^& z32NL|L=kuPYyo;-=iPZ_X+LNUK{gNDEb$Ex*vRaDA%QNs!#>|vBd8ug1nq#64_e%4 zB`S;JS@pepc3pKxr?Y*Er!6wj*h5RfdmTY5!glf81|k(id8y;$$Fci&-)^J_0jlL_ z3wPQLL9Vd0^juVSL9M#JI!0GTRP)HHd#oop5Jed%!xR}BG|>_%?m09`+kSX*0pNfK zRLSt#_oMmDzDO7i(^R-&B_cY^pTB8WL%O;EHGp!0k4!6(pMZSXi2^seg^2*T1E7+K zc@fgu+uJK>0!{Kl2HI&LCBG02FuE)}TS znW+(6968|BB(pEo`}ERWY9~An2(b5x)dqKvJaiy#kbYBCJRycX2n_-N^8qlsxm#{P z6>D$@k$z%oyq~Hls`Sp=)xE+}J!E1e*7v%_8P@r7^h7fZp(t>71?#7{U_0PAt#q|u z2(9Cg@0m{E0=bYggDoQRGNj2Qt1P`}m5r4dNpcMk$xxz(gUg0q z94sW!0YP@aNczYi993G8`wV2kqLm)4aj0zCAQD50-SrWA9R4+XxzG#Z^yK_(#wbX~ zMIaC$Br%boL#S06DnEP}uKz4VKumMyR3lD)edAFceE$`1^z?&EBF3pq2o()y)+|Ku zYQIrqa0PRcbkRW*Dur@%4b3P8ybqHw!}E{8+|YzSV+N~;nPqmtfcwkC5l)})$p4fq zugM+F>3MkiUdb3I1p79qpa7#*=9f<$QucZ8Y05WVk3=Ky6ufz_RSA&oWUd5P=Nj!-l_4bFJ z%hCJIpAg^l@@0?pLx`C-fNm!o8!(G3Rs@m%|M03UI|d;kk(ffSs|gTT016;~aLv1E zl?b)qu?&c3tDeuPHAn>e)u9uDb~AFlj0w`|M_3hzNca?8xPGudFi689C0&Cgt19;D zR1!>2$q7YG3e7i$T_2%8_c2w|2J__!`j_M+$Op8++7@>z)s__y0s*gq&i*AR0Usiq z0Qk!tJrAN+q)nZ}?7NJ9bD9i5YYw{$gd|dQY6_#8kgwoA&hQKLVbGUBU3UaiGzyP^ zez3yAOfU&P8fw~FTC`XrA5moU%A3*xn$1E^OdkgI$Dchwyq=I;K6(07m{M@4KaO%y z&{5j7XgEhldskOO$_a!)>GD_pNl8h|mS$tBd1*{tfbX40dHefcf&odF4&1jcMZ^u@ z?vw=)gOux@KRmq(-hjcu(eWvIf|)4&rSpiOfOPAKs;j3%>90dEQRt?4zcuJ{vUpQW zH1g5mE4*Qa^MG=)upH>a0CklGr_C@nOw{x24F`X^yuRD0SsYB*0Z-LPdXM%(<^?~4 z_7%uF$|EO(CPu!J7D6n2dF*mvidh$Rdl=K^`<1e>2RywxI&f6HY)r(<-*`}#4Ni^J zb!jrtM>4RnP1@_Yp2;P=5hrySevT|>>Fw*VJ#sqU7@%95zsB9U!3`&vn zNF+EYZ(rZ@fZX1g)btqMbAbNr)W>JpoWPF3PdD^SZ_nT)g0%H|6JV-3ZZwp|Kn`~l z#Y9uR%=^aw=FJo;)?DJW*Kp2*K{N zDN@ac#7~5)dHC1AQ0@N`|O7zrXRQ zEDPH8Em!SlJMZ3&jyZ5-jNRf}OT3rS2*Oa{ws_QE)|M3`{xSQzqG#I-&2Knj?nayUbP@mY}|YDU9eE!K(GNu6`x5 z>=@{UCd2~nn*xj7Ka7LJy_(QY1AaeZg{o>QUQk)7?;O@&FKP|;9v;%J>TnF_00!9_ z{i`uYK3E5%@0HD1^d=G)qH-u`Bn`BP?-Ow<;;V20Q5l&8LbiQI7tR<|2uV*ye9GOz zr6Azc1wqSuW-ZYu!S6hU4+~_mU1r?=1AYZCl6_AWX2ugJIh2(y$W*RYR-XOoJ~#-p z)M_HgzH66ZfE4l^9NSS4ku>P|ko*V*z54F$_0_etC+eOPxb(BbE%o&+zZ@Bfg%nYb zrJ-4w#c$It$eNl^GRZ>cQq`Wf;7U=EwsxL+^+8C;fH5PY9~{6upq?7wNr*~msGmIw zrKL#Pwb4#cfxT98-w6su9z2M7wXoQyhfT`5I1KQR(jdG~j-@o=eX!vMf37*$4nBnS zO1L`GxewVc`o1e)zU0L+!NP&qmJ{3AFy_$eo0!~#891=_1pHJdLI~OG0KG*>S`VVW zmx<~Nf0p^jbZ@_iS*&0fABDfe{sFgAbKd}l?8Mj<2YeNxD(>B51VSd%+em3@((L>l z<+Zqi7br)vKM7J8f`ai4BN+E5Q{Uvvc85!mW()9coq$lNJtq&`f+iD%SW;Ui=om_q zf}1zjL3kNytATG zbw}c)oR$O+!J(*nVHcb#wW+>W@?gH+VHg4+K17>K!tvwuLbR0cmzMchtZUJ!0|v4o zTtawC)bdSpGxY8eK7Ps%o`dPc4lpHJd0+_E;yKaCnv0==cPBkE1!#1k!oXqe9qJ8- zte^_yMMSj$H@HU>dUwJlf)SQO)S@W6+Bm`w)<0RfRfTz|2tI8Is^ero7DN>6MYJ2j z0Q}q0Wjs|hL2rhN+6RbV(Z4wdzT-kR^>|Z8*@44T;3Wm=PnZKv{XAsf-HK5#lg@(e`$E{ax-o*lP$}iUkU) zI%YzN_Y+Q>n1yDe_dlFZ8g8;3?YieW>WfMzX;ndVinw-79#nY1y%n8GmOgpzz>uVg z0F5(f@8{z{-aLzJD1nZ_D7Ti{+F9z;6Y`{H1whEgHSYeV2a+2vv>i%pxz2=9p(qGD z2$TdbA|A^dY_KDIDi35v>E7?mQ2s>6#Z^OiO&$p~5=sNk98^!euN+s54h9qrooflz z@d2b(!PTo;*izu+c4NE`02mnm{m}^!x5IlpyRwxR6^%%6gK#{|U_8~{9k;_Q!Dc$z z5CoHK4ccx}+`%fuWesq;CSm_!K)(oXHvUf$0t`0**$(T`I9+u%r^$@STT>{t*;2;>8od5>p!66Z& zG9Vl2eV)S$u(i|0r9Rwt$7D+dP0A<`)jI@otPc&}ZkDPR zyZ}5g>7t8qMqXWwykvBAGs)8S6vRYGs}De@;+erGZdY;(aH6iEq09QA z*mZCoolx761{_k~qySt=10hj7z=^WNm&goXxQUu?V+S0|z>gogXmy0W}0(& z>@2ib1X@{0HLZ_D{*T6h_K2rH&}RnH$s4y5CN2&TF36LhudnDpVB@kwKGgrFXfC2} zk47OgS(uoVTF8h`wr`Jkl9168i*I!51`P49h31+l zSVO={g(1+}zR2CIXJDY^>MDVzAfm(p=n@8|055tE>u*WoeTqVlg45%(4Cq!l3`-NQ zbnDhnYao&`{$Qzp_;4*|6Yv+RnXyPnt#A3xF7jww2lp1X%AW&L8DI%G`Pl%Fgu);$ zXVOT(Vc1t*sCO?f^m@YUJ+#;~-qv*iO3$1+ zbqLZ`(t(FIU>(E=uwB4mnN7mQselJ$^Ct%f1{Ax=>qF?8g?-KD%$c(j8(iV8*qST( z_7UrE*q|&e?J!~w+4v6oCqYU;cHl!(3W!I7)>K0#_)wKtrsm=1c9_&CG5yKaFx5aC zAX?GDn5}w$TXLg4*obw2e2^g3MctMU$0;KegG97HGcPufHY&Qm2-Hrua?EAqy zCNQSPmWVwdJwnwG`W}Ll;1v=8iQpB;Pw0dMxH^Dt7W8doKwkj~hfS%w5QJu96u zjL_TR8e&Pz3^!7-yC6zhC`NE^$Hp@I4VQDC8J9wbp_$oZ#!fW((xJTw;ouznf{d(e zIOsUMRVKa%p24u9_L;c4?Vr8W%A_#dWV0$LMMm5Aq4y6ER1k;Ot80boCn@PJC|bDpt_(d5*(RnD#zs2m#7~5VDF*1q z&Vl6u#V0G)!yo!EMsVwdEd2jiJM*v}*Y54#6(VDXEmM(stW3#N$XwgBB^fH2Lz$(~ zCW**ggk;DRO53bKQITXONkv6MDI`trXJtS8*}voX9mo5}`|jfz?DQS(`@XKV&UK#W zS{GMhYh$A@wh#%$g!x`9AB`#BN}9R+GnFmmNuw>diIM6Gl%K}=)YR14m7h~D=Z}2X zM(;?vtNGNa%|sUmkf)bkrJ&0s3t=;Ccy43j`Gn%%0junjL zWdQFhL=JW1)pYb>`>3Tf9vpw$=szLJATClmBU%p}SavkOR?V6jCjU(Dv-@aIRa*Ju z5PgshTRr*LtWVdxH)h>(roH@U%^Q4=SXw{N=RZ>znRxiGKmPX(eg5^wf4$wm{up5{ z3#4Czf9C9Im7crZ%y<3$RK?5V*Obb*NMpdG%=u{j&yqCwJ_z1md4qrbAc97fdaD1u zOs)Se2raw+zWu-d`0p?MKfixu4_#GF*YNz>jN$|5eNjqJn&a!T6&a@3 z$-ouv2E$Nq6wsOsbo5++-OnF~I-rwIc{Mu1CpMkJj-$Ex{rmT2XOh#gQVQ^fVG@%9 zA=1p5jxzDR)?IuoC2)N3kWx>ae9fnr4r0cL_AZ*+&ZU) z^^keie_$E-0%LZBw5>JRr5}r3*!QD&n;EnBZFPw`=1uIRabP}2+LRkUrnMxDE0K0s zaQX3`=jgPL0aR6fdq-ip4U2ngMx$C-Se&%Fc)CCc3EbA@hooN2i)-tWMRrpwE_@^%8^lsG|4w3JEEaTppFRZ0 z&bKP~7g8>r#jO|$&{pP9K%I>LF|Z(KObJ@N%$20)G4q@k#v#*@Bk5+U&h;|VQdI`i zVr!;$Lw1<@V-RB^{QE9$j>|O6sc7!k_Yc*;p+CE%euwD8T&POT_4;AeY~UBqhneQy ziaf(*XnOcoETtKTC^9jkCD^7T#qS4-0q+GQwRU^PcyAJp8s2LxohCA2j{Mny;s;i) zz3veL-7e}Z_~4CH+#{g!+T*Fc=2X-{Q28?z8B{ z_7Of>LvVx!G4L_-8%VkE`}bhj96IN4!+CFd55$y)hn{`=&fTT{N)j>hkaM z+nB5-;oYM9VLL5=op3&E+C(inpJ^;4xRGGF*|xSr#5+Nr-R$ezQTfZ}rmAOpKP(~_ zLPLS=-8`SG)5xPpo3FSg*b%`LJ<_7gSiQo6g4U$hpXdgjT2b~~jf|^G4m7TO-~Vet zfpE{#j3vDt>_h3JrP8PEm%&eMNi>h1K5dWR=_hWigxj}0WeA;e{l>a4g-3% znK8D0(b8~%MjX~X&@oy989WolaqZbssJ-8LhVH^^Il(i+Dh{@tUSXfTI>6mg_2Meis@{dL{Tm zvmg{`h-mcL>$-gHc_k-l!@v z09J}NZl>aaD=9iTIbX+p8l4Js(#gb}%mG4Az>a7n+c4~d4Xmc{SDjuhe2uvh=vce@ zS}Gi5RQ+XHqZAWXyWAF5ZSCquf!?$yh!+=kgcyq%zoLk{TPFXwSC$(pt@ZUA5Ylk% zesgwbW=~K-KKy%I`X|6{4g3GKOD~p2s==0r)uPceX&XrN&YS_D+mkE5pGtP?F1`=P2LCTL1qCKD`S@5R_vGcGGo6H1k7<2VvTO=UC1 zIICmwq>>kIi(n47HMHX@X2zm_Y7JbYugH8b^d0MC!>&~heVtlHvSyHHBYbZyg}Rd> zym!xtG))}=29|UmtFJ3>>sBM8&Yk4sDV=Ph>=U@#gmh@$dwy#d3&y^X4r5B&H5~0-f;lep8(yjma-G=7 z!T2&`cGoUxAd%_Sl1^#oz-m&91l_X#ikj@lviC)q%UH1auI zB#d)ftUyLZ9V!Sw@g!=8zI0dpY7~=3LC?5qCCgAOM`o6q>Q3<1RLM%c_xyz+_-=O36!jB{rCkJK zFhHXw^5@3a2uJ|vLQ7weaZ_6f}l~*zzzRgzaA34 za_X?lcZ~CMbG_kx+ETZIu7u1GIq`;IHz?8}+ze)kXk;WkEoM?Iq>#(k0a=%OEMR{! z!-!j;Ue%F1xxYcR!~G4 z4DA6oS(#D1$@EBZUzdd1jzG6|9Xjl_oa?l%o8GzfnO>qObn7N1Dmw5CF=S(|k2zaL zYtPWOaiuqAe01N0B?rr89W;#mYu41LQZ~`&H06DR9aShj{~Y+=uPwD7_h_5r#V^hP zE@y`?0)O8?l#0J;sKaw)PNkx9{B&ZL$T-|N2K%n(!ex>0RdM}K>NFy~$GPmY+qhdY zESY;b0c3%vtk&fycb~E%1b`ugSw|F>dj|(h2~xWAz<_e%d?xnUQWGd1u+amZzk}RY zjPGfWZfut3NV}5g_FS_(6gA^6;CU-h2{Q9S8{+ z&Q^3&doZtt@B!Dd5iscbS3>3Pd4b0!=BoRhVR1-@4R=JHdn8RZ!;o<^$uce(v#N+DZa03ulzv#Ny)#db*+uOsn^xEq=8CJ*Z^5Xf3;+T%+Rql; z_zo-nkkN8bd1@rbIKC|hI&5LEjH}~oVH<+_5=Lb|gTzF#l92|YBCx7-x_zc!XT!$2 z&;>%F5U<;7Bm&43(J3CDw>HM8FHICOWKLw)6|;-OhH5H8f&%7{@D9_=DBYNrmRgKx z_QocsqTo1W!qNt^3BTa7B2s+Ygzstu0vCtv!6Bcpcm%_v`j0^7SfS5ikyU*ZTYn%Qbit7=24XIC9EhE%8M zof~B~J%tN(+-)NN!wBcqFfwXu9;cQ9k-pG?-G(eCgLSZKcpiGv(ahfi&AHR7&N3S* zNbMr_dYRBo-=P}QG9g=BDRVLhyzcPZ7K7zEW`CTY*(y3NE{rWT!|hgRP69FWsBPT`T!^CG>gB@>k1%8ja2^OHE111o(-K3}r;lC+If)N(1Jb zj{jlCBa*tx>_ERSN5fhf%&LZhAiWZp5P~K}AR4u1&^CUIAyiGUZC_p|m;U%+L#!cG z4JWh5bhnV2aB)7(7u^kl%diM|mh@fls2W;@CH5@8ma5obZ$NHyZ43Lu-BsQ{QdAd6vm`E2PsjrsrZ(@XlmYw)x5Ze;yRb7crN~-H# z{;es5@$2iKqdK5zN#7N_Xv3K^XF@+Ev{?JY=+~(a->=dTU(dvA*q8FM$4`wi%sVb1 z{&aady76ED=2x&A6In%cpRV^%-+3Dl7%*4zQK+HGj}IZfw*=VL=`w_t@4YO2;2-C z6B))LK6&z_4Y@?C=j=_6d9F?}&kpbY5jW(ff(Ap+QSDR}P_&8e4#&e)mAdfjVUNaj z*kwyAg%thN%YTO#jP72Q-QcNW>PG9VM8mGVu>d z0)>o`B83gvKvRhZCp7Ib-DAg&3Hz)@%Jh7KWkGSe`%$XlUmsvy%XmFUt$e(W=Nlrm zX+>Q{&<6D`W8OCLM_UG+h(v}@O0l6yQe1@0?GGCNUWdj!Dw$i@fJzz zx6N}({=%W8+rItqOhf8!8@icA7^T|tPA>zpi0{*qMXv5=Pfaep?n1h=zGKh{xFM*J zdtyrAxAd7}LWU@fD7v~b?>8yvSkTx|W)W3Lhy9cclACxb3F>XTO+g-&rg=7I*L&}< ziCTu*sL-oy{bm4`8Bbjo{t_h9GWXwB@l7o@*-mY@>y9`IdGo@030ig` zE7}}cF)RHk>APn1$V$-Kcpj0+q@2sN3puP}Y1GVXE6_(b@!qFEBh@@)(wC_zAi13a zK|WHNgYRK~VKN6%v5g{brh6S}6M=cJrHEl>(*8-J|gdp@K` z8FOgU@#7PC@}s-`)<_Idv+eE2G9e?zp+!GO8}CocSsusqDfM8S(M^SYr?8&MwNyo?9e zjB%OLEW$)o8Ns81UrBnrt0yKMF<~QXy=et>e_1-?}ok0YYt@NkzDf=3-i zZV?rh%)bEE0n(~LtBdx@-I#e}%{mBmnNKPMbdlv%6i5ddUqbmxziE@^ZSL+uzanJI zVK5u`Y5!FpWq!aKNNpTS&ToZ*k+{ES3ZO&eSYqLZGl#Pensr#uS!3{Chfka+zO!^^ z(+9wVSg8hdF;0CE^ojnaqKrEGEpc1&q~h7QHnV2^DXsi0 z3t%&PyP6VW8K&CRBE*BBfwIiGP2S?YE_q-4?Pm`MeXf1-{0D2S+j^B5GJ{S{rkqmu zfNtc7F?eYPn@Ag~6cFOtLcJyh+DPjuh*Gq^MMn#rerFxf0XlwS7v~e2P!+m6PMSuk zIdtVvGM2w1b_@|qK(}7Zl7n_)a(R-v6z7uKES-+fg-_0f>Nq~M`(?{+aTv%4Gdn1N zbBGjad*RxXvDnJVbiz~fG5w0jtX^Foml#q?6#?wfZj7f(^jr zzgFf3Fb;4&_HJ4q>&h>b6(uVkjJj=YY%DhXMoWy`r?L1AC{!gv&;~gIRm%om68E(@ zisWv@ZELlKnP+bhr8WR%bCLt=Q}QYfORnn-TH71`X(_6er&HpVGLou{otNVedD4o> znvE}M*HI)*i^+@qZHf6AU?oBt$L-lr8Hq)VG_QtjRfJnk`HL9{|I=pAn5Ddoi6w6c ziF3Z+r|Fw1B&yVHnFfElFVtdIniprt!PqCL>;1Dp$-LE3PBOrgE!tzyi8>J^ZWU5+5Qm@z0NR5K2lWKB{L@A@YpP)G>l3K@qpwoqz;)L^cN=r(D z#Bap}Q2oBw*q6b-AMEmKt}$6c>N41`nAI|)n$9?#Me|G8XW}h|np7k0#8HD9aFT@( z?YLewBdyytv?YHl9%6BV#21!B4va!gXTBKDjGCUyQ6)L&YAc0jkmzZKhC+MDp>WjF ziV2A{W^3RNY6Wyx_^J`!~-K1V>T;(_-n zmPy4pY#5TVu`d_KIbOBTt9W2GlC933C7slc2vGAN>PaIN>CO&RfCxMcJksP)XKv*n z89MxX7T^GdxgMjL8X_BcU^bxFsKazmW>5h$tII(WKpYuh!k3j}rWC>W(4-py1>-Xk zyE8F>TeTkd2dP2@LZ#)vH4T6{FX#u8X$EMQ%tTjNQ}nTfYE(W;&^Wo)1ost9x*M+7 zq?1?1DF~lI!j?G(%wY*#__PZEX5{=UGK|HI0V^`xveQdf7Z*j5i7pKP2t^j;$Ubp7 zLG_R1p=?NhP4gW5)f;dXP@5j&B*7UR~*8X01t1iqr$6$-$Z~ z#srHv+M0}iYOAZOV`@5etCo&k$k#h}?+#^mYBp~C^L8K!hlH^myLFie)}1ApFb2;yPp>_llB^>Sx|mRi_Z% z&Dun5PMos5vW2d=&}^2}(JUb#!y+=CSwM{C$XOSpNAVz8_=$sqFBDnVWB2|Ibl++=_qx?tj*& z|9jQ<|F=|a5?0V~dG76hzCl?2?_KsRYw+LV^LqpbEbd$%{jcBP&@V006<7Pqul3?` zYi6uB^zPTdCv4|%Kg)aZ>i_)BM2QpV= zhQW;d9onwpO$JXQKfwrlUB5m+Y?+Mp@ivW7nf*7A0TKG)DpJLd%y9~}@%~TjbPX{9 zVWc4IPNQE&>8_0n#01B9MM@sQ5Y(InpF;n63$0S&;Tfe|Z`iQdhL5Qe`44bMd|>o5 ziL(w0QF;goVU9@qa;PNdVrYS_OrW1;d9{lSYHb>R~HpwB48Rqkr z!?KFCK}?$H`$D;i6h}fdfEC45>8lp6WtVNx(XnO~BQd5v(m027)|MDdeIe#P;ZDKm z@nmobpjhc`ak)YjWQ*VC@AdZ4zLB@7oXJ2Rt0puVW`)CKG^utGq}GGbrG0ezNjAWL zUNPA$X%Et%$lxx%<JE*H-$5(rtbOQ4V^9xeo|+V)g;Nwo&FzhE)EMI#zu&I8w}EPu>JR)^{8Kl z!Z?S{zSEFgx?U~jzgM0wCvA#rQ?X$T=>L2fs8yx_E=3ULWSIm1dfA>q*zp6u9-8mV;IwcTc&F6;`xs4+O=pjqCI zyozXrUh0xz?Uj&Z->a7cV5oOZLF$8Z%jFywN@y7NAFp%86HacUsrXx(Uw5Pr z8pXt_N&7oyTd_ckCXHgjk(fWSoS1*8PBuR7=K7iWIfl&%N zIf!W!fXAr!4!b!vx<`+SE{Qr6@K6Y~efx}hPAgEXbN$K@C^~cZAMK~m!^Cv%jlmj8GcmRsuP=f@1OF>nU&Teju=H3#! zyr1ddvv?3Wvy+~mzfgu}ncK|(;TlRE8ltKC#K=Im{TASrp!od7i^48lio-(}=9oE@ zvlGm1UxJIb@7w1MTrU{1{y#)%ddHN~ zm0Wc+DrbTb0|@{82P2j)0atd&FHO(^aX=lB!5c)lg&h|o{qvO-*JGNLz+N07zKO0a zTaidyYsz#c2H}o+mQDnR+nt5i7@DhoGKQ9g9qhsUa9fLLW26^$T{7a zeKO=v2bA*NjK>EgsBYZOfO2EU}MhQ#k;c(cnchp(^b%Jy0}bX zp*`fh6bYsPtDy+f`h#Fw;9Z9?>gNIdX&}7_0R z^9+7&3KKpIzqGgn=^Z!>__U04F+$mr!EG=OQf(zRF)tEW zH4&X0zb*KoYridQ zutR?k8-}|rXV1#1j9-lo2M2GYbwVa23BQ3CP(ccpZ^V3`n|y)v7O^ymABKm~>NVFV zw57-@w5;Htm)Z-5t<<;kUtI|cEsu;?l6-K07wIvGbuX42HpP+9#rpq&S6yx4Y-Roc zR)r1pc4vV0G#<-qAdlM6YR_JlQ(%b0YV=_R^+QIFWl4)?h@w&M0FPeIjv_aO(#9$7 zA6#+_!mOr9Pn_sBj5n2YH>jE!7^Ev=623SW1TcM;toOYewjF~VkW&Q-K0ao3n zqO61>{iAyA6-s_Y`>8Ya?*u-sSEr6CE1olZeR&{liB(i6YaDjW#H2!1Ig8i4r?VJ? zga_VDTU<9W&XQ1NE-B=on1I++1yPmd@P%DV6L5B&@~Qsd^!M2({AlfzTwdCK`iA^8~7#cU~yj^+_WKrguy zcr{Rt<=)fZB8{i%&PeQ1n$m2Uzcq-GOQw_IrYYmJkzs67rUz`JP!cK`dI2IZ9$xWb zuz8E#_Rs2&XKsT4JZl`2XTo(7nK35tsN058%MZ@bx0tCpp?_HZLNai*jHB*cQ>Qj< z)~&y7*^Kx$nvGU@#aeI1wcYD)-`$D@OVxx43lP^x%&I2TK^=5a4|Ih9zk2=pBszjM zH3vBrZcxS(1sE_5YfXF@0kz0$;A`Z}SN7o~G8^Y}_$j36fPx5OoE*e(ZTY)x1ur4N z5?;LUm#$qdgQjk?(waRw=Q10NbQortVPl9wK~su)N10R?lm``JgnNGp{mB8C$&a-H+)q0QCd=` z9nF0nhLlFSxfi6CtgYS2ty^?)5&Ze84};(JfA`uoD!EBKIWd4JVwDJQ|B}Hav5=n+ zwe0S3AIvQ+{bRo`?i*kb=T97O7M-cZky>^nIBJRUFfxaRt7R`!Nv)9uXF=fu$OyL1?OP!d}gF_k4YXb z$p$wH?{?)}zJV}5Qcp&f zo^$VwqLe?I^8)w#?7O?~1kH6K&O+A2pH5o2e7V4CnszS$b&)ZCXCg~3C)5*A-!fX{ z1Ss*@Pd?o)+CwEPIWW*~=2~xj2@`1?E7d+q>O`?(c;W#t6ZYXaQsU@QqipzWi>=@I zm#MfP;F+?+lLt%36)_j}LsU4A*qX(naM9aNQrSuAhcd$Klh(BQb`x;672Pt}Ii376CY-8MkUUPdi~x*XIs1eM#RETtlp* zUZ1{W&42}{NBCMl+)N<+6eM3LALO8EYMRiQ=`Vlx)Mz3!dH#T!Y1na-5J`nentEY& zNm98}aoTE`pwGUaLm@ajVY|we0b^Wf`Qka*y}p4YzeXx$s_2wUi(BApI*gr3PNO3~ zeTk{9_kh#c;%AkqYL=vTI?Ncjgg_?P$FfRDqB2C7CUD#~rpT3;FyAriM;2Strhd-a zqv!a9?e{UB@7Di%+BR4L)<<|S=NNB?gqQw*E34*lT0RCu=zAJgFt=|493pKwcT~m_ zaYkwA$~+62CD(j=I;B?Kx^uWAvO#6gKy)wZs#1sAQg)l6u@?==3fg1mEtr*eSP zWa(L$aM(oU!rY|0)ZMJgXeN6A4kn(PZbStYZGS#u1gInhKQyxtq{E+^5XSsid+VOF z6HHir+CMtoz_`DRYA!E$ebU^vtW6%v1%&mxetP4^jJZ1~sodS+FITz|sq0!US$oW( zZF!~jOf`ayJP|N)*Q^t(z1M69pBBD$&WFcphaYT?c@!C(^(WQ1U7c0eTk#Ggah9mU z1EB?YK%H5B6;@I8-UqsVZ$`wO%c`vBYh8M_MN{newg3>cgs1x}@E>Dtk7bTy%locu z{t)|xL=>08I~}?A8@PEA(y%#>VvT%@A8D#G10Z_qAsN&N(B}~GO-^@zOL1V){nHk` z$OIyDXUovmgsD|p4L(UKDRDaT1MLH z^z2h74(Sq9sFtM7l&=^^8t!ZzSvDy7IQ_$O$qvtY-Dmh{Sjr+EX}@m8iJ<`%%Rw}B zxv4m=sWT1UfjX<6p_yCWj)h3P$ACvSIAIrJyZBImn&avR(WP741$G>#jcRjs?YGk_ z8?}kxyyCWP$zeE;_RQlM2c>t6(?Td>7*ZPH18T8=*Wa3verl-8jVv&aT>`) zwt%EKN~v*>uSV3-3h_%9$4J(_eY?;Ou$$g(YVBgX`246Hy0G%o%(v?_4t0~0x7g1Q zVZan}=y2dtv%xM`zWq3hfWMQYE%<)fp@Tf6$U!ixeixhuMq1LR`ndXKxfc^C!ov5L z>skG^iODV7Nra-MnD9TfXk9>!10sVD;wUfnLGMWS@d*N<*v}&06#+Fe;E`^We!fn) z@&TGW!Y@mc>)jR(H*NwoB^np0{2@&{Ua>9Av(Svw z68JXpSWV=?*(659NKcvBwl=pt=DXQXH&pgNaH8^aX68Br(ds9F&^nm;J0>qZ?)MIA zr_QTZ3Fq1R0{1=m`yHJpb>LgeX}>IfVY7?7x208x_50oHbw`M!;+F0(BH{^TpQ&ab z+`%qx;j@(0fx}3BP7KPcX|hhWdcvVW1NQZt^GHW~N5?%iydSq-s(WO}8`Fv@m=gNp zeD95T5Sd?wu&pKVh$`NGyB;OvuC7yhNDc#Jw|Y!Jt=GDUfddDc@s1%XuLzCv@ZsD8 z)SKhLxreE~tr^2 z_AxLOvOx-&c9IOM03{T9Y4Lm&J&MqlHcHO zmTFn*%~-SM%AGx3{UoyGPpbh3(#L}^bd~Q2@1%v>eNx!0;l1YEZCu1WqyX}nWg<3` zXUbf_P=|p7U&$B$`0DE8{e+~olWwe8x}3-bIK{gZ%#P{+;OIcgYutI_Ehh1$TSa1n z&Dm=B+VM&Sp#C1T+&zp%b!>>Zwp5-rq#%bed%G>bQ9g@bode3|hV+rg0lmRk;j3n${a4iENH0bJ@#13yFoTL|D4Mbc7GpHh^sR|wYr8sb>RRr z>kG5JPffpiL2kvJ9c{f-XsY4c# zp6=;IO~~f_KtQBxz`7F*Kcn@r=bXE<>-t>6-b3HrsqsOoAbIqc#Qx`yJh8D2V=vay z(0Ic}oqcC#b@p?{=cCD-c{3UwCgl0p(W7lEE6Oo^OAC)zx%4q{QO_>!-nladWD??f z6*$6I#>n;t&vn|8_>`1=pscCyx&e9crDlBo{5vB3S=Z64xw*XQP@X6uw+%UjK;;$u z6J&ZjHMO+9tKM}CQ-Bz5S<#^(uOTv1kTKEJrHl&-bmImK&yVR}G6mZ={qbTG?JZ*_ zz}?&>vbZh3YMAb_3op#+=!)w{8b4_AVE8ZC()dBPX3h5>*7v|@&p(AV$D2?b$v+eR z^9Rib%lU0nQ@7{DDkGO4`f>iwHGcegeZ5P`&z}>CUCuRHIX{sFK#H0G5Cod8ST@|W zan-A|b?C;+qEszUnnQAuBUN>BAJ|_`J!Ks=n5(4?z`CP_X_n^E4xi;4M7@3PJK6a` z&-!bhygE9I{ehV(fUP)zFm%w8W7Ss3mn%6je8h-C>RPpe`vdY%nwV-2fmi#ZO%)E` zl&}j^`BDPfJ|K=Cfaf&7aM30w%M`>nxq-&}s!MG*?Zz4d$=U7NZJ+`hU7f4%8F#Y5 zuN#v!8X#^U-Mp}STtYhvt1gW-Jy$rHE@-@(udt&dBYG~sXL2Q1K?UgvL_Rg%)KuH{ z^bom)PO7lwUMRTYzL~iuvpP^JXed9wb*hE{#;jV6m=VSXPT?pdRPnz?I5gGVF*0Cb z)onY}8vG+ePAU5zQY=wahw$QG4`qk@Bd8BqvuIga$Ngr`qJDX?sBaUHi|RGd%cinM zl!T)6P_w_I5~DM2FPY%94d1WVucuw8mCC?c%na`siItV;=X*Z#=Vk!O8Tp-Ie_unL zgGS3Y!Yz*HJVEwEEO2%dfj;KyrUW~)K2`UzQs1r)cR;GXoSg4o&jx`|akU#+yMAlJ z=m{|CI(Sr>q1hyaSN;C?s}6JX9^q*q>YB`+oi*(2uKoM(vT`}xOPh7}4#wa(aX}C_ zrC`?sTL!*a)VD>C9;aLENk4Ih`)8Wv@EfO%v!0qUuo6>3RB8Krw>@Fl$-C!D&&lW- z3Jol*O>|reRHzgcskQ4Hmu=^voU|FP-H5LTuW+jM-%mW9nN5P)gioei&H|~|E20Go z<=@eNm5k48)&CX&Ui2Pe@LO|81l67wT^KS(tjW0qJ95$isK7J-dCNdB`0Q^T0~ra3 z-Y}QMNKfVK)g0=&22YZ-6Q$tll?oKlX0g4#hK3yE0}ZuHi1zI4<3oRQGD}(1cTwK} zjiJ9bR7I^gt(orSEAi7NQ*!7mJXnA5kLb)|5rjX6Cr@Obu;V#P!03-qUEROe`bc^! z_wZ?zL2kiN(Q?R-1U148rQBu?QPY@YT6Gt)?lf-IDhUY!XuiAqwBKkyX|lO2o9epr z^eg)CuK3~tL5%lW2W{E5aXsyTCi{gWgr;Dfh z^XGm>N@WN$fEkON#de+B^x2D6uw%iCu3HVHpN9EPl*mM9 zm!G*OcwSR|e}bZ4d|E}K9u0N{Pq=pTg)^zQdUdh8YbDi^B|9632|U3e(4^z{k5lgl z8YjboGP35{yjEL3bo+H@#$CZWtxvb}$5o}S?JR}A;SS)Jqh}7(s7&6gfp|8Nf%5b($Z84B#@AlQXVgn%qmfY14SJyR>~sD^ic#rX4<;anw^-`U$eU~=t%0|$VR?Px$kgj&iP=OOT{xVuF0ko`Y_irkVBP-_?* zJHj@Ba2Y-+0z4~(K{qK@)XhbJt3UvTv;Y;pOCAT{T-j2l3&zKL;oNh++nU+r?2Ac3 zL#t1pF(W_KDtd0Xh-Gw|r9`7qv%&TN3R|yHD z^OSQ3Vw1etWww`7@9gW3+*`BS!xg9lVzqsM2%u-HksDKbb;kC zCQ=E(4Ez9(HXF3|uW$Wf9K?n&Zd|hZ-Y@W}o%zNfEHTYe3Bqgq&fFZ7TwTC4d+zqN zjbxvKuV352!PT2l7b$)WkZ0VWZ%+nwui~0W2kw4H&lcJAF9yrikF?$Do2eFu!Fn9PS7L_1XAKlPU~Sz~OL z0Rs#dgKrD3=jX8_Di)VYf_j^sJxAgCj;r^$j6C)>Gt-tRGM6^dd7q}upMTP5)kpt} zuK*Bc#IU+HJjAVmfr0R1LQP}f+K=MUsBz=jBupFSF%8L&aVEUY&0Rp3g6(3y-{2bh z80s&fEl_v zI4&tEiQ{P!GyDI*tWehmE_puQjd`vHEF)KXf9=rYz z%gV*8tH5Jct-9~=Bh}E?aW4yFO>U*2^PYNRO&Hwtj#{;AhyVFmukwDKmi-=}do_>d zq28vp1fH9-r$aoz+4gE$EaFC*nzk_Cb0aK>FjCVd0k>Plthoj~);t=X>;>NESdG`P z-iD;)-fRJ$hGp0hRvmoWe(qR{XxadhNfiDVU@dRD02y;GKA+jkgD8OsXgM?sGk)u- z`J=`ACl4;Y2Q#J>J^TKF5<|7M+=V(eqC5B)%ms?YanKMv@J+M8!D+4sB(oZ7i^ zz0CZSO%a!tmiF@U3S3AOt9@%!ZJao*@MYO!>`U`+6m28iY-&Q6-XwYH%FoD&i^=~B zK21U$HJ>+mavez7d%;${-p6tcYh)$(Mc1BvnN$@!|+RIhb9-1YF51ozg5PpAi!mgl_) zJ34IqH+Bp@`Mz;ly_~-~=#%*aJ2xCDHy`jXLo8&(`8{kw~UThBf2w9M8*pV8+7Dtvn z5qRO>b-srb<-7tyr#TUaj5CWu_Z|dy9UH1d8k&8KR)0QlG3l$`jNFS)g%W7r{x-QN zsY?_Iq$C?GcU{@-Ka$idzQ;wWfItQIW=-P{?@#?chPsazck7;i>6om z2|(H(`NZyW>RGE2D3fN<*gs0FD?==(|EjMj30IlnN=0($RSz=-_l5_;F76(KIJiu~ zJT3Qr`}XZPUqETx-Rj8)_d2W9GgU(>!U1xEah_chsjh~#{mZ{j^@$*a!E$T|qN8-T zI-~a$_fX64$;87C17^TDXf*9{k19o^EOK`HK7F2k&^z?HxP=WlM~1J$Z~>JZSFOqc z6j@Z}i*@hQr@AH(FCi6~QGE%_dGAQ%Gu=w&ux-?3hzCbfv?u$CIpSF)iv|EQl1M3x zB)nWUUU=%nW>wrMq80m81#w;GGI^X^WW)+yc=>K9_kma4>Jn(}m#XI;Nw)-8@YM~cT?`BcLhmzl&>p_Iu}bJRJGmkz zP64ma_;~S&1M!yHD%O%p`{y?#0&+vCXs%fA6Bo^O&^Okzm%3 z&?H3}A){flW(%r6E8W`ip!Q#n)W-2Hlr(chPKNrReq?^86yGTn41PgsG6(WAWQLa+xd8M_T1`|JOE7!h)*?|&6RL)fFY&PqE}aT zu!dC|aAJ2fWw#N>X(>ekCP2_+hJT3VyHpQr}4aaC12jB>4j z`8}yL6n(q6I(b^?(qF!Pt8RmWvgk$VI&Nl9dS3Eg;QK*u8d%juOAW&1gt?Zk%3H~< z(4t`;=p95C4m(h66KbK(#Y-|O7ruX-d=c(M7?gn%;krYD?~`uZFQ}HHCzHm>{9C3rk0I4StX^|?{N-!tD`uuc z_>VF(JI3v+*T$%PC8vmZ5u&*0+jGOekXlt%2l$^betic1m>%9kY?Dbeu8T-ZeRC4N z2iKD=J>+7~@_?&Z&eSAPO+`{TTt3o%>SKovV$Y(kKht>?vacZ2Z8BT?*>^dQ$N7++ zJBl3KY|B5LeiogdG;v~xQ?74}GaGT;^)wBQ#+^(^Kx;~}{c6>(uU>J!y-+9~*Dn_4 z4jEXk73h@HOo{yYp(~EF*-vM+unT#vCP%}9szO$_jahQ}F>WlrUM%R1@eA!8Uf;mN zv_miQM~udI&fySa0yM>TV|O4;Q70z#b3 zU*vcm*~OtNkdk=m^ywbBHOtbsA3oeg^-Gq&q8pV!9t`6trOdSjI}ni; zJ~=rAKF2M*dUV(GH~wT65Or=xO1m4yubsJ+0!$^MNy7_65=(~>ePa8OUmsxevM)#G zdBDIB)_%zNgWM_+H!fBa5`hRXm%7`c*AKw)c!VPw%91DwPr}XecfojIqSM^U$kxY! z@X={6zaYUdt!WsN$GYowav;(=7{p1Z|LDw4v3sF)pEO^{Oj%|P;dH?Eac#~*$Z^?%<=l$t&LHra| zgOM5sfkBO$H(!``vIOIgSn1GQI6ZS4b*e~?*iD(v#P8M>-iD~(P*YRR6BeGCcvSuK zs(pAa>xdmjUw?dZBgoeHfDucdclxYbn6>py#Ys7a0t?FrS6@R{QwIirfuKrXXxjmx za{;!o?|($?J#b(VH(95|ZuHo(z3`e;KE8$xsFw#t{}rO+PwPkrGJc0PZ8CRMggoP| zk4$)#oxJVMIU%FHA-J5c)gwj?T=3);Byz=X0D>T(3Fq$w&O79kb0|2A6m|?? zgzsX|r8d-wAF(I;f`%S*kL*3JRUY{o`GJ`)y+LSe)p#pml@gB1fvQnPQ9NaKKz7*R zI2Ny*?s;(0VQ40?Qg^8-rl}$3uS5&rpI>aG{7L)|6%7f&Z>bwX54|lv2@5C&PL#Q# zpuN_(rOCXNvB_io)CZs+kY;rI^qK65&~d~A;lX`%%_TH5g3^AB9Fa1ZOvG^PH7Dm_ zuaD()Pduz|hjouaXOArZKCSxKN(TpR|v=K%W$=-e8%3VHfg%bF7bqSiX77>S>Jnq5 zRLWe#K!iJdIgTdC!gD2NS)j+ab#wN@kpra{aQ7wslA6%Jxx8R(1cK4Mt7Rm zw_Q7T%6JFDVD_2wkr#rk8GpcDlkP%d=WS$6>9m7|Uu{`Q0>|v+g=kVByBmd#_3QNM z;`1N8T}V+FC8$Jen4z0IUg=|0R$Z6Vreum6BkdA^f-NuUa2@=$kgATw%?kPkm^;j6 z1$x=~T(!%x?t><*R+bY*#UfSL=}=Q`HTGjLs&rIoq&BvKL3s>}^#||m2VMt2F*QR@ zCekic-sa~!kOH+&*}1Yp%)A@6$0c|qYSRprJXaCNKlopY5p(lW-s`lB@_Tw?GNU9^Obt$AP$Qt4u;V3CByzTj4S? zka8dQ$%VV+A}qsCKu)XqqbfAF^N}dhdGhJqP8B8Z%rPFBVVH!XJW;~Rp==gA*zRsq zA5jtm1?$)xa{g@e7&JPGspo3`q5|}PMuuwIn;7bt5R@@X^E}BPBD^Cyk;YfQ-`b<1lQw=E6d7Xf6UmXy*w>Hb63NImL82p+T@Q zau32+eX`24`UKks3_S+ZUG?6SNWIAO`c&C*$;rt=265%&6Enb&8S1P#rZ#gzsX67o zIi#ZbqD3DYRSK1LI(eby)$^!ODWaGfR&M0E=7pPAgn#};SVT2`K%)rlR+PoPI2Y$J ztqE^)a#p2h>s<6Ww0rk#@P~ukJM-(zs#7r|N1pYVj)YYNNQ2Cfudi~CJk3)<5Qv?f zxHriv5`z_lnA?w_i%HA^5r-GgRESfRd&qSZ-PlTFq-bYqGQUpei$%hXW!amDnbe1> z@<5&u!!2Ud+q^t`c;>m)zw){kc0RZiFR9#P!JS=fT>NUexEfe`!docfjo{%h{j7=` zqad@eDZfau8vtuEEsEIt6lKo;a=Ke8vsCit625pTbfegQ&G7*6wQfMR*3idg)jLkB z=uXE#e^S6ccKSXFefbcjv?vt3CG1mtY zI0FobqxapRA$iaa^yM9=j!9wUz#LEOT)C6`kvVvd8-73>T<_wQfWr^p!h z7eZYSkwy{s9eo#F{y1qyzVK)YG9Eb-haaKCNPrsXss8JY=)V#cFY=`<<0 z4s~8j&by4vcE!bqnNkLp5tV1NZ?JTH!RM$J%E4ArUn1j&6iEc&wM8$Y<~=pDCaLep z-y|ig`yo0+C7I~zz6pBny?OHyfFXO_*m3t4{2P;)97}roepzQ2Q{9#7wSW67*b}|x z(7xMyY}bMtI!`8>V+qWMySVtvDRTFIqjn{;Pyc zXvFBC763M{iZ_8s+c>n`S6{WR_w4&+H;=MPeOLHAdn<-q5Km=j1oN&Gj=@NTITX)r zMMZ_hr;mEWR{e~gowHioVeep*X=`oL7;}uZiO<<+_u%_b7|rQ)15>&Vmo8Q8hTAw8oXx=`JK05{s713o3f+ zYixC~AgZ|E`L9+FzdrZz_Eu@l(@}&bV9Pe-=~U&><)tI-m%F!mu+@OjIv%POg*5J6 zpnJVntsV**tMBrg3tn0{nmK?<6l)rOq$zPt`M2jru0Ovze764i7snb%i!U2QRlp!H zwmz)HO-9>#z+?9hNtKW{<(wJ(DW&wq`_*5aO?!QH`H831+^9I1Qy?dFC`g|kX-hix z@BgxY6o4=rFiDVZfG>g}p!dlkN++woIw8a7(4SH5^R~NDq*^bF8t#|rQzjxnXH;5$ zKaZUg?GWKRio0!XE*6c-hS$@6r?f4}+BHrQ^^q833-=|MKGOCn-xHX@v6s6D4d4kI zT;KJAT(KKtz}$+M$I~YR8HO|KJ?n1>iux|W5}xT}Q^;p8D8 z9>Ybv*!1Bu7tn4^5!r_NrH=MMe+&tN%UGBBpz}pAW2#)qW_4zG_ zPu5iL(nUb>n?pf#V36}(_@T$xRL%rMvol*hBk3{j${(YwrEBVAhu+*aSgHheqJ;O&W3(qIc&V2-r|f3E;ytZ3e7=EBAB;778t&aOl~{ODN6 z+U1MqB`q~z8k)S@fH=Yr-F{7) zI#YcZ#H#Q!;^g7yGGyg?+I=+faamlisw=}`<&VJ~#V@jx?dEU?N9{N}x7%TdZqak2BL-|R?9Cc4R#WmfndqW9Tc0zM)v zNV4hRpYPj7EUo-A`2#8rd+EHutM%esNC zViwV82YTvuj649znqU{h^44=*@x=OeaMQ+?zq8Z7<-qqinVzfOjHCr>*|H0L27&4@ln&haw&p+|Hbmh~b)AAwm(#6$CnIrJ znHHVu@bhipBv z6tshCIfRwIhH`oh<^`QCcGt1=f~=3BCJNQF`n8kb;0rYL&UnBDx~uh}-))Ec2KvhQ zJQz4%Dm>9agcX=HZqV(qdJ(r^3|j3q6jiVCiG9VxZ=Y5Ti1Ro8>ppp@8BGijG77Ce zjXcC8ND0vBx8LH(&$2^UJMYBa`S|?7ojVJCcgM5eeq^k#AF@{=sm>!3xsdm+9fmd% zh@Z7|Zg@%piGZ4Vch@P~$b$y#6XH-TJWohAsbDy$2(~x~f>(yfdVt}C-9)R+3r&Ls z6fZshGL{fi@;%i-y46@b(p85`sFAkz?J{Nc#lp=UFFNsw9_8 z7B+EbJ*hBnUp_cGh)^t{k$8apPI_n7T~8jZj{mPUtCt4KKdJ84;X{y7LH4CA^JBoM z-JK@Ol)7q}md{M>abc)7GT@W40_R~s%c9yrsFI&s zAmMTq^80P7)!bkH(-ZtHqQsw2U~)bi?3WVFk~2jdVXB1EnkP}*vXr}oC+IN!7K*GF zNwS12QM^Tz0C=z`wqA7LzP3hLQc!1pjt5V}WmEJr^($!39vvl-`uS z&XGeKB^hB!dyJiz3>i;P-)KZWNx#^5v4*v`c#;43M18(;aFfuEC<~A$oza#kL4%P= zMEN2!7ef9$CV9_v{?td2mQ{wWO6p_d&;*2nwAyRKh6l`L7A_wOaRFntc-%S2g@;++ z(UpCS1F4}=5Z*x(&=w~Q6rD6CcwuNquO>5!WvOen9id3;C#YFkKjn_e7J>c};Tm@Y zjUS1yF(Dn^(QC)>BEr|rFc>4;9b@k)7&@d}5w98LvB&k~WqOEy z6az=#fCM9d{Ak8j6@NKdBz#GTY%AP{vWT?lHkAz*#0p-}7%G%=R=(fhwI!06 zaCv)i$S^i95?xP(K>$%TaRu~S@xFmjmY9S^Yefe=Gxr(+7Jtt{e*WcNuVfi~(8VHT z6h}8f38}XR-aN~rSAXIaN82+s`gQ75(*s6Eq2u5lsb|gilzCA9ZTs}u1FoHx6t}o< z3;GfPM3$*cv&?48TeOaR7yIx`cOhwkz|voV zwGh&&{;RWX&eI0lWLr6xdT7w~*!Kldlb?YL6gGNu3=ndc-$pX(mh-Y%?66lb8--ch$cMz zbp^MZS{LxNAA=Uec}Vy_TLRH{1b`=-L?SjezP-@ijiW!TE+0$HZ1JFmOckKRuF41w z2SOe=8d_ZaZ2DQ2s)lSw^e~k|rKld#78~mK$1ss6Vk(w5M zU(cc2z)@=({jm0ef$TNS*bu=MeE#U{G(+~ySk`8OpPmj&hrfQ@d_|A)Z$1VvDp)9Q z5ucke?UAoVR(Aw`obkTl<)w~22q#G+n(;E0oW05qa6VX=uK^ae)c&-W)2$i)+~fj< z^cd1#$@`v;{_%#-Tfk)oPP7n^ROFNg57B~94g`cjJ1F@y9d z7*L)L-GuZI`~c)lrK(ZbF71(Pk$QdDO_g&4BfiF8Jg%Muv4bDzY&u10B4yt`L;`7N z#L`ZEWBfHdlE<<67k#wqWLm|_#TBG^+!k_zfPw>%`Ps6uWN;KN(YZijj*97tlSk%> zrl9|lZlPDZ!$0nX=zo))UEPHAr{a&L9&s=e$3r%`h7VJd$%g|64wR-#Bp6%1k+_X8 zLhhg?hg{#8fFr|i05iCA4^T$hxBE%4&6-P~NkoR5I$lnR;5MNUT|4;?V9CM(>qK)M`6uhtNeVo;?iK@xVmw%0KW546))Ewm`*()-M)(SAVV}{p1u6~2xC!2Yov~C z)T&io6O5?hfM5+D;UXY2AF?FTu1Uq{qT9KkH}H0h>XL(3@HR`KE|qGetFtun;@A=& z0(IIkUM_9tieMZ9u9O4P`=~%^3}ure;%sBPvETfYw3e$U96R!(7&!OzXV34g|M%9l zs8X%d5P3bx5tU|F+u>9PVTay&R z1#*<#-0%q~+HA8jL~x01DJdy0i>-@w#?kb}gOxVD4{G)3<&OuB!b)8|(Z|DJBh@Y~ z8^fW3X=A<_A0NNa90QpjqOlnsdC3A0_d$5Xo|)J35N4a)IGzvknvkvntiQ>=q8YL& zaBG!6`E?}y(5OW*X=w+ED-$DKoV@1U&I|u}?q9`QJXr>(a({?rw~U@5E%Wu7clsRF zeT=yFvUJFaw$)#z!^JM%`k~(H($yRVVY$wUxhoJkyJXqe4x+UUrs<=8cXo}1rFuyG zo^mT5V1DU~(9&;yl`A)`T(#ql3-BVp%*Z2GVyqDMe^?JQ; z=FY4XzLI*~e|3@YM@KVa3tV%^tjvJoki}Dap}_Ff`2?HhL=6-RmO7AxYN3jz<4suo zd}8;-Tu0gX#V|nSJ6hUD_4qPwP743H_37iYKy5pUFPc`ml?*@;PSLxp<-ZsTg?N^ZYNPj+yWcWw^IGX>P z*22GGo!zF_ckBN9U!s{L!#3zqs0QC{RS)quT@;_^-R`5Kk3Oit@RMkrbNR!yiAP0L zX9rhwc*e2Jlm~JxI)>!AVF4P!!0@){-3dUw+QKu6jvP#ARSiU$2&9*r_@1)t8XRCV zymm)Z2hjz;ZWMQcPDrkyYsR}%Lx}$-zzm$^xAKjyvMJlE1|N7)&Uw1+enqzV<_%xH ze*IsL1&!BvZY0|vZUX_ejOp5=M{QihNT1y~C^ezB`O?GKjEXKrE4Uccm>p(3cr>yF zwJdJ&(xqXk$x-LdvCCl2wG41^5<>81GfA?^w~GKCSt-cJ9%zy*61q{8wSNi?)D*C7 z|Cg#TX@MaxZ=(L3LV=?>cHwHXg?CPEthWsL;PU48gm9_ogM2;=65+pWv=co-DHi34 z-lpD-QnY0Z+S#I-mqW3NJ)|0hVjYWLn44iLhK#NLWOnGv<*eiuZA=P7{)K_=&1`#dVH=ZzC!X9q2Kuq$Uy2aYDs?|R?_hR7=QQs zW_AGyOo(LK*vX|I_ud1x+NomCYw)`k@s!Gb9p^19M-s?w5;_0)1fGqZGHmCD^2&lk!>rJoF zdd3*ytu;51+{He$_*Uz1~J4ErG@yt47ZYvOa+96{FP8zB(YU~=cnkz>|Z zZF-NJCJ4F^4A1=NiDL|OWFC$Es~ge6L*o%mln(&$LlTf?jxglO>y4RfD`S(<1r&u0 z&MBM)EQ4|AsbEWzaP5Dwh8tzrDV>ALRivv|KBnch%6E4bSWR_k}nJ2-0Un9-?3_;N7X238B>F zY13*GgXo8~9tp|>(MQDHlFeScG;`R*^8hh4F?0AMOJFuRPC$#M2Y++YND<8BvtG+t zGiT;KdnZq%qmO1TQ6tUU9dhed_IkcTO(^>fVL&|8l0-XKq9Y#3N8mw*y;}`Hq64Ft zsRwe3(g+bi+Z2L)q`=>E+wf&Exi+fF3Ad)*o%|dYGw_aH-)wK>Arkr|`~;w+bf&0a zy2N;96RO281RmiV6lR8!4a(i@WOwx5cwEYV3V0hd=PI>ENc^pvH*KOA>2*b=RhKD@ zW(_bHW1FzB;mD`u<|UI&gGmNZOn1T@IQ8k(-jeCmQRld6FMt7PhC@Hp!S0jR+TSO* z&(31n=K#D>SYQ;*(bJ&S7HN}idc^Rgv=Nyq|MS!&`XLr(*GWMl==42-M}{z8U@p{u zdU#@3<|FyiSXOEtKzG}k3ZT`6$!kPJQv7&G@n@L8$4N(=NWGBWN+`I!(8xNNxHh}L9rLy;4z%n z6D{)=Fe#p8ktk@jbe6-+nENg@8#GudxR@|>kRA^0_8CoFpgZ($Y1&SyFFhe?Ahqao z!{_SEpZH9dCTAXo&GbRksuQb&g7*a{ZdLr!%s&J)#u6btD8C=|>>n|=NUvQ$E zc)jRF#OXnu#{A^qyiK$@;7*yrsYF~rCYX4Zw2)%1(qL*;mXLHNn9McopvQ0Fv9wQ* zvDKbu1_?~9f+qzHvp`bSn5%lH(7W<|s|l?xowdE+{JgcD_c;`zK9UuaW-Y`ZPhdEW zN_a`C%TwzQnapIlM>CSSi4nP;0e-(hEO$l(Dse&en3L1bmVpdqkSd+9rFk)<5&FcR z7C6&i9+?>D7H7#3s0S2PTP+Uv0)vKD1=ILQEnhDKYk{l>Kcf)OCgN9opsF`)c(vGk zh#3Hd=Du__>2Oj#NroH+`mW`X9}*{4dk>iQ=TF)389`LS;2Jwo*Aoj3;Mf} zi5rPklaqQaFXggAW023~YUh~GJAa!=v>)imDmD09srzU5>b3lR`o8($ycu{FnPH`| zH=BJeWB5Lg(0i4yzRW!`)e!)1MuPo@D<7^u(C-rtpJmPyeHrv)dUD9oe)D1Y@rNSM zbYyt*kaGFo6xeCA#p3)&>#N@W^N;3#@v8v=|Ifb$3IG1%i#Y*b`|MKif7Leyn)(xD z87BQ$D4dBdA5cMf|8ME^qq)emK&3k^PGk#h5b+xW|ph<&c zl{d^wb0U*#(?C*)CT9ZhHb&JK?q$+|8Tf(!iHaX!L93*F4KT9Sfjspg!An<ct8;k%8` zTew#>LSYQh^hL((@qH}zok}YPfKngo#11I_df*wQ&8O$>LmMbjUZD(voQekbIO=K^ z>kNfz*8wnq3?176cPT+Pp1n&)8=6^_Ejg1yK+60ShrO5jhXF zWZa#O%@$~ABcb0semm=YKV>;Uo0cMEoOO!hlN ztu00q<&cQrAiSY0R1p7=0+bb3IliQXC~M$Z$r}i3T6yUUdJE!vj-Qo^8_3{03W`jJ zJg&L$cvaGrX2J^0roTI1UN93w(oyuLngH-ihNPRx>4gT#AS9Rm{L{6ejtDRx6Y&`9 zmjN&d+o~Iq1MUUtESN(a6D2$2#-?FA6h?HQ2Gekqhn0a_$*ZMHl`^!Ux}mOe1t~RMM5Y7OOem)> zY?d!@x%0Qrh(UM~=ASA12r@gLa0kA_20iZ7vyT6qpdmuEx00XHr%}C#8N|>1`hCl^ zr4~Fb5Yc%=Y%?3z7;6KY_0DigL^+e3jzJK-8_j~u5?;M3)&|;(EP8;7AM?8mRI{2~ zG6RSLcpAi*kc+c}%*Dvv8s1GD{3Kc}wSA0_&yvgNTM~Sh>3~CEfkf~q`>KHOsV-*K zsb`fJgkUjtq;`iO6=BR9d>`ik|8_l&$oPv8^cKp3sJP$4~F! z9Y2#H=#P-4!n5u(j@rNelsO>ul)Ri7F!b86Zq+gGW34X&4XIl*<4CY|NOI`Z9(vE2 z8Ja=~X`r`>;s~qQr-Yvk>H5UlIW?Fo0JO@{kel9y2VVZuQ@bC>J1+EIzh3$0-+zzQ zCl~F)Vw?fo30&TH?!!91uq1B(wXO#c(@#W__9&6}g?*?9z>hTApn)Y`K%dr>n7$hI z4cm3b##sa8&2y^Gzgq?c1u^6rVwRg}vAz;e29TOID$+%msiCD2mVygx`K+}p8|jF+ z(DB}OTm;B``EO&Hv_}d>pCbe&*L}ULTLlzr@yt8lv)U$Qf*Q= zn&{eFZtlzhYwNgQ*#L@d)HVO&^fmI zVxCjGm?g`WjbU&N+9>TzfUdMcHh3@3N?}gDihAgCOTdJuFlB?Av}4JeUv5^r;0<97 z2ZO)!F(LoFhTu$j)|62K>v@MSEBupL8kr5$*wieimhQ3j0qA1LZdIP$M)E{_KZvKM zJPF~M1?Sx{h;{5VaGJMwoz|`MT4dI6s2myR`cj_@$V4~*j~tCUH&2VLhU z3xp&lXaJ8*?He0MXbdz4vTg6UtZH{6vu3FfY4-XmZwQ1UcoYw#^ts^ z1TYjQ*g)SUz>?4pX#(TLBe7a01qPiTJ8=*NZ@9tr4bSQAxojJ)r;IPLs(v#UN8+E1;3O8Qj($kV+Q@Bd00h76fn!|p6FBPVaoG4j)V{7(_$y)gMh3H z7RXOUtKf}naRxmAdQi!Uw8&BRGw=aOhFw%ceZk^)Rxh` z&~@!?vGsE}cU(MYkX=11@f~pJSavgIQ2SHG_e@=FEIUMzf5o9%B{%FvNK?U!XTS5}SH` zt2zIu%^Apeb$baR2lIS^?+{BgDeHc{>#85mgGNc|OazdZihXXzt?(@CL$tLA*~_GG z&nve?<)Z=07x*l83ZW!+?E7#w4vvYl`55N<$&?=u2p`fqGXDN)CF1XIs6S_x0l!uC zSY%R9-@L>6QpR?QjOM^9N9K6k-JfU*>;3DmTIxY&IJj%4f2J2yk&~&dA9^@a@HjDx zt-Px&J{!eehrjmBs}8m$D~*a>@|?+Oj*~XuJbvOt9~=d^XOXvUBx`+R+ zCHkMa1c4VeFZr!a`}RSjz?eWDAQUVh@z8{W0m|m=bE}ZEqGaWkZFtZw(yTHdmBAM= zBi6oq(M;{Gs#WzkJDQS?9`J|2jahYI-)_4IGIVXU3xV3_gEvW zL|mDQ5)K$o3Nz_isdTrjK(Us#wof%)BI}x_kQygqVDZ;aCUBE{Mhj*~nxLY&d}K8F zkh#p*y!~`V&(?{m^C;zFKd>y}vY>F#2LPTixSR+qRW|@qZ$sPw!7z&;GtQtCW(rh{ z>rgU#6$WKY_~j*z)WUOZ3-~W8%qUe*FV=4qmhlas&;AcH=m_$SP^tRU30Gw3ohx!H z1vC~plIZ)F4JC8nwuh6xR0)^Jb)ZCLQPh2 zb=nCNMTAVSDCvXX^;<@O5X_*XM!#uGzw?~tzYe*CaHbg^fZAGC$KrG`0;vvzr!u}& z(<1K}$Z$^h-g83@YDP3mq&W-ZWkn*Tn39bE!&;y?!&^RyHlad#xxxs+OxCT`hFhVK zVZq*|PL3JoRcNaoQ=E!D0#Wull>=bXTsfR|Zl70{f%}gIdzTPL&>QK#LG1u`Jtf+p z?B(N*p+pp#$}0xK+2?i4v}nnvt6m%l5!d^6mN7& zn`_adwxawqYqT=8r~m<(D0$wu z@;LR*Ld_dhAMdy~Vh?TE7Tdr8IatmFN^T&8Z038%1O5j$FX2tXH0db}N+i77LD>-A z-DGV};fi1pUS5~c+TF!t zi#Ke5jHY^pO5mDtr6 zF&?|0i=eO`4p)Q8hXzO~1(suf%7baq2K{oRDg4)~6OZCVU6oS!;>MqB1wYcs0~=6h z&R=mWZrIqDb8Q@6o2w;Sa3v%DRtP5huhuj)_8`4O2dGIy_^R5EpNFMAw}Iu~Aim9E zlOlup{!8-8gDXNG%zf4bH162Rlkwiw_rw1*_ujDB1c$f&kRvhcy@>_T$q?jdZ01bQ zs7G9Tvl-&}(-!R*SR?1?jynM&u2Zpy=nD%(Bu~7h8q0y7dH|Y?UBT?^E>@{Ta*n9K z8hfAM^MMq%aAc9aOyau54}Aot$^Qc^s8t&MeLs(P)4sa|R~(oY&i|h_Rn4Sb0K~|7 z8)>D#0&8htZJASOV>khb=S2J;3Uflj&&~4)>sB1t-LR6n7)|WB$(D8;M(0wY&Pdl{B37rwJ`qCsdXG|Olu`woZ83e^l9m` zY^fu_q<7E*QI0I8t`iN$!DZMNt#w`iuV_2{?Fjk{sA1XWYm!;7R(V`5Eb;SescE#@&(lXjg>05JDoy6kDX7%%x5P+t#!mnD4_+sXn^uH z1Zx^fq%Ph%kzGdChEJKP*Z5_?K!3kyZ2i6_Yd)Z{my%p1jm#+2LY{$BpC+VVEzx!bh#CE~p!BmXqsmdh!n!lyXbP-)cNn||=(hN|$TEsGBw9{#4V)pZ7WaEo5s zgrJZpX@2pdM^|IOecnzaF`z4YL-?<2i*@{RZL3ZdS(Bthc_H_GTCM&+EUW8cNk1dg znQwpW_u{n6H(%=x`)w-g(T@Glds{(3o7nV=Pv5zO-W!X}k;Y^BXlT_=+yD_;rJOIF z^`PaSMe@tRFJI>0L9eer-EsH(uk-^`D~G>&e+5#jnlYj7^DkN&9iGB4g534Rl{f1s z){=X_c-87<^Oq3lA75YKKmYj8*ZvQEQ&Jails2wcH+I1bwwTkG*H3zSjX&*mtA11<28H! zP+mM+xgF5Si-~rRbylfinN^9Qk#w1i2B{geabw*5Lv^u1_#Uro^1vhp(UeJ@2wSqd zF{sEBVo0U~&uYx6f^X3Q3RLhN(r!8U?1DxKC4E6nMP#{RV*Hhr=wFRrzJ-9QDNQ~e zDbXeFudr(5e>k0>IrCzIO-@$7y)lz>^W#PqNWlHW8iF$N*ROThv>IkBw8vE-hwSfBPl>DKL8Y!rJ?dn zrkJKgyFh7erUfh)H?(L(+c}z775<3-S*%-Qtv-a1eU^864OYiG+zrrrQ*Qpkg@|?y z)gDlo5Z54(UV?DCquuARN}w^L_=**`oEmW8`VCxGgo%|DT`+ru>XI3OIE0N+q_stH zh2%GZ@h9`EGz5NP=}V>vPvH{j+5jZ*l#3QTc~C?K;WC7xCZpTcOix64gGP5;XUXt{{K+qkmSH(}C+$j$_+D7^*6y*f zGu$SQ2y^ar)E?wxk%vS^r!f#Ii*(im+WX#RGi7QD$m?4A#g zW91f50}E`TS?k#OU2`8zZuQeoiOI=JsF};w4r&jg4FpF6mf=`sH!weA@bHtrG76G9 zH`ZiI%JRx*$PF@%FxG$r`x$PVd-BSep+kq_dgn-cZD57ddXk5%+Nse-mxz{~a>AQ7 zo_sdR&+%k52>@rP2srF!o*ND8`=P; z!5P}+cHQ(H+|=afL>T6qDwmO&>8k0*t2@B*?AKqvJ*v=`6!;wf9x6OWH`iR=FTBr< z?)T|W51Y^mk#$qq1B(3_}et<$EO(E&d^sbTzogH`HANPFBqBGh*vhQm3 zkjFu`^qx+3D(6fi~k-Cw)1mY+k2 z5G~1W_iE@knNUM%)q&;sr(vxlZyee#G)u({9QR#x8_d`@@E#^X26C@t5QmrgF!l)k z*TK15_w|u^rYY+(+?(WfbUMMvPr75#Mwu$`x+Qbt_(mS6%B;5Gk1?h80jA0*_+b>| zE&G1puc15#ynEhd$gF1-Tm*bWJ{!gSf_b~LH9JFomR#$vvcIcLhz|b_-8ciJw;HAp zI4-z`JJ{RHXAR3zTbhfWPpBwPhYlSw zz3h50G&J35%`*OX_>@~$$R3=^!MQ=EB>;|^)>pZDps@w6KmMh%FISxEE96iU3V?GY z&6fxaFzF!3-M;VFII2eUuAMubL+=H9#(gd`x?w&i$_c*O)RpfTi`-z*9Igk^#8p)5 zE^wk?vOTCc0)3xb=AmQ9$U8Kn)Uuo`uWRuSKup1&7wp}e?6A28P9~fP*00WvU)@9c zy@Cbb-t5}Q;hSado-kx?-AX@j;?I>US7w~N%q3NqBhoGPG-8kAr*rZz-}V^bacmm$qVPtS9Zw1~6ZRcB^}4`%eh`RbW-91{2or$$34`!z}<(64LlbE1E(O?jDj zNJ?Ugfh56Gkr1BystQ+R97({K0Hf`wlIOa+g&j+hc2Tx!2{vGWT-7uuVInCZHl@WA zJpUhy`A#aLYn=el2k0 zM$3FP7HEK^;?jD7Z3~tLCouPRzib?8J0YM3N0It7*(%cXL+;E^4b*Hi3~uW7&my4F zcVzgz37^Zrqt)<^m^#6ihrHUE+sdz;}7XBkA2PfLm$MN$IfP z?fj5KV<-1?|DC+`(&F7_ukibGNDTyy9+a2T1J$LGm|F6d$E!v5mKz#BE4jQ&hj*## zT21{C^R1jKqZvnNW+_Hlv2IDF%QMy?7~Dex;L)%JiZR$_dkU19(XRDgCnqN|O<3!_ z9fBr_mBqUum}uXcSVn|vjMN^RpIjs7`G6{RA6guJ0PisQoln~4vO9(4@h8w93Fn_I z;^X;Mkyg^B(xRNQUweY8^GHWfw9b~XE4AIez@4?iSoxEb_`}A0<)EtV{2nd;AOF%Z z{{6>)zV=^}H}Ze{fA^JgI-zaqvatHUebEu{sjquEc(d`(UcU}*SLzFn9B3SZV|B5% zUq9pjpzlfQow%)LDG=X5P}u+_>HsLRT8i-8nYr&IPtWa?7|g@oEpB;Lvsn^zm0guw zgc8w&oyAy&uO~izI`!J8C~M}W(HspeV4>sK$@mOpIU&g_b50Hw&RrBM*tmYnmk!4+ z{q47rRQ-_JG$dO39a{(T`Q%gfv7ApnidbwvpY@DqcPVvtZ=THydDiZZ|yFlR)>u_rWYsM(C#RCACP#b@t3Ig3@JRLJG_7Y)_I_b^v(o(+H+i1>kE-~oN8^q%hv#7lX z6Ji$kmagoNM#EcUPyI7d!hp+0p@@k`ha`hduF?kv^4U*Wj^odtEjE35ns+Q&vc!c+ zm>4(W4KuiE%vJIq@qYNpE{QK+<})}rU^0bU*UY_~0V&`ZB8ox#6xFa0B6=ghz!CQ% z2iG7VoV4n-XKQQR%P9SJlW2fH8`BGk!U=z-8#kmb%@p*`?Vq}Hmt}I)$D1kU>NT9zPNemGL3&y<(xL#E!031}1L+ejq z^?Rn+bAa{lknEG`@v+#`V)K_P1~|^px+9O|bX=atvcGrp?6jiLV+u!{e;WRv-bL3? zy8TzZ?BFg>&9_owWug-|MEf-~;3WWnY!HnSnX@!mLQ~;!jx9E;|IuGsee;h^B->yX7&uTjHHDo|>OD8Txz+!#y=YjI|8Z(!q3eiIO0m(CpuIxt5k zid8V~ZQOcUQ4)o7>ud;hTm-aEtuK~A4JSW!J5;=G3$FvxlJeBe%Uq(GPex$b0RSLZ zxFzBN;|Zeb2ER6Q?fo>bJqQ_y%jeSU zr_I=)hz0^?ToCeiYXco&319Y+39Zu(GjX^QCVFOOxV|(%X4yjb8rv#seIF}^lKQ66<+ghSj6ow!~@hi`l-eGRPob^=l| z1iL1z!FsD^&9i@XF|w2vD)H{aOQ|;fU1Yn$>{*L|uR9O>)a-3?-n*Aq(%FZZMODLR zlMNYTH2KEz2&r80y?r6q88XjX>d8>XCKNNB$P<+Zmx~TVpU}U^SEL!a>r;RYt14H` z7=fWUcu;0|^UO*+?ZcW0VH7Ex!MTR`Fk%K?hDvh-$63nxvq1d@-TWwPNcUzh=%R^~ z&p}kAQs*hdKk-WTqp=@Hj|ksPv!`kV*%{B>6K-;KjtL0-lP6DH-e>mc(#7nUN6NHM zzLQ?Iu)UdCM&!OjZqMnVJX`bEeHhIlek_IH`aUzcq+X45KT*Ef??&5{fFf;6wVhva zWL38!71O=;RQ$PpK<`84t4taka^%OxWgXmhZGEUljJ$+8l?rVMB@4M&5KDw7ZG<-1!Xrzb7HHu7eMHm!3o5qD332#zs zqBs?Fzy&2ak$8tlq$yZV`eu`uW0;35rm07IQhej3l-|*oE=e_oVcN4<)!*&F{E7ru z08NQ!M7z>~@t?duAIqYvR;`l3#R4=F!ueXY`t(btf+mBn+L(9q@Kze z+Qilti>gDPmrVurLqBJq{W=uw`Fie-#1L?GVx%PEGZ%Y!;l_=?h=>UPH)C>sakjQ- z-n{va-MjH&Fvj~1gH5jCT}d$l0ey z1Pw{vG{kfBkV<)%{fio~k76@KfVN|kR3|~O18~q_6#(^$cg!sFnQ!KoBP>bvLvN%u zo8!T7x{$ACb>rt*d1wE*4?i6`eF!$gzUZ=)ohX`Q6#yF(SOB9XK|2!gE;&E4M+I+> zD^s}#vP36#@1$^Q-2`$Yohz<$@ewG2LX&x zIrW#kk3DqtTWnnQL+=8-Nq#wPijYAu<}fMg)-9&*Ez6IS4}^wpr@SBuK@v<@Gi`s)_5D}2_xDJi&?Td_e0Hb;KA*?#*I^qiA$K@3ej4mL-_5?$so z9&-K+b<_hJXiH^-!QDRqU_-`>kX0-GhLes~J2`*8IZyDj#zLEE&`5gLer=gxuLX$( zC_isw2{^3%)iN#}UgsAEIU=?J80Bvp%FdQrN}FYf(b3?bI3sLVm&du0>J1WB!bH=I zPMt2yzV)ZJ@i1-FyWkP(MmVpU?BG+eQ^2(bPMp_Ev9Yn0yLL#rbJyB0u*letvBvF0 z35KG}3r|$1$oj(V<0iEaDnMnqi}&{I#r;fMoF4K6;omJR=L?Nxz|B^)o@5K6{hSe< zR}DW(>C3cQ17!i!&{IEM9_qsJE?KfDDW2*{U7%R)KX^E?rszm|{C6xu(IC1C=XR?q?H@cj$B6LKbBujG~}6!o}UQ zi?LEt-JN(Fr+upl5tPpUZF9{0oD+amrR%es7Sp0nK7~kaRP^R8TzVeA&iSgOp7p2p zC{sGnRD|R7qt=;xo%#GPa%ldSLa5D;Lg zeQ*?-F%!P*!Ax@OhIG7&*w7imb)I7c9G#R~Z>Yc2%nL%Fknf(D-RS&ID$ zt!+eHA%gA#O4c|zY*yy_3nk#dLa~8uG#?g3pTlnbqp-pKn~p(+AKdJg#A-JDEq zxMzR+yms-obt^K5`XH#4ge!`YCIFSGb-5+qUu#XB*E_Lw0q$K>PEh~>y@H>!wd59N z*2JxVcdQbu$RTddoW@O?W!5%xU(KSsu~Y#U_YbTeh4GAKq)h--Uq8`ptYs{p$PPVPPD4yu5QHqe5U}@;1ESatG)W1f%P!>~ z{C7W4RDxu_`7B>FQ(#0bT3og|z9)0z8k8%}j{~{g3+|8t4?(tvwABXrMTmn#JQnIm zw+)l0a_Z^qh6c)Pq>2VgjnJQFGN&`!f8apl_`VF31k!QBpbr>m(YAA}gNL46ZPogt zFCC|lQFfAOk|HMop8U}aSv6bZ((+`^CD&<0#sMHRt-te~)wPia);=vqj%AcY(YKqf zNM}!77YVEE%AARxp`~SQ$OJ^7B#Ly!^o)#*;c?Fyrjg&jfuO#oVWqvdwMh|VBG1XH z9<>4n)&;@svsM!V*;wjk;Z?YBVXa5;+yG%iRfZVK0_D$hYw2W*0GjKOBpHODFcDW!eM@I<3#muHfiHny5t z3<`*R0aXJubL$s$CnwA@GJ@1QJH^!g<;#~c-Q)TmaJ^DduqAV->@;_J9I0}Qs`iJJpEkUBTPm(+Jjb;dQSrpPxVSjM)2@1K z+4k+VrlB>CT+J2LYHX3B)G>o;XTjH!3`jI)J|Xj3#X)goVB*FkxOsS(_F7FS)(V4y z@?6E3*b2w3ss|5npF6kpov^vbc@`uRL9HlSdSk|h%_lyLW~hk`4t?lz@50eqe+Ms^ zAj%xh_%gO;xg`s6OosI~Cw>CMLQy{{6y(GY!V9)P@BGLc{=a+%7W3*eabgaG9%8Y* z`E-ZQ3@Nnxggan-d5|Km7UqPsV&f+mP1fg$i$s;W@oBUav?j=!kEfodEju&vfDETz zr=&~&J!kKXw+zzid`$+1;SXf{_0$$mDvnsraplZS+(yw{thfP0Id1DG0XJE(x z+Zf`ny!q4b(r<{@2~xhH`$HO6vlwF~Kk=05D_*nZn;>K6-O1BLKTC$c>=_hppZV~~ zLL8ctle?1H$D$9TL>bM>Q=LziP87&A4x|CnYzZY)Zs{M|FyBJ8cJ9udUlz&$Bm4s8 z9&-Zi&^jL(`6RIFETV`A^~}3VHEOi)!kh-sA9(?}qcWj;36RIBz16*3=^2(t13tpF zVi|mq;l|u%K#0zyNl=c*r?b6)@u=RrF3c?K0C7xqg}|y}LXjxaZYRxzWC+{nEe4Ci zCM0S&KhhbjjuHOf5vij&u+G+Ee`-4ed9{fY=NT^}wfgAlRSh9@V7NCDZUMcZ1+?I& z%|{>r5!s%Ovp21a*iJ0DiefUWk4b`sE>e-H*M2etFyOe@)z5pJZw{`+y$YbYl)EaJ z7dQAi0%qR=?jflq;uQ8IC1CcllNw)ax8UIV$mGyyopYLcVfyt*?SB>9Z;eM(3Udy2 zvBHyhO0o|>;lpnhjs(Q)R=1X}dMEH}-Uo>E^S}k^@)rPp;DtL7l<^p8&I2{d)itl~ z9VXFLrTznD(5@*CUrly~(Ne~Z2L`WiXZN78O)!s@KvhfxwGUlGGD6s~*;xmRy=sj6 zt+^s2XxlcfnIbwp)AOPMu$?&MrEt)oQNR;jD_&7ruL4JumklGV^nc#k!63l@mo^tq zKk=)(;adysZ#g9kjOQz-9}>Q$P4T4WOd^6tToTby~rW@q;Al5@hVyv18B#V*kPvx<3Xs<%qN$rL5_;bo;N6Yb?$ z)(Cq* zUeh3^ez~rv&xE0~9h`8$Gc!E1^7!%NV+OyT6<=6w`_X+sQIs)O_NMHxBPUPJIz2jk zw#QE`TY_P3Z*i$sFFa(l@|Q6C^7h^}yZW!_bZJ0`>hrRkibmVU$=6ge-vN79nLh0^ zY3c;%e*3jI9YzgZB1Q%56#a%Arg4B`Bk*<~>^PMXafp;~6J%UGqhrTfCcOD|FZV{O zXR#`|a8f`dyzz3-Iz{CQLZ%cz8#h*_5u`!+B__QRLlMcNh=Q6BG3(7fU8@M|ap&=h z`1Nk7L_h5DfrR&bU8}C`gJvVocjoe7+A6y3LeCjV{pL4JGg8Is9r2nL)myb%kJ}YM zv;Yw^VB0z(4uf-AR%=}uH$=Kb&0?_4F>E0qz&8jGaRZji6tF6QW?b=XNpWXmW6SY8 zD8?}%)@&E!j)=J9zYNDkQ?z$~|H4O(9N_^-gKXRvjsY7~+A`o3c@5T{5D;gca$;3g zU#5}LE^B0k@^@`&MUeL%-0<6l`)HQx%}Az@=CT~S=S>l*oNY|wmo5|=cW&*+JyoL)DeW}@j z*SN{&OWqv*p$c0BB%gS;vNjGMGd}IU_uv7mf7;O-gGSuFf4^MI=k9GU z)5J5$a5Wqq90GdXJbv17pCr=bLVAXHqsf72z8e6@V72ktIfyo7xVX>LX+-*U-p(K4 z-j%ltF>(FzVCG;vsH?!(p5ALt1;zAkguD9^>Q=h5D}8HiTDh`4-6Lzo(8iV>GUS21 z`E`Swh?w7qgG-x{UjOLf!%tC9H=h3?EPZW7zq!uVz~4AHoT2;^iY}fJfGI<=suAOh zzP&u7cZo^*5+I@W0_J$wLw*!+%U)@BvO;l3i5T8T&OMAq{AOXE^Tv z@IlSNwSzn%eUPN3$J1y(>o+;`KDi2bv00~?7?Ja*kk^cJq8~ynWudYwVei?>VaL;_ zT#ige0j3!zGY5s7b<;ws`#Iw^lzndaFHBW6^3#e$km(aQzJ8in6gEi}>c6IPmywbw zFV)0Etmd^BPtq;`J}ycPH=T|ccYV${M4J@u$d%H2Juun%U>;Q{_8*|qn0(#k4_izf zjIS@8JE!5J0=H&wgpt$Z4!v2mc5RV1US5Zay)`35@N_+kekOZ6PLtJP4{H3)zqylQ zrk{5IZOIa3{qAJG?E*n?ux=@<_jP0Q54GFe$%Zq#sDlZ zIlfvyfBt-k)}a&gToMu!dndFseEFP4v+&)=gF#tQ&^C6zxpM^36cpmQC}JI?v=U|9wU_9ev-fc$8Ypfwf~GCg3x>SA4z zif(KBSU=<}nJIyy?1B+{Yff)v?dM#w)l+PcX*NU&R%--QstySLP~NLUBc>Rc$EeE% zrxfv=U(Xb&>77nk?okyN*ih~KxpVsoRos%rx81IUHe^sv9-j>DR<|?m4xBh#+7b(N zdfb!QB*O?nv^+@VrayxDmq-<1P)CaJ`1@<0=v_711Vka&pSWRsJZ3=t+Xg85(_*OM z_7=zY<0njDVcEAbHql>ri>j+hRJ{ovWv_cI$NQ3dh&bGWmKbt46PB}UhR^9jmcyn< zCIjNXK_^Q{NIn8@&wswlyY3ymQ9;T55~WnK#JXNG44UONNt4po95_mrz~7Gt2hu%jkA0WMnvO*sy0_Gq`}R`#r92nR|SKXgmW#Dngny2p}OGtb6Y2;n9Og!|Ze8Ly^P0?pOaap@AT)K3riPNk%pB}!vB&lCt{b(edLcO(ggq=ojwe#F7!s)=LY^FjV6Um6GVH= z!n;znfaie3{P9JFLlqYVY4;olkO6FM2Zt)Y7&J|y7}SOrM^jc$am0YivpDcmL%(Fl z4ne_+K*rSc>|Z|;0y6aZFjSP38w4?s2NdJ(|ge&(R`%;pgwJet9y z&z9pZyoYy8}*MN0$~fB45egYU*E~ADQSfomuLY z2Or-S{Ma^olDUK|1Wq27Hz&2)5v)>nK;Jg})taN}xrw?{95nE>@3>GsdtS5Oo@`aE z^+r04(zqp)V}D@78apYi)Lp6S6Pqp@YknJL) zqB<_Dl^?dg?Nj1Jbl+eaZ{W~&`Sakk1qTltsJp-auFh>UdgRxIrDt?wp4xxwzsAL; ziNv?>YS*S1`B&oi??3(vV(fpu`~QE_e|W?HUW@-+o_{Z9p4W#qO-7hC>0ep5i$BIz f#h2%Vn;V9B54M=qz0E-bf4X$&(f;ptBj)`#{Vv$1 literal 70596 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 kBAh0}sgO2=m4PK+SG^iR`B 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 (RX0}*i-nL0b|jV0hi&Iq=viiDhD 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 diff --git a/bip-ir/mobile-sf-bip70-extension.png b/bip-ir/mobile-sf-bip70-extension.png deleted file mode 100644 index 5de96d553b88e29b1817f89b0ae81a8f99d594b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105862 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 literal 0 HcmV?d00001 diff --git a/bip-ir/mobile-sf-ir-without-payment.png b/bip-ir/mobile-sf-ir-without-payment.png new file mode 100755 index 0000000000000000000000000000000000000000..ab18d0f5c3f37072c7a51fe2596e5b24904856dd GIT binary patch literal 92902 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 Q;7^Y(cAXD*95Mg@0!%>mzW@LL literal 0 HcmV?d00001 diff --git a/bip-ir/overview_flow.png b/bip-ir/overview_flow.png deleted file mode 100644 index c90b8c4c0e24083bd23ee6728af6ffbb931d0b21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67368 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 diff --git a/bip-ir/paymentrequest.proto b/bip-ir/paymentrequest.proto new file mode 100644 index 0000000000..5fcd65fbb2 --- /dev/null +++ b/bip-ir/paymentrequest.proto @@ -0,0 +1,84 @@ +// +// Simple Bitcoin Payment Protocol messages +// +// Use fields 1000+ for extensions; +// to avoid conflicts, register extensions via pull-req at +// https://github.com/bitcoin/bips/bip-0070/extensions.mediawiki +// + +package payments; +option java_package = "org.bitcoin.protocols.payments"; +option java_outer_classname = "Protos"; + +// Generalized form of "send payment to this/these bitcoin addresses" +message Output { + optional uint64 amount = 1 [default = 0]; // amount is integer-number-of-satoshis + required bytes script = 2; // usually one of the standard Script forms +} +message PaymentDetails { + optional string network = 1 [default = "main"]; // "main" or "test" + repeated Output outputs = 2; // Where payment should be sent + required uint64 time = 3; // Timestamp; when payment request created + optional uint64 expires = 4; // Timestamp; when this request should be considered invalid + optional string memo = 5; // Human-readable description of request for the customer + optional string payment_url = 6; // URL to send Payment and get PaymentACK + optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message +} +message PaymentRequest { + optional uint32 payment_details_version = 1 [default = 1]; + optional string pki_type = 2 [default = "none"]; // none / x509+sha256 / x509+sha1 + optional bytes pki_data = 3; // depends on pki_type + required bytes serialized_payment_details = 4; // PaymentDetails + optional bytes signature = 5; // pki-dependent signature +} +message X509Certificates { + repeated bytes certificate = 1; // DER-encoded X.509 certificate chain +} +message Payment { + optional bytes merchant_data = 1; // From PaymentDetails.merchant_data + repeated bytes transactions = 2; // Signed transactions that satisfy PaymentDetails.outputs + repeated Output refund_to = 3; // Where to send refunds, if a refund is necessary + optional string memo = 4; // Human-readable message for the merchant +} +message PaymentACK { + required Payment payment = 1; // Payment message that triggered this ACK + optional string memo = 2; // human-readable message for customer +} + +// BIP-IR Extensions +message EncryptedInvoiceRequest { + required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec + required bytes sender_public_key = 2; // Sender's EC Public Key + required bytes invoice_request_hash = 3; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication) +} + +message InvoiceRequest { + required bytes sender_public_key = 1; // Sender's EC Public Key + required uint64 nonce = 2; // Microseconds since epoch + optional uint64 amount = 3 [default = 0]; // amount is integer-number-of-satoshis + optional string pki_type = 4 [default = "none"]; // none / x509+sha256 + optional bytes pki_data = 5; // Depends on pki_type + optional string memo = 6; // Human-readable description of invoice request for the receiver + optional string notification_url = 7; // URL to notify on EncryptedPaymentRequest ready + optional bytes signature = 8; // PKI-dependent signature +} + +message EncryptedPaymentRequest { + required bytes encrypted_payment_request = 1; // AES-256-CBC Encrypted PaymentRequest as defined in InvoiceRequest Spec + required bytes receiver_public_key = 2; // Receiver's EC Public Key + required bytes ephemeral_public_key = 3; // Public Key of ECDH-derived keypair + required bytes payment_request_hash = 4; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for authentication) + required bool requires_payment_message = 5 [default = false]; // Requires Payment/PaymentACK message exchange +} + +message EncryptedPayment { + required bytes encrypted_payment = 1; // AES-256-CBC Encrypted Payment as defined in InvoiceRequest Spec + required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest returned in the transaction's EncryptedPaymentRequest message + required bytes signature = 3; // Signature over EncryptedPayment with original Sender's EC Private Key +} + +message EncryptedPaymentACK { + required bytes encrypted_payment_ack = 1; // AES-256-CBC Encrypted Payment as defined in InvoiceRequest Spec + required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest returned in the transaction's EncryptedPaymentRequest message + required bytes signature = 3; // Signature over EncryptedPaymentACK with the Receiver's EC Private key. +} \ No newline at end of file From 52b6cde023466771b2f3ae27ddd6ec9fb0738fcb Mon Sep 17 00:00:00 2001 From: Matt David Date: Sun, 21 Feb 2016 14:06:03 -0800 Subject: [PATCH 0248/2326] - Fix Signature note formatting - Change No EncryptedPayment Required title - Fix BIP70 link format in References --- bip-invoicerequest-extension.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 814845d50b..dac70b35dd 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -350,6 +350,7 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Sign the serialized EncryptedPaymentACK message with the Receiver's EC public key * Set signature to the result of the signature operation above + **SIGNATURE NOTE:** The EncryptedPayment message is signed with the ECDH-derived key as both the Sender and Receiver have the ECDH-derived key, however the EncryptedPaymentACK message is signed with the Receiver's EC key because only the Sender has access to it. This prevents both EncryptedPaymentACK spam and EncryptedPaymentACKs from being submitted by the Sender. @@ -390,7 +391,7 @@ EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits -===No EncryptedPayment Required=== +===EncryptedPayment NOT Required=== The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). In this case, the Sender submits the transaction to the bitcoin network. @@ -406,7 +407,7 @@ In this case, the Sender submits the transaction to the bitcoin network. ==References== -* [bip-0070.mediawiki|BIP70 - Payment Protocol] +* [[bip-0070.mediawiki|BIP70 - Payment Protocol]] * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] * [https://tools.ietf.org/html/rfc6979 RFC6979] From 198188b9245eb3547b480f95ef5eef1e32557074 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Sun, 21 Feb 2016 21:31:16 -0800 Subject: [PATCH 0249/2326] Improved message definitions, etc. --- bip-invoicerequest-extension.mediawiki | 141 ++++++++++++++----------- 1 file changed, 81 insertions(+), 60 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index dac70b35dd..1ca2ffd046 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -83,30 +83,10 @@ or payment information, only delete encrypted messages. ==New Messages== Updated [/bip-ir/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as -the messages newly defined in this BIP. - -===EncryptedInvoiceRequest=== -The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret. -

-message EncryptedInvoiceRequest {
-    required bytes encrypted_invoice_request = 1;
-    required bytes sender_public_key = 2;
-    required bytes invoice_request_hash = 3;
-}
-
- -{| class="wikitable" -! Field Name !! Description -|- -| encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest -|- -| sender_public_key || Sender's EC public key -|- -| invoice_request_hash || SHA256 Hash of non-encrypted, serialized InvoiceRequest -|} +the messages newly defined in this BIP. Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. We assume Store & Forward servers will provide their own method for communicating one or both parties' public keys, so that exchange is outside the scope of this BIP. The protocol does, however, include the option of including the public keys during communication if they are not already known. ===InvoiceRequest=== -The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a EncryptedPaymentRequest. +The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a PaymentRequest.
 message InvoiceRequest {
@@ -141,31 +121,71 @@ message InvoiceRequest {
 | signature             || PKI-dependent signature
 |}
 
+
+===EncryptedInvoiceRequest===
+The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret.
+
+message EncryptedInvoiceRequest {
+    required bytes  encrypted_invoice_request = 1;
+    required bytes  invoice_request_hash = 2;
+    required bytes  sender_public_key = 3;
+    optional bytes  receiver_public_key = 4;
+    required uint64 nonce = 5;
+    optional bytes  identifier = 6;
+    
+}
+
+ +{| class="wikitable" +! Field Name
!! Description +|- +| encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest +|- +| invoice_request_hash || SHA256 Hash of non-encrypted, serialized InvoiceRequest. MUST be used for verification to prevent oracle attacks. +|- +| sender_public_key || Sender's EC public key +|- +| receiver_public_key || Receiver's EC public key, can be omitted if this message is sent directly to the recipient, or is sent to a Store & Forward server that already understands who the recipient should be (if specified by URI endpoint, for example) +|- +| nonce || The nonce in use for the CBC encryption +|- +| identifier || A unique key to identify this entire exchange on the server. By default, invoice_request_hash SHOULD be used. +|} + ===EncryptedPaymentRequest=== The EncryptedPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest.
 message EncryptedPaymentRequest {
-        required bytes encrypted_payment_request = 1;
-        required bytes receiver_public_key = 2;
-        required bytes ephemeral_public_key = 3;
-        required bytes payment_request_hash = 4;
-        optional bool  requires_payment_message = 5;
+        required bytes  encrypted_payment_request = 1;
+        required bytes  payment_request_hash = 2;
+        optional bytes  receiver_public_key = 3;
+        optional bytes  sender_public_key = 4;
+        optional uint64 nonce = 5;
+        optional bool   requires_payment_message = 6;
+        optional bytes  signature = 7;
+        optional bytes  identifier = 6;
 }
 
{| class="wikitable" ! Field Name
!! Description |- -| encrypted_payment_request || AES-256-CBC encrypted, serialized PaymentRequest +| encrypted_payment_request || AES-256-CBC encrypted, serialized BIP70 PaymentRequest |- -| receiver_public_key || Receiver's EC public key +| payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest. MUST be used for verification to prevent oracle attacks. |- -| ephemeral_public_key || Public Key of ECDH-derived keypair +| receiver_public_key || Receiver's EC public key, only necessary if not already shared or known (for example, if this message is not in response to an InvoiceRequest) |- -| payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest +| sender_public_key || Sender's EC public key, can be omitted if this message is sent directly to the recipient, or is sent to a Store & Forward server that already understands who the recipient should be (if specified by URI endpoint, for example) +|- +| nonce || The nonce in use for the CBC encryption, only necessary if not already shared (for example, if this message is not in response to an InvoiceRequest) |- | requires_payment_message || Internal PaymentRequest requires follow-up Payment message +|- +| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. Only necessary if required by the server to authenticate a reply to an InvoiceRequest. +|- +| identifier || If the PaymentRequest is in response to an InvoiceRequest, use the identifier specified with the InvoiceRequest, if any. Otherwise, use payment_request_hash or other unique value. |} ===EncryptedPayment=== @@ -175,18 +195,21 @@ The EncryptedPayment message allows a BIP70 Payment message to be transmitted th
 message EncryptedPayment {
         required bytes encrypted_payment = 1;
-        required bytes payment_request_hash = 2;
+        required bytes payment_hash = 2;
         required bytes signature = 3;
+        optional bytes identifier = 4;
 }
 
{| class="wikitable" ! Field Name !! Description |- -| encrypted_payment || AES-256-CBC encrypted, serialized standard BIP70 Payment message +| encrypted_payment || AES-256-CBC encrypted, serialized BIP70 Payment message |- -| payment_request_hash || SHA256 Hash of original non-encrypted, serialized PaymentRequest. Some other identifier linking this message to the original request can also be used. +| payment_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. |- -| signature || Signature of this message using the ECDH-derived key calculated for the EncryptedPaymentRequest, serialized with a value of "" for signature. +| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. +|- +| identifier || Use the identifier specified with the EncryptedPaymentRequest, if any. |} ===EncryptedPaymentACK=== @@ -196,18 +219,21 @@ An encrypted version of the BIP70 PaymentAck.
 message EncryptedPaymentACK {
         required bytes encrypted_payment_ack = 1;
-        required bytes payment_request_hash = 2;
+        required bytes payment_ack_hash = 2;
         required bytes signature = 3;
+        optional bytes identifier = 4;
 }
 
{| class="wikitable" ! Field Name !! Description |- -| encrypted_payment_ack || AES-256-CBC encrypted, serialized standard BIP70 PaymentACK message +| encrypted_payment_ack || AES-256-CBC encrypted, serialized BIP70 PaymentACK message |- -| payment_request_hash || The payment_request_hash provided in the EncryptedPayment message. +| payment_ack_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. |- | signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. +|- +| identifier || Use the identifier specified with the EncryptedPayment, if any. |} ==InvoiceRequest / PaymentRequest Process== @@ -256,10 +282,10 @@ Messages MUST be transmitted via TLS-protected HTTP using the appropriate Conten {| class="wikitable" ! Message Type !! Content Type |- -| EncryptedInvoiceRequest || application/bitcoin-encrypted-invoicerequest -|- | InvoiceRequest || application/bitcoin-invoicerequest |- +| EncryptedInvoiceRequest || application/bitcoin-encrypted-invoicerequest +|- | EncryptedPaymentRequest || application/bitcoin-encrypted-paymentrequest |- | EncryptedPayment || application/bitcoin-encrypted-payment @@ -269,10 +295,12 @@ Messages MUST be transmitted via TLS-protected HTTP using the appropriate Conten ===Message or Communication Errors=== An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This -SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). +SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). If the provided hash of each message does not match the contents of the message once decrypted, a general error should be returned to prevent oracle attacks. ==Process Step Details== +For the following we assume the Sender already knows the Receiver's public key, and the exchange starts with an EncryptedInvoiceRequest. + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair @@ -294,6 +322,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) * Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest +* Set identifier to invoice_request_hash ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key @@ -306,9 +335,10 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. * Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * Create EncryptedPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest -* Set receiver_public_key to the Receiver's EC public key (of which the private key was previously used in ECDH secret point calculation) -* Set ephemeral_public_key to the public key of the previously determined ECDH-derived key * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) +* Set identifier to the value received in EncryptedInvoiceRequest +* Set signature to "" +* Sign the serialized EncryptedPayment message with the Receiver's EC public key ===EncryptedPaymentRequest Validation and Decryption=== * Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) @@ -336,37 +366,28 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) * Create EncryptedPayment message * Set encrypted_payment to be the encrypted value of the Payment -* Set payment_request_hash to be the value of the associated, received EncryptedPaymentRequest +* Set identifier to the value received in EncryptedPaymentRequest +* Set payment_hash to generated SHA256 hash of the serialized Payment (without encryption) * Set signature to "" -* Sign the serialized EncryptedPayment message with the previously calculated ECDH-derived key +* Sign the serialized EncryptedPayment message with the Sender's EC public key * Set signature to the result of the signature operation above ===EncryptedPaymentACK Message Creation=== * Encrypt the serialized PaymentACK using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) * Create EncryptedPaymentACK message * Set encrypted_payment_ack to be the encrypted value of the PaymentACK -* Set payment_request_hash to be the value of the associated, received EncryptedPaymentRequest +* Set payment_ack_hash to generated SHA256 hash of the serialized PaymentACK (without encryption) * Set signature to "" * Sign the serialized EncryptedPaymentACK message with the Receiver's EC public key * Set signature to the result of the signature operation above -**SIGNATURE NOTE:** The EncryptedPayment message is signed with the ECDH-derived key as both the Sender and Receiver -have the ECDH-derived key, however the EncryptedPaymentACK message is signed with the Receiver's EC key because only the -Sender has access to it. This prevents both EncryptedPaymentACK spam and EncryptedPaymentACKs from being submitted by the Sender. +**SIGNATURE NOTE:** EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy concious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. ==Payment / PaymentACK Messages with a Store & Foward Server== -When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a -received EncryptedPaymentRequest MUST be accepted by a Store & Forward server if the EncryptedPayment message is appropriately correlated -to an InvoiceRequest/PaymentRequest exchange. This correlation SHOULD be done in order to decrease spam requests. The accepted -Payment message is NOT validated as the Store & Forward server does not have access to the original PaymentRequest. - -Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with -matching payment request hash and Receiver signature is received, after which the server MAY reject all further EncryptedPayment -messages matching that payment request hash. This feature SHOULD be used for updating Payment metadata or replacing -invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. -If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent -the Receiver from broadcasting both transactions and getting paid twice. +When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a EncryptedPaymentRequest with the requires_payment_message flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. + +Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further EncryptedPayment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: From d5762820c122cd71dd6fb989a8bf6182fcb60de2 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 22 Feb 2016 14:57:35 +0800 Subject: [PATCH 0250/2326] BIP69: Add link to Blockchain.info implementation We might switch to the BitcoinJS implementation in the future. cc @kristovatlas --- bip-0069.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki index 0eca369f61..414fef94fa 100644 --- a/bip-0069.mediawiki +++ b/bip-0069.mediawiki @@ -162,6 +162,7 @@ Outputs: * [[https://github.com/bitcoinjs/bip69/blob/master/index.js|BitcoinJS]] * [[https://github.com/bitcoinjs/bip69/blob/master/test/fixtures.json|BitcoinJS Test Fixtures]] * [[https://www.npmjs.com/package/bip69|NodeJS]] +* [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/transaction.js#L120-L142|Blockchain.info public beta]] ==Acknowledgements== From 717228b8fdf4ab0f97d73531603b6c24244bf360 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 22 Feb 2016 15:10:48 +0800 Subject: [PATCH 0251/2326] BIP 39: link BitcoinJS & blockchain.info implementation BIP 39 mnemonics are featured quite prominently in the UI as well. --- bip-0039.mediawiki | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index c44ad3e84e..a0ec74bba7 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -139,4 +139,6 @@ Haskell - https://github.com/haskoin/haskoin .NET C# (PCL) - https://github.com/NicolasDorier/NBitcoin -JavaScript - https://github.com/bitpay/bitcore-mnemonic +JavaScript: +* https://github.com/bitpay/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 public beta]]) From 10e6f46569beb2b0d6f28609fd616eea79446f4f Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 22 Feb 2016 12:04:54 -0800 Subject: [PATCH 0252/2326] - Make message public key sharing mandatory for messages that are encrypted and where both keys are known. For EncryptedInvoiceRequest, only the sender_public_key is required - Add nonce to EncryptedPaymentRequest, EncryptedPayment and EncryptedPaymentACK - Update ECDH instruction to allow for the current message instead of an InvoiceRequest to contain the nonce - Updated paymentrequest.proto with BIP definition changes --- bip-invoicerequest-extension.mediawiki | 84 ++++++++++++++++++-------- bip-ir/paymentrequest.proto | 49 +++++++++------ 2 files changed, 92 insertions(+), 41 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index 1ca2ffd046..c9f1c2e786 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -145,13 +145,15 @@ message EncryptedInvoiceRequest { |- | sender_public_key || Sender's EC public key |- -| receiver_public_key || Receiver's EC public key, can be omitted if this message is sent directly to the recipient, or is sent to a Store & Forward server that already understands who the recipient should be (if specified by URI endpoint, for example) +| receiver_public_key || Receiver's EC public key |- | nonce || The nonce in use for the CBC encryption |- -| identifier || A unique key to identify this entire exchange on the server. By default, invoice_request_hash SHOULD be used. +| identifier || A unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default. |} +receiver_public_key MAY be omitted if this message is sent directly to the Receiver. receiver_public_key MAY also be omitted if the EncryptedInvoiceRequest is being sent to a Store & Forward server which already understands who the Receiver is. An example of this is a Store & Forward server URL that uniquely identifies the Receiver (and their public key). + ===EncryptedPaymentRequest=== The EncryptedPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest. @@ -160,12 +162,12 @@ The EncryptedPaymentRequest message is an encapsulating message that allows the message EncryptedPaymentRequest { required bytes encrypted_payment_request = 1; required bytes payment_request_hash = 2; - optional bytes receiver_public_key = 3; - optional bytes sender_public_key = 4; - optional uint64 nonce = 5; + required bytes receiver_public_key = 3; + required bytes sender_public_key = 4; + required uint64 nonce = 5; optional bool requires_payment_message = 6; optional bytes signature = 7; - optional bytes identifier = 6; + optional bytes identifier = 8; }
{| class="wikitable" @@ -175,17 +177,17 @@ message EncryptedPaymentRequest { |- | payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest. MUST be used for verification to prevent oracle attacks. |- -| receiver_public_key || Receiver's EC public key, only necessary if not already shared or known (for example, if this message is not in response to an InvoiceRequest) +| receiver_public_key || Receiver's EC public key |- -| sender_public_key || Sender's EC public key, can be omitted if this message is sent directly to the recipient, or is sent to a Store & Forward server that already understands who the recipient should be (if specified by URI endpoint, for example) +| sender_public_key || Sender's EC public key |- -| nonce || The nonce in use for the CBC encryption, only necessary if not already shared (for example, if this message is not in response to an InvoiceRequest) +| nonce || The nonce in use for the CBC encryption |- | requires_payment_message || Internal PaymentRequest requires follow-up Payment message |- -| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. Only necessary if required by the server to authenticate a reply to an InvoiceRequest. +| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires InvoiceRequest reply authentication. |- -| identifier || If the PaymentRequest is in response to an InvoiceRequest, use the identifier specified with the InvoiceRequest, if any. Otherwise, use payment_request_hash or other unique value. +| identifier || MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value. |} ===EncryptedPayment=== @@ -194,10 +196,13 @@ The EncryptedPayment message allows a BIP70 Payment message to be transmitted th
 message EncryptedPayment {
-        required bytes encrypted_payment = 1;
-        required bytes payment_hash = 2;
-        required bytes signature = 3;
-        optional bytes identifier = 4;
+        required bytes  encrypted_payment = 1;
+        required bytes  payment_hash = 2;
+        required bytes  receiver_public_key = 3;
+        required bytes  sender_public_key = 4;
+        required uint64 nonce = 5;
+        required bytes  signature = 6;
+        optional bytes  identifier = 7;
 }
 
{| class="wikitable" @@ -207,6 +212,12 @@ message EncryptedPayment { |- | payment_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. |- +| receiver_public_key || Receiver's EC public key +|- +| sender_public_key || Sender's EC public key +|- +| nonce || The nonce in use for the CBC encryption +|- | signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. |- | identifier || Use the identifier specified with the EncryptedPaymentRequest, if any. @@ -218,10 +229,13 @@ An encrypted version of the BIP70 PaymentAck.
 message EncryptedPaymentACK {
-        required bytes encrypted_payment_ack = 1;
-        required bytes payment_ack_hash = 2;
-        required bytes signature = 3;
-        optional bytes identifier = 4;
+        required bytes  encrypted_payment_ack = 1;
+        required bytes  payment_ack_hash = 2;
+        required bytes  receiver_public_key = 3;
+        required bytes  sender_public_key = 4;
+        required uint64 nonce = 5;
+        required bytes  signature = 6;
+        optional bytes  identifier = 7;
 }
 
{| class="wikitable" @@ -231,6 +245,12 @@ message EncryptedPaymentACK { |- | payment_ack_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. |- +| receiver_public_key || Receiver's EC public key +|- +| sender_public_key || Sender's EC public key +|- +| nonce || The nonce in use for the CBC encryption +|- | signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. |- | identifier || Use the identifier specified with the EncryptedPayment, if any. @@ -301,10 +321,12 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. For the following we assume the Sender already knows the Receiver's public key, and the exchange starts with an EncryptedInvoiceRequest. +Where used, **nonce** MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the **nonce** MAY use whatever method to make sure that the **nonce** is never repeated. + ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair -* nonce MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example) +* nonce MUST be set according to the requirement above. * Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD be rejected with HTTP status code 406. * Memo is optional. This MAY be set to a human readable description of the InvoiceRequest * Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to @@ -318,10 +340,12 @@ For the following we assume the Sender already knows the Receiver's public key, ===EncryptedInvoiceRequest Message Creation=== * Create an EncryptedInvoiceRequest * Retrieve endpoint public key to use in ECDH Point Generation as specified in Initial Public Key Retrieval for InvoiceRequest Encryption (see below) -* sender_public_key MUST be set to the public key of an EC keypair +* sender_public_key MUST be set to the public key of the Sender's EC keypair +* receiver_public_key MAY be set to the public key of the Receiver's EC keypair * invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) * Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest +* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation * Set identifier to invoice_request_hash ===InvoiceRequest Validation=== @@ -336,9 +360,14 @@ For the following we assume the Sender already knows the Receiver's public key, * Create EncryptedPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) +* sender_public_key MUST be set to the public key of the Sender's EC keypair +* receiver_public_key MUST be set to the public key of the Receiver's EC keypair +* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation +* requires_payment_message MAY be set to true if the PaymentRequest requires a Payment message * Set identifier to the value received in EncryptedInvoiceRequest * Set signature to "" * Sign the serialized EncryptedPayment message with the Receiver's EC public key +* Set signature to the result of the signature operation above ===EncryptedPaymentRequest Validation and Decryption=== * Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) @@ -349,7 +378,7 @@ For the following we assume the Sender already knows the Receiver's public key, * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''secret point's''' X value for Entropy -** Use the given InvoiceRequest's nonce field for Nonce +** Use the given message's nonce field for Nonce * Initialize AES-256 in CBC Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) @@ -366,8 +395,11 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) * Create EncryptedPayment message * Set encrypted_payment to be the encrypted value of the Payment -* Set identifier to the value received in EncryptedPaymentRequest * Set payment_hash to generated SHA256 hash of the serialized Payment (without encryption) +* sender_public_key MUST be set to the public key of the Sender's EC keypair +* receiver_public_key MUST be set to the public key of the Receiver's EC keypair +* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation +* Set identifier to the value received in EncryptedPaymentRequest * Set signature to "" * Sign the serialized EncryptedPayment message with the Sender's EC public key * Set signature to the result of the signature operation above @@ -377,6 +409,10 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Create EncryptedPaymentACK message * Set encrypted_payment_ack to be the encrypted value of the PaymentACK * Set payment_ack_hash to generated SHA256 hash of the serialized PaymentACK (without encryption) +* sender_public_key MUST be set to the public key of the Sender's EC keypair +* receiver_public_key MUST be set to the public key of the Receiver's EC keypair +* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation +* Set identifier to the value received in EncryptedPaymentRequest * Set signature to "" * Sign the serialized EncryptedPaymentACK message with the Receiver's EC public key * Set signature to the result of the signature operation above @@ -432,4 +468,4 @@ In this case, the Sender submits the transaction to the bitcoin network. * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] * [https://tools.ietf.org/html/rfc6979 RFC6979] -* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] +* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] \ No newline at end of file diff --git a/bip-ir/paymentrequest.proto b/bip-ir/paymentrequest.proto index 5fcd65fbb2..8c99f241fc 100644 --- a/bip-ir/paymentrequest.proto +++ b/bip-ir/paymentrequest.proto @@ -46,11 +46,6 @@ message PaymentACK { } // BIP-IR Extensions -message EncryptedInvoiceRequest { - required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec - required bytes sender_public_key = 2; // Sender's EC Public Key - required bytes invoice_request_hash = 3; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication) -} message InvoiceRequest { required bytes sender_public_key = 1; // Sender's EC Public Key @@ -63,22 +58,42 @@ message InvoiceRequest { optional bytes signature = 8; // PKI-dependent signature } +message EncryptedInvoiceRequest { + required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec + required bytes invoice_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication) + required bytes sender_public_key = 3; // Sender's EC Public Key + optional bytes receiver_public_key = 4; // Receiver's EC Public Key + required uint64 nonce = 5; // Microseconds since epoch + optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default +} + message EncryptedPaymentRequest { - required bytes encrypted_payment_request = 1; // AES-256-CBC Encrypted PaymentRequest as defined in InvoiceRequest Spec - required bytes receiver_public_key = 2; // Receiver's EC Public Key - required bytes ephemeral_public_key = 3; // Public Key of ECDH-derived keypair - required bytes payment_request_hash = 4; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for authentication) - required bool requires_payment_message = 5 [default = false]; // Requires Payment/PaymentACK message exchange + required bytes encrypted_payment_request = 1; // AES-256-CBC Encrypted PaymentRequest as defined in InvoiceRequest Spec + required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for authentication) + required bytes receiver_public_key = 3; // Receiver's EC Public Key + required bytes sender_public_key = 4; // Sender's EC Public Key + required uint64 nonce = 5; // Microseconds since epoch + optional bool requires_payment_message = 6 [default = false]; // Requires Payment/PaymentACK message exchange + optional bytes signature = 7; // Signature of this message using Receiver's EC key + optional bytes identifier = 8; // MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value. } message EncryptedPayment { - required bytes encrypted_payment = 1; // AES-256-CBC Encrypted Payment as defined in InvoiceRequest Spec - required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest returned in the transaction's EncryptedPaymentRequest message - required bytes signature = 3; // Signature over EncryptedPayment with original Sender's EC Private Key + required bytes encrypted_payment = 1; // AES-256-CBC Encrypted BIP70 Payment as defined in InvoiceRequest Spec + required bytes payment_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 Payment + required bytes receiver_public_key = 3; // Receiver's EC Public Key + required bytes sender_public_key = 4; // Sender's EC Public Key + required uint64 nonce = 5; // Microseconds since epoch + required bytes signature = 6; // Signature over EncryptedPayment with Sender's EC Key + optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any. } message EncryptedPaymentACK { - required bytes encrypted_payment_ack = 1; // AES-256-CBC Encrypted Payment as defined in InvoiceRequest Spec - required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest returned in the transaction's EncryptedPaymentRequest message - required bytes signature = 3; // Signature over EncryptedPaymentACK with the Receiver's EC Private key. -} \ No newline at end of file + required bytes encrypted_payment_ack = 1; // AES-256-CBC Encrypted BIP70 PaymentACK as defined in InvoiceRequest Spec + required bytes payment_ack_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 PaymentACK + required bytes receiver_public_key = 3; // Receiver's EC Public Key + required bytes sender_public_key = 4; // Sender's EC Public Key + required uint64 nonce = 5; // Microseconds since epoch + required bytes signature = 6; // Signature over EncryptedPaymentACK with Receiver's EC Key + optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any. +} From 27bfd6165fa8e24262701a875ac3803ec9e2f5bd Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 22 Feb 2016 13:09:06 -0800 Subject: [PATCH 0253/2326] Made public keys required, updated steps --- bip-invoicerequest-extension.mediawiki | 48 +++++++++++++------------- bip-ir/paymentrequest.proto | 8 ++--- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index c9f1c2e786..c753c5777b 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -83,7 +83,9 @@ or payment information, only delete encrypted messages. ==New Messages== Updated [/bip-ir/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as -the messages newly defined in this BIP. Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. We assume Store & Forward servers will provide their own method for communicating one or both parties' public keys, so that exchange is outside the scope of this BIP. The protocol does, however, include the option of including the public keys during communication if they are not already known. +the messages newly defined in this BIP. + +Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained. ===InvoiceRequest=== The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a PaymentRequest. @@ -91,13 +93,12 @@ The InvoiceRequest message allows a Sender to send information to the Receiver s
 message InvoiceRequest {
         required bytes  sender_public_key = 1;
-        required uint64 nonce = 2;
-        optional uint64 amount = 3 [default = 0];
-        optional string pki_type = 4 [default = "none"];
-        optional bytes  pki_data = 5;
-        optional string memo = 6;
-        optional string notification_url = 7;
-        optional bytes  signature = 8;
+        optional uint64 amount = 2 [default = 0];
+        optional string pki_type = 3 [default = "none"];
+        optional bytes  pki_data = 4;
+        optional string memo = 5;
+        optional string notification_url = 6;
+        optional bytes  signature = 7;
 }
 
@@ -106,8 +107,6 @@ message InvoiceRequest { |- | sender_public_key || Sender's EC public key |- -| nonce || Microseconds since epoch -|- | amount || amount is integer-number-of-satoshis (default: 0) |- | pki_type || none / x509+sha256 (default: "none") @@ -129,9 +128,10 @@ message EncryptedInvoiceRequest { required bytes encrypted_invoice_request = 1; required bytes invoice_request_hash = 2; required bytes sender_public_key = 3; - optional bytes receiver_public_key = 4; + required bytes receiver_public_key = 4; required uint64 nonce = 5; - optional bytes identifier = 6; + optional bytes signature = 6; + optional bytes identifier = 7; }
@@ -149,11 +149,11 @@ message EncryptedInvoiceRequest { |- | nonce || The nonce in use for the CBC encryption |- +| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. +|- | identifier || A unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default. |} -receiver_public_key MAY be omitted if this message is sent directly to the Receiver. receiver_public_key MAY also be omitted if the EncryptedInvoiceRequest is being sent to a Store & Forward server which already understands who the Receiver is. An example of this is a Store & Forward server URL that uniquely identifies the Receiver (and their public key). - ===EncryptedPaymentRequest=== The EncryptedPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest. @@ -185,7 +185,7 @@ message EncryptedPaymentRequest { |- | requires_payment_message || Internal PaymentRequest requires follow-up Payment message |- -| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires InvoiceRequest reply authentication. +| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. |- | identifier || MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value. |} @@ -198,10 +198,10 @@ The EncryptedPayment message allows a BIP70 Payment message to be transmitted th message EncryptedPayment { required bytes encrypted_payment = 1; required bytes payment_hash = 2; - required bytes receiver_public_key = 3; - required bytes sender_public_key = 4; + required bytes sender_public_key = 3; + required bytes receiver_public_key = 4; required uint64 nonce = 5; - required bytes signature = 6; + optional bytes signature = 6; optional bytes identifier = 7; }
@@ -212,13 +212,13 @@ message EncryptedPayment { |- | payment_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. |- -| receiver_public_key || Receiver's EC public key -|- | sender_public_key || Sender's EC public key |- +| receiver_public_key || Receiver's EC public key +|- | nonce || The nonce in use for the CBC encryption |- -| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. +| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. |- | identifier || Use the identifier specified with the EncryptedPaymentRequest, if any. |} @@ -251,7 +251,7 @@ message EncryptedPaymentACK { |- | nonce || The nonce in use for the CBC encryption |- -| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. +| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. |- | identifier || Use the identifier specified with the EncryptedPayment, if any. |} @@ -319,7 +319,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. ==Process Step Details== -For the following we assume the Sender already knows the Receiver's public key, and the exchange starts with an EncryptedInvoiceRequest. +For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. Where used, **nonce** MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the **nonce** MAY use whatever method to make sure that the **nonce** is never repeated. @@ -341,7 +341,7 @@ Where used, **nonce** MUST be set to a non-repeating number. The current epoch t * Create an EncryptedInvoiceRequest * Retrieve endpoint public key to use in ECDH Point Generation as specified in Initial Public Key Retrieval for InvoiceRequest Encryption (see below) * sender_public_key MUST be set to the public key of the Sender's EC keypair -* receiver_public_key MAY be set to the public key of the Receiver's EC keypair +* receiver_public_key MUST be set to the public key of the Receiver's EC keypair * invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) * Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) * encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest diff --git a/bip-ir/paymentrequest.proto b/bip-ir/paymentrequest.proto index 8c99f241fc..8f39c6d15a 100644 --- a/bip-ir/paymentrequest.proto +++ b/bip-ir/paymentrequest.proto @@ -49,7 +49,6 @@ message PaymentACK { message InvoiceRequest { required bytes sender_public_key = 1; // Sender's EC Public Key - required uint64 nonce = 2; // Microseconds since epoch optional uint64 amount = 3 [default = 0]; // amount is integer-number-of-satoshis optional string pki_type = 4 [default = "none"]; // none / x509+sha256 optional bytes pki_data = 5; // Depends on pki_type @@ -62,9 +61,10 @@ message EncryptedInvoiceRequest { required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec required bytes invoice_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication) required bytes sender_public_key = 3; // Sender's EC Public Key - optional bytes receiver_public_key = 4; // Receiver's EC Public Key + required bytes receiver_public_key = 4; // Receiver's EC Public Key required uint64 nonce = 5; // Microseconds since epoch optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default + optional bytes signature = 7; // Signature of this message using Sender's EC key } message EncryptedPaymentRequest { @@ -81,8 +81,8 @@ message EncryptedPaymentRequest { message EncryptedPayment { required bytes encrypted_payment = 1; // AES-256-CBC Encrypted BIP70 Payment as defined in InvoiceRequest Spec required bytes payment_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 Payment - required bytes receiver_public_key = 3; // Receiver's EC Public Key - required bytes sender_public_key = 4; // Sender's EC Public Key + required bytes sender_public_key = 3; // Sender's EC Public Key + required bytes receiver_public_key = 4; // Receiver's EC Public Key required uint64 nonce = 5; // Microseconds since epoch required bytes signature = 6; // Signature over EncryptedPayment with Sender's EC Key optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any. From ca0f07cfa7012c968e0f809a3f8aaf77e24cd195 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 22 Feb 2016 13:47:49 -0800 Subject: [PATCH 0254/2326] - Add qualifier that nonce MUST be chosen by the encryptor. - Also, fix ** used for bold and replace with --- bip-invoicerequest-extension.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index c753c5777b..a2c1622f42 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -321,7 +321,7 @@ SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf. For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. -Where used, **nonce** MUST be set to a non-repeating number. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the **nonce** MAY use whatever method to make sure that the **nonce** is never repeated. +Where used, nonce MUST be set to a non-repeating number AND MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the nonce MAY use whatever method to make sure that the nonce is never repeated. ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message @@ -418,7 +418,7 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Set signature to the result of the signature operation above -**SIGNATURE NOTE:** EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy concious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. +SIGNATURE NOTE: EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy concious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. ==Payment / PaymentACK Messages with a Store & Foward Server== When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a EncryptedPaymentRequest with the requires_payment_message flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. From de90683130e346bd43abf62030f4434179aa91af Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Tue, 23 Feb 2016 11:24:29 +0800 Subject: [PATCH 0255/2326] BIP 39: prettier formatting of implementation list --- bip-0039.mediawiki | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index a0ec74bba7..ad78ed62ef 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -131,13 +131,17 @@ http://github.com/trezor/python-mnemonic ==Other Implementations== -Objective-C - https://github.com/nybex/NYMnemonic +Objective-C: +* https://github.com/nybex/NYMnemonic -Haskell - https://github.com/haskoin/haskoin +Haskell: +* https://github.com/haskoin/haskoin -.NET C# (PCL) - https://github.com/Thashiznets/BIP39.NET +.NET C# (PCL): +* https://github.com/Thashiznets/BIP39.NET -.NET C# (PCL) - https://github.com/NicolasDorier/NBitcoin +.NET C# (PCL): +* https://github.com/NicolasDorier/NBitcoin JavaScript: * https://github.com/bitpay/bitcore-mnemonic From a74ea14bc66d6be699f3e3d5aae2fa308ad7adad Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 1 Feb 2016 21:17:02 +0000 Subject: [PATCH 0256/2326] Promote Draft->Final BIPs: 50 and 73 BIP 50: Proposed action items, including the hardfork, are completed. BIP 73: Implemented by at least Bitcoin Core and BitPay. --- README.mediawiki | 8 ++++---- bip-0050.mediawiki | 2 +- bip-0073.mediawiki | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index ce40a649be..3c6b227dbb 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -216,12 +216,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Justus Ranvier | Informational | Draft -|- +|- style="background-color: #cfffcf" | [[bip-0050.mediawiki|50]] | March 2013 Chain Fork Post-Mortem | Gavin Andresen | Informational -| Draft +| Final |- | [[bip-0060.mediawiki|60]] @@ -301,12 +301,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Gavin Andresen | Standard | Final -|- +|- style="background-color: #cfffcf" | [[bip-0073.mediawiki|73]] | Use "Accept" header for response type negotiation with Payment Request URLs | Stephen Pair | Standard -| Draft +| Final |- | [[bip-0074.mediawiki|74]] | Allow zero value OP_RETURN in Payment Protocol diff --git a/bip-0050.mediawiki b/bip-0050.mediawiki index a595321657..4f48fcac1a 100644 --- a/bip-0050.mediawiki +++ b/bip-0050.mediawiki @@ -2,7 +2,7 @@ BIP: 50 Title: March 2013 Chain Fork Post-Mortem Author: Gavin Andresen - Status: Draft + Status: Final Type: Informational Created: 2013-03-20
diff --git a/bip-0073.mediawiki b/bip-0073.mediawiki index a020fb568b..41c89a3015 100644 --- a/bip-0073.mediawiki +++ b/bip-0073.mediawiki @@ -2,7 +2,7 @@ BIP: 73 Title: Use "Accept" header for response type negotiation with Payment Request URLs Author: Stephen Pair - Status: Draft + Status: Final Type: Standards Track Created: 2013-08-27
From 1fc921c8728f76723118f54cf4fb9e94758f2976 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 24 Feb 2016 09:09:29 -0800 Subject: [PATCH 0257/2326] - Update motivation for the open standards in the list for optional identity sharing --- bip-invoicerequest-extension.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index a2c1622f42..d3143e201d 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -43,7 +43,7 @@ The motivation for this extension to BIP70 is threefold: #* Make bitcoin logs more human readable #* Give the user the ability to decide who to release payment details to #* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements -#* Allow for an open standards based way to meet regulatory requirements +#* Allow for an open standards based way for regulated financial entities to meet regulatory requirements #* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. From feb11160c2eff1cf381a7086d977017ffdf94cae Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Thu, 25 Feb 2016 13:29:01 -0500 Subject: [PATCH 0258/2326] Submit feefilter message as BIP 133 --- README.mediawiki | 6 ++++++ bip-0133.mediawiki | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 bip-0133.mediawiki diff --git a/README.mediawiki b/README.mediawiki index 3c6b227dbb..02a5a76753 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -452,6 +452,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Process | Draft |- +| [[bip-0133.mediawiki|133]] +| feefilter message +| Alex Morcos +| Standard +| Draft +|- | [[bip-0140.mediawiki|140]] | Normalized TXID | Christian Decker diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki new file mode 100644 index 0000000000..d6d7437add --- /dev/null +++ b/bip-0133.mediawiki @@ -0,0 +1,45 @@ +
+  BIP: 133
+  Title: feefilter message
+  Author: Alex Morcos 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-02-13
+
+ +==Abstract== + +Add a new message, "feefilter", which serves to instruct peers not to send "inv"'s to the node for transactions with fees below the specified fee rate. + +==Motivation== + +The concept of a limited mempool was introduced in Bitcoin Core 0.12 to provide protection against attacks or spam transactions of low fees that are not being mined. A reject filter was also introduced to help prevent repeated requests for the same transaction that might have been recently rejected for insufficient fee. These methods help keep resource utilization on a node from getting out of control. + +However, there are limitations to the effectiveness of these approaches. The reject filter is reset after every block which means transactions that are inv'ed over a longer time period will be rerequested and there is no method to prevent requesting the transaction the first time. Furthermore, inv data is sent at least once either to or from each peer for every transaction accepted to the mempool and there is no mechanism by which to know that an inv sent to a given peer would not result in a getdata request because it represents a transaction with too little fee. + +After receiving a feefilter message, a node can know before sending an inv that a given transaction's fee rate is below the minimum currently required by a given peer, and therefore the node can skip relaying an inv for that transaction to that peer. + +==Specification== + +# The feefilter message is defined as a message containing an int64_t where pchCommand == "feefilter" +# Upon receipt of a "feefilter" message, the node will be permitted, but not required, to filter transaction invs for transactions that fall below the feerate provided in the feefilter message interpreted as satoshis per kilobyte. +# The fee filter is additive with a bloom filter for transactions so if an SPV client were to load a bloom filter and send a feefilter message, transactions would only be relayed if they passed both filters. +# Inv's generated from a mempool message are also subject to a fee filter if it exists. +# Feature discovery is enabled by checking protocol version >= 70013 + +==Considerations== +The propagation efficiency of transactions across the network should not be adversely affected by this change. In general, transactions which are not accepted to your mempool are not relayed and the funcionality implemented with this message is meant only to filter those transactions. There could be a small number of edge cases where a node's mempool min fee is actually less than the filter value a peer is aware of and transactions with fee rates between these values will now be newly inhibited. + +Feefilter messages are not sent to whitelisted peers if the "-whitelistforcerelay" option is set. In that case, transactions are intended to be relayed even if they are not accepted to the mempool. + +There are privacy concerns with deanonymizing a node by the fact that it is broadcasting identifying information about its mempool min fee. To help ameliorate this concern, the implementaion quantizes the filter value broadcast with a small amount of randomness, in addition, the messages are broadcast to different peers at individually randomly distributed times. + +If a node is using prioritisetransaction to accept transactions whose actual fee rates might fall below the node's mempool min fee, it may want to consider setting "-nofeefilter" to make sure it is exposed to all possible txid's. + +==Backward compatibility== + +Older clients remain fully compatible and interoperable after this change. The sending of feefilter messages can be disabled by unsetting the "-feefilter" option. + +==Implementation== + +https://github.com/bitcoin/bitcoin/pull/7542 From 56bea488cbee7a3b89a34d916b283cd5fe03b64b Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 27 Feb 2016 14:12:08 +0100 Subject: [PATCH 0259/2326] [BIP 2] Allow optional License-Code header --- bip-0002.mediawiki | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index e6477e6990..0d94792b6a 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -139,10 +139,17 @@ New BIPs may be accepted with the following licenses. Each new BIP must identify For example, a preamble might include the following License header: - License: PD - CC-0 + License: CC-0 MIT +It is also possible to license source code differently from the BIP text. A optional License-Code header is placed after the License header. Again, each license must be referenced by their respective abbreviation given below. + +For example, a preamble specifying the optional License-Code header might look like: + + License: CC-0 + MIT + License-Code: GPL-2.0 + ====Recommended licenses==== * BSD-2-Clause: [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] From c52eba239c3c2676a6aa30eb97a5875ecb824c9c Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Mon, 29 Feb 2016 14:30:32 -0500 Subject: [PATCH 0260/2326] Clarify non-dependence on BIP113 --- bip-0068.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index fd17ea5d60..8c566b0994 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -220,7 +220,7 @@ This BIP was edited by BtcDrak, Nicolas Dorier and kinoshitajona. This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). Exact details TDB. -BIP68 MUST be deployed together with BIP113. It is also recommended to deploy BIP112 at the same time. +It is recommended to deploy BIP112 and BIP113 at the same time. ==Compatibility== From ab9b17b7f5a22e2e22aa0f8f239f3dd6aa337ad0 Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Mon, 29 Feb 2016 16:10:14 -0500 Subject: [PATCH 0261/2326] add copyright --- bip-0133.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki index d6d7437add..b5146e33fc 100644 --- a/bip-0133.mediawiki +++ b/bip-0133.mediawiki @@ -43,3 +43,6 @@ Older clients remain fully compatible and interoperable after this change. The ==Implementation== https://github.com/bitcoin/bitcoin/pull/7542 + +==Copyright== +This document is placed in the public domain. From 8d7748e6fb044d6055d3448b2028212677d1d90b Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Mon, 29 Feb 2016 15:59:43 -0500 Subject: [PATCH 0262/2326] Remove BIP68's dependence on this BIP. Remove deployment details. --- bip-0113.mediawiki | 43 ++++++++++--------------------------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki index 15fa4f3fdf..d21054bf6a 100644 --- a/bip-0113.mediawiki +++ b/bip-0113.mediawiki @@ -34,8 +34,9 @@ value to monotonically advance, thereby removing the capability for miners to claim more transaction fees by lying about the timestamps of their block. -This proposal seeks to ensure reliable behaviour in locktime calculations as -required by BIP65 (CHECKLOCKTIMEVERIFY), BIP68 (sequence numbers), and BIP112 (CHECKSEQUENCEVERIFY). +This proposal seeks to ensure reliable behaviour in locktime calculations +as required by BIP65 (CHECKLOCKTIMEVERIFY) and matching the behavior of +BIP68 (sequence numbers) and BIP112 (CHECKSEQUENCEVERIFY). ==Specification== @@ -58,11 +59,10 @@ block time for the purpose of checking lock-time constraints: return pbegin[(pend - pbegin)/2]; } -Lock-time constraints are checked by the consensus method IsFinalTx(), -or LockTime() under BIP68. These methods take the block time as one -parameter. This BIP proposes that after activation calls to -IsFinalTx() or LockTime() within consensus code use the return value -of `GetMedianTimePast(pindexPrev)` instead. +Lock-time constraints are checked by the consensus method IsFinalTx(). +This method takes the block time as one parameter. This BIP proposes +that after activation calls to IsFinalTx() within consensus code use +the return value of `GetMedianTimePast(pindexPrev)` instead. A reference implementation of this proposal is provided by the following pull request: @@ -72,33 +72,10 @@ https://github.com/bitcoin/bitcoin/pull/6566 ==Deployment== -We reuse the double-threshold switchover mechanism from BIPs 34 and -66, with the same thresholds, but for nVersion = 8. The new rules are -in effect for every block (at height H) with nVersion = 8 and at least -750 out of 1000 blocks preceding it (with heights H-1000..H-1) also -have nVersion = 8. Furthermore, when 950 out of the 1000 blocks -preceding a block do have nVersion = 8, nVersion = 3 blocks become -invalid, and all further blocks enforce the new rules. +This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). +Exact details TBD. -When assessing the block version as mask of ~0x20000007 must be applied -to work around the complications caused by -[http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010396.html BIP101's premature use] -of the [https://gist.github.com/sipa/bf69659f43e763540550 undecided version bits proposal]. - -By applying ~0x20000007 with nVersion = 8, the thresholds should be tested -comparing block nVersion >= 4 as this will save a bit for future use. - -It is recommended that this soft-fork deployment trigger include other related -proposals for improving Bitcoin's lock-time capabilities, including: - -[https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP 65]: -CHECKLOCKTIMEVERIFY, - -[https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP 68]: -Consensus-enforced transaction replacement signalled via sequence numbers, - -and [https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP 112]: -CHECKSEQUENCEVERIFY. +It is recommended to deploy BIP68 and BIP112 at the same time as this BIP. ==Acknowledgements== From 226bd097a9d5e03a9cdb1b3b00c79cd017c8983a Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 1 Mar 2016 01:06:16 +0100 Subject: [PATCH 0263/2326] Add start time --- bip-0009.mediawiki | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index ff91ffdc40..052c9da59e 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -22,11 +22,12 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule ==Specification== -Each soft fork deployment is specified by the following parameters (further elaborated below): +Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. # The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. -# The '''timeout''' specifies a time at which the deployment is considered failed. If the median time of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. +# The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. +# The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. ===Mechanism=== @@ -38,7 +39,7 @@ The highest 3 bits are set to 001, so the range of actually possible nVersion va '''States''' With every softfork proposal we associate a state BState, which begins -at ''defined'', and can be ''locked-in'', ''activated'', +at ''defined'', and can be ''started'', ''locked-in'', ''activated'', or ''failed''. Transitions are considered after each retarget period. @@ -46,10 +47,19 @@ retarget period. Software which supports the change should begin by setting B in all blocks mined until it is resolved. - if (BState != activated && BState != failed) { + if (BState == started || BState == locked-in) { SetBInBlock(); } +'''Start time''' +If a block's median time past is at least the starttime, and it is consider ''started''. + + if (NextBlockHeight % 2016 == 0) { + if (BState == defined && GetMedianTimePast(nextblock) >= starttime) { + BState = started; + } + } + '''Success: Lock-in Threshold''' If bit B is set in 1916 (1512 on testnet) or more of the 2016 blocks within a retarget period, it is considered @@ -57,7 +67,7 @@ more of the 2016 blocks within a retarget period, it is considered visible. if (NextBlockHeight % 2016 == 0) { - if (BState == defined && Previous2016BlocksCountB() >= 1916) { + if (BState == started && Previous2016BlocksCountB() >= threshold) { BState = locked-in; BActiveHeight = NextBlockHeight + 2016; } @@ -132,7 +142,7 @@ GetMedianTimePast() of a block following a retarget period is at or past this timeout, miners should cease setting this bit. if (NextBlockHeight % 2016 == 0) { - if (BState == defined && GetMedianTimePast(nextblock) >= BFinalYear) { + if (BState == started && GetMedianTimePast(nextblock) >= BFinalYear) { BState = failed; } } From 737bf29de2338d6f612533bbb9860a85169a3c33 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 1 Mar 2016 01:24:34 +0100 Subject: [PATCH 0264/2326] Update former BIP references and consistency --- bip-0009.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 052c9da59e..b10a91c1a0 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -18,7 +18,7 @@ This document specifies a proposed change to the semantics of the 'version' fiel BIP 34 introduced a mechanism for doing soft-forking changes without a predefined flag timestamp (or flag block height), instead relying on measuring miner support indicated by a higher version number in block headers. As it relies on comparing version numbers as integers however, it only supports one single change being rolled out at once, requiring coordination between proposals, and does not allow for permanent rejection: as long as one soft fork is not fully rolled out, no future one can be scheduled. -In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule after its 95% threshold was reached, removing 231+2 values from the set of valid version numbers (all negative numbers, as nVersion is interpreted as a signed integer, as well as 0 and 1). This indicates another downside this approach: every upgrade permanently restricts the set of allowed nVersion field values. This approach was later reused in BIP 66, which further removed nVersion = 2 as valid option. As will be shown further, this is unnecessary. +In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule after its 95% threshold was reached, removing 231+2 values from the set of valid version numbers (all negative numbers, as nVersion is interpreted as a signed integer, as well as 0 and 1). This indicates another downside this approach: every upgrade permanently restricts the set of allowed nVersion field values. This approach was later reused in BIP 66 and BIP 65, which further removed nVersions 2 and 3 as valid options. As will be shown further, this is unnecessary. ==Specification== @@ -35,7 +35,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu We are permitting several independent soft forks to be deployed in parallel. For each, a bit B is chosen from the set {0,1,2,...,28}, which is not currently in use for any other ongoing soft fork. Miners signal intent to enforce the new rules associated with the proposed soft fork by setting bit 1B in nVersion to 1 in their blocks. '''High bits''' -The highest 3 bits are set to 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. This leaves two future upgrades for different mechanisms (top bits 010 and 011), while complying to the constraints set by BIP34 and BIP66. Having more than 29 available bits for parallel soft forks does not add anything anyway, as the (nVersion >= 3) requirement already makes that impossible. +The highest 3 bits are set to 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. This leaves two future upgrades for different mechanisms (top bits 010 and 011), while complying to the constraints set by BIP 34 and BIP 66. Having more than 29 available bits for parallel soft forks does not add anything anyway, as the (nVersion >= 3) requirement already makes that impossible. '''States''' With every softfork proposal we associate a state BState, which begins From 8315dfd3faf8c2af74ac6185269fcebc89d41c26 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 1 Mar 2016 04:05:48 +0100 Subject: [PATCH 0265/2326] Rewrite state transition logic --- bip-0009.mediawiki | 212 +++++++++++++++++++++----------------------- bip-0009/states.png | Bin 0 -> 24827 bytes 2 files changed, 101 insertions(+), 111 deletions(-) create mode 100644 bip-0009/states.png diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index b10a91c1a0..856db7a9b7 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -24,140 +24,130 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): -# The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. -# The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. +# The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. +# The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. The recommended value is 1916 (95%) for mainnet and 1512 (75%) for testnets. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. -===Mechanism=== +No two deployments may use the same bit if they have overlapping starttime-timeout periods. -'''Bit flags''' -We are permitting several independent soft forks to be deployed in parallel. For each, a bit B is chosen from the set {0,1,2,...,28}, which is not currently in use for any other ongoing soft fork. Miners signal intent to enforce the new rules associated with the proposed soft fork by setting bit 1B in nVersion to 1 in their blocks. +The starttime should be set to some date in the future, coordinates with software release date. This is to prevent +triggers as a result of parties running pre-release software. The timeout should be set a reasonable time after the +starttime. Setting it to 3 years after the starttime would allow around 9 deployments to be initiated every year. -'''High bits''' -The highest 3 bits are set to 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. This leaves two future upgrades for different mechanisms (top bits 010 and 011), while complying to the constraints set by BIP 34 and BIP 66. Having more than 29 available bits for parallel soft forks does not add anything anyway, as the (nVersion >= 3) requirement already makes that impossible. +====States==== -'''States''' -With every softfork proposal we associate a state BState, which begins -at ''defined'', and can be ''started'', ''locked-in'', ''activated'', -or ''failed''. Transitions are considered after each -retarget period. +With each block and soft fork, we associate a deployment state. The possible states are: -'''Soft Fork Support''' -Software which supports the change should begin by setting B in all blocks -mined until it is resolved. +# '''DEFINED''' is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment. +# '''STARTED''' for blocks past the starttime. +# '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion. +# '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. +# '''FAILED''' for one retarget period past the timeout time, if LOCKED_IN was not reached. +# '''ABANDONED''' for all blocks after the FAILED retarget period. - if (BState == started || BState == locked-in) { - SetBInBlock(); - } +====Bit flags==== + +Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be +001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. This leaves two future +upgrades for different mechanisms (top bits 010 and 011), while complying to the constraints set by BIP 34 and others. +Having more than 29 available bits for parallel soft forks does not add anything anyway, as the (nVersion >= 3) +requirement already makes that impossible. When a block nVersion does not have top bits 001, it is treated as if all +bits are 0 for the purposes of deployments in the context of this BIP. Miners should continue setting the bit in +LOCKED_IN phase, so uptake is visible + +====New consensus rules==== + +The new consensus rules for each soft fork are enforced for each block that has ACTIVE state. + +====State transitions==== -'''Start time''' -If a block's median time past is at least the starttime, and it is consider ''started''. + - if (NextBlockHeight % 2016 == 0) { - if (BState == defined && GetMedianTimePast(nextblock) >= starttime) { - BState = started; +The genesis block has state DEFINED for each deployment, by definition. + + State GetStateForBlock(block) { + if (block.height == 0) { + return DEFINED; } - } -'''Success: Lock-in Threshold''' -If bit B is set in 1916 (1512 on testnet) or -more of the 2016 blocks within a retarget period, it is considered -''locked-in''. Miners should continue setting bit B, so uptake is -visible. +All blocks within a retarget period have the same state. This means that if +floor(block1.height / 2016) = floor(block2.height / 2016), they are guaranteed to have the same state for every +deployment. - if (NextBlockHeight % 2016 == 0) { - if (BState == started && Previous2016BlocksCountB() >= threshold) { - BState = locked-in; - BActiveHeight = NextBlockHeight + 2016; + if ((block.height % 2016) != 0) { + return GetStateForBlock(GetParent(block)); } - } -'''Success: Activation Delay''' -The consensus rules related to ''locked-in'' soft fork will be enforced in -the second retarget period; ie. there is a one retarget period in -which the remaining 5% can upgrade. At the that activation block and -after, miners should stop setting bit B, which may be reused for a different soft fork. - - if (BState == locked-in && NextBlockHeight == BActiveHeight) { - BState = activated; - ApplyRulesForBFromNextBlock(); - /* B can be reused, immediately */ - } - -'''Failure: Timeout''' -A soft fork proposal should include a ''timeout''. This is measured -as the beginning of a calendar year as per this table (suggest -adding three to the current calendar year when drafting the soft fork proposal): - -{| -! Timeout Year -! >= Seconds -! Timeout Year -! >= Seconds -|- -|2018 -|1514764800 -|2026 -|1767225600 -|- -|2019 -|1546300800 -|2027 -|1798761600 -|- -|2020 -|1577836800 -|2028 -|1830297600 -|- -|2021 -|1609459200 -|2029 -|1861920000 -|- -|2022 -|1640995200 -|2030 -|1893456000 -|- -|2023 -|1672531200 -|2031 -|1924992000 -|- -|2024 -|1704067200 -|2032 -|1956528000 -|- -|2025 -|1735689600 -|2033 -|1988150400 -|} - -If the soft fork still not ''locked-in'' and the -GetMedianTimePast() of a block following a retarget period is at or -past this timeout, miners should cease setting this bit. - - if (NextBlockHeight % 2016 == 0) { - if (BState == started && GetMedianTimePast(nextblock) >= BFinalYear) { - BState = failed; +Otherwise, the next state depends on the previous state: + + switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) { + +We remain in the initial state until either we pass the start time or the timeout. GetMedianTimePast in the code below +refers to the median nTime of the 11 blocks preceeding a given block. + + case DEFINED: + if (GetMedianTimePast(block) >= timeout) { + return FAILED; + } + if (GetMedianTimePast(block) >= starttime) { + return STARTED; + } + return DEFINED; + +When in STARTED state, we tally the bits set, and can transition to LOCKED_IN if we pass the threshold. Alternatively, +the timeout can trigger. Note that a block's state never depends on its own nVersion; only on that of its ancestors. + + case STARTED: { + int count = 0; + walk = block; + for (i = 0; i < 2016; i++) { + walk = walk.parent; + if (walk.nVersion & 0xE0000000 == 0x2000000 && (walk.nVersion >> bit) & 1 == 1) { + count++; + } + } + if (count >= threshold) { + return LOCKED_IN; + } + if (GetMedianTimePast(block) >= timeout) { + return FAILED; + } } - } -After another retarget period (to allow detection of buggy miners), -the bit may be reused. +After a retarget period of LOCKED_IN or FAILED, we automatically transition to ACTIVE and ABANDONED, respectively. -'''Warning system''' -To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever lock-in for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period. + case LOCKED_IN: + return ACTIVE; + + case FAILED: + return ABANDONED; + +And ACTIVE and ABANDONED are terminal states, which a deployment stays in once they're reached. + + case ACTIVE: + return ACTIVE; + + case ABANDONED: + return ABANDONED; + } + } '''Forks''' It should be noted that the states are maintained along block chain branches, but may need recomputation when a reorganization happens. -===Support for future changes=== +'''Implementation''' +Given that the state for a specific block/deployment combination is completely determined by its ancestry before the +current retarget period (i.e. up to and including its ancestor with height block.height - 1 - (block.height % 2016)), +it is possible to implement the mechanism above efficiently by caching the resulting state of every multiple-of-2016 +block, indexed by its parent. + +====Warning mechanism==== + +To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). + +==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. diff --git a/bip-0009/states.png b/bip-0009/states.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3139efe40652d75d9a93408eb2466544823ca5 GIT binary patch literal 24827 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%0Ad6_92|6sX{(bbQ^c}2 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 Date: Tue, 1 Mar 2016 10:49:24 -0800 Subject: [PATCH 0266/2326] Update bip-invoicerequest-extension.mediawiki --- bip-invoicerequest-extension.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki index d3143e201d..b5d7cdbb1d 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-invoicerequest-extension.mediawiki @@ -1,5 +1,5 @@
-  BIP:     XXX
+  BIP:     TBD
   Title:   Out of Band Address Exchange using Encrypted PaymentRequests
   Authors: Justin Newton 
            Matt David 
@@ -468,4 +468,4 @@ In this case, the Sender submits the transaction to the bitcoin network.
 * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH]
 * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG]
 * [https://tools.ietf.org/html/rfc6979 RFC6979]
-* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse]
\ No newline at end of file
+* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse]

From df01620ebc57a921be8c2350c0fc395f4ec87c00 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Tue, 1 Mar 2016 10:50:50 -0800
Subject: [PATCH 0267/2326] Update bip-invoicerequest-extension.mediawiki

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

diff --git a/bip-invoicerequest-extension.mediawiki b/bip-invoicerequest-extension.mediawiki
index b5d7cdbb1d..dd5aec942a 100644
--- a/bip-invoicerequest-extension.mediawiki
+++ b/bip-invoicerequest-extension.mediawiki
@@ -6,7 +6,7 @@
            Aaron Voisine 
            James MacWhyte 
   Status:  Draft
-  Type:    Informational
+  Type:    Standards Track
   Created: 2015-11-20
 
From a4493063735f2e221f7a2c8d032bb172c8498147 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 2 Mar 2016 05:37:51 +0100 Subject: [PATCH 0268/2326] Remove ABANDONED and fix ambiguity --- bip-0009.mediawiki | 33 ++++++++++++++++----------------- bip-0009/states.png | Bin 24827 -> 29300 bytes 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 856db7a9b7..e6be63a19c 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -29,11 +29,11 @@ Each soft fork deployment is specified by the following per-chain parameters (fu # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. -No two deployments may use the same bit if they have overlapping starttime-timeout periods. - The starttime should be set to some date in the future, coordinates with software release date. This is to prevent triggers as a result of parties running pre-release software. The timeout should be set a reasonable time after the -starttime. Setting it to 3 years after the starttime would allow around 9 deployments to be initiated every year. +starttime. A later deployment using the same bit is possible as long as its starttime is after the previous one's +timeout. This means that by setting it to 3 years after the starttime would allow around 9 deployments to be initiated +every year. ====States==== @@ -44,7 +44,6 @@ With each block and soft fork, we associate a deployment state. The possible sta # '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion. # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. # '''FAILED''' for one retarget period past the timeout time, if LOCKED_IN was not reached. -# '''ABANDONED''' for all blocks after the FAILED retarget period. ====Bit flags==== @@ -84,7 +83,7 @@ Otherwise, the next state depends on the previous state: switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) { We remain in the initial state until either we pass the start time or the timeout. GetMedianTimePast in the code below -refers to the median nTime of the 11 blocks preceeding a given block. +refers to the median nTime of the 11 blocks preceeding a given block (referred to as MTP in the diagram above). case DEFINED: if (GetMedianTimePast(block) >= timeout) { @@ -95,10 +94,16 @@ refers to the median nTime of the 11 blocks preceeding a given block. } return DEFINED; -When in STARTED state, we tally the bits set, and can transition to LOCKED_IN if we pass the threshold. Alternatively, -the timeout can trigger. Note that a block's state never depends on its own nVersion; only on that of its ancestors. +After a period in the STARTED state, if we're past the timeout, we switch to FAILED. If not, we tally the bits set, +and transition to LOCKED_IN if we pass the threshold. The transaction to FAILED takes precendence, as otherwise there +could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN and the other +to STARTED, which would mean both would demand setting the bit. Note that a block's state never depends on its own +nVersion; only on that of its ancestors. case STARTED: { + if (GetMedianTimePast(block) >= timeout) { + return FAILED; + } int count = 0; walk = block; for (i = 0; i < 2016; i++) { @@ -110,26 +115,20 @@ the timeout can trigger. Note that a block's state never depends on its own nVer if (count >= threshold) { return LOCKED_IN; } - if (GetMedianTimePast(block) >= timeout) { - return FAILED; - } } -After a retarget period of LOCKED_IN or FAILED, we automatically transition to ACTIVE and ABANDONED, respectively. +After a retarget period of LOCKED_IN, we automatically transition to ACTIVE. case LOCKED_IN: return ACTIVE; - case FAILED: - return ABANDONED; - -And ACTIVE and ABANDONED are terminal states, which a deployment stays in once they're reached. +And ACTIVE and FAILED are terminal states, which a deployment stays in once they're reached. case ACTIVE: return ACTIVE; - case ABANDONED: - return ABANDONED; + case FAILED: + return FAILED; } } diff --git a/bip-0009/states.png b/bip-0009/states.png index 7b3139efe40652d75d9a93408eb2466544823ca5..e058c8da130b6d47bafb4aa834dab23a2743a627 100644 GIT binary patch literal 29300 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

F>Y>-m{P~(*#e` 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 JPuns4e*w4@!z};+ From 760e2a15bf04f888ee6c40f90d70ceac25c315c4 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 2 Mar 2016 19:19:42 +0100 Subject: [PATCH 0270/2326] Make the threshold independent from the deployment --- bip-0009.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index e6be63a19c..6c65c8cbd7 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -25,7 +25,6 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. -# The '''threshold''' specifies how many blocks within a single retarget period (2016 blocks) must have the bit set before we lock in the deployment. The recommended value is 1916 (95%) for mainnet and 1512 (75%) for testnets. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. @@ -95,7 +94,9 @@ refers to the median nTime of the 11 blocks preceeding a given block (referred t return DEFINED; After a period in the STARTED state, if we're past the timeout, we switch to FAILED. If not, we tally the bits set, -and transition to LOCKED_IN if we pass the threshold. The transaction to FAILED takes precendence, as otherwise there +and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their +version numbers. The threshold is 1915 blocks (95% of 2016), or 1512 on testnet (75% of 2016). +The transaction to FAILED takes precendence, as otherwise there could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN and the other to STARTED, which would mean both would demand setting the bit. Note that a block's state never depends on its own nVersion; only on that of its ancestors. From 63d626668c01c6aaa5baadf7f80341d6eed0b090 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 2 Mar 2016 19:42:41 +0100 Subject: [PATCH 0271/2326] Clarify things and make notation more consistent --- bip-0009.mediawiki | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 6c65c8cbd7..8a765590a7 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -74,7 +74,7 @@ floor(block1.height / 2016) = floor(block2.height / 2016), they are guaranteed t deployment. if ((block.height % 2016) != 0) { - return GetStateForBlock(GetParent(block)); + return GetStateForBlock(block.parent); } Otherwise, the next state depends on the previous state: @@ -82,27 +82,29 @@ Otherwise, the next state depends on the previous state: switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) { We remain in the initial state until either we pass the start time or the timeout. GetMedianTimePast in the code below -refers to the median nTime of the 11 blocks preceeding a given block (referred to as MTP in the diagram above). +refers to the median nTime of a block and its 10 predecessors. The expression GetMedianTimePast(block.parent) is +referred to as MTP in the diagram above, and is treated as a monotonic clock defined by the chain. case DEFINED: - if (GetMedianTimePast(block) >= timeout) { + if (GetMedianTimePast(block.parent) >= timeout) { return FAILED; } - if (GetMedianTimePast(block) >= starttime) { + if (GetMedianTimePast(block.parent) >= starttime) { return STARTED; } return DEFINED; After a period in the STARTED state, if we're past the timeout, we switch to FAILED. If not, we tally the bits set, and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their -version numbers. The threshold is 1915 blocks (95% of 2016), or 1512 on testnet (75% of 2016). -The transaction to FAILED takes precendence, as otherwise there -could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN and the other -to STARTED, which would mean both would demand setting the bit. Note that a block's state never depends on its own -nVersion; only on that of its ancestors. +version numbers. The threshold is 1915 blocks (95% of 2016), or 1512 for testnet (75% of 2016). +The transition to FAILED takes precendence, as otherwise an ambiguity can arise. +There could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN while the +other one simultaneously transitions to STARTED, which would mean both would demand setting the bit. + +Note that a block's state never depends on its own nVersion; only on that of its ancestors. case STARTED: { - if (GetMedianTimePast(block) >= timeout) { + if (GetMedianTimePast(block.parent) >= timeout) { return FAILED; } int count = 0; @@ -133,14 +135,13 @@ And ACTIVE and FAILED are terminal states, which a deployment stays in once they } } -'''Forks''' +'''Implementation''' It should be noted that the states are maintained along block chain branches, but may need recomputation when a reorganization happens. -'''Implementation''' Given that the state for a specific block/deployment combination is completely determined by its ancestry before the current retarget period (i.e. up to and including its ancestor with height block.height - 1 - (block.height % 2016)), -it is possible to implement the mechanism above efficiently by caching the resulting state of every multiple-of-2016 +it is possible to implement the mechanism above efficiently and safely by caching the resulting state of every multiple-of-2016 block, indexed by its parent. ====Warning mechanism==== @@ -152,7 +153,7 @@ To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "i The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. '''Modified thresholds''' -The 95% threshold (based on in BIP 34) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore. +The 1915 threshold (based on in BIP 34's 95%) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore. '''Conflicting soft forks''' At some point, two mutually exclusive soft forks may be proposed. The naive way to deal with this is to never create software that implements both, but that is making a bet that at least one side is guaranteed to lose. Better would be to encode "soft fork X cannot be locked-in" as consensus rule for the conflicting soft fork - allowing software that supports both, but can never trigger conflicting changes. From cd6dfb94116224d552b3cc884b3454deeeaf0ad8 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 2 Mar 2016 19:48:34 +0100 Subject: [PATCH 0272/2326] Recommend a fallow pause explicitly --- bip-0009.mediawiki | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 8a765590a7..ef7a2ab0d5 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -30,9 +30,10 @@ Each soft fork deployment is specified by the following per-chain parameters (fu The starttime should be set to some date in the future, coordinates with software release date. This is to prevent triggers as a result of parties running pre-release software. The timeout should be set a reasonable time after the -starttime. A later deployment using the same bit is possible as long as its starttime is after the previous one's -timeout. This means that by setting it to 3 years after the starttime would allow around 9 deployments to be initiated -every year. +starttime. A later deployment using the same bit is possible as long as the first one its starttime is after the previous one's +timeout or activation, though it is recommended to have a pause in between to detect buggy software. + +Setting the timeout to 3 years after the starttime allows at least 9 new deployments per year. ====States==== From a3df16e6504769498c51af88afd4cf2148896bd0 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 2 Mar 2016 19:59:18 +0100 Subject: [PATCH 0273/2326] Correct the claim that only 29 bits are available anyway --- bip-0009.mediawiki | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index ef7a2ab0d5..7ef014d2d6 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -48,12 +48,16 @@ With each block and soft fork, we associate a deployment state. The possible sta ====Bit flags==== Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be -001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. This leaves two future -upgrades for different mechanisms (top bits 010 and 011), while complying to the constraints set by BIP 34 and others. -Having more than 29 available bits for parallel soft forks does not add anything anyway, as the (nVersion >= 3) -requirement already makes that impossible. When a block nVersion does not have top bits 001, it is treated as if all -bits are 0 for the purposes of deployments in the context of this BIP. Miners should continue setting the bit in -LOCKED_IN phase, so uptake is visible +001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. + +Due to the constraints set by BIP 34, BIP 66 and BIP 65, we only have 0x7FFFFFFB possible nVersion values available. +This restricts us to at most 30 independent deployments. By restricting the top 3 bits to 001 we get 29 out of those +for the purposes of this proposal, and support two future upgrades for different mechanisms (top bits 010 and 011). +When a block nVersion does not have top bits 001, it is treated as if all +bits are 0 for the purposes of deployments. + +Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on +consensus rules. ====New consensus rules==== From b3a93c42016ba8d29f6f3cbb0cd23068b4bf1505 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sun, 6 Mar 2016 18:18:23 +0100 Subject: [PATCH 0274/2326] Update bip-0133.mediawiki --- bip-0133.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki index b5146e33fc..f78f3283ed 100644 --- a/bip-0133.mediawiki +++ b/bip-0133.mediawiki @@ -28,13 +28,13 @@ After receiving a feefilter message, a node can know before sending an inv that # Feature discovery is enabled by checking protocol version >= 70013 ==Considerations== -The propagation efficiency of transactions across the network should not be adversely affected by this change. In general, transactions which are not accepted to your mempool are not relayed and the funcionality implemented with this message is meant only to filter those transactions. There could be a small number of edge cases where a node's mempool min fee is actually less than the filter value a peer is aware of and transactions with fee rates between these values will now be newly inhibited. +The propagation efficiency of transactions across the network should not be adversely affected by this change. In general, transactions which are not accepted to a node's mempool are not relayed by this node and the functionality implemented with this message is meant only to filter those transactions. There could be a small number of edge cases where a node's mempool min fee is actually less than the filter value a peer is aware of and transactions with fee rates between these values will now be newly inhibited. Feefilter messages are not sent to whitelisted peers if the "-whitelistforcerelay" option is set. In that case, transactions are intended to be relayed even if they are not accepted to the mempool. -There are privacy concerns with deanonymizing a node by the fact that it is broadcasting identifying information about its mempool min fee. To help ameliorate this concern, the implementaion quantizes the filter value broadcast with a small amount of randomness, in addition, the messages are broadcast to different peers at individually randomly distributed times. +There are privacy concerns with deanonymizing a node by the fact that it is broadcasting identifying information about its mempool min fee. To help ameliorate this concern, the implementation quantizes the filter value broadcast with a small amount of randomness, in addition, the messages are broadcast to different peers at individually randomly distributed times. -If a node is using prioritisetransaction to accept transactions whose actual fee rates might fall below the node's mempool min fee, it may want to consider setting "-nofeefilter" to make sure it is exposed to all possible txid's. +If a node is using prioritisetransaction to accept transactions whose actual fee rates might fall below the node's mempool min fee, it may want to consider setting "-feefilter=0" to make sure it is exposed to all possible txid's. ==Backward compatibility== From fa02af6e894a64e4c4abb9f4484aedc4b1f69904 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Mon, 7 Mar 2016 09:33:34 +0100 Subject: [PATCH 0275/2326] bip 133: remove implementation detail --- bip-0133.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki index f78f3283ed..7d98f87c36 100644 --- a/bip-0133.mediawiki +++ b/bip-0133.mediawiki @@ -34,11 +34,11 @@ Feefilter messages are not sent to whitelisted peers if the "-whitelistforcerela There are privacy concerns with deanonymizing a node by the fact that it is broadcasting identifying information about its mempool min fee. To help ameliorate this concern, the implementation quantizes the filter value broadcast with a small amount of randomness, in addition, the messages are broadcast to different peers at individually randomly distributed times. -If a node is using prioritisetransaction to accept transactions whose actual fee rates might fall below the node's mempool min fee, it may want to consider setting "-feefilter=0" to make sure it is exposed to all possible txid's. +If a node is using prioritisetransaction to accept transactions whose actual fee rates might fall below the node's mempool min fee, it may want to consider disabling the fee filter to make sure it is exposed to all possible txid's. ==Backward compatibility== -Older clients remain fully compatible and interoperable after this change. The sending of feefilter messages can be disabled by unsetting the "-feefilter" option. +Older clients remain fully compatible and interoperable after this change. Also, clients implementing this BIP can choose to not send any feefilter messages. ==Implementation== From c6f8e3ae62dcf8fa9f464928f3d71d4cae4d6022 Mon Sep 17 00:00:00 2001 From: Jonathan Cross Date: Mon, 7 Mar 2016 16:51:59 +0100 Subject: [PATCH 0276/2326] Small typo in bip-0009.mediawiki --- bip-0009.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 7ef014d2d6..49e6adf28f 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -30,7 +30,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu The starttime should be set to some date in the future, coordinates with software release date. This is to prevent triggers as a result of parties running pre-release software. The timeout should be set a reasonable time after the -starttime. A later deployment using the same bit is possible as long as the first one its starttime is after the previous one's +starttime. A later deployment using the same bit is possible as long as the starttime is after the previous one's timeout or activation, though it is recommended to have a pause in between to detect buggy software. Setting the timeout to 3 years after the starttime allows at least 9 new deployments per year. From c0c7d7f0a101a84523a581bff6edb922b44d560b Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 7 Mar 2016 18:18:58 -0800 Subject: [PATCH 0277/2326] Renamed to BIP75, added extensions to BIP70 payment details --- bip-0070/extensions.mediawiki | 6 ++- ...-extension.mediawiki => bip-0075.mediawiki | 51 +++++++++++++++--- {bip-ir => bip-0075}/bip70-extension.png | Bin .../encrypted-invoice-request-process.png | Bin .../invoice-request-process.png | Bin ...mobile-sf-encrypted-ir-without-payment.png | Bin .../mobile-sf-ir-with-payment.png | Bin .../mobile-sf-ir-without-payment.png | Bin {bip-ir => bip-0075}/paymentrequest.proto | 0 9 files changed, 47 insertions(+), 10 deletions(-) rename bip-invoicerequest-extension.mediawiki => bip-0075.mediawiki (92%) rename {bip-ir => bip-0075}/bip70-extension.png (100%) rename {bip-ir => bip-0075}/encrypted-invoice-request-process.png (100%) rename {bip-ir => bip-0075}/invoice-request-process.png (100%) rename {bip-ir => bip-0075}/mobile-sf-encrypted-ir-without-payment.png (100%) rename {bip-ir => bip-0075}/mobile-sf-ir-with-payment.png (100%) rename {bip-ir => bip-0075}/mobile-sf-ir-without-payment.png (100%) rename {bip-ir => bip-0075}/paymentrequest.proto (100%) diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki index 51400d88a5..9e360dea0a 100644 --- a/bip-0070/extensions.mediawiki +++ b/bip-0070/extensions.mediawiki @@ -3,7 +3,9 @@ Add your extension below using tags starting at 1000 and submit a pull-req. {| -| Field Number || Extension Name || Field Name || Description +| Field Number || Extension Name || Field Name || Payment Details Version || Description |- -| 1000 || [[https://example.com|(unassigned)]] || (unassigned) || (unassigned) +| 1000 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || subtract_fee || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. +|- +| 1001 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || replace_by_fee || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. |} diff --git a/bip-invoicerequest-extension.mediawiki b/bip-0075.mediawiki similarity index 92% rename from bip-invoicerequest-extension.mediawiki rename to bip-0075.mediawiki index dd5aec942a..ff084e7595 100644 --- a/bip-invoicerequest-extension.mediawiki +++ b/bip-0075.mediawiki @@ -1,5 +1,5 @@

-  BIP:     TBD
+  BIP:     75
   Title:   Out of Band Address Exchange using Encrypted PaymentRequests
   Authors: Justin Newton 
            Matt David 
@@ -82,7 +82,7 @@ service. In this case, a successful attack against a Store & Forward service wou
 or payment information, only delete encrypted messages.
 
 ==New Messages==
-Updated [/bip-ir/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as
+Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as
 the messages newly defined in this BIP.
 
 Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained.
@@ -273,7 +273,7 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther
 # The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages
 
 
-
+
 
 ===Encrypted InvoiceRequest Overview===
 # Sender retrieves Receiver InvoiceRequest Public Key
@@ -293,7 +293,7 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther
 
 NOTE: See section Initial Public Key Retrieval for InvoiceRequest Encryption below for possible options to retrieve Receiver InvoiceRequest public keys.
 
-
+
 
 ==Message Interaction Details==
 
@@ -437,7 +437,7 @@ A reference client implementation can be found in the InvoiceRequest functional
 ==BIP70 Extension==
 The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70.
 
-
+
 
 ==Mobile to Mobile Examples==
 
@@ -446,21 +446,56 @@ The following diagram shows a sample flow in which one mobile client is sending
 of an InvoiceRequest, a Store & Forward server, an EncryptedPaymentRequest (with require_payment_message = true), an 
 EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits the transaction to the bitcoin network.
 
-
+
 
 ===EncryptedPayment NOT Required===
 The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use
 of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). 
 In this case, the Sender submits the transaction to the bitcoin network.
 
-
+
 
 ===Using EncryptedInvoiceRequest Message===
 The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use
 of an EncryptedInvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). 
 In this case, the Sender submits the transaction to the bitcoin network.
 
-
+
+
+==Extending BIP70 PaymentDetails==
+
+To keep up with recent advancements in transaction type, two optional fields will be added to the BIP 70 PaymentDetails message. subtract_fee will be added to the current version 1 fields, making the complete list look like the following:
+
+
+
+    message PaymentDetails {
+        optional string network [default = "main"];
+        repeated Output outputs;
+        required uint64 time;
+        optional uint64 expires;
+        optional string memo;
+        optional string payment_url;
+        optional bytes merchant_data;
+        optional bool subtract_fee = 1;
+    }
+
+ +replace_by_fee will be added as a version 2 field, meaning it is only available if payment_details_version is set to 2 or higher in the PaymentRequest message: + +
+    message PaymentDetails {
+        ...
+        optional bool replace_by_fee = 2;
+    }
+
+ +{| class="wikitable" +! Field Name !! Field Number || Payment Details Version !! Description +|- +| subtract_fee || 1000 || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. +|- +| replace_by_fee || 1001 || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. +|} ==References== diff --git a/bip-ir/bip70-extension.png b/bip-0075/bip70-extension.png similarity index 100% rename from bip-ir/bip70-extension.png rename to bip-0075/bip70-extension.png diff --git a/bip-ir/encrypted-invoice-request-process.png b/bip-0075/encrypted-invoice-request-process.png similarity index 100% rename from bip-ir/encrypted-invoice-request-process.png rename to bip-0075/encrypted-invoice-request-process.png diff --git a/bip-ir/invoice-request-process.png b/bip-0075/invoice-request-process.png similarity index 100% rename from bip-ir/invoice-request-process.png rename to bip-0075/invoice-request-process.png diff --git a/bip-ir/mobile-sf-encrypted-ir-without-payment.png b/bip-0075/mobile-sf-encrypted-ir-without-payment.png similarity index 100% rename from bip-ir/mobile-sf-encrypted-ir-without-payment.png rename to bip-0075/mobile-sf-encrypted-ir-without-payment.png diff --git a/bip-ir/mobile-sf-ir-with-payment.png b/bip-0075/mobile-sf-ir-with-payment.png similarity index 100% rename from bip-ir/mobile-sf-ir-with-payment.png rename to bip-0075/mobile-sf-ir-with-payment.png diff --git a/bip-ir/mobile-sf-ir-without-payment.png b/bip-0075/mobile-sf-ir-without-payment.png similarity index 100% rename from bip-ir/mobile-sf-ir-without-payment.png rename to bip-0075/mobile-sf-ir-without-payment.png diff --git a/bip-ir/paymentrequest.proto b/bip-0075/paymentrequest.proto similarity index 100% rename from bip-ir/paymentrequest.proto rename to bip-0075/paymentrequest.proto From 1b96cf1e78d8e015bb148d929f312da3ef495743 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 7 Mar 2016 18:59:24 -0800 Subject: [PATCH 0278/2326] - Update PaymentDetails index - Added bolding to replace_by_fee --- bip-0075.mediawiki | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index ff084e7595..b7755b2e11 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -466,35 +466,35 @@ In this case, the Sender submits the transaction to the bitcoin network. To keep up with recent advancements in transaction type, two optional fields will be added to the BIP 70 PaymentDetails message. subtract_fee will be added to the current version 1 fields, making the complete list look like the following: -
-    message PaymentDetails {
-        optional string network [default = "main"];
-        repeated Output outputs;
-        required uint64 time;
-        optional uint64 expires;
-        optional string memo;
-        optional string payment_url;
-        optional bytes merchant_data;
-        optional bool subtract_fee = 1;
-    }
+message PaymentDetails {
+        optional string network = 1 [default = "main"];
+        repeated Output outputs = 2;
+        required uint64 time = 3;
+        optional uint64 expires = 4;
+        optional string memo = 5;
+        optional string payment_url = 6;
+        optional bytes merchant_data = 7;
+        optional bool subtract_fee = 1000;
+}
 
-replace_by_fee will be added as a version 2 field, meaning it is only available if payment_details_version is set to 2 or higher in the PaymentRequest message: +replace_by_fee will be added as a version 2 field. It is only available if payment_details_version is set to 2 or higher in the PaymentRequest message:
+    // PaymentDetails v2
     message PaymentDetails {
         ...
-        optional bool replace_by_fee = 2;
+        optional bool replace_by_fee = 1001;
     }
 
{| class="wikitable" ! Field Name !! Field Number || Payment Details Version !! Description |- -| subtract_fee || 1000 || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. +| subtract_fee || 1000 || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. |- -| replace_by_fee || 1001 || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. +| replace_by_fee || 1001 || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. |} ==References== From f753dd73723ce9e280190788326c672e2df1f0d2 Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 8 Mar 2016 09:43:17 -0800 Subject: [PATCH 0279/2326] - Add subtract_fee and replace_by_fee flags to PaymentDetails. replace_by_fee is commented out as it's only available in version 2 of the message --- bip-0075/paymentrequest.proto | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 8f39c6d15a..149dc97582 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -17,12 +17,14 @@ message Output { } message PaymentDetails { optional string network = 1 [default = "main"]; // "main" or "test" - repeated Output outputs = 2; // Where payment should be sent - required uint64 time = 3; // Timestamp; when payment request created - optional uint64 expires = 4; // Timestamp; when this request should be considered invalid - optional string memo = 5; // Human-readable description of request for the customer - optional string payment_url = 6; // URL to send Payment and get PaymentACK - optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message + repeated Output outputs = 2; // Where payment should be sent + required uint64 time = 3; // Timestamp; when payment request created + optional uint64 expires = 4; // Timestamp; when this request should be considered invalid + optional string memo = 5; // Human-readable description of request for the customer + optional string payment_url = 6; // URL to send Payment and get PaymentACK + optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message + optional bool subtract_fee = 1000; // Allow SubtractableFee + //optional bool replace_by_fee = 1001; // Force RBF true or false (version: 2) } message PaymentRequest { optional uint32 payment_details_version = 1 [default = 1]; From 2bfa7bb7b7b377191e036d1e883a8f8b8c2d69ce Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 8 Mar 2016 18:01:40 +0000 Subject: [PATCH 0280/2326] bip-0002: Complete license explanation --- bip-0002.mediawiki | 48 ++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 0d94792b6a..8f81b4d46b 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -139,40 +139,54 @@ New BIPs may be accepted with the following licenses. Each new BIP must identify For example, a preamble might include the following License header: - License: CC-0 - MIT + License: BSD-2-Clause + GNU-All-Permissive + +In this case, the BIP text is fully licensed under both the OSI-approved BSD 2-clause license as well as the GNU All-Permissive License, and anyone may modify and redistribute the text provided they comply with the terms of *either* license. In other words, the license list is an "OR choice", not an "AND also" requirement. It is also possible to license source code differently from the BIP text. A optional License-Code header is placed after the License header. Again, each license must be referenced by their respective abbreviation given below. For example, a preamble specifying the optional License-Code header might look like: - License: CC-0 - MIT - License-Code: GPL-2.0 + License: BSD-2-Clause + GNU-All-Permissive + License-Code: GPL-2.0+ + +In this case, the code in the BIP is not available under the BSD or All-Permissive licenses, but only under the terms of the GNU General Public License (GPL), version 2 or newer. +If the code were to be available under *only* version 2 exactly, the "+" symbol should be removed from the license abbreviation. +For a later version (eg, GPL 3.0), you would increase the version number (and retain or remove the "+" depending on intent). + + License-Code: GPL-2.0 # This refers to GPL v2.0 *only*, no later license versions are acceptable. + License-Code: GPL-2.0+ # This refers to GPL v2.0 *or later*. + License-Code: GPL-3.0 # This refers to GPL v3.0 *only*, no later license versions are acceptable. + License-Code: GPL-3.0+ # This refers to GPL v3.0 *or later*. + +In the event that the text or code is not available under common license terms, the list should instead be replaced with the single term "Complex", and full details provided in the Copyright section of the BIP. ====Recommended licenses==== * BSD-2-Clause: [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license] * BSD-3-Clause: [https://opensource.org/licenses/BSD-3-Clause OSI-approved BSD 3-clause license] -* CC-0: [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] -* GNU-ALL-PERMISSIVE: [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] +* CC0-1.0: [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal] +* GNU-All-Permissive: [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License] In addition, it is recommended that literal code included in the BIP be dual-licensed under the same license terms as the project it modifies. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms as well as one of the above with the rest of the BIP text. ====Not recommended, but acceptable licenses==== -* ALv2: [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] -* BSL-1.0 [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0] -* CC-BY-4.0 [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International] -* CC-BY-SA-4.0 [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International] -* MIT [https://opensource.org/licenses/MIT Expat/MIT/X11 license] -* AGPL-3.0 [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer] -* FDL-1.3 [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License] -* GPL-2.0 [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer] -* LGPL-2.1 [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] -* OPL-1.0 [http://opencontent.org/openpub/ Open Publication License, version 1.0] +* Apache-2.0: [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0] +* BSL-1.0: [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0] +* CC-BY-4.0: [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International] +* CC-BY-SA-4.0: [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International] +* MIT: [https://opensource.org/licenses/MIT Expat/MIT/X11 license] +* AGPL-3.0+: [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer] +* FDL-1.3: [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License, version 1.3] +* GPL-2.0+: [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer] +* LGPL-2.1+: [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer] +* OPL: [http://opencontent.org/openpub/ Open Publication License, version 1.0] Additionally, PD is used to express that the work is placed in the public domain. +This may not be used for new BIPs, and is only defined for use by BIPs predating acceptance of this BIP. ===Rationale=== From 54018e97fa691127327318e7e7212ed47f6156f2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 8 Mar 2016 18:12:42 +0000 Subject: [PATCH 0281/2326] bip-0002: Rationale for prohibiting PD in new BIPs --- bip-0002.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 8f81b4d46b..4150b34f74 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -201,6 +201,10 @@ Why are there software licenses included? * Some BIPs, especially consensus layer, may include literal code in the BIP itself which may not be available under the exact license terms of the BIP. * Despite this, not all software licenses would be acceptable for content included in BIPs. +Why is Public Domain no longer acceptable for new BIPs? + +* In some jurisdictions, public domain is not recognised as a legitimate legal action, leaving the BIP simply copyrighted with no redistribution or modification allowed at all. + ==See Also== * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] From bac34a1e8c4b252a9d3c8cbdffd5e6d409738713 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 8 Mar 2016 18:40:29 +0000 Subject: [PATCH 0282/2326] bip-0002: Clarify ordering of Comments-* headers --- bip-0002.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 4150b34f74..4e457a31d4 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -118,6 +118,8 @@ For example, the preamble to BIP 1 might be updated to include the line: Comments-URI: https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 https://some-other-wiki.org/BIP_1_Comments +These fields must follow the "Discussions-To" header defined in BIP 1 (if that header is not present, it should follow the position where it would be present; generally this is immediately above the Status header). + To avoid doubt: comments and status are unrelated metrics to judge a BIP, and neither should be directly influencing the other. ===Rationale=== From 0c87a9b7f1dcbbe94e9378f67331e176719f3628 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 9 Mar 2016 15:25:58 +0000 Subject: [PATCH 0283/2326] bip-0002: Fix typo --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 4e457a31d4..d9a0ede1a2 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -211,4 +211,4 @@ Why is Public Domain no longer acceptable for new BIPs? * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] * [[bip-0123.mediawiki|BIP 123: BIP Classification]] -* [https://tools.ietf.org/html/rfc7282 RBF 7282: On Consensus and Humming in the IETF] +* [https://tools.ietf.org/html/rfc7282 RFC 7282: On Consensus and Humming in the IETF] From dddcb735f86e0d7b9ce703963369485b50c20e28 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Wed, 9 Mar 2016 18:25:02 -0800 Subject: [PATCH 0284/2326] Extended BIP70 fields, added BIP number --- README.mediawiki | 6 ++++++ bip-0070/extensions.mediawiki | 8 +++++--- bip-0075.mediawiki | 34 +++++++++++----------------------- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 925910c256..fef07700f9 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -302,6 +302,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0075.mediawiki|75]] +| Out of Band Address Exchange using Payment Protocol Encryption +| Justin Newton, Matt David, Aaron Voisine and James MacWhyte +| Standard +| Draft +|- | [[bip-0099.mediawiki|99]] | Motivation and deployment of consensus rule changes | Jorge Timón diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki index 9e360dea0a..43a6504c34 100644 --- a/bip-0070/extensions.mediawiki +++ b/bip-0070/extensions.mediawiki @@ -3,9 +3,11 @@ Add your extension below using tags starting at 1000 and submit a pull-req. {| -| Field Number || Extension Name || Field Name || Payment Details Version || Description +| Field Number || Extension Name || Field Name || Description |- -| 1000 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || subtract_fee || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. +| 1000 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || subtractable_fee || If present, this field indicates how many Satoshis can be subtracted from the requested amount and instead applied towards the fee. |- -| 1001 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || replace_by_fee || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. +| 1001 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || fee_per_kb || This field allows the receiver (merchant) to specify the minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. +|- +| 1002 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] ||replace_by_fee || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. |} diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index b7755b2e11..cdb2f6317f 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -1,6 +1,6 @@
   BIP:     75
-  Title:   Out of Band Address Exchange using Encrypted PaymentRequests
+  Title:   Out of Band Address Exchange using Payment Protocol Encryption
   Authors: Justin Newton 
            Matt David 
            Aaron Voisine 
@@ -464,37 +464,25 @@ In this case, the Sender submits the transaction to the bitcoin network.
 
 ==Extending BIP70 PaymentDetails==
 
-To keep up with recent advancements in transaction type, two optional fields will be added to the BIP 70 PaymentDetails message. subtract_fee will be added to the current version 1 fields, making the complete list look like the following:
+To keep up with recent advancements in transaction type and common use cases, three version 1 fields will be added to the BIP 70 PaymentDetails message, as described in the BIP 70 section titled [[bip-0070.mediawiki#extensibility|Extensibilit]]y:
 
 
 message PaymentDetails {
-        optional string network = 1 [default = "main"];
-        repeated Output outputs = 2;
-        required uint64 time = 3;
-        optional uint64 expires = 4;
-        optional string memo = 5;
-        optional string payment_url = 6;
-        optional bytes merchant_data = 7;
-        optional bool subtract_fee = 1000;
-}
-
- -replace_by_fee will be added as a version 2 field. It is only available if payment_details_version is set to 2 or higher in the PaymentRequest message: - -
-    // PaymentDetails v2
-    message PaymentDetails {
         ...
-        optional bool replace_by_fee = 1001;
-    }
+        optional uint64 subtractable_fee = 1000;
+        optional uint64 fee_per_kb = 1001;
+        optional bool replace_by_fee = 1002;
+}
 
{| class="wikitable" -! Field Name !! Field Number || Payment Details Version !! Description +! Field Name !! Field Number !! Description +|- +| subtractable_fee || 1000 || In some situations the receiver may be willing to cover the cost of the transaction fee. If present, this field indicates how many Satoshis can be subtracted from the requested amount and instead applied towards the fee. |- -| subtract_fee || 1000 || 1 || If "true," indicates the sender can subtract the transaction fee from the requested amount. Otherwise, the transaction fee must be included separately from the requested amount. +| fee_per_kb || 1001 || This field allows the receiver (merchant) to specify the minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. |- -| replace_by_fee || 1001 || 2 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. +| replace_by_fee || 1002 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. |} ==References== From a8c02462951ebbe0c52248aa64a63c7ed547778e Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 9 Mar 2016 18:57:48 -0800 Subject: [PATCH 0285/2326] - Update optional flags to PaymentDetails definition in paymentrequest.proto - Add DER encoding requirement for EC public keys and ECC signatures - Add SHA-256 hashing requirement for ECC signatures - Add FIPS 180-4 SHS link --- bip-0075.mediawiki | 5 +++++ bip-0075/paymentrequest.proto | 17 +++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index cdb2f6317f..e71058fa1b 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -425,6 +425,10 @@ When a Store & Forward server is in use during the Payment Protocol exchange, an Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further EncryptedPayment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. +==Public Key & Signature Encoding== +* Each EC public key (sender_public_key, receiver_public_key) included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* Each ECC signature included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. + ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: @@ -492,3 +496,4 @@ message PaymentDetails { * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] * [https://tools.ietf.org/html/rfc6979 RFC6979] * [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] +* [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS 180-4 (Secure Hash Standard)] diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 149dc97582..d1c9e4f24c 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -17,14 +17,15 @@ message Output { } message PaymentDetails { optional string network = 1 [default = "main"]; // "main" or "test" - repeated Output outputs = 2; // Where payment should be sent - required uint64 time = 3; // Timestamp; when payment request created - optional uint64 expires = 4; // Timestamp; when this request should be considered invalid - optional string memo = 5; // Human-readable description of request for the customer - optional string payment_url = 6; // URL to send Payment and get PaymentACK - optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message - optional bool subtract_fee = 1000; // Allow SubtractableFee - //optional bool replace_by_fee = 1001; // Force RBF true or false (version: 2) + repeated Output outputs = 2; // Where payment should be sent + required uint64 time = 3; // Timestamp; when payment request created + optional uint64 expires = 4; // Timestamp; when this request should be considered invalid + optional string memo = 5; // Human-readable description of request for the customer + optional string payment_url = 6; // URL to send Payment and get PaymentACK + optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message + optional uint64 subtractable_fee = 1000; // How many Satoshis can be subtracted from the requested amount and instead applied towards the fee + optional uint64 fee_per_kb = 1001; // Minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. + optional bool replace_by_fee = 1002; // Indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. } message PaymentRequest { optional uint32 payment_details_version = 1 [default = 1]; From 79679bee32d5b5cbd28ec39a14fd2b8061ca7f18 Mon Sep 17 00:00:00 2001 From: Dan Gershony Date: Thu, 10 Mar 2016 10:43:12 +0000 Subject: [PATCH 0286/2326] Crypzo has changed name to CoinVault --- bip-0044.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 64358d8c86..883677a66f 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -267,7 +267,7 @@ is required and a pull request to the above file should be created. * [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]]) * [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]]) * [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]]) -* [[https://www.crypzo.com/|Crypzo]] +* [[https://www.coinvault.io/|CoinVault]] ==Reference== * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] From d6e848dc4b07ae2c84796fee73b593b6f8120914 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 10 Mar 2016 16:44:21 +0000 Subject: [PATCH 0287/2326] bip-0002: Updates from Q&A with Mustafa Al-Bassam --- bip-0002.mediawiki | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index d9a0ede1a2..a667026f08 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -35,7 +35,7 @@ A process BIP may change status from Draft to Active when it achieves rough cons See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. -A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9). In addition, if the economy seems willing to make a "no confidence" hard-fork (such as a change in proof-of-work algorithm), the soft-fork does not become Final for as long as such a hard-fork has potentially-majority support, or at most three months. Soft-fork BIPs may also set additional requirements for their adoption. Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold. +A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9). In addition, if the economy seems willing to make a "no confidence" hard-fork (such as a change in proof-of-work algorithm), the soft-fork does not become Final for as long as such a hard-fork might have majority support, or at most three months. Soft-fork BIPs may also set additional requirements for their adoption. Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold. A hard-fork BIP requires adoption from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Adoption must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish agreement before adoption of the BIP). This economic adoption cannot be established merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document). @@ -68,6 +68,15 @@ But they're doing something important and have invested a lot in Bitcoin! Should * This BIP does not aim to address what "should" be the basis of decisions. Such a statement, no matter how perfect in its justification, would be futile without some way to force others to use it. The BIP process does not aim to be a kind of forceful "governance" of Bitcoin, merely to provide a collaborative repository for proposing and providing information on standards, which people may voluntarily adopt or not. It can only hope to achieve accuracy in regard to the "Status" field by striving to reflect the reality of *how things actually are*, rather than *how they should be*. +What if a single merchant wishes to block a hard-fork? + +* This BIP addresses only the progression of the BIP Status field, not the deployment of the hard-fork (or any other change) itself. +* Regardless, one shop cannot operate in a vacuum: if they are indeed alone, they will soon find themselves no longer selling in exchange for bitcoin payments, as nobody else would exist willing to use the previous blockchain to pay them. If they are no longer selling, they cease to meet the criteria herein which enables their veto. + +How about a small number of merchants (maybe only two) who sell products to each other? + +* In this scenario, it would seem the previous Bitcoin is alive any working, and that the hard-fork has failed. How to resolve such a split is outside the scope of this BIP. + How can economic agreement veto a soft-fork? * The group of miners is determined by the consensus rules for the dynamic-membership multi-party signature (for Bitcoin, the proof-of-work algorithm), which can be modified with a hard-fork. Thus, if the same conditions required to modify this group are met in opposition to a soft-fork, the miner majority supporting the soft-fork is effectively void because the economy can decide to replace them with another group of would-be miners who do not support the soft-fork. From 481f322d441b7ffbbeddb204c40ee3a4791894ca Mon Sep 17 00:00:00 2001 From: Jonathan Cross Date: Fri, 11 Mar 2016 19:23:22 +0100 Subject: [PATCH 0288/2326] Formatting improvements to BIP-75 * Fixing a few extra closing `b` tags and converting others to wiki bold syntax. * Linking "see below" and "see above" items to the actual section of the BIP. * Consistent capitalization of "Bitcoin". * "requester" => "requester* (more common outside of legal writing) * "concious" => "conscious" * "Foward" => "Forward" * "Satoshis" => "satoshis" (as unit of bitcoin, not the name of creator) * Removing unnecessary which can actually cause problems. * Adding required `alt` attribute to img tags. * Fix wrapping of long lines (some were wrapped at 112 chars) - No effect on final rendering users see. --- bip-0075.mediawiki | 98 ++++++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 60 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index e71058fa1b..3075dd3fb2 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -14,7 +14,7 @@ This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol. -# It allows the requestor (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. +# It allows the requester (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. # It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details. @@ -30,7 +30,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Motivation== -The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requestor of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. +The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requester of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. The motivation for this extension to BIP70 is threefold: @@ -40,50 +40,36 @@ The motivation for this extension to BIP70 is threefold: # Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: -#* Make bitcoin logs more human readable +#* Make Bitcoin logs more human readable #* Give the user the ability to decide who to release payment details to #* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements #* Allow for an open standards based way for regulated financial entities to meet regulatory requirements #* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience -In short we wanted to make bitcoin more human, while at the same time improving transaction privacy. +In short we wanted to make Bitcoin more human, while at the same time improving transaction privacy. ==Example Use Cases== 1. Address Book -A Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could -send multiple payments to known entities without having to request an address every time. Static addresses compromise -privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but -watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, -and there is always a risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the -corresponding private key. +A Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, and there is always a risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the corresponding private key. -With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding -an entry to one's address book could be done by using a Wallet Name, scanning a QR code, sending a URI through a text message or e-mail, or -searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background -to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, -or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented. +With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding an entry to one's address book could be done by using a Wallet Name, scanning a QR code, sending a URI through a text message or e-mail, or searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented. 2. Individual Permissioned Address Release A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, BIP70 specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. -With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity -information about the potential sending party via an included certificate. This gives the receiving party more control over who receives their payment and identity information, and could be helpful for businesses that need to follow KYC policies or wallets that want to focus on privacy. +With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity information about the potential sending party via an included certificate. This gives the receiving party more control over who receives their payment and identity information, and could be helpful for businesses that need to follow KYC policies or wallets that want to focus on privacy. 3. Using Store & Forward Servers -A Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address -exchange. This is a common case for mobile and offline wallets. +A Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address exchange. This is a common case for mobile and offline wallets. -With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward -service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address -or payment information, only delete encrypted messages. +With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address or payment information, only delete encrypted messages. ==New Messages== -Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as -the messages newly defined in this BIP. +Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well asthe messages newly defined in this BIP. Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained. @@ -115,7 +101,7 @@ message InvoiceRequest { |- | memo || Human-readable description of invoice request for the receiver |- -| notification_url || Secure (usually HTTPS) location where an EncryptedPaymentRequest (see below) SHOULD be sent when ready +| notification_url || Secure (usually HTTPS) location where an [[#EncryptedPaymentRequest|EncryptedPaymentRequest]] (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} @@ -137,7 +123,7 @@ message EncryptedInvoiceRequest {
{| class="wikitable" -! Field Name
!! Description +! Field Name !! Description |- | encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest |- @@ -171,7 +157,7 @@ message EncryptedPaymentRequest { }
{| class="wikitable" -! Field Name !! Description +! Field Name !! Description |- | encrypted_payment_request || AES-256-CBC encrypted, serialized BIP70 PaymentRequest |- @@ -206,7 +192,7 @@ message EncryptedPayment { }

F>Y>-m{P~(*#e` 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 JPuns4e*w4@!z};+ literal 24827 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%0Ad6_92|6sX{(bbQ^c}2 zZR4nMZzTLy)E{XH6;Ds;IG**iEEBK;^0&R!zeE@?CV=cn?Z6Znm~as+VizMlhZ;Oxzxk~)@&}UXz#j@dxIlpRBESA~0wXJ}=+UL7J#&kC8{x2)o%U;ZFNqYh^1L%Le z+^H`>IGYv#NUDYT0xps|Ij2`ge04eQ2wNZ^)x!SZF8R~9zmjw8jGpIbM^QS6VKz+q z>^|~m0NMjDb@r|!EbnnN`_$ZB_m!VuF^p0rY#EK4yM?|47Pj6nE1Rx+17+?cS{xw{ z&xqf8`EW4&i&_3d=c&Iy9LFT-Fn;~)93ap9XsMgB-g`Tz-!t<=>3Qw|R26nj+zK}n zEzfSeKkmI==Hof-lC}#tl9=?KmDRsB8vNC&yu7?qC)<4soje{K3-X(`%GE&viwl@oc^H z>Eg|EoD3i@pYS^-Dm87V&hVU14veY*>&fo3@%3k(2JpV_n8)nNG0a5v^^4p9s?}X| z1JnbzTST0?OsLQ^_g-ZY0L4eNCO*6@n_#!6r!zR1OgZHpjb=&32&W1FPjlS)_1FdA z#b^VtWhXWVwKSa04i^R>G{1erX4{5ry!NZ%@*pPTKhkz8|1#Q3U$lJdhSSF-mYKFc z)zNu0kgIms!f^(>x6qsJx!$;cXT~&;1U~``bfRk${ls(({q7%xf=K zxKAF#Gw&^6dlkdL3lPYywj@zg%v`)K0x(X6M&D~3CVHQFjI|PYsIATRNLHq%&I!Od zsUxOHVZF%kxyGgctp(Wru^|cQJ-1KxzkdNQ@2YoO&d>kjDSuqkd@2}xJ$9JrwPBTw z0+<n`^SFdJXVr2)#^FVmJFXqfaLh;P={^nepC zf!$*-Y)DCi-f+k!073y6CairnsDqL?ja>YAXR&4CY)`5f(3KloX7*=~4a#1Utv4Op zADj+7_wVV5xz$qgq@M@_wySUIPQCkT*Y42szU7kU-nqo}w6!zftC9M=bKd}LtzTt> zKJd*gEWd6QydCH#u7bQPK_4R%@HiG6#JPn}wlmLXfeX%lt{I11e@&E`l4ts#c^>$- zM;QwWZpv=|5TlsjFsO6pa%etvA6*3=o3U}580@pjHdY5!UP)mPEX)tL=FrA5jpuN? zztxd|ZrEO}nb_*$FL7KcYj^IG-47hv2WWnmY$fsReoM`FE&c9$*@^*N>~Tzde0-SW z)f#EQ1{DApoxt$`8YByl1P$kB$5X57a)-0;qd11GO}>ZF0s<+wYk8xEW`A^CgOFkX zUDmQb;kl5mOjDLS19o8^U>VWISvQ?O`fm3~RlXXI1q6t58;d1a2#&xZ!qSPFwmo_J zbi;qmnC%jdPNTBH!JhwM0;P2wq%npj5qoe4(k}BNPSYq!Kthhs=ftTiFP`;+7|A!b zj972jzRk~HxOGj=2ZKqKn(&E}ux-foD_8-P(npX2ruJ*b+ztCT%~b#+fY={(Ib13% z`8QhUQryx>S`ubi1r_h>8M9&BgkbqHvkDnyy=2_NX}){IJL?mffJ;f_)yf6oKv}26 zSPgL0ASX@(o-9f_!~$%n+PMV7Z|iqm|6Msd2l2gS*=DF%ZK7$s@6Tm+WD>abpotQ_ zve(>dDUKi{yj>?^bHowF?-l5lu!E2=6)xNaOZzGVxK-@}-Epvx-7kXKE`Y;G!~6Jn zbl8N38F>KM3~!s&X|pVPQU(ikqX9cp@4EP4e{C%M6OUnt?sP#ho*JibvtemKeG!e>-5^ms71zuu~qo%cv8W?00JZsTu1;kN=D7VUymRpJ?)&mqleeaJ1 zYCydsYQ1G+@%N(YMVWWVf!~&g!U2zBhzTP$aKS$zu4+_nLMi+Ecgl+z+sjvR{n#1B z6hdt#_l5ZOwx01=>M-u^rhq2CAu|R~7hS;E7Qxa|HDsK+EaLObd$lS)*Sg~q+g*1N ztDheN+X}n6X{|3}PJdRz#^3x#3$My12vW&}X#eRTBS;x8$beb`F_e{KxBUC_`@}?& z-UD;D<=;I{sCc{ahGalA!+NhEt89mQt&wwcbFaphBHEtT*gsnuRPuX&3a%u|k#G(O zIUzd8ZimRxyJ6bVh5{%v#!`*J>2~eik4E3)s8|bo4i4GBF}-{6oB5C6jzxEZAc*O6 zOp^32xO93e23}CEhDCXQ zJ(D_9vMhy~*sY$hk1}7F$@Dp6Guv`{EG~E9eBqutS#G#ui9qlcVqA9k%o?wr1o*S7 zNsDF3b>L?TTDCnimO+*R0Sm_t|xd$LSPNLrYG zdjL5aZ@ZRk^BA>6a_n7ng#4%X6qND|WVF(W#E|PpF1^DvRug16wh6~1DtVXoKpk~9 zJ)WqP9AZS(KsC6bCwsNS`Z4g^OY2cDKv7Q-=6&BU?T?bBQK=?ZU!F^wz&@_4ZGa#pn{e}eD zXT4Z;&YI3eu7=>o64;}Bn-49NAswAK`g;|KRQqp>UZ)Jb7@Mnd?Y1;j#!`l))mOMAMgr!M8dI;_k9{_ zN%Zzw3f|V&o=di{fRu2Y67KRfEytZ!IV2>4tT)QQh+141-7LDd6$?`2KH&2Z&pc0K zd!L{MYc+feuEYf3E*Zfm=}D%DJWMISSdqq(;;t5{OFR3LqkR}g?`TPa-WU85y# zx6gX)HEJisw2XvuZTg8UD}!H~UXAWFOmIEXpVRUUQ4}@3n|J*dV03=49AbitE3$;+;AAUN z!aeA*B|9v7P#n_1g4+f#*Ih@xOv~4iU7Qb5HY9+H1ELw29pExIG|i)cn7~qC(Jc5_ zcKgeM7D=HG<<}>KRP~rrb`j{_xF3TzGtqKEDyUpy*=$A!vXO$Nt?PmBHNkXnp&gFk z?Pss!`!-Cn?`(#2+|*W+feAA{>?a6^OxA+dcu(SbMO0*xXZ(bNr!svq%4g#|>^Jn! z_U~nPzyW|5pd_+*!t*B|BBx~`MF#s<{FR1|2}Gk z?$dFDxwv)|3fp{8)Fj`bR}RS7P8nL3w_NFIDk6temn8Y=hpZr>`nr+MnDr|2_|YpjhCd~3r|l$#CIy=F-vX%xsvuJqS2z_qF&IgVG__%|UdmsInX zCb|tiWJAT&a?lF!O*2(ur3C>MnZx$elIw{xW1MG?MEUm;k%mq4Z-TS~UzrnV`(T)tQMynuI2o*~b=O?Z*2CPxc1nmO!v z64xhY&6%kcPz>*v#UE__%)p`H{oFB;3OSgVhQQE&djR6KdR~S$$n_z8}Be$Mb(aFS=KvTMLa<_N0gmv;xN%@Lq{0~ zfge8a4+$pfva?v8ZThV6y2p-IHdA0xn`Eu;j`3WaRjUtQ@A|cSd2nm{W#&!)ugxv@ z@@0+^`<9xu6LUxsFi^$6aD~zEVDA7=;9_`X;?9L((m0JB$=08vzeSf$W8lu^ebpW? zZ;U`D$!Nx}{H-*uj3xe~=(9h1jeqI#U3;r@v>HY;SBG=-4r`kY+aC!EwS6bq@P|KL z)W1!;NOsa|YDgvo(B$EZLeKT53*L@$N2zOu`=Kp`POczanqvz86ypP(*w;}uE^R6! zVKoX!ZLeEDdrVWgIL}WsG)s-`@J~<<)mDZ9^HBZxSnq{s@r+m&Djn1{B6*T3*=oT* z<96_;mu|Nod&3-gdIP-&HqJ&gp5Q&o8H|l9!tzo!tt~DUT&8lYQ86nf*ya6k#rfs4 z_`Zs@^(%;GEn_C*+bi?cdj~vh*h0r#^39`>cAcRdl5wW1TBFkvc2smRf`3R~a8sjw z)loR_wNFpBh|a+ce#Pms(1;v2c;zcV|T~v|bezCTWDzd22 zQzHLh8X#G7=q3;{=VDTRSH`Uh$jk96{ifx0?yv>Deo?&Y~D& zG3l3{a^2&42eNwgHYG_O znA-qy*2KiC-iho!%7A#c0ux4qwMDx!Do!M>ge;-AXCBt1&{q3ICb~2;)TH2pW!&egupPB zggCWI5^ag~LUvkdCJg*duo1;56*3nxZX^j08=EO$f4bU}kne?C#BJlW_Xj@k60h|+ z^Y#7|&Wjt%AsIe@*7IJqiv9fz)#m|CG{RO8Zv}Rhc{r*$DeE!l~s_)t&!1f)X9YlyX3>G7Flk$ij+c>;m z3`DlCpFWPDczNZg0dKTMPfaINe9o^`bb3`?ZC3SrO~sX(h!qwX z)|OxE^Pv+_LKSn}Rk9KpZsbX(D9}c_ILc5r#4MUnMxv1lLL`mDemEuZgjW$I`N~!z zKe;1Y=G@jLJyL?*lvcLH99cK=A^Sdc?VwgV4O*3K&^ZAV>iXrPN}-Am9y;=6X~#Yp zm#nFq>Ei0&winxwn(X~~UAGOOi>-pm7S&J6Jt>mRI@@yiAnCPhY2G)p=4(-LPvoR( zT5az?Ni)VuK}*xHXYp2tQ3Hx>Zin63I5xwAWl96NF6ApKs2gXYI-g49|x8TvR=12o1%|Rp7 z1d1KXC?Etb>Coo@mo`kFQTtK*2*Gt{(gQD$cqU@LDKj03)=X9EjWR;*wuhJwV@G zkO}eOgu7rF>!Pw#@}mb#1>+YvwuTwdvXUY6WW$5MuUL%&m;{^Iq|$G{ z>)mXRkMHn086e)6z6rc$8bR?MoPr}n3924&uKrI>*hbm~NWiwFdjxGFGyQGC8QheZ zKuwscet^uUhru9S$B>P|F{`Pno33NF77eRp#Nt5uuQLq*=&d!MpVb};|w%JCNtz78cI)+@5z`{vA2h z5-bM9@X9JGM2NZfT1iq4?65cFH1kn+*Di8c0x>!jhg@2n%L4IFAZ*R>-O~q@z;}ru zqZT0Hyt=)N0H{{o?r%dPy;2h*o^;ozm}g2#6qm1we*pM40P6ayY;`YCG2?)Uopt|s zCeQ!;Y>HG3$Vp&#(q;lOm7oQo;MpG@2#>L4*_g8 zUF5|BfN%hUA%o$sVttv0Qqtry!-*lk*{E7Vn~q{5XxSgm|7tKf-`3s#x6Y)@q2a0 zYhMaq5g=<%c7GrykFREx_w&Jw4QR*%x~Nb7{JPk00Mg6Z7XdR+I-DOaWVVkPqjsd4 z4QX9~<*8(YfLB8XK7`xv^EDwXJKdGfkswRotGa*}Xq4rnc=wKdd^nkyv9lJbKEmXu2$nhqHWI8f=XjdwKJ&_Zxel(`6*9g6&H01`+&;DD{$o~CnaT*tEr+G(u$-ql5M=GtS_5lGX_)F`~$zDzK zCxAvz?Q6&#njM@+%kJsbKDGJzfe8FXXnQDj&M=LVe!DjI#k;N4qUTx^xBy_Kq=>6S z2b(j}8#ofJ^KW#ez&-B(fQ}k5iQOodKV8(wqJgmt<*Kp5&OpP(pNsw6b}|0J1UYn3 zMemkT;yOU#ImW$~KPwAfjoJ4ptoW#g1pJNNr~P*JW!YxU*{u%WCV*6LoYTmkI0Dss zvMUu~>9ulIi9UdU<^$NT3^l7?O{aT?1U_d@!t~K}1#GBDKaRho;m(O4=nNrHtxEov zLzzKy1Yp_-{0u?l&c7hi`U2P>qxmmjB8g1Eav}ldJhd83&DKTWZPw*aHXbGjJ-en@ z6vv~n7vc8xH5mm5p))7qy7Zm@iAJFRr1McN*(a;@O&>tX#*YWf#Xk-=B1rT>q-(SP zvZ}*N(P}fGHVC-6cE97*#GlomTVx?lL$09QXLV%O;?L@6-IiH8SP-Z`A%lY8=wQw> zATmvX_7!L_ydy~wEX?l77-%#gncR76)aWHKIeKYzqFEl`oEFWed!}Gp1EOBUeMQf{ zcIs_W`w`$6F>UogJD(FZ03`X!>&=JrtkmFsDqr%uDx_lIU-pOrdOGmo{u{o(@gTem zYoKlm3SKVx3wFfFrjb+Y)fE8If{rHswQ7Kxe(o2z$my#kvD1Ei8n2zi3&Pc1(0c&~ zHk$!dM$usFVA4Bae{a8wMTRv(PwIH>CUF6S#m`tB*|`99!#(MWya?YExB3YyVR^PZ zSP(bp1oGDNMPJEt>Prg0xIvy7&g(x0jIGyRtwF8hi-U6zF>+r#wA>rAAFB__lqK{w zDT{(ur&Pc&l)A4P{4Rdh?bOc3R3T-k2r%|!gwspqg$RbRnPMQ0x8@k=WA|S93YfT# z78>~c@zzd3VQ*?a*Q@l>M=>y#j1cou%r3c-d`0B>@u7n4&rQ6=iq>lNg{pK*z)R zCx#Z#S$4(G#12p_*F8p^Sd{oS1&nIn$%D`{wGR>tQ%{OS_mVVVT-l1d9xzdv((Qug zmoh;9Y#f99mKJmC@g0!*)*7~ZmH#p-^Sl8aEt?>%y`9)!85Ua%D`39rIz8OrDb}4R zT(V{G#a$2((JuhOGi67JZaT_xpf}9qU}FjpJ{KJ4uhYmT(>Q|cGyt06Hjc&mka1uq zmG&R{A1(3-HJ@xHWrh(tyLb7$Wy^YDf0 zEZetWryK@xsU&OwL4(tPn$)jCU15NlQz7u`vn~O6gD0oeo!?xLekDXC7xJMc(7sj) z_ILd6RZvKbeDQDqQz~B1hu!?u2ZMn@RRDurLI}VLsGFewujyn<1=zv*(*iv~Hn4Go zdL;A@q!G+9>aoy`C8cFE&ZFynIZAQgmI2+GO=wxE9M703TfjVMzU0@p`6ET5uz&rB z|M~IrXB8G|pN3Y3EBIv%_W@g9Xye?sdC&+tiOA7vuV!ESogM{6XLfXuWeox1HNJJ- z*{gH`b0-h1lWMADB#8T>4J)9E0G)hI7yT&-%pAx}4xgM6vmoZZJUQ5mUtnXvYKcEO7l&Yk&4*nzm>T4*Ru{TBln)X^sy@owE9WeKwRb_FCjx0~JkC`Yi)} zef>|OH4#cEvjP27NxOd_449jn#~Y{L^_T~KyFJR2NnoxT4(C&Wz=LlnYc}%rvXSFg zGA74Sr}oxS?ydP};B%Pe&ovl8KqpDsU8}I{vjD`r>&l-P(8c5Oje_TAldt!LDVy7% zCXlPVAux3WF9d{l83_FbHTG&X_G8R<%q|KVR9J73P4%CZ1fW=%c0)S>o9`ASgGsJoHM8WeMGXpzb47q+(l$ zM`bZTTW>D&&?S@ZP%ru9)>b-9WB`{fD$38dqV->1%FD?yQvfl~<8maoz3QD&)Oirp z)?3f=bP)6&F`I5_dBd#iF&I1%^cwMBd zrAb65kVWHvJU`n?GzvC}D3~YoJ^z244FHY?4iwsxjU(>hUO#}-3J#QRY0Fo(#(}j> z{GaFEAWg<35QXa&>CsN|UV0$*LEL880(2~+_4hWjAQkPZ(dE_j%>S(gIBSBehz27K zs%bYeO>>S67zaa%0q=#OkKw_(WHb7Igic>aw&Iw=$p&?OlRx9huvwdX@o)^%ZsGz`qAYcTlFv+#5-REmnk_%h# zO&AZ6UBE3DHpP0>tUE0WC!Fr*VH9mlGr60bsk6d$f2J5yV&udP+B(^gZS&z6#L%BO zXSR#88q+M-cO7neU&T-)#q^NQa;NoS_XB9q=n5xx)2*Q6yJt5ynnHXMK9e#iBXCq{ z&2zdHP8rxayoBUJXuII)1AUB1mQ+o_lB>z}Qel0?dzut^!W;44a;DH5Cq(nMZ>J;i zmLlSqcxJSD@%5as7J0pcMpy8Bbs7(QS`Piuqm>7=;x$Ay3McZnC^~LU1@@WaqY8vZ zCw4oUODgH#X?&xo>+vpm?abL*bv4b_t~d4X*3C^+qMxTGW$vwyOQ8(O*b6)Q3Z% zS1&bO{J{`&)9-G0hZB5Deo}VwNwbSy71%t{5Kn&=&KthftTz@s*4&tk@DKk*!ILvt zn4S+XyfmpAC1^;H)|zIAScW*=QMvYT&6av22wDqqiTH|;Kd@>qSUTn82bs3YPb7)i)8(bF67bK3ziZkzrV(>xYXFn{JV9k>xbtW&$o@!?BX0 zQO|C|OGx}R@f4k;@s6#x;O4jiPJdIIyS+@9c&Io8VeD(d^%G~BiN2?T9?O`m+fsjx z)+jF;5yczRfj`1NjTBG_m|C{KR%|Bz0xji+tQx}hXE;BZg~!%lE6{Fsa8@4I=*Osf z;y9(xQYbYO=8exGY4l|$sD?Od290&ej$R&~LU+|FrUhdS88BSvN)O{_qFxDR*#5|g zU~iR7y!Q$ZQQVjjt?nrJR~o)pCB(i{|1Sp2Q`ES-N*zX)-+6o+PVeJY`>DmNoTVa8 zm!_sNN|#f1_(p(jQOJrA+<`=6+9-SA7e&(Sd_>Yq$*NFARujsf@HSCNqHwJ92iczj z0Wg2!6xi;|S6Zq)cCwBsq<3C?fSMArOj)!xP_yE9r0Q`*t?w|?;uS&fNo=uW^oUuT zv}GSz@F+5N;>W(x-X(9o?8DE#&;DcifG3>=cjZGCE@TT}EQM5U<#G7lwqXV2$_9aicIbvvQ52_FMj$Ee{|6aG(w=rBow&7JI^tUW! z#J=S`cdP}$vdV@29AcCOg`?fXd$F!VM5(4}w=zCj*}Is390O`Eda-lrH1P7cm+Lg zbrBp_vb^qSOGhNp%F;Eh`vKlNZyc6e*Aw5%!&m4Yu^AHpWD87-}{XLF1om%G%4oAWU4sg&BLUh$naVZ|!82e=M{EVTxOi4^zlb z)P>+`3TA;J4I~2OXP2*Q94V29S*}#S)0WfMuQFA=Zmmra5k;dfZ{&ONp^@+Z@&Uu~J>p5PetrUCgrHXuKi5oCEb(lg5kMn%+UnH??SU8X40KFo+7R(6V@KJM&qZU~{p0TOeIOLY%vTWKl>DMg5us&X+kf`W zWAw|I+ZH@IGiFUUI_7%=I$B>@_K+>SbJb4?tyLYGq*cyy$mb<0Y<7xbd%1OIF}C&N zo8l^wVHRg;z7+Atp^_n{x)B{raUX3ffIhYt<)Hd?u3S@9TQK z%mjnxgePGrgnxy%_XKrVm<`sX*Xu^C_h1_IBm9)qye*`VU$pHDCH^TzSP7|4$dCF<&xud9M%I2GZs3< zKgVCp7Dh_C7S{RYIneASrxs_}ssyTMg` zk8l?Km9Tb|DaJh~9fR(hz2m8Lu^AhMSL$u;N|NXukr%mtA^Iib0wAwaz2jtIaPwx$ zk8@cV59CfXrusr32}|VLf*WrNtGbVG_z*4pEu$uBeKh<;Hqg|C!F0e)-Gbh3+Dx)0 zcPU`CTxuQvySe@mkoD+iu_;Mc8X26%=aH$+8Vvj$x=(+3SY9RmK}EQVQ)-c$ej!nZ zwQ~N_^(t!a3t{aH>Ar)W((9|^~TPtT|&C{T}S=I#{FzQ%krTg*2 z#AEx*UwQQjDoqGiOv*y9hClr_*7B>F;VlRpSq&m(o;a0X;&xJhG&0{UvWL{)Szo=F z5Cg(al*b4Dw@2=pDHrK!5S@v3hfgGjt^@FSaJur|*OS4Z8XNevG$sf^o}z+^xkyZQ zMbjzY$#Za1FHU>AACW%l*x~5MrwtAYTQrt$* z=swcA*naNY`768xaT9wQUT+Fl$KS6CJ61J#ETv+q#|?iP>72!!np0J?#bVdFhAx?PGk7WAFq(h|sZO(xS zp4m&$C<~eoV9(@Er^$(h75w*sMY*0@VO0DEy!!^FSMZ&ZNf0S(R?AGZ$;O~&_+>e{B&cr?NuzTAvp zX@rgxd0i=Jw3=!GanoxWyY;C?Vq)S-Cl?%AV0p4`T#@sN6#_JL z`t!#_MFA}@h`gCdkMaFV0BmsPw5<0}0z@sT4Mxo)FMl2d&_M|_PmmP3coEgtcMpW^ zH;_mMsBZZ#T?!7NQW6`i0&opR+ti<-(b3bB4c>(^r||@+TqS`GF)4SL)3aS3Enfav zGop9`dRGzm`MEjcLLL#3ND!qWTDR(5f2&4IctN!bxMp&jdCk+TbS&8lf6zr<-XQqO z^U{u*uw=C~H7{~;HCn&-CWsdmAdo$ynX}>~aLJ&G;1p|=vRKb6Df#_CCT8dFNFvOi zr|CTK3vcP@=tSq(zcx3k8Jn3ci$^<*7hAtZ>*1!RthOfLt_ftJH}i|?OJQ$aMak?xC!h4?g%vbWwXzh@^XY1 ztE#FJwqb@+9#b-l3L6fmr(dkHY9ur^F+^Po* z#dJW-y!w%rvgeL+DvigkzU;S36Kpc-VVNW4yC={FTw2!^3W4 zu(GgXDBrLqwZ?sp;_>6h0GJM3S^?7PlAPQRsixzjBNlm2em6I_iCW*cFr-qizxT2G z=Y5w1{<>=)|JtVRj+BXUC^IHKEm4HX4A3(dJc{f#6!sq{XFTo&TnYph{ z$Wc&GfIj{VY^{aFhNGtv_SYX^_*F`a_-n=x^-Tsmb*5CwYxU(mz~$K>k!aszpf4o$UY}*1 zjyr|*Py)EIZ5rH#4(K#gGuzqG5et2v?pGX)|2i2KzQD%z_r7#|3r`lhsQwV+TMuws zNoHoVo-(d_> z2)A(gSD>9zUXrAp$)S6v{Xix;@H+)eNo~;=Tvk8Gd4xbDFdhKvzAQ%#pkPzH6Gjn7$Jou9l-E|C-@r{97 zV#YX-H;=MQlCtS~sQ@Tumj~Q80l@Q{%;TG)Op7YG z)m81UQhHea_GzNxkVk(wJzDVm(?@W{`R)Q+TR#CoL}Opg9Zydw9mS0x-{oBUD0aDT zK%aJ5d;fIA2j>i(57!c$fJqzTDVtAwo1E;hO2aA<1a!~$;*8>NbxRiBd`e31p+QmX zyLb5LC?FvIY-whCnnlV!rfnApUzJ2r^U&yM!|eQbQjg;f&OwK)r&&r}5QN&M8eer= zYmkQHW6wW;;C1D10b`4GUp8uu1rU^$m6aTuD(6w@)%kB{0cdx#w2o`f57&Vm_A@8N z8?1!eqDG!E!)eLQ7E_=ZT4-UsdVzwHQY4KV3`8h{Bw0Z|6tHZQ6EtLG>AoJ`Lbs4& zQTKa6=6`4Ht3N)qW@Com6`R*H9mHU6ZE8DW;f&cBds0LY68w9VO;?v) zq!cW59{+ZofT^%4uE(L@OTww}b(<4{V{^eoQNxKm;<8TK?D5{OJ*}GycJ9Cnre0ea z*S-o!WMl7IRO9dc$?9;(4=SkI^>`Icy1z}xIF6NduzQ}Rp}8zBPKUBf^KI?&n8Ffx z&@x7>R!Y1H4}X4`oTq&=n)8n9mty_}_(H8)w}?K!u>)qBliAl{qEZ|l2`l{?Pr80t zX6ys}SqXf!m25PcYFJ_NFDVV@_Pz}}2ge<4Z3>>75$RfQ`A{GGAX?0As;8x;Ig1{# zFfcR&5r(iHQ~g1?0g;zU<_RM`-|Z{$Env#1g6J?Z^7+%UFDV%{H6I+;C=>!{6`M4% zf1w`PWo3h#wXZ{}*VrL9Nd4g<0iL(btvbuctp`aFVPPKuMz=^LwZ>>9sZ-p81^xkN zNQX((N>Fxa*$SoQMh>H{`m#5ybMx?sJfFlrt^Ydtj1s$?jEK>5Umg{g_g?i+ zV(a{lJG||z~k*XY+2Ccf<5<8zh07iH|;76%&P&$N>`O$)!;+*d}I;M)-irrzQ zKODgv#)cPGz|p(DJMQ9l=>t4WZ{e8Pi|Eq<{*EvF&KyMh5rvBvrJQ2UeU7a`7JD~6 zUl@7{chD0|Vjyzf<%rNvZ&b4^Ml9lUo2?;NTz#zdhgN<9j^c z0dfP9h(1oRdWI$4Pb(+7`Lzi@jtbmUJNs2J;02#7KHX4rb{54O>Z%Uh-Q9(^e!YD4 zs=F`;7Ew#;9R&aOW zU=X&Jhuwcz_pWW`?(0V{#2a(S3=6i~1cw9m-nY!`U)qB_*aXtwA)D~%XqhcV(AL=g zsI655e$S)Rg^8VAxW;=;RKa`IF<|8qAD`fOp0 z1Ot`-(barrs3&@+7e|XT4u0KDl2G?8QV1xH=2RLJ{=1(Ft|Xn-=H~W4f9w~2J%qY6&>B91%JV22b&r+T}i-uGp5onvT z)FShmimslX3bdEqhNeJ#KdpbH8Nx_d*M*xI;SRoITbD?MT+Z-?XbRsqh?G0p#&5<- zS3Yt+n5^+GYGHH-l|)c*aFrvNtHiftX?j+FHGBX?NXo0d;NW0j-(G`fZun?yi{V8& z=3dn;{Au*%%NGY1Q;*Y`Wp?0Oo88xTx>ID{CMGWEjX(t?`)oVc=4`WVskr~X>vxY% z-+)d~Cd98O0Uv0a21y>|U{&r#E#``HF2z3_c`scmw(I4Dg|HBJ0@1wqVGD(%dmGS< zqosDya-1aV;2kRoJPr76KE}o*Y&6y1kt1(ERwjT~D?wIK>htxdI#Qn3RNHvTMY)|Y zbw*rq(A)_IUkfHi)bB(17#*8>STmi(0}~TwTiK3-xpW{bnFWQ-WgebaJQ`6k@$u?V zY{5o?gRH};4%nej*NLpD>fz+7iQfW#S$sjXk_{CZ8HtZoOfK&s8xY*0;OhFj8|0w+ zdA@NL-Z>x0$-?qyw}C_HS(y#tV_5eO9z4KPkq~Q)HYvEsXlVXl`vvJk@?*n7Gx2c< zNunN>I7q{D=PYV{Hn@S7w%(lWuw`BFs|Ru#L}n8MD|l&*M*~=I6XcJNkI5m-Lx}_) zZV(kPNB5@CzRc6liGwoG#N<3&GdEgn4RcCIPv6uVuqz2lD75w?5a?{Lj5A+BzvY2^ zzZR%arnx144S)Yy!``g!r z#F1Rge2^_hlxm(5KzLqLAfK17l6Lxn3QY}pcK^N_M5cYn7R12AKKT}Ob)Ur$);s<3ceU2E1wM%Bf524Icp>(#Md2&*{#;)| z!z`kw=K9$_Pt&9HR<3Ph{wwDlkkuK)H%3_AXlVPA?B{T2JXyblf4{wA#sJ4@+28Y> zCghg<5>IJWeb%Z!Lb;!OKGNLI^B!-Ke70f>(b&>|2*6(DcUJ9|Qs&CpWW(q!Jjl@c z1SvmrE+mS8ogw-;_v7kMDwbS9X<@new?~h9savY+RhzdV3jaRHuO3%L{WAFI_#bj0 zd%zLWJ#KO|ggJ8c0QDv-OthT4$t`v{{OB!*;)Mbh@{;v$ARzvi{M zMs2#LU~``cAN0V~!wIQ|?lA`cB@`np&EthNxLI}k`gHXRzd2VwG+pSL%&XGOlFAWt3IU zH)Vo?RH1byu4d|VKaw|R1Rqs}(aj9nBK-spZZ>ioMP4AG}hgTIfs0Ws3-B)M~^M3e45k@b|3gzHayJHC{yhWzk`!)Q#S` z&8#Z*Imp$5D~OCi^@z26fWX@P^&5LnJSbyS8N4Bi6gMQ>u;Ws*@}hh&Lf&&dyRnap z(!d4{^Pfa1Y{(l-cmau2aiLW$YbE2|W0NspK0cO?z9Yc zWY^olYm*?v+10knJh5_0qScy@te-_TZ0zc)w;s-0P%uj&h*khgF-U|&9AGsC=IXqD z^}z!AN6giXm}<~%I3g${>eUiZE)1!#L?j5tQK0w*=1A0&#|x#GNhXXL!-Hru{1XPK zR6`F{LupVum4@<(DB=Q7{79&Gy&n=TwM$yn>W@%zUHhUyfFys)@umF^bQ48W`+V_P zW+Wx3c_FLrF0j6)hokVW`@u|^e5Q*)v6~)89G8jK5E@H>m8953#`O>-lAD++IwROR zdJt$}8>_?BjGR&$Z0)?3{uMn?uuyCoPKvc~ypaO^eL1RmY-Bch_g?-RflVYw|y)= zVd0{gAorzvN8@;}sz+{+o-(41g*Kc&=Lh$cawb{`$9NBqwehKjE}%}E-!069m10dU z8fYKXy*^AvWV|p|;gR{F{o;ilj$;nD5IJ2eqsU|w{BSi|zloJ4p^Gu%dI4FwNFR0R zCPrMAFd{*Zb5o)LzpL44RXqu%t!n-1e)G20?6HKXVkiemABrcG>^|aPBs%5GGMkBa zoD}3la5Y;^(VOv*BN>CS3Rr&uo9kE0@%#TOA(t9iNc<+@(7(yM33|>VGImL3_55&w znqtV~VO-A3v{>x<2z%n3{4W-;?D96qxJ(c(2x|h}U;{hruKXiqONs-jFT_?Z=|rvS z6Wisr9$r}L^c1vv?R|NO0s1?d0y?(@+K7H$nXIZeW-pv*W*J$V${%<^VWgPwO|`7? z%1j91jz9k)QAlvLv{|K Date: Wed, 2 Mar 2016 19:17:04 +0100 Subject: [PATCH 0269/2326] Add missing arrow to diagram --- bip-0009/states.png | Bin 29300 -> 30632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bip-0009/states.png b/bip-0009/states.png index e058c8da130b6d47bafb4aa834dab23a2743a627..09312a1c0381845d10afe2ffbbec912ee1b1b1e0 100644 GIT binary patch literal 30632 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

{| class="wikitable" -! Field Name !! Description +! Field Name !! Description |- | encrypted_payment || AES-256-CBC encrypted, serialized BIP70 Payment message |- @@ -239,7 +225,7 @@ message EncryptedPaymentACK { }
{| class="wikitable" -! Field Name !! Description +! Field Name !! Description |- | encrypted_payment_ack || AES-256-CBC encrypted, serialized BIP70 PaymentACK message |- @@ -257,8 +243,7 @@ message EncryptedPaymentACK { |} ==InvoiceRequest / PaymentRequest Process== -The process overview for using InvoiceRequests and receiving encrypted PaymentRequests is defined below in two sections. -Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and therefore MUST follow the Encrypted InvoiceRequest Overview process. +The process overview for using InvoiceRequests and receiving encrypted PaymentRequests is defined below in two sections. Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and therefore MUST follow the '''Encrypted InvoiceRequest Overview''' process below. ===Non-Encrypted InvoiceRequest Overview=== # Sender creates InvoiceRequest @@ -273,7 +258,7 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther # The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages - +Flow diagram of Non-Encrypted InvoiceRequest ===Encrypted InvoiceRequest Overview=== # Sender retrieves Receiver InvoiceRequest Public Key @@ -291,9 +276,9 @@ Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and ther # Sender decrypts and validates encrypted PaymentRequest # The PaymentRequest is processed according to BIP70, including optional EncryptedPayment and EncryptedPaymentACK messages -NOTE: See section Initial Public Key Retrieval for InvoiceRequest Encryption below for possible options to retrieve Receiver InvoiceRequest public keys. - - +'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] below for possible options to retrieve Receiver InvoiceRequest public keys. + +Flow diagram of Encrypted InvoiceRequest ==Message Interaction Details== @@ -314,14 +299,13 @@ Messages MUST be transmitted via TLS-protected HTTP using the appropriate Conten |} ===Message or Communication Errors=== -An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This -SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). If the provided hash of each message does not match the contents of the message once decrypted, a general error should be returned to prevent oracle attacks. +An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). If the provided hash of each message does not match the contents of the message once decrypted, a general error should be returned to prevent oracle attacks. ==Process Step Details== For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. -Where used, nonce MUST be set to a non-repeating number AND MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the nonce MAY use whatever method to make sure that the nonce is never repeated. +Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the '''nonce''' MAY use whatever method to make sure that the '''nonce''' is never repeated. ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message @@ -339,11 +323,11 @@ Where used, nonce MUST be set to a non-repeating number AND MUST be chose ===EncryptedInvoiceRequest Message Creation=== * Create an EncryptedInvoiceRequest -* Retrieve endpoint public key to use in ECDH Point Generation as specified in Initial Public Key Retrieval for InvoiceRequest Encryption (see below) +* Retrieve endpoint public key to use in '''ECDH Point Generation''' as specified in [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] (see below) * sender_public_key MUST be set to the public key of the Sender's EC keypair * receiver_public_key MUST be set to the public key of the Receiver's EC keypair * invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) -* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) +* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) * encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest * nonce MUST be set to the nonce used in the AES-256-CBC encryption operation * Set identifier to invoice_request_hash @@ -356,7 +340,7 @@ Where used, nonce MUST be set to a non-repeating number AND MUST be chose * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID ===EncryptedPaymentRequest Message Creation and PaymentRequest Encryption=== -* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) +* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) * Create EncryptedPaymentRequest message * Set encrypted_payment_request to be the encrypted value of the PaymentRequest * Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) @@ -370,7 +354,7 @@ Where used, nonce MUST be set to a non-repeating number AND MUST be chose * Set signature to the result of the signature operation above ===EncryptedPaymentRequest Validation and Decryption=== -* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in ECDH Point Generation and AES-256 (CBC Mode) Setup (see below) +* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) * Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest * Deserialize the serialized PaymentRequest @@ -392,7 +376,7 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb ==EncryptedPayment and EncryptedPaymentACK Details== ===EncryptedPayment Message Creation=== -* Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) +* Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the [[#EncryptedPaymentRequest_Message_Creation_and_PaymentRequest_Encryption|EncryptedPaymentRequest Message Creation and PaymentRequest Encryption]] step (see above) * Create EncryptedPayment message * Set encrypted_payment to be the encrypted value of the Payment * Set payment_hash to generated SHA256 hash of the serialized Payment (without encryption) @@ -405,7 +389,7 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Set signature to the result of the signature operation above ===EncryptedPaymentACK Message Creation=== -* Encrypt the serialized PaymentACK using AES-256-CBC using secret key calculated in the EncryptedPaymentRequest Message Creation and PaymentRequest Encryption step (see above) +* Encrypt the serialized PaymentACK using AES-256-CBC using secret key calculated in the [[#EncryptedPaymentRequest_Message_Creation_and_PaymentRequest_Encryption|EncryptedPaymentRequest Message Creation and PaymentRequest Encryption]] step (see above) * Create EncryptedPaymentACK message * Set encrypted_payment_ack to be the encrypted value of the PaymentACK * Set payment_ack_hash to generated SHA256 hash of the serialized PaymentACK (without encryption) @@ -418,9 +402,9 @@ Initial public key retrieval for InvoiceRequest encryption can be done in a numb * Set signature to the result of the signature operation above -SIGNATURE NOTE: EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy concious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. +'''SIGNATURE NOTE:''' EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. -==Payment / PaymentACK Messages with a Store & Foward Server== +==Payment / PaymentACK Messages with a Store & Forward Server== When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a EncryptedPaymentRequest with the requires_payment_message flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further EncryptedPayment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. @@ -441,30 +425,24 @@ A reference client implementation can be found in the InvoiceRequest functional ==BIP70 Extension== The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70. - +Flowchart explaining how this BIP extends BIP 70 ==Mobile to Mobile Examples== ===EncryptedPayment Required=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use -of an InvoiceRequest, a Store & Forward server, an EncryptedPaymentRequest (with require_payment_message = true), an -EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits the transaction to the bitcoin network. +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, an EncryptedPaymentRequest (with require_payment_message = true), an EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits the transaction to the Bitcoin network. - +EncryptedPayment Required flow diagram ===EncryptedPayment NOT Required=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use -of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). -In this case, the Sender submits the transaction to the bitcoin network. +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). In this case, the Sender submits the transaction to the Bitcoin network. - +EncryptedPayment NOT Required flow diagram ===Using EncryptedInvoiceRequest Message=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use -of an EncryptedInvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). -In this case, the Sender submits the transaction to the bitcoin network. +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an EncryptedInvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). In this case, the Sender submits the transaction to the Bitcoin network. - +EncryptedInvoiceRequest without payment ==Extending BIP70 PaymentDetails== @@ -482,7 +460,7 @@ message PaymentDetails { {| class="wikitable" ! Field Name !! Field Number !! Description |- -| subtractable_fee || 1000 || In some situations the receiver may be willing to cover the cost of the transaction fee. If present, this field indicates how many Satoshis can be subtracted from the requested amount and instead applied towards the fee. +| subtractable_fee || 1000 || In some situations the receiver may be willing to cover the cost of the transaction fee. If present, this field indicates how many satoshis can be subtracted from the requested amount and instead applied towards the fee. |- | fee_per_kb || 1001 || This field allows the receiver (merchant) to specify the minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. |- From 05740a7dbea46623d82e12c992527b6e6ab7a9e9 Mon Sep 17 00:00:00 2001 From: Marshall Long Date: Fri, 11 Mar 2016 15:01:25 -0500 Subject: [PATCH 0289/2326] Format Comment Format comment to fit style of previous comments --- bip-0075/paymentrequest.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index d1c9e4f24c..1c9cc8e998 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -45,7 +45,7 @@ message Payment { } message PaymentACK { required Payment payment = 1; // Payment message that triggered this ACK - optional string memo = 2; // human-readable message for customer + optional string memo = 2; // Human-readable message for customer } // BIP-IR Extensions From 314e87f9c0c1e3920d2954a2ae3fb70473c887a2 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Mon, 14 Mar 2016 15:16:51 -0700 Subject: [PATCH 0290/2326] added paragraph about address reuse --- bip-0131.mediawiki | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bip-0131.mediawiki b/bip-0131.mediawiki index c30ef54cd1..3b1661cc0d 100644 --- a/bip-0131.mediawiki +++ b/bip-0131.mediawiki @@ -77,6 +77,28 @@ the user when their wallet contains many UTXOs that qualify it to benefit from a coalescing transaction. Wallets should not simply replace non-coalescing transactions with coalescing transactions in all instances. +== Isn't this BIP bad because it encourage address re-use? == + +Address re-use comes in two forms: reuse from the ''sender'', and re-use from the ''receiver''. + +Re-use by the sender is basically using the same address for the change output. This is generally considered bad +since people looking through your transaction history can determine who you do business with. When +you generate a new address for every change, your privacy is conserved as it is impossible to know which +output is a recipient, and which output is the change output. This BIP has '''no effect''' on re-use +by the sender. + +On the other hand, address re-use by the ''receiver'' occurs under completely different circumstances. +When you publish an address and have multiple people send to that address, you are engaging in address re-use +from th receiver. This activity has historically been considered bad because it leads to re-using a private key. +When you re-use a private key too many times, you run the risk of somebody performing statistical analysis +on the multiple signatures, which can lead to an attacker finding out your private key. + +This BIP introduces a way to spend multiple inputs without re-using the private key. In a sense, this BIP +fixes the problem that makes address re-use bad for the receiver. After this BIP becomes implemented +and deployed, address re-use by the receiver will no longer be considered bad form. + + + ==Copyright== This document is placed in the public domain. From 46a91a8dc4936af3b3d8f3de7f36487e6aff2631 Mon Sep 17 00:00:00 2001 From: Chris Priest Date: Mon, 14 Mar 2016 15:51:14 -0700 Subject: [PATCH 0291/2326] fixed typos and wording --- bip-0131.mediawiki | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bip-0131.mediawiki b/bip-0131.mediawiki index 3b1661cc0d..1efe713374 100644 --- a/bip-0131.mediawiki +++ b/bip-0131.mediawiki @@ -79,7 +79,7 @@ with coalescing transactions in all instances. == Isn't this BIP bad because it encourage address re-use? == -Address re-use comes in two forms: reuse from the ''sender'', and re-use from the ''receiver''. +Address re-use comes in two forms: re-use by the ''sender'', and re-use by the ''receiver''. Re-use by the sender is basically using the same address for the change output. This is generally considered bad since people looking through your transaction history can determine who you do business with. When @@ -89,16 +89,14 @@ by the sender. On the other hand, address re-use by the ''receiver'' occurs under completely different circumstances. When you publish an address and have multiple people send to that address, you are engaging in address re-use -from th receiver. This activity has historically been considered bad because it leads to re-using a private key. -When you re-use a private key too many times, you run the risk of somebody performing statistical analysis +from the receiver. This activity has historically been considered bad because it leads to re-using a private key. +When you re-use a private key too many times, you run the risk of an attacker performing statistical analysis on the multiple signatures, which can lead to an attacker finding out your private key. -This BIP introduces a way to spend multiple inputs without re-using the private key. In a sense, this BIP +This BIP introduces a way to spend multiple inputs ''without'' re-using the private key. In a sense, this BIP fixes the problem that makes address re-use bad for the receiver. After this BIP becomes implemented and deployed, address re-use by the receiver will no longer be considered bad form. - - ==Copyright== This document is placed in the public domain. From 7314d13a08a72ded7d6cdaa32d1b4b88d8b76832 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 10 Mar 2016 13:27:09 +1030 Subject: [PATCH 0292/2326] bip9: fix heading levels. It goes from level 2 (specification) to 4; those headings should be level 3. Signed-off-by: Rusty Russell --- bip-0009.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 49e6adf28f..6848c45eae 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -35,7 +35,7 @@ timeout or activation, though it is recommended to have a pause in between to de Setting the timeout to 3 years after the starttime allows at least 9 new deployments per year. -====States==== +===States=== With each block and soft fork, we associate a deployment state. The possible states are: @@ -45,7 +45,7 @@ With each block and soft fork, we associate a deployment state. The possible sta # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. # '''FAILED''' for one retarget period past the timeout time, if LOCKED_IN was not reached. -====Bit flags==== +===Bit flags=== Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. @@ -59,11 +59,11 @@ bits are 0 for the purposes of deployments. Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on consensus rules. -====New consensus rules==== +===New consensus rules=== The new consensus rules for each soft fork are enforced for each block that has ACTIVE state. -====State transitions==== +===State transitions=== @@ -149,7 +149,7 @@ current retarget period (i.e. up to and including its ancestor with height block it is possible to implement the mechanism above efficiently and safely by caching the resulting state of every multiple-of-2016 block, indexed by its parent. -====Warning mechanism==== +===Warning mechanism=== To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). From 4c4009bfdb94d10d94908a144d768399cf40ea6f Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 10 Mar 2016 13:18:03 +1030 Subject: [PATCH 0293/2326] BIP9: More explicit recommendations on values. Basically the same thing reworded as a checklist, with 3 years turned into 1, and suggesting a 1 month delay after expected deployment date. Signed-off-by: Rusty Russell --- bip-0009.mediawiki | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 6848c45eae..83ce7d00c1 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -28,12 +28,16 @@ Each soft fork deployment is specified by the following per-chain parameters (fu # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. -The starttime should be set to some date in the future, coordinates with software release date. This is to prevent -triggers as a result of parties running pre-release software. The timeout should be set a reasonable time after the -starttime. A later deployment using the same bit is possible as long as the starttime is after the previous one's -timeout or activation, though it is recommended to have a pause in between to detect buggy software. +===Selection guidelines=== + +The following guidelines are suggested for selecting these parameters for a soft fork: -Setting the timeout to 3 years after the starttime allows at least 9 new deployments per year. +# '''bit''' should be selected such that no two concurrent softforks use the same bit. +# '''starttime''' should be set to some date in the future, approximately one month software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. +# '''timeout''' should be 1 year (31536000 seconds) after starttime. + +A later deployment using the same bit is possible as long as the starttime is after the previous one's +timeout or activation, though it is recommended to have a pause in between to detect buggy software. ===States=== From bce835d2ce0172bffa2858eaba21a6c6c3723110 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 15 Mar 2016 16:29:24 +0100 Subject: [PATCH 0294/2326] Small improvements to BIP0009 --- bip-0009.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 83ce7d00c1..509a8a94e3 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -33,11 +33,11 @@ Each soft fork deployment is specified by the following per-chain parameters (fu The following guidelines are suggested for selecting these parameters for a soft fork: # '''bit''' should be selected such that no two concurrent softforks use the same bit. -# '''starttime''' should be set to some date in the future, approximately one month software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. +# '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. # '''timeout''' should be 1 year (31536000 seconds) after starttime. A later deployment using the same bit is possible as long as the starttime is after the previous one's -timeout or activation, though it is recommended to have a pause in between to detect buggy software. +timeout or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software. ===States=== From 9a5ba6688ca4a2cdf5e74f69f997ff1b0d731054 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Tue, 15 Mar 2016 18:04:48 -0700 Subject: [PATCH 0295/2326] Removed BIP70 extensions --- bip-0070/extensions.mediawiki | 8 ++------ bip-0075.mediawiki | 23 ----------------------- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki index 43a6504c34..b572b1d498 100644 --- a/bip-0070/extensions.mediawiki +++ b/bip-0070/extensions.mediawiki @@ -5,9 +5,5 @@ Add your extension below using tags starting at 1000 and submit a pull-req. {| | Field Number || Extension Name || Field Name || Description |- -| 1000 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || subtractable_fee || If present, this field indicates how many Satoshis can be subtracted from the requested amount and instead applied towards the fee. -|- -| 1001 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] || fee_per_kb || This field allows the receiver (merchant) to specify the minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. -|- -| 1002 || [[https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki|BIP0075]] ||replace_by_fee || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. -|} +| 1000 || [[https://example.com|(unassigned)]] || (unassigned) || (unassigned) +|} \ No newline at end of file diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 3075dd3fb2..d0793be36e 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -444,29 +444,6 @@ The following diagram shows a sample flow in which one mobile client is sending EncryptedInvoiceRequest without payment -==Extending BIP70 PaymentDetails== - -To keep up with recent advancements in transaction type and common use cases, three version 1 fields will be added to the BIP 70 PaymentDetails message, as described in the BIP 70 section titled [[bip-0070.mediawiki#extensibility|Extensibilit]]y: - -
-message PaymentDetails {
-        ...
-        optional uint64 subtractable_fee = 1000;
-        optional uint64 fee_per_kb = 1001;
-        optional bool replace_by_fee = 1002;
-}
-
- -{| class="wikitable" -! Field Name !! Field Number !! Description -|- -| subtractable_fee || 1000 || In some situations the receiver may be willing to cover the cost of the transaction fee. If present, this field indicates how many satoshis can be subtracted from the requested amount and instead applied towards the fee. -|- -| fee_per_kb || 1001 || This field allows the receiver (merchant) to specify the minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. -|- -| replace_by_fee || 1002 || If "true," indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. -|} - ==References== * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] From 159cc9bd0eb1bdf97facac7f839069c81a4cc301 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Wed, 16 Mar 2016 23:20:58 +0800 Subject: [PATCH 0296/2326] BIP142: Deferred BIP142 will not be deployed with BIP141 at the same time. Initially, people are expected to use P2SH segwit, or payment protocol for native segwit --- bip-0142.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index ff831cbe06..bb60265388 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -2,7 +2,7 @@ BIP: 142 Title: Address Format for Segregated Witness Author: Johnson Lau - Status: Draft + Status: Deferred Type: Standards Track Created: 2015-12-24
From 3f586626d5b4b8eaf075c95dfeba51494dbb021b Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 17 Mar 2016 02:15:55 +0800 Subject: [PATCH 0297/2326] BIP142: Deferred --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index 02a5a76753..a5eb68f64d 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -474,7 +474,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Address Format for Segregated Witness | Johnson Lau | Standard -| Draft +| Deferred |- | [[bip-0143.mediawiki|143]] | Transaction Signature Verification for Version 0 Witness Program From e8c9f670059c61ba14bb51a13829de7f09055091 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 16 Mar 2016 22:03:49 -0700 Subject: [PATCH 0298/2326] Update BIP header to pass TravisCI --- bip-0075.mediawiki | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 3075dd3fb2..dd0cd95f37 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -1,12 +1,12 @@
-  BIP:     75
-  Title:   Out of Band Address Exchange using Payment Protocol Encryption
-  Authors: Justin Newton 
-           Matt David 
-           Aaron Voisine 
-           James MacWhyte 
-  Status:  Draft
-  Type:    Standards Track
+  BIP: 75
+  Title: Out of Band Address Exchange using Payment Protocol Encryption
+  Author: Justin Newton 
+          Matt David 
+          Aaron Voisine 
+          James MacWhyte 
+  Status: Draft
+  Type: Standards Track
   Created: 2015-11-20
 
From 19845126ec697f043a23f382a2653c0bdd10a6a3 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 17 Mar 2016 05:21:40 +0000 Subject: [PATCH 0299/2326] Put BIP 75 in the right place in README, and clean up formatting a bit --- README.mediawiki | 12 ++++++------ bip-0070/extensions.mediawiki | 2 +- bip-0075.mediawiki | 21 ++++++++++----------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 970cf93051..be60e8f471 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -314,6 +314,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0075.mediawiki|75]] +| Out of Band Address Exchange using Payment Protocol Encryption +| Justin Newton, Matt David, Aaron Voisine, James MacWhyte +| Standard +| Draft +|- | [[bip-0080.mediawiki|80]] | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song @@ -332,12 +338,6 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- -| [[bip-0075.mediawiki|75]] -| Out of Band Address Exchange using Payment Protocol Encryption -| Justin Newton, Matt David, Aaron Voisine and James MacWhyte -| Standard -| Draft -|- | [[bip-0099.mediawiki|99]] | Motivation and deployment of consensus rule changes ([soft/hard]forks) | Jorge Timón diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki index b572b1d498..51400d88a5 100644 --- a/bip-0070/extensions.mediawiki +++ b/bip-0070/extensions.mediawiki @@ -6,4 +6,4 @@ Add your extension below using tags starting at 1000 and submit a pull-req. | Field Number || Extension Name || Field Name || Description |- | 1000 || [[https://example.com|(unassigned)]] || (unassigned) || (unassigned) -|} \ No newline at end of file +|} diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 753c6e5007..6d1587ea2e 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -14,7 +14,7 @@ This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol. -# It allows the requester (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. +# It allows the requester (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. # It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details. @@ -34,15 +34,15 @@ The motivation for defining this extension to the BIP70 Payment Protocol is to a The motivation for this extension to BIP70 is threefold: -# Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party. +# Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party. # Enhance the Payment Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests. # Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: -#* Make Bitcoin logs more human readable -#* Give the user the ability to decide who to release payment details to -#* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements +#* Make Bitcoin logs more human readable +#* Give the user the ability to decide who to release payment details to +#* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements #* Allow for an open standards based way for regulated financial entities to meet regulatory requirements #* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience @@ -118,7 +118,6 @@ message EncryptedInvoiceRequest { required uint64 nonce = 5; optional bytes signature = 6; optional bytes identifier = 7; - }
@@ -277,7 +276,7 @@ The process overview for using InvoiceRequests and receiving encrypted PaymentRe # The PaymentRequest is processed according to BIP70, including optional EncryptedPayment and EncryptedPaymentACK messages '''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] below for possible options to retrieve Receiver InvoiceRequest public keys. - + Flow diagram of Encrypted InvoiceRequest ==Message Interaction Details== @@ -334,7 +333,7 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen ===InvoiceRequest Validation=== * Validate sender_public_key is a valid EC public key -* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. +* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. * Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID @@ -360,7 +359,7 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen ===ECDH Point Generation and AES-256 (CBC Mode) Setup=== * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. -* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] +* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''secret point's''' X value for Entropy ** Use the given message's nonce field for Nonce * Initialize AES-256 in CBC Mode @@ -414,11 +413,11 @@ Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages un * Each ECC signature included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. ==Implementation== -A reference implementation for a Store & Forward server supporting this proposal can be found here: +A reference implementation for a Store & Forward server supporting this proposal can be found here: [https://github.com/netkicorp/addressimo Addressimo] -A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: +A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: [https://github.com/netkicorp/addressimo/blob/master/functest/functest_ir.py InvoiceRequest Client Reference Implementation] From 9ce2c4d3516f9d9989e7536a0bfe2601d566e89e Mon Sep 17 00:00:00 2001 From: Robert Jesionek Date: Thu, 17 Mar 2016 18:12:15 +0100 Subject: [PATCH 0300/2326] Update bip-0032.mediawiki Added a new Java implementation. --- bip-0032.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index 8692c6d581..0c660ad8fd 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -257,7 +257,7 @@ Two Python implementations exist: PyCoin (https://github.com/richardkiss/pycoin) is a suite of utilities for dealing with Bitcoin that includes BIP0032 wallet features. BIP32Utils (https://github.com/jmcorgan/bip32utils) is a library and command line interface specifically focused on BIP0032 wallets and scripting. -A Java implementation is available at https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java +2 Java implementations exist: https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java and https://github.com/bushidowallet/bushido-java-core/tree/master/src/main/java/com/bushidowallet/core/bitcoin/bip32 A C++ implementation is available at https://github.com/ciphrex/mSIGNA/blob/master/deps/CoinCore/src/hdkeys.h From 63660c0fb738271cc2b56973e4ce942cf04fcdce Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Thu, 17 Mar 2016 20:14:31 +0000 Subject: [PATCH 0301/2326] Set deployment schedule for BIP 68,112,113 --- bip-0068.mediawiki | 10 ++++++++-- bip-0112.mediawiki | 9 +++++++-- bip-0113.mediawiki | 12 +++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 8c566b0994..ab66e1250e 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -218,9 +218,13 @@ This BIP was edited by BtcDrak, Nicolas Dorier and kinoshitajona. ==Deployment== -This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). Exact details TDB. +This BIP is to be deployed by "versionbits" BIP9 using bit 0. -It is recommended to deploy BIP112 and BIP113 at the same time. +For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be midnight 1st May 2016 UTC (Epoch timestamp 1462060800) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). + +For Bitcoin '''testnet''', the BIP9 '''starttime''' will be midnight 1st March 2016 UTC (Epoch timestamp 1456790400) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). + +This BIP must be deployed simultaneously with BIP112 and BIP113 using the same deployment mechanism. ==Compatibility== @@ -246,6 +250,8 @@ The most efficient way to calculate sequence number from relative lock-time is w Bitcoin mailing list discussion: https://www.mail-archive.com/bitcoin-development@lists.sourceforge.net/msg07864.html +BIP9: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki + BIP112: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP113: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 336f9fc331..9d8228ca24 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -342,10 +342,13 @@ https://github.com/bitcoin/bitcoin/pull/7524 ==Deployment== -This BIP is to be deployed by either version-bits BIP9 or by IsSuperMajority(). Exact details TDB. +This BIP is to be deployed by "versionbits" BIP9 using bit 0. -It is recommended to deploy BIP68 and BIP113 at the same time as this BIP. +For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be midnight 1st May 2016 UTC (Epoch timestamp 1462060800) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). +For Bitcoin '''testnet''', the BIP9 '''starttime''' will be midnight 1st March 2016 UTC (Epoch timestamp 1456790400) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). + +This BIP must be deployed simultaneously with BIP68 and BIP113 using the same deployment mechanism. ==Credits== @@ -363,6 +366,8 @@ Thanks to Eric Lombrozo and Anthony Towns for contributing example use cases. ==References== +[https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP 9] Versionbits + [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP 68] Relative lock-time through consensus-enforced sequence numbers [https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP 65] OP_CHECKLOCKTIMEVERIFY diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki index d21054bf6a..7497f50b59 100644 --- a/bip-0113.mediawiki +++ b/bip-0113.mediawiki @@ -72,10 +72,13 @@ https://github.com/bitcoin/bitcoin/pull/6566 ==Deployment== -This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). -Exact details TBD. +This BIP is to be deployed by "versionbits" BIP9 using bit 0. -It is recommended to deploy BIP68 and BIP112 at the same time as this BIP. +For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be midnight 1st May 2016 UTC (Epoch timestamp 1462060800) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). + +For Bitcoin '''testnet''', the BIP9 '''starttime''' will be midnight 1st March 2016 UTC (Epoch timestamp 1456790400) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800). + +This BIP must be deployed simultaneously with BIP68 and BIP112 using the same deployment mechanism. ==Acknowledgements== @@ -98,6 +101,9 @@ concerns with existing protocols. ==References== + +[https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9: Versionbits] + [https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP65: OP_CHECKLOCKTIMEVERIFY] [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP68: Consensus-enforced transaction replacement signaled via sequence numbers] From 2fd18113315d9675bfcfca23e8f25656f7088606 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 18 Mar 2016 20:03:56 +0000 Subject: [PATCH 0302/2326] Defer BIP 2 --- README.mediawiki | 2 +- bip-0002.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index be60e8f471..92ca9f9257 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -23,7 +23,7 @@ Those proposing changes should consider that ultimately consent may rest with th | BIP Status and Comments | Luke Dashjr | Process -| Draft +| Deferred |- | [[bip-0009.mediawiki|9]] | Version bits with timeout and delay diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index a667026f08..9d59405ff2 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -2,7 +2,7 @@ BIP: 2 Title: BIP Status and Comments Author: Luke Dashjr - Status: Draft + Status: Deferred Type: Process Created: 2016-02-03
From 932d75e24f7d54c726b617c054a3d8b20bcc5a1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B8=BFtcDrak?= Date: Mon, 21 Mar 2016 10:09:58 +0000 Subject: [PATCH 0303/2326] Remove deployment section. Now we know we will use BIP9 version bits, remove references to ISM() and leave TDB as was done with BIP68,112 and 113. --- bip-0141.mediawiki | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index a73cf35a59..f6c5b82cb6 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -249,25 +249,7 @@ As a soft fork, older software will continue to operate without modification. N == Deployment == -We reuse the double-threshold IsSuperMajority() switchover mechanism used in -BIP65 with the same thresholds, but for nVersion = 5. The new rules are -in effect for every block (at height H) with nVersion = 5 and at least -750 out of 1000 blocks preceding it (with heights H-1000..H-1) also -have nVersion >= 5. Furthermore, when 950 out of the 1000 blocks -preceding a block do have nVersion >= 5, nVersion < 5 blocks become -invalid, and all further blocks enforce the new rules. - -(It should be noted that BIP9 involves permanently setting a high-order bit to -1 which results in nVersion >= all prior IsSuperMajority() soft-forks and thus -no bits in nVersion are permanently lost.) - -=== SPV Clients === - -While SPV clients are unable to fully validate blocks, -they are able to validate block headers and, thus, can check block version and proof-of-work. -SPV clients should reject nVersion < 5 blocks if 950 out of 1000 preceding blocks have -nVersion >= 5 to prevent false confirmations from the remaining 5% of -non-upgraded miners when the 95% threshold has been reached. +This BIP is to be deployed by version-bits BIP9. Exact details TDB. == Credits == From ee7b3ab4c086bbe8530f5aa36b2c14d7e96d9564 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Fri, 25 Mar 2016 01:35:01 -0400 Subject: [PATCH 0304/2326] Witness validation logic trigger clarifications --- bip-0141.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index f6c5b82cb6..12b0ebac98 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -80,8 +80,8 @@ If there are more than one scriptPubKey matching the pattern, the one with highe 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 32 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. -# 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. +# 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. +# 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. If the version byte is 0, and the witness program is 20 bytes: * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program. From cb81c9ab5f2a48fa87118dd278193bb113a4aa0c Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 29 Mar 2016 01:19:50 +0800 Subject: [PATCH 0305/2326] BIP143: Provide private key used in the example --- bip-0143.mediawiki | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 72ef22d714..4c6503b3b2 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -137,7 +137,9 @@ Refer to the reference implementation, reproduced below, for the precise algorit scriptPubKey: 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac value: 6.25 The second input comes from a P2WPKH witness program: - scriptPubKey: 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, value: 6 + scriptPubKey : 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, value: 6 + private key : 619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9 + public key : 025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357 To sign it with a nHashType of 1 (SIGHASH_ALL): From 8bf7d90d204db64f3af4a28abacb55b961d02c2c Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 29 Mar 2016 15:49:49 -0700 Subject: [PATCH 0306/2326] - Update HTTPS to be TLS-protected HTTP - Add Updated Messages section to describe the status_code and status_message - Separated Message and Communication Errors into Payment Protocol Errors and Communication Errors - Add first draft Payment Protocol error codes - Update InvoiceRequest Message Creation description amount example to return Payment Protocol error in the case of an issue with the amount. --- bip-0070/extensions.mediawiki | 4 ++- bip-0075.mediawiki | 60 +++++++++++++++++++++++++++++++---- bip-0075/paymentrequest.proto | 18 +++++++---- 3 files changed, 69 insertions(+), 13 deletions(-) diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki index b572b1d498..947622dd7e 100644 --- a/bip-0070/extensions.mediawiki +++ b/bip-0070/extensions.mediawiki @@ -5,5 +5,7 @@ Add your extension below using tags starting at 1000 and submit a pull-req. {| | Field Number || Extension Name || Field Name || Description |- -| 1000 || [[https://example.com|(unassigned)]] || (unassigned) || (unassigned) +| 1000 || [[https://github.com/bitcoin/bips/bip-0075.mediawiki|(BIP75)]] || status_code || Status Code for Payment Protocol error communication +|- +| 1001 || [[https://github.com/bitcoin/bips/bip-0075.mediawiki|(BIP75)]] || status_message || Human-readable message for Payment Protocol error communication |} \ No newline at end of file diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 753c6e5007..6bac44a956 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -101,7 +101,7 @@ message InvoiceRequest { |- | memo || Human-readable description of invoice request for the receiver |- -| notification_url || Secure (usually HTTPS) location where an [[#EncryptedPaymentRequest|EncryptedPaymentRequest]] (see below) SHOULD be sent when ready +| notification_url || Secure (usually TLS-protected HTTP) location where an [[#EncryptedPaymentRequest|EncryptedPaymentRequest]] (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} @@ -242,6 +242,19 @@ message EncryptedPaymentACK { | identifier || Use the identifier specified with the EncryptedPayment, if any. |} +==Updated Messages== +The BIP70 PaymentRequest, Payment and PaymentACK messages have been updated by this BIP to contain Payment Protocol error communication. The following two extension fields have been added to each of the aforementioned messages: + +
+{
+...
+    optional uint32 status_code = 1000;     // Payment Protocol status code
+    optional string status_message = 1001;  // Human-readable status message
+}
+
+ +status_code and/or status_message MUST be set to communicate a Payment Protocol error to the message receiver. The message consumer MUST handle status_code and status_message if either field is present. + ==InvoiceRequest / PaymentRequest Process== The process overview for using InvoiceRequests and receiving encrypted PaymentRequests is defined below in two sections. Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and therefore MUST follow the '''Encrypted InvoiceRequest Overview''' process below. @@ -282,8 +295,8 @@ The process overview for using InvoiceRequests and receiving encrypted PaymentRe ==Message Interaction Details== -===New Message Content Types=== -Messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined per message type here: +===New Message HTTP Content Types=== +When communicated via HTTP, these messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined per message type here: {| class="wikitable" ! Message Type !! Content Type |- @@ -298,8 +311,43 @@ Messages MUST be transmitted via TLS-protected HTTP using the appropriate Conten | EncryptedPaymentACK || application/bitcoin-encrypted-paymentack |} -===Message or Communication Errors=== -An invalid or unparsable message or communications error MUST be communicated to the party that initiated the communication. This SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). If the provided hash of each message does not match the contents of the message once decrypted, a general error should be returned to prevent oracle attacks. +===Payment Protocol Errors=== + +Payment Protocol errors MUST be communicated to the party that initiated the communication via the status_code and status_message extension fields present in the PaymentRequest, Payment and PaymentACK messages. For example, if the provided hash of each message does not match the contents of the message once decrypted, a general error MUST be returned to prevent oracle attacks. + +====Payment Protocol Status Codes==== +{| class="wikitable" +! Status Code !! Description +|- +| 1 || General / Unknown Error +|- +| 2 || Authentication Failed +|- +| 3 || Encrypted Message Required +|- +| 100 || Amount Too High +|- +| 101 || Amount Too Low +|- +| 102 || Amount Invalid +|- +| 103 || Payment Does Not Meet PaymentRequest Requirements +|- +| 200 || Certificate Required +|- +| 201 || Certificate Expired +|- +| 202 || Certificate Invalid for Transaction +|- +| 203 || Certificate Revoked +|- +| 204 || Certificate Not Well Rooted +|- +|} + +===Communication Errors=== + +Communications errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ==Process Step Details== @@ -311,7 +359,7 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair * nonce MUST be set according to the requirement above. -* Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD be rejected with HTTP status code 406. +* Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD return a PaymentRequest with the status_code and status_message fields set appropriately. * Memo is optional. This MAY be set to a human readable description of the InvoiceRequest * Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to * If NOT including certificate, set pki_type to "none" diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 1c9cc8e998..912fcd3a03 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -33,19 +33,25 @@ message PaymentRequest { optional bytes pki_data = 3; // depends on pki_type required bytes serialized_payment_details = 4; // PaymentDetails optional bytes signature = 5; // pki-dependent signature + optional uint32 status_code = 1000; // Payment Protocol status code + optional string status_message = 1001; // Human-readable Payment Protocol status message } message X509Certificates { repeated bytes certificate = 1; // DER-encoded X.509 certificate chain } message Payment { - optional bytes merchant_data = 1; // From PaymentDetails.merchant_data - repeated bytes transactions = 2; // Signed transactions that satisfy PaymentDetails.outputs - repeated Output refund_to = 3; // Where to send refunds, if a refund is necessary - optional string memo = 4; // Human-readable message for the merchant + optional bytes merchant_data = 1; // From PaymentDetails.merchant_data + repeated bytes transactions = 2; // Signed transactions that satisfy PaymentDetails.outputs + repeated Output refund_to = 3; // Where to send refunds, if a refund is necessary + optional string memo = 4; // Human-readable message for the merchant + optional uint32 status_code = 1000; // Payment Protocol status code + optional string status_message = 1001; // Human-readable Payment Protocol status message } message PaymentACK { - required Payment payment = 1; // Payment message that triggered this ACK - optional string memo = 2; // Human-readable message for customer + required Payment payment = 1; // Payment message that triggered this ACK + optional string memo = 2; // Human-readable message for customer + optional uint32 status_code = 1000; // Payment Protocol status code + optional string status_message = 1001; // Human-readable Payment Protocol status message } // BIP-IR Extensions From a5447e0c4b219acbbc1e09ccd9419e8dff94f1e8 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 21:43:36 +0000 Subject: [PATCH 0307/2326] BIP 141 & 145: Clarify sigop interaction --- bip-0141.mediawiki | 6 ++++-- bip-0145.mediawiki | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 12b0ebac98..543e5a2c1c 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -114,9 +114,11 @@ The new rule is total ''block cost'' ≤ 4,000,000. Sigops per block is currently limited to 20,000. We change this restriction as follows: -''Sigop cost'' is defined. The cost of a sigop in traditional script is 4, while the cost of a sigop in witness program is 1. +Sigops in the current pubkey script, signature script, and P2SH check script are counted at 4 times their previous value. +The sigop limit is likewise quadrupled to ≤ 80,000. -The new rule is total ''sigop cost'' ≤ 80,000. +In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script. +That is, CHECKSIG is counted as only 1 sigop in a witness program, despite P2SH check script's CHECKSIG becoming 4 sigops with the forementioned change. == Examples == diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index b90725e05f..712e4224b4 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -24,8 +24,6 @@ The template Object is revised to include these keys: |- | costlimit || {{No}} || Number || total cost allowed in blocks |- -| sigoplimit || {{No}} || Number || total sigop cost allowed in blocks divided by 4 -|- | version || {{Yes}} || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5) |} @@ -47,6 +45,10 @@ The Objects listed in the response's "transactions" key is revised to include th Transactions with witness data may only be included if the template's block version is at least 5. +===Sigops=== + +For version 5 blocks, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]]. + ===Block Assembly with Witness Transactions=== When block assembly is done without witness transactions, no changes are made by this BIP, and it should be assembled as previously. From b8467dfb7c1cf1ab29059f19eda91d0b8226d2fc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 21:58:51 +0000 Subject: [PATCH 0308/2326] BIP 9: Clarify nVersion interpretation and bit order --- bip-0009.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 509a8a94e3..03e8727cca 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -51,6 +51,8 @@ With each block and soft fork, we associate a deployment state. The possible sta ===Bit flags=== +The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number. + Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. From b0b65ceedece12e8ea109abe1fb518c49e0e09ff Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:22:09 +0000 Subject: [PATCH 0309/2326] BIP 9: Add softfork deployment "name" --- bip-0009.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 03e8727cca..b72010d79a 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -24,6 +24,7 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): +# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. @@ -32,6 +33,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu The following guidelines are suggested for selecting these parameters for a soft fork: +# '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name. # '''bit''' should be selected such that no two concurrent softforks use the same bit. # '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. # '''timeout''' should be 1 year (31536000 seconds) after starttime. From 12a2131bb425a3afb7e5d51576d43d0bc8a6d106 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:38:57 +0000 Subject: [PATCH 0310/2326] BIP 9: GBT specification --- bip-0009.mediawiki | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index b72010d79a..b506aada72 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -161,6 +161,35 @@ block, indexed by its parent. To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). +===getblocktemplate changes=== + +The template request Object is extended to include a new item: + +{| class="wikitable" +!colspan=4| template request +|- +! Key !! Required !! Type !! Description +|- +| rules || {{No}} || Array of Strings || list of supported softfork deployments, by name +|} + +The template Object is also extended: + +{| class="wikitable" +!colspan=4| template +|- +! Key !! Required !! Type !! Description +|- +| rules || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value +|- +| rulesrequired || {{No}} || Array of Strings || list of softfork deployments the server requires support for +|- +| rulesenforced || {{Yes}} || Array of Strings || list of softfork deployments that are active state +|} + +The "version" key of the template is retained, and used to indicate the server's preference of deployments. +Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "rules" and (when clearing is desired) NOT listed in "rulesrequired". + ==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. From 161b39fa687d4716cd54953e840511ebba45899d Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:42:42 +0000 Subject: [PATCH 0311/2326] BIP 145: Update for BIP 9 --- bip-0145.mediawiki | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index 712e4224b4..6c2a8590f1 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -15,7 +15,7 @@ This BIP describes modifications to the getblocktemplate JSON-RPC call ([[bip-00 ===Block Template=== -The template Object is revised to include these keys: +The template Object is revised to include a new key: {| class="wikitable" !colspan=4| template @@ -23,8 +23,6 @@ The template Object is revised to include these keys: ! Key !! Required !! Type !! Description |- | costlimit || {{No}} || Number || total cost allowed in blocks -|- -| version || {{Yes}} || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5) |} ====Transactions Object Format==== @@ -43,11 +41,11 @@ The Objects listed in the response's "transactions" key is revised to include th | hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal |} -Transactions with witness data may only be included if the template's block version is at least 5. +Transactions with witness data may only be included if the template's "rulesenforced" list (see [[bip-0009.mediawiki#getblocktemplate changes|BIP 9]]) includes "segwit". ===Sigops=== -For version 5 blocks, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]]. +For blocks with segwit enforcement, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]]. ===Block Assembly with Witness Transactions=== @@ -89,6 +87,7 @@ Why shouldn't the server simply add the commitment upfront in the "coinbasetxn", * [https://github.com/bitcoin/bitcoin/pull/7404/files Bitcoin Core] ==See Also== +* [[bip-0009.mediawiki|BIP 9: Version bits with timeout and delay]] * [[bip-0022.mediawiki|BIP 22: getblocktemplate - Fundamentals]] * [[bip-0023.mediawiki|BIP 23: getblocktemplate - Pooled Mining]] * [[bip-0141.mediawiki|BIP 141: Segregated Witness (Consensus layer)]] From 2fa7fb9b5cf9a4dbe2affe44267014fc486cbcf6 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:43:33 +0000 Subject: [PATCH 0312/2326] BIP 141: Specify VB name --- bip-0141.mediawiki | 2 +- bip-0145.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 543e5a2c1c..647ec69251 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -251,7 +251,7 @@ As a soft fork, older software will continue to operate without modification. N == Deployment == -This BIP is to be deployed by version-bits BIP9. Exact details TDB. +This BIP is to be deployed by version-bits BIP9 with the name "segwit". Exact details TDB. == Credits == diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index 6c2a8590f1..f7a1e61bab 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -41,7 +41,7 @@ The Objects listed in the response's "transactions" key is revised to include th | hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal |} -Transactions with witness data may only be included if the template's "rulesenforced" list (see [[bip-0009.mediawiki#getblocktemplate changes|BIP 9]]) includes "segwit". +Transactions with witness data may only be included if the template's "rulesenforced" list (see [[bip-0009.mediawiki#getblocktemplate_changes|BIP 9]]) includes "segwit". ===Sigops=== From cacf39b057e15fc273b3ddea7dde78e4fb696b83 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Thu, 31 Mar 2016 14:22:36 +0800 Subject: [PATCH 0313/2326] BIP141: Sigop clarification --- bip-0141.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 647ec69251..09a5556749 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -80,8 +80,8 @@ If there are more than one scriptPubKey matching the pattern, the one with highe 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 32 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. -# 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. +# 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: * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program. @@ -118,7 +118,7 @@ Sigops in the current pubkey script, signature script, and P2SH check script are The sigop limit is likewise quadrupled to ≤ 80,000. In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script. -That is, CHECKSIG is counted as only 1 sigop in a witness program, despite P2SH check script's CHECKSIG becoming 4 sigops with the forementioned change. +That is, CHECKSIG in a witness program is counted as only 1 sigop, and m-of-n CHECKMULTISIG in a witness program is counted as n sigop. This rule applies to both native witness program and P2SH witness program. == Examples == From 9c0d407b104009815bdfe2392731468d30cb0aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B8=BFtcDrak?= Date: Thu, 31 Mar 2016 15:39:33 +0100 Subject: [PATCH 0314/2326] Clarify what remains "to be decided" --- bip-0141.mediawiki | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 12b0ebac98..dd17eaad2f 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -249,7 +249,11 @@ As a soft fork, older software will continue to operate without modification. N == Deployment == -This BIP is to be deployed by version-bits BIP9. Exact details TDB. +This BIP will be deployed by "version bits" BIP9 using bit TBD. + +For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). + +For Bitcoin testnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). == Credits == From 735a55612949f5b0bcec6fe2e5f89e65bf0602c6 Mon Sep 17 00:00:00 2001 From: jl2012 Date: Fri, 1 Apr 2016 15:17:24 +0800 Subject: [PATCH 0315/2326] Create BIP MAST --- bip-mast.mediawiki | 192 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 bip-mast.mediawiki diff --git a/bip-mast.mediawiki b/bip-mast.mediawiki new file mode 100644 index 0000000000..a903235ae2 --- /dev/null +++ b/bip-mast.mediawiki @@ -0,0 +1,192 @@ +
+  BIP: ?
+  Title: Merkelized Abstract Syntax Tree
+  Author: Johnson Lau 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-04-02
+
+ +==Abstract== +This BIP defines a new witness program type that uses a Merkle tree to encode mutually exclusive branches in a script. This enables complicated redemption conditions that are currently not possible, improves privacy by hiding unexecuted scripts, and allows inclusion of non-consensus enforced data with very low or no additional cost. + +==Motivation== +===Evolution of Bitcoin script system=== +Bitcoin uses a script system to specify the conditions for redemption of transaction outputs. In its original design, the conditions for redemption are directly recorded in the scriptPubKey by the sender of the funds. This model has several drawbacks, particularly for complicated scripts: +# It could be difficult for the receiver to specify the conditions; +# Large scripts take up more UTXO space; +# The sender will pay for the additional block space; +# To prevent DoS attack, scripts are limited to 10,000 bytes and 201 op codes; +# Any unexecuted branches and non-consensus enforced data in the script are visible to the public, consuming block space while damaging privacy. + +The [[bip-0016.mediawiki|BIP16]] (Pay-to-script-hash, "P2SH") fixes the first 3 problems by using a fixed-length 20-byte script hash in the scriptPubKey, and moving the responsibility for supplying the script to the redeemer. However, due to the data push size limit in script, a P2SH script may not be bigger than 520 bytes. Also, P2SH still requires the redeemer to publish all unexecuted branches of the script. + +The [[bip-0141.mediawiki|BIP141]] defines 2 new types of scripts that support segregated witness. The pay-to-witness-script-hash (P2WSH) is similar to P2SH is many ways. By supplying the script in witness, P2WSH restores the original 10,000 byte script limit. However, it still requires publishing of unexecuted branches. + +===Merkelized Abstract Syntax Tree=== +The idea of Merkelized Abstract Syntax Tree (MAST) is to use a Merkle tree to encode mutually exclusive branches in a script. When spending, the redeemer may provide only the branch they are executing, and hashes that connect the branch to the fixed size Merkel root. This reduces the size of redemption stack from O(n) to O(log n) (n as the number of mutually exclusive branches). This enables complicated redemption conditions that is currently not possible due to the script size and op code limit, improves privacy by hiding unexecuted branches, and allows inclusion of non-consensus enforced data with very low or no additional cost. + +==Specification== +In [[bip-0141.mediawiki|BIP141]], witness programs with a version byte of 1 or larger are considered to be anyone-can-spend scripts. The following new validation rules are applied if the witness program version byte is 1 and the program size is 32 bytes. The witness program is the MAST Root. + +To redeem an output of this kind, the witness must consist of an input stack to feed to the script, followed by a Postion value, a serialized Merkle path (Path), and a serialized script (MAST Script). + +The Position, Path, and MAST Script are popped off the initial witness stack. + +The double-SHA256 of the MAST Script (≤ TBD bytes) must be correctly connected to the MAST Root with the ComputeMerkleRootFromBranch function, with the specified Path and Position. + +Path is the serialized Merkle path for the MAST Script. Size of Path must be a multiple of 32 bytes, and not more than 1024 bytes (which allows 32 levels). If the size of Path is zero, the double-SHA256 of the MAST Script must match the MAST Root. + +Position indicates the location of the MAST Script in the Merkle tree, with zero means the leftmost position. It is an unsigned little-endian integer with not more than 4 bytes. It must be encoded in the most parsimonious way possible, with no leading zero and not larger than the maximum number of items allowed by the depth of the tree (as implied by the size of Path). + +The MAST Script is then deserialized, and executed after normal script evaluation with the remaining witness stack (≤ TBD bytes for each stack item). The script must not fail, and result in exactly a single TRUE on the stack. + +Sigops in MAST program are counted to the block sigop limit in the same way as the version 0 witness program (see BIP141). + +If the version byte is 1, but the witness program is not 32 bytes, the script must fail. + +== Examples == +=== Calculation of MAST Root === +To calculate the MAST Root for 4 branches, the double-SHA256 of each branch is first calculated: + <1> EQUAL (0x5187), HASH256=3b647cb856a965fa6feffb4621eb2a4f4c2453693b2f64e021383ccbd80a1abb + <2> EQUAL (0x5287), HASH256=37772654bdce9b3d59e1169ea16ddbaa8a2ae8ee265db64863d0b76f02c882fa + <3> EQUAL (0x5387), HASH256=2e972642436151cd96e4b0868077b6362ffb5eb30b420a6f1c5e1c6fff02bc33 + <4> EQUAL (0x5487), HASH256=4c954fc1e635ce8417341465f85b59d700806f6e57bb96b2a25bec5ca3f9f154 + +Serialize the hashes of the first pair and calculate the hash. Same for the other pair: + HASH256(HASH256(5187)|HASH256(5287)) = 64fbdfc0a82ecc3b33434bfea63440e9a5275fa5e533200d2eaf18281e8b28b6 + HASH256(HASH256(5387)|HASH256(5487)) = aeadea837d5e640a1444208f7aca3be63bc8ab3c6b28a19878a00cc9c631ac31 + +Serialize the 2 hashes from the previous step and calculate the hash, which is the MAST Root: + MAST Root = 6746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e + +The scriptPubKey with native witness program is: + <1> <0x6746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e> + (0x51206746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e) + +To redeem with the <4> EQUAL branch, the witness is + 04 (Stack for evaluation) + 03 (Position) + 2e972642436151cd96e4b0868077b6362ffb5eb30b420a6f1c5e1c6fff02bc3364fbdfc0a82ecc3b33434bfea63440e9a5275fa5e533200d2eaf18281e8b28b6 (Path) + 5487 (MAST Script) + +=== Imbalance MAST === +When constructing a MAST, if the user believes that some of the branches are more likely to be executed, they may put them closer to the MAST Root. It will save some witness space when the preferred branches are actually executed. + +=== Escrow with Timeout === +The following is the "Escrow with Timeout" example in [[bip-0112.mediawiki|BIP112]]: + IF + 2 3 CHECKMULTISIGVERIFY + ELSE + "30d" CHECKSEQUENCEVERIFY DROP + CHECKSIGVERIFY + ENDIF + +Using compressed public key, the size of this script is 150 bytes. + +With MAST, this script could be broken down into 2 mutually exclusive branches: + 2 3 CHECKMULTISIGVERIFY (105 bytes) + "30d" CHECKSEQUENCEVERIFY DROP CHECKSIGVERIFY (42 bytes) + +With 2 branches, the Path will be 32 bytes (as the hash of the unexecuted branch), and the Position will be 1 byte as either 0 or 1. Since only one branch will be published, it is more difficult for a blockchain analyst to determine the details of the escrow. + +=== Hashed Time-Lock Contract === +The following is the "Hashed TIme-Lock Contract" example in [[bip-0112.mediawiki|BIP112]]: + HASH160 DUP EQUAL + IF + "24h" CHECKSEQUENCEVERIFY + 2DROP + + ELSE + EQUAL + NOTIF + "Timestamp" CHECKLOCKTIMEVERIFY DROP + ENDIF + + ENDIF + CHECKSIG + +To create a MAST Root, it is flattened to 3 mutually exclusive branches: + HASH160 EQUALVERIFY "24h" CHECKSEQUENCEVERIFY DROP CHECKSIG + HASH160 EQUALVERIFY CHECKSIG + "Timestamp" CHECKLOCKTIMEVERIFY DROP CHECKSIG + +which significantly improves readability and reduces the witness size when it is redeemed. + +=== Large multi-signature constructs === +The current CHECKMULTISIG supports up to 20 public keys. Although it is possible to extend it beyond 20 keys by using multiple CHECKSIGs and IF/ELSE conditions, the construction could be very complicated and soon use up the 10,000 bytes and 201 op codes limit. + +With MAST, large and complex multi-signature constructs could be flattened to many simple CHECKMULTISIG conditions. For example, a 3-of-2000 multi-signature scheme could be expressed as 1,331,334,000 3-of-3 CHECKMULTISIGs, which forms a 31-level MAST. The scriptPubKey still maintains a fixed size of 34 bytes, and the redemption witness will be very compact, with less than 1,500 bytes. + +=== Commitment of non-consensus enforced data === +Currently, committing non-consensus enforced data in the scriptPubKey requires the use of OP_RETURN which occupies additional block space. With MAST, users may commit such data as a branch. Depends on the number of executable branches, inclusion of such a commitment may incur no extra witness space, or 32 bytes at most. + +An useful case would be specifying "message-signing keys", which are not valid for spending, but allow users to sign any message without touching the cold storage "funding key". + +== Backward compatibility == +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will consider MAST programs as anyone-can-spend scripts. Wallets should always be wary of anyone-can-spend scripts and treat them with suspicion. + +== Deployment == +This BIP depends on [[bip-0141.mediawiki|BIP141]] and will be deployed by version-bits [[bip-0009.mediawiki|BIP9]] after BIP141 is enforced. Exact details TBD. + +== Credits == +The idea of MAST originates from Russell O’Connor, Pieter Wuille, and [https://bitcointalk.org/index.php?topic=255145.msg2757327#msg2757327 Peter Todd]. + +== Reference Implementation == +https://github.com/jl2012/bitcoin/commit/f335cab76eb95d4f7754a718df201216a4975d8c + + +if (witversion == 1) { + if (program.size() == 32) { + if (witness.stack.size() < 3) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + + //Script: the last witness stack item + scriptPubKey = CScript(witness.stack.back().begin(), witness.stack.back().end()); + uint256 hashScriptPubKey; + CHash256().Write(&scriptPubKey[0], scriptPubKey.size()).Finalize(hashScriptPubKey.begin()); + + //Path: the second last witness stack item; size = 32N, 0 <= N < 33 + std::vector pathdata = witness.stack.at(witness.stack.size() - 2); + if (pathdata.size() & 0x1F) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + unsigned int depth = pathdata.size() >> 5; + if (depth > 32) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + std::vector path; + path.resize(depth); + for (unsigned int i = 0; i < depth; i++) + memcpy(path[i].begin(), &pathdata[32 * i], 32); + + //Position: the third last witness stack item; unsigned int with smallest possible value and no leading zero + std::vector positiondata = witness.stack.at(witness.stack.size() - 3); + if (positiondata.size() > 4) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + uint32_t position = 0; + if (positiondata.size() > 0) { + if (positiondata.back() == 0x00) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + for (size_t i = 0; i != positiondata.size(); ++i) + position |= static_cast(positiondata[i]) << 8 * i; + } + if (depth < 32) { + if (position >= (1U << depth)) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + } + + uint256 root = ComputeMerkleRootFromBranch(hashScriptPubKey, path, position); + if (memcmp(root.begin(), &program[0], 32)) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + + stack = std::vector >(witness.stack.begin(), witness.stack.end() - 3); + } else { + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH); + } +} + + +== References == +*[[bip-0141.mediawiki|BIP141 Segregated Witness (Consensus layer)]] + +== Copyright == +This document is placed in the public domain. \ No newline at end of file From a6cc319846c4baaecbdd489dfc3143239189b4d5 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 5 Apr 2016 13:03:34 +0800 Subject: [PATCH 0316/2326] Update bip-0141.mediawiki --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 09a5556749..3cbcd13c5a 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -118,7 +118,7 @@ Sigops in the current pubkey script, signature script, and P2SH check script are The sigop limit is likewise quadrupled to ≤ 80,000. In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script. -That is, CHECKSIG in a witness program is counted as only 1 sigop, and m-of-n CHECKMULTISIG in a witness program is counted as n sigop. This rule applies to both native witness program and P2SH witness program. +That is, CHECKSIG in a witness program is counted as only 1 sigop, and CHECKMULTISIG in a witness program is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program. == Examples == From ee744caca9dce9717b221a60c92f0d0e414db625 Mon Sep 17 00:00:00 2001 From: jl2012 Date: Fri, 8 Apr 2016 23:45:54 +0800 Subject: [PATCH 0317/2326] BIP141: commitment clarification. BIP144: new diagram --- bip-0141.mediawiki | 2 ++ bip-0144/witnesstx.png | Bin 18923 -> 21335 bytes 2 files changed, 2 insertions(+) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index dd17eaad2f..f9881be4bc 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -75,6 +75,8 @@ and the coinbase's input's witness must consist of a single 32-byte array for th If there are more than one scriptPubKey matching the pattern, the one with highest output index is assumed to be the commitment. +If all transactions in a block do not have witness data, the commitment is optional. + === 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 32 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". diff --git a/bip-0144/witnesstx.png b/bip-0144/witnesstx.png index 5fd8afcb01ce0cf08b7de1003c8be0539f226ba6..cb02a63c9c2bcd7551e96d8caf915555c9f64375 100644 GIT binary patch literal 21335 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 a_XyRdy1QZ%@C8jEr^D`tst=s{>3;#p)Md^9 From 952ba4ad16fe567995c54f44f1e6f1690bfff0db Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 12 Apr 2016 20:20:06 +0000 Subject: [PATCH 0318/2326] Assign BIP 114: Merkelized Abstract Syntax Tree --- README.mediawiki | 6 ++++++ bip-mast.mediawiki => bip-0114.mediawiki | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) rename bip-mast.mediawiki => bip-0114.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 92ca9f9257..974870e0fb 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -404,6 +404,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0114.mediawiki|114]] +| Merkelized Abstract Syntax Tree +| Johnson Lau +| Standard +| Draft +|- | [[bip-0120.mediawiki|120]] | Proof of Payment | Kalle Rosenbaum diff --git a/bip-mast.mediawiki b/bip-0114.mediawiki similarity index 99% rename from bip-mast.mediawiki rename to bip-0114.mediawiki index a903235ae2..4ad593f2d3 100644 --- a/bip-mast.mediawiki +++ b/bip-0114.mediawiki @@ -1,5 +1,5 @@ diff --git a/bip-0111.mediawiki b/bip-0111.mediawiki index f759f5c8c5..45578329d4 100644 --- a/bip-0111.mediawiki +++ b/bip-0111.mediawiki @@ -3,7 +3,7 @@ Title: NODE_BLOOM service bit Author: Matt Corallo Peter Todd - Status: Draft + Status: Accepted Type: Standards Track Created: 2015-08-20
-  BIP: ?
+  BIP: 114
   Title: Merkelized Abstract Syntax Tree
   Author: Johnson Lau 
   Status: Draft
@@ -135,7 +135,7 @@ The idea of MAST originates from Russell O’Connor, Pieter Wuille, and [https:/
 == Reference Implementation ==
 https://github.com/jl2012/bitcoin/commit/f335cab76eb95d4f7754a718df201216a4975d8c
 
-
+
 if (witversion == 1) {
     if (program.size() == 32) {
         if (witness.stack.size() < 3)
@@ -189,4 +189,4 @@ if (witversion == 1) {
 *[[bip-0141.mediawiki|BIP141 Segregated Witness (Consensus layer)]]
 
 == Copyright ==
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.

From 58409dd0e8b487bd3a4a42d6de41bc0631fe95ed Mon Sep 17 00:00:00 2001
From: instagibbs 
Date: Wed, 13 Apr 2016 11:46:17 -0400
Subject: [PATCH 0319/2326] Some clarification on path meaning and structure

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

diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki
index 4ad593f2d3..f2a960eda2 100644
--- a/bip-0114.mediawiki
+++ b/bip-0114.mediawiki
@@ -35,9 +35,9 @@ The Position, Path, and MAST Script are p
 
 The double-SHA256 of the MAST Script (≤ TBD bytes) must be correctly connected to the MAST Root with the ComputeMerkleRootFromBranch function, with the specified Path and Position.
 
-Path is the serialized Merkle path for the MAST Script. Size of Path must be a multiple of 32 bytes, and not more than 1024 bytes (which allows 32 levels). If the size of Path is zero, the double-SHA256 of the MAST Script must match the MAST Root.
+Path is the serialized Merkle path for the MAST Script. Size of Path must be a multiple of 32 bytes, and not more than 1024 bytes (which allows 32 levels). Each 32 byte word is a double-SHA256 merkle node in the merkle branch connecting to the  MAST Root. If the size of Path is zero, the double-SHA256 of the MAST Script must match the MAST Root.
 
-Position indicates the location of the MAST Script in the Merkle tree, with zero means the leftmost position. It is an unsigned little-endian integer with not more than 4 bytes. It must be encoded in the most parsimonious way possible, with no leading zero and not larger than the maximum number of items allowed by the depth of the tree (as implied by the size of Path).
+Position indicates the location of the MAST Script in the Merkle tree, with zero indicating the leftmost position. It is an unsigned little-endian integer with not more than 4 bytes. It must be encoded in the most parsimonious way possible, with no leading zero and not larger than the maximum number of items allowed by the depth of the tree (as implied by the size of Path).
 
 The MAST Script is then deserialized, and executed after normal script evaluation with the remaining witness stack (≤ TBD bytes for each stack item). The script must not fail, and result in exactly a single TRUE on the stack.
 

From 3ef07340b42f3abee4b01d30d7a53315d0b30fa1 Mon Sep 17 00:00:00 2001
From: jl2012 
Date: Thu, 14 Apr 2016 00:43:16 +0800
Subject: [PATCH 0320/2326] BIP114: Clarifying reference implementation

---
 bip-0114.mediawiki | 48 +++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 43 insertions(+), 5 deletions(-)

diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki
index 4ad593f2d3..368835184e 100644
--- a/bip-0114.mediawiki
+++ b/bip-0114.mediawiki
@@ -133,24 +133,33 @@ This BIP depends on [[bip-0141.mediawiki|BIP141]] and will be deployed by versio
 The idea of MAST originates from Russell O’Connor, Pieter Wuille, and [https://bitcointalk.org/index.php?topic=255145.msg2757327#msg2757327 Peter Todd].
 
 == Reference Implementation ==
-https://github.com/jl2012/bitcoin/commit/f335cab76eb95d4f7754a718df201216a4975d8c
+https://github.com/jl2012/bitcoin/tree/segwit_mast
 
 
+//New rules apply if version byte is 1 and witness program size is 32 bytes
 if (witversion == 1) {
     if (program.size() == 32) {
+
+        //Witness stack must have at least 3 items
         if (witness.stack.size() < 3)
             return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
 
-        //Script: the last witness stack item
+        //Script is the last witness stack item
         scriptPubKey = CScript(witness.stack.back().begin(), witness.stack.back().end());
         uint256 hashScriptPubKey;
         CHash256().Write(&scriptPubKey[0], scriptPubKey.size()).Finalize(hashScriptPubKey.begin());
 
-        //Path: the second last witness stack item; size = 32N, 0 <= N < 33
+        //Path is the second last witness stack item
         std::vector pathdata = witness.stack.at(witness.stack.size() - 2);
+
+        // Size of Path must be a multiple of 32 bytes (0 byte is allowed)
         if (pathdata.size() & 0x1F)
             return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
+
+        // Depth of the tree is size of Path divided by 32
         unsigned int depth = pathdata.size() >> 5;
+
+        // Maximum allowed depth is 32
         if (depth > 32)
             return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
         std::vector path;
@@ -158,33 +167,62 @@ if (witversion == 1) {
         for (unsigned int i = 0; i < depth; i++)
             memcpy(path[i].begin(), &pathdata[32 * i], 32);
 
-        //Position: the third last witness stack item; unsigned int with smallest possible value and no leading zero
+        //Position is the third last witness stack item
         std::vector positiondata = witness.stack.at(witness.stack.size() - 3);
+
+        //Position may have 4 bytes at most
         if (positiondata.size() > 4)
             return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
+
         uint32_t position = 0;
+
+        //Position is an unsigned little-endian integer with no leading zero byte
         if (positiondata.size() > 0) {
             if (positiondata.back() == 0x00)
                 return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
             for (size_t i = 0; i != positiondata.size(); ++i)
                 position |= static_cast(positiondata[i]) << 8 * i;
         }
+
+        //Position must not be larger than the maximum number of items allowed by the depth of tree
         if (depth < 32) {
             if (position >= (1U << depth))
                 return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
         }
 
+        //Calculate the Merkle Root and compare with the witness program
         uint256 root = ComputeMerkleRootFromBranch(hashScriptPubKey, path, position);
         if (memcmp(root.begin(), &program[0], 32))
             return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
 
+        //Remaining stack items used for evaluation
         stack = std::vector >(witness.stack.begin(), witness.stack.end() - 3);
-    } else {
+    }
+
+    else {
+        //Invalid if version byte is 1 but witness program size is not 32 bytes
         return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH);
     }
 }
 
 
+Copying from src/consensus/merkle.cpp:
+
+uint256 ComputeMerkleRootFromBranch(const uint256& leaf, const std::vector& vMerkleBranch, uint32_t nIndex) {
+    uint256 hash = leaf;
+    for (std::vector::const_iterator it = vMerkleBranch.begin(); it != vMerkleBranch.end(); ++it) {
+        if (nIndex & 1) {
+            hash = Hash(BEGIN(*it), END(*it), BEGIN(hash), END(hash));
+        } else {
+            hash = Hash(BEGIN(hash), END(hash), BEGIN(*it), END(*it));
+        }
+        nIndex >>= 1;
+    }
+    return hash;
+}
+
+
+
 == References ==
 *[[bip-0141.mediawiki|BIP141 Segregated Witness (Consensus layer)]]
 

From 97dafa75b32249adce8c6d02fdb56b3f28f0e24d Mon Sep 17 00:00:00 2001
From: Justus Ranvier 
Date: Sun, 17 Apr 2016 09:20:46 -0500
Subject: [PATCH 0321/2326] BIP-0047: Clarify usage and format of outpoints

Introduce the terms 'designated input' and 'designated pubkey' for clarity

Update reference link for outpoint to a more canonical source
---
 bip-0047.mediawiki | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki
index bdac681e15..0720eb4090 100644
--- a/bip-0047.mediawiki
+++ b/bip-0047.mediawiki
@@ -1,7 +1,7 @@
 RECENT CHANGES:
+* (17 Apr 2016) Clarify usage of outpoints in notification transactions
 * (18 Dec 2015) Update explanations to resolve FAQs
 * (12 Oct 2015) Revise blinding method for notification transactions
-* (21 Sep 2015) Correct base58check version byte
 
 
   BIP: 47
@@ -119,6 +119,9 @@ It is assumed that Alice can easily obtain Bob's payment code via a suitable met
 * Payment code: an extended public key and associated metadata which is associated with a particular identity/account
 * Notification address: the P2PKH address associated with the 0th public key derived from a payment code
 * Notification transaction: a transaction which sends an output to a notification address which includes an embedded payment code
+* Designated input: the first input in the notification transaction which exposes an secp256k1 pubkey in either its signature script, or in the redeem script or pubkey script of the output being spent
+* Designated pubkey: the first secp256k1 pubkey pushed to the stack during script execution for the designated input
+* Outpoint: the specific output of a previous transaction which is being spent. See the Reference section for the binary serialization
 
 ====Notification Transaction====
 
@@ -127,12 +130,12 @@ Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform
 # 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
 # Alice derives a unique shared secret using ECDH:
-## Alice selects the private key corresponding to the first exposed public key, of the first pubkey-exposing input, of the transaction: 
a
+## 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)
### "x" is the x value of the secret point -### "o" is the outpoint being spent by the first pubkey-exposing input of the transaction. +### "o" is the outpoint being spent by the designated input # Alice serializes her payment code in binary form. # Alice renders her payment code (P) unreadable to anyone except Bob: ## Replace the x value with x':
x' = x XOR (first 32 bytes of s)
@@ -143,12 +146,12 @@ Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform # Bob watches for any transactions which create an output at his notification address. # When a transaction is received, the client examines it to determine if it contains a standard OP_RETURN output with an 80 byte payload (notification transactions). # If the first byte of the payload in a notification transaction is 0x01: -## Bob selects the first exposed public key, of the first pubkey-exposing input, of the transaction:
A, where A = aG
+## Bob selects the designated pubkey:
A, where A = aG
## Bob selects the private key associated with his notification address:
b
## Bob calculates a secret point:
S = bA
## Bob calculates the binding factor:
s = HMAC-SHA512(x, o)
### "x" is the x value of the secret point -### "o" is the outpoint being spent by the first pubkey-exposing input of the transaction. +### "o" is the outpoint being spent by the designated input. ## Bob interprets the 80 byte payload as a payment code, except: ### Replace the x value with x':
x' = x XOR (first 32 bytes of s)
### Replace the chain code with c':
c' = c XOR (last 32 bytes of s)
@@ -300,7 +303,7 @@ In order to use Bitmessage notification, the recipient must have a Bitmessage cl * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] * [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] * [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] -* [[https://bitcoin.org/en/glossary/outpoint|Outpoint]] +* [[https://bitcoin.org/en/developer-reference#outpoint|Outpoint]] * [[https://github.com/petertodd/dust-b-gone|dust-b-gone]] * [[https://en.bitcoin.it/wiki/Base58Check_encoding|Base58Check encoding]] * [[https://bitmessage.org/bitmessage.pdf|Bitmessage]] From 8b11b6198144e499590d0f70b4f5681b5ded03ee Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Tue, 19 Apr 2016 13:01:55 -0500 Subject: [PATCH 0322/2326] explain the usage of versions with regards to payment code behavior --- bip-0047.mediawiki | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 0720eb4090..248fabca49 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -84,7 +84,19 @@ Hardened derivation is used at this level. Except where noted, all keys derived from a payment code use the public derivation method. -==Standard Payment Codes (v1)== +==Versions== + +Payment codes contain a version byte which identifies a specific set of behavior. + +Unless otherwise specified, payment codes of different versions are interoperable. If Alice uses a version x payment code, and Bob uses a version y payment code, they can still send and receive transactions between each other. + +Currently specified versions: + +* Version 1 +** Address type: P2PKH +** Notification type: address + +==Version 1== ===Representation=== @@ -127,6 +139,8 @@ 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. + # 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 # Alice derives a unique shared secret using ECDH: From 37a35b5565d5e56d46163872d992a8c0e80538bb Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Tue, 19 Apr 2016 13:03:13 -0500 Subject: [PATCH 0323/2326] add recommended handling for notification tx change outputs --- bip-0047.mediawiki | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 248fabca49..3f4f6ebf76 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -194,6 +194,17 @@ Alice SHOULD use an input script in one of the following standard forms to expos Compatible wallets MAY provide a method for a user to manually specify the public key associated with a notification transaction in order to recover payment codes sent via non-standard notification transactions. +=====Post-Notification Privacy Considerations===== + +Incautious handling of change outputs from notification transactions may cause unintended loss of privacy. + +The recipient of a transaction which spends a change output from a prior notification transaction will learn about the potential connection between the sender and the recipient of the notification transaction. + +The following actions are recommended to reduce this risk: + +* Wallets which support mixing SHOULD mix change outputs from notification transactions prior to spending them +* Wallets which do not support mixing MAY simulate mixing by creating a transaction which spends the change output to the next external BIP44 address + ====Sending==== # Each time Alice wants to initiate a transaction to Bob, Alice derives a unique P2PKH address for the transaction using ECDH follows: From 283aa14f77b633be67c647d294a35999723ce366 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Tue, 19 Apr 2016 13:04:59 -0500 Subject: [PATCH 0324/2326] add version 2 section for bloom filter-based notifications --- bip-0047.mediawiki | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 3f4f6ebf76..b1145b381b 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -1,7 +1,7 @@ RECENT CHANGES: +* (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 -* (12 Oct 2015) Revise blinding method for notification transactions
   BIP: 47
@@ -95,6 +95,14 @@ Currently specified versions:
 * Version 1
 ** Address type: P2PKH
 ** Notification type: address
+* Version 2
+** Address type: P2PKH
+** Notification type: bloom-multisig
+
+===Recommended Versions===
+
+* Wallets which have bloom filtering capabilities SHOULD create version 2 payment codes instead of version 1 payment codes.
+* Version 1 payment codes are only recommended for wallets which lack access to bloom filtering capability.
 
 ==Version 1==
 
@@ -319,6 +327,41 @@ The sender transmits their payment code in base58 form to the calculated Bitmess
 
 In order to use Bitmessage notification, the recipient must have a Bitmessage client which listens at the address which the senders will derive and is capable of relaying received payment codes to the Bitcoin wallet.
 
+==Version 2==
+
+Version 2 payment codes behave identifically to version 1 payment codes, except as modified below.
+
+===Representation===
+
+====Binary Serialization====
+
+* Byte 0: version. required value: 0x02
+
+===Protocol===
+
+====Definitions====
+
+* Notification change output: the change output from a notification transaction which which resides in the sender's wallet, but can be automatically located by the intended recipient
+* Payment code identifier: a 33 byte representation of a payment code constructed by prepending 0x02 to the SHA256 hash of the binary serialization of the payment code
+
+====Notification Transaction====
+
+Note: this procedure is used if Bob uses a version 2 payment code (regardless of the the version of Alice's payment code). If Bob's payment code is not version 2, see the appropriate section in this specification.
+
+# Construct a notification transaction as per the version 1 instructions, except do not create the output to Bob's notification address
+# Create a notification change address as follows:
+## Obtain the pubkey corresponding to the next change address
+## Construct a multisig output in the form:
+
OP_1   OP_2 OP_CHECKMULTISIG
+ +The relative ordering of the payment code identifier and change address pubkey in the above script MAY be randomized + +Bob detects notification transactions by adding his payment code identifier to his bloom filter. + +# When the filter returns a notification transaction, the sender's payment code is unblinded using the same procedure as for version 1 notification transactions. + +Alice's wallet should spend the notification change output at the next appropriate opportunity. + ==Test Vectors== * [[https://gist.github.com/SamouraiDev/6aad669604c5930864bd|BIP47 Reusable Payment Codes Test Vectors]] From 4cb4534fd918653975709a3cf4877ed77ec576c4 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Wed, 20 Apr 2016 12:29:44 -0500 Subject: [PATCH 0325/2326] BIP143: fix typo ("including") --- bip-0143.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 4c6503b3b2..ed5cfecd53 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -191,7 +191,7 @@ This proposal is deployed with Segregated Witness softfork (BIP 141) == Backward compatibility == -As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs, inculding the redefined sigops, as anyone-can-spend scripts. +As a soft fork, older software will continue to operate without modification. Non-upgraded nodes, however, will not see nor validate the witness data and will consider all witness programs, including the redefined sigops, as anyone-can-spend scripts. == Reference Implementation == From c1ef3a05e32bf477ebc4b05db9eba5d85ac24b49 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Wed, 20 Apr 2016 13:16:39 +0800 Subject: [PATCH 0326/2326] BIP143 clarifying semantics of ACP|SINGLE --- bip-0143.mediawiki | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 4c6503b3b2..d39fdd8e84 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -1,4 +1,4 @@ -
+
   BIP: 143
   Title: Transaction Signature Verification for Version 0 Witness Program
   Author: Johnson Lau 
@@ -28,37 +28,41 @@ A new transaction digest algorithm is defined, but only applicable to sigops in
      2. hashPrevouts (32-byte hash)
      3. hashSequence (32-byte hash)
      4. outpoint (32-byte hash + 4-byte little endian) 
-     5. scriptCode of the input (varInt for the length + script)
+     5. scriptCode of the input (serialized as scripts inside CTxOuts)
      6. value of the output spent by this input (8-byte little endian)
      7. nSequence of the input (4-byte little endian)
      8. hashOutputs (32-byte hash)
      9. nLocktime of the transaction (4-byte little endian)
     10. sighash type of the signature (4-byte little endian)
 
-All components in the original algorithm, including the behavior OP_CODESEPERATOR, remains unchanged. The only difference is the way of serialization and the inclusion of amount being spent.
+Semantics of the original sighash types remain unchanged, except the followings:
+# 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;
+# 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.
 
 The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. 
 
 The item 5:
 *For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac.
 *For P2WSH witness program,
-**if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is a varInt for the length of the witnessScript, followed by the witnessScript.
-**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, and prepended by a varInt for the length of the truncated script.
+**if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOuts.
+**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts.
 
 The item 6 is a 8-byte value of the amount of bitcoin spent in this input.
 
 hashPrevouts:
-*If the ANYONECANPAY flag is not set, hashPrevouts is the double SHA256 of the serialization of all input outpoints;
+*If the ANYONECANPAY flag is not set, hashPrevouts is the double SHA256 of the serialization of all input outpoints;
 *Otherwise, hashPrevouts is a uint256 of 0x0000......0000.
 
 hashSequence:
-*If none of the ANYONECANPAY, SINGLE, NONE sighash type is set, hashSequence is the double SHA256 of the serialization of nSequence of all inputs;
+*If none of the ANYONECANPAY, SINGLE, NONE sighash type is set, hashSequence is the double SHA256 of the serialization of nSequence of all inputs;
 *Otherwise, hashSequence is a uint256 of 0x0000......0000.
 
 hashOutputs:
-*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output value (8-byte little endian) with scriptPubKey (varInt for the length + script);
-*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output value with scriptPubKey of the same index as the input;
-*Otherwise, hashOutputs is a uint256 of 0x0000......0000.
+*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output value (8-byte little endian) with scriptPubKey (serialized as scripts inside CTxOuts);
+*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output value with scriptPubKey of the same index as the input;
+*Otherwise, hashOutputs is a uint256 of 0x0000......0000.In the original algorithm, a uint256 of 0x0000......0001 is commited if the input index for a SINGLE signature is greater than the number of outputs. In this BIP a 0x0000......0000 is commited, without changing the semantics.
 
 The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verification may be reused in other inputs of the same transaction, so that the time complexity of the whole hashing process reduces from O(n2) to O(n).
 
@@ -195,7 +199,7 @@ As a soft fork, older software will continue to operate without modification. No
 
 == Reference Implementation ==
 
-https://github.com/sipa/bitcoin/commits/segwit
+https://github.com/bitcoin/bitcoin/pull/7910
 
 == References ==
 

From a488367502f9b3187c0e993588894a8b24807e11 Mon Sep 17 00:00:00 2001
From: Bryan Bishop 
Date: Wed, 20 Apr 2016 12:45:48 -0500
Subject: [PATCH 0327/2326] BIP143: explicitly mention the SignatureHash
 function

The purpose of BIP143 is to propose an updated SignatureHash function
but "sighash" only appears near the end buried in the text. By
explicitly mentioning the SignatureHash function, readers can more
readily understand the context of the proposal.
---
 bip-0143.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 4c6503b3b2..1f921c0e59 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -14,7 +14,7 @@ This proposal defines a new transaction digest algorithm for signature verificat
 == Motivation ==
 There are 4 ECDSA signature verification codes in the original Bitcoin script system: CHECKSIG, CHECKSIGVERIFY, CHECKMULTISIG, CHECKMULTISIGVERIFY (“sigops”). According to the sighash type (ALL, NONE, SINGLE, ANYONECANPAY), a transaction digest is generated with a double SHA256 of a serialized subset of the transaction, and the signature is verified against this digest with a given public key. The detailed procedure is described in a Bitcoin Wiki article. [https://en.bitcoin.it/wiki/OP_CHECKSIG]
 
-Unfortunately, there are at least 2 weaknesses in the original transaction digest algorithm:
+Unfortunately, there are at least 2 weaknesses in the original SignatureHash transaction digest algorithm:
 
 * For the verification of each signature, the amount of data hashing is proportional to the size of the transaction. Therefore, data hashing grows in O(n2) as the number of sigops in a transaction increases. While a 1 MB block would normally take 2 seconds to verify with an average computer in 2015, a 1MB transaction with 5569 sigops may take 25 seconds to verify. This could be fixed by optimizing the digest algorithm by introducing some reusable “midstate”, so the time complexity becomes O(n). [https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-2292 CVE-2013-2292][https://bitcointalk.org/?topic=140078 New Bitcoin vulnerability: A transaction that takes at least 3 minutes to verify][http://rusty.ozlabs.org/?p=522 The Megatransaction: Why Does It Take 25 Seconds?]
 * The algorithm does not involve the amount of Bitcoin being spent by the input. This is usually not a problem for online network nodes as they could request for the specified transaction to acquire the output value. For an offline transaction signing device ("cold wallet"), however, the unknowing of input amount makes it impossible to calculate the exact amount being spent and the transaction fee. To cope with this problem a cold wallet must also acquire the full transaction being spent, which could be a big obstacle in the implementation of lightweight, air-gapped wallet. By including the input value of part of the transaction digest, a cold wallet may safely sign a transaction by learning the value from an untrusted source. In the case that a wrong value is provided and signed, the signature would be invalid and no funding might be lost. [https://bitcointalk.org/index.php?topic=181734.0 SIGHASH_WITHINPUTVALUE: Super-lightweight HW wallets and offline data]

From d72c1bfc71993b85e9d6f2aa3ac6e405a371bb39 Mon Sep 17 00:00:00 2001
From: Aaron Voisine 
Date: Fri, 22 Apr 2016 08:44:29 -0700
Subject: [PATCH 0328/2326] Update bip-0141.mediawiki

The byte representation of "<0 <32-byte-hash>>" is "0x220020{32-byte-hash}"

What was listed here would be the byte representation of "0 <32-byte-hash>". The text explains that there is only one item in scriptSig, so I'm guessing the byte representation is wrong. Also the corrected byte representation would produce the same sig/pubkey described in P2WSH after following the bip16 rules.
---
 bip-0141.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index f9881be4bc..afb5a2a618 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -166,7 +166,7 @@ The following example is the same 1-of-2 multi-signature P2WSH witness program,
 
     witness:      0  <1   2 CHECKMULTISIG>
     scriptSig:    <0 <32-byte-hash>>
-                  (0x0020{32-byte-hash})
+                  (0x220020{32-byte-hash})
     scriptPubKey: HASH160 <20-byte-hash> EQUAL
                   (0xA914{20-byte-hash}87)
 

From 43c34e846be227780a954905de7543654a1e840c Mon Sep 17 00:00:00 2001
From: jl2012 
Date: Sat, 23 Apr 2016 08:26:48 +0200
Subject: [PATCH 0329/2326] Add P2SH-P2WPKH example

---
 bip-0141.mediawiki | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index afb5a2a618..a760d7ddab 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -128,8 +128,8 @@ The following example is a version 0 pay-to-witness-public-key-hash (P2WPKH) wit
 
     witness:       
     scriptSig:    (empty)
-    scriptPubKey: 0 <20-byte-hash>
-                  (0x0014{20-byte-hash})
+    scriptPubKey: 0 <20-byte-key-hash>
+                  (0x0014{20-byte-key-hash})
 
 The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WPKH type. The witness must consist of exactly 2 items. The HASH160 of the pubkey in witness must match the witness program.
 
@@ -139,6 +139,24 @@ The signature is verified as
 
 Comparing with a traditional P2PKH output, the P2WPKH equivalent occupies 3 less bytes in the scriptPubKey, and moves the signature and public key from scriptSig to witness.
 
+=== P2WPKH nested in BIP16 P2SH ===
+
+The following example is the same P2WPKH witness program, but nested in a BIP16 P2SH output.
+
+    witness:       
+    scriptSig:    <0 <20-byte-key-hash>>
+                  (0x160014{20-byte-key-hash})
+    scriptPubKey: HASH160 <20-byte-script-hash> EQUAL
+                  (0xA914{20-byte-script-hash}87)
+
+The only item in scriptSig is hashed with HASH160, compared against the 20-byte-script-hash in scriptPubKey, and interpreted as:
+
+    0 <20-byte-key-hash>
+
+The P2WPKH witness program is then executed as described in the previous example.
+
+Comparing with the previous example, the scriptPubKey is 1 byte bigger and the scriptSig is 23 bytes bigger. Although a nested witness program is less efficient, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0.
+
 === P2WSH witness program ===
 
 The following example is an 1-of-2 multi-signature version 0 pay-to-witness-script-hash (P2WSH) witness program.
@@ -160,7 +178,7 @@ A P2WSH witness program allows arbitrarily large script as the 520-byte push lim
 
 The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of BIP16 P2SH. The increased size improves security against possible collision attacks, as 280 work is not infeasible anymore (By the end of 2015, 284 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent BIP16 P2SH output but is moved to witness.
 
-=== Witness program nested in BIP16 P2SH ===
+=== P2WSH nested in BIP16 P2SH ===
 
 The following example is the same 1-of-2 multi-signature P2WSH witness program, but nested in a BIP16 P2SH output.
 
@@ -176,7 +194,7 @@ The only item in scriptSig is hashed with HASH160, compared against the 20-byte-
 
 The P2WSH witness program is then executed as described in the previous example.
 
-Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0.
+Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig.
 
 === Extensible commitment structure ===
 

From f245646f8b53ee9a82f8053c0ea06048e4fd0278 Mon Sep 17 00:00:00 2001
From: jl2012 
Date: Sat, 23 Apr 2016 16:25:53 +0200
Subject: [PATCH 0330/2326] BIP141: Block cost clrification

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

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index a760d7ddab..09676f8f90 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -108,9 +108,13 @@ If the version byte is 1 to 16, no further interpretation of the witness program
 
 Blocks are currently limited to 1,000,000 bytes (1MB) total size. We change this restriction as follows:
 
-''Block cost'' is defined. The cost of each byte in the existing header and transactions is 4, while the cost of each byte in witness data is 1.
+''Block cost'' is defined as ''Base size'' * 3 + ''Total size''.
 
-The new rule is total ''block cost'' ≤ 4,000,000.
+''Base size'' is the block size in bytes with the original transaction serialization without any witness-related data, as seen by a non-upgraded node.
+
+''Total size'' is the block size in bytes with transactions serialized as described in [[bip-0144.mediawiki|BIP144]], including base data and witness data.
+
+The new rule is ''block cost'' ≤ 4,000,000.
 
 ==== Sigops ====
 

From 7e99bbf958911888999e100d3d6f8738acb61928 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 23 Apr 2016 20:12:41 +0000
Subject: [PATCH 0331/2326] bip-0009: Recommend name "bipN"

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

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index b506aada72..1da083d051 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -24,7 +24,7 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule
 
 Each soft fork deployment is specified by the following per-chain parameters (further elaborated below):
 
-# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier.
+# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number.
 # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}.
 # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning.
 # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block.

From 4683a9b71424bac4d43af2236f36fdc2b0c9f470 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 23 Apr 2016 20:20:13 +0000
Subject: [PATCH 0332/2326] BIP 9 (& 145): Switch to
 rules/vbavailable/vbrequired GBT interface

---
 bip-0009.mediawiki | 8 ++++----
 bip-0145.mediawiki | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 1da083d051..459486fcdd 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -180,15 +180,15 @@ The template Object is also extended:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| rules || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
+| rules || {{Yes}} || Array of Strings || list of softfork deployments, by name, that are active state
 |-
-| rulesrequired || {{No}} || Array of Strings || list of softfork deployments the server requires support for
+| vbavailable || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
 |-
-| rulesenforced || {{Yes}} || Array of Strings || list of softfork deployments that are active state
+| vbrequired || {{No}} || Number || bit mask of softfork deployment version bits the server requires enabled in submissions
 |}
 
 The "version" key of the template is retained, and used to indicate the server's preference of deployments.
-Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "rules" and (when clearing is desired) NOT listed in "rulesrequired".
+Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired".
 
 ==Support for future changes==
 
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index f7a1e61bab..bdaabc9180 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -41,11 +41,11 @@ The Objects listed in the response's "transactions" key is revised to include th
 | hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal
 |}
 
-Transactions with witness data may only be included if the template's "rulesenforced" list (see [[bip-0009.mediawiki#getblocktemplate_changes|BIP 9]]) includes "segwit".
+Transactions with witness data may only be included if the template's "rules" list (see [[bip-0009.mediawiki#getblocktemplate_changes|BIP 9]]) includes "segwit".
 
 ===Sigops===
 
-For blocks with segwit enforcement, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]].
+For templates with "segwit" enabled as a rule, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]].
 
 ===Block Assembly with Witness Transactions===
 

From 31c45b611d805a349bc27552e85ba876a5af34ba Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 23 Apr 2016 20:32:59 +0000
Subject: [PATCH 0333/2326] BIP 9, 22 & 145: Use simple Yes/No rather than
 templates (which don't work on GitHub)

---
 bip-0009.mediawiki |  8 ++++----
 bip-0022.mediawiki | 28 ++++++++++++++--------------
 bip-0145.mediawiki |  2 +-
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 459486fcdd..56d3d5c330 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -170,7 +170,7 @@ The template request Object is extended to include a new item:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| rules || {{No}} || Array of Strings || list of supported softfork deployments, by name
+| rules || No || Array of Strings || list of supported softfork deployments, by name
 |}
 
 The template Object is also extended:
@@ -180,11 +180,11 @@ The template Object is also extended:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| rules || {{Yes}} || Array of Strings || list of softfork deployments, by name, that are active state
+| rules || Yes || Array of Strings || list of softfork deployments, by name, that are active state
 |-
-| vbavailable || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
+| vbavailable || Yes || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
 |-
-| vbrequired || {{No}} || Number || bit mask of softfork deployment version bits the server requires enabled in submissions
+| vbrequired || No || Number || bit mask of softfork deployment version bits the server requires enabled in submissions
 |}
 
 The "version" key of the template is retained, and used to indicate the server's preference of deployments.
diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki
index 35b59be7d0..4b33e59529 100644
--- a/bip-0022.mediawiki
+++ b/bip-0022.mediawiki
@@ -26,9 +26,9 @@ Block template creation can be influenced by various parameters:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| capabilities || {{No}} || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#Optional: Long Polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#Block Proposal|"proposal"]], [[bip-0023.mediawiki#Logical Services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#Mutations|mutations]]
+| capabilities || No || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#Optional: Long Polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#Block Proposal|"proposal"]], [[bip-0023.mediawiki#Logical Services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#Mutations|mutations]]
 |-
-| mode || {{No}} || String || MUST be "template" or omitted
+| mode || No || String || MUST be "template" or omitted
 |}
 
 getblocktemplate MUST return a JSON Object containing the following keys:
@@ -37,29 +37,29 @@ getblocktemplate MUST return a JSON Object containing the following keys:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| bits || {{Yes}} || String || the compressed difficulty in hexadecimal
+| bits || Yes || String || the compressed difficulty in hexadecimal
 |-
-| curtime || {{Yes}} || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
+| curtime || Yes || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
 |-
-| height || {{Yes}} || Number || the height of the block we are looking for
+| height || Yes || Number || the height of the block we are looking for
 |-
-| previousblockhash || {{Yes}} || String || the hash of the previous block, in big-endian hexadecimal
+| previousblockhash || Yes || String || the hash of the previous block, in big-endian hexadecimal
 |-
-| sigoplimit || {{No}} || Number || number of sigops allowed in blocks
+| sigoplimit || No || Number || number of sigops allowed in blocks
 |-
-| sizelimit || {{No}} || Number || number of bytes allowed in blocks
+| sizelimit || No || Number || number of bytes allowed in blocks
 |-
-| transactions || {{Yes|Should}} || Array of Objects || Objects containing [[#Transactions Object Format|information for Bitcoin transactions]] (excluding coinbase)
+| transactions || Should || Array of Objects || Objects containing [[#Transactions Object Format|information for Bitcoin transactions]] (excluding coinbase)
 |-
-| version || {{Yes}} || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
+| version || Yes || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
 |-
-| coinbaseaux || {{No}} || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
+| coinbaseaux || No || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
 |-
-| coinbasetxn || {{Patch|this or ↓}} || Object || [[#Transactions Object Format|information for coinbase transaction]]
+| coinbasetxn || this or ↓ || Object || [[#Transactions Object Format|information for coinbase transaction]]
 |-
-| coinbasevalue || {{Patch|this or ↑}} || Number || total funds available for the coinbase (in Satoshis)
+| coinbasevalue || this or ↑ || Number || total funds available for the coinbase (in Satoshis)
 |-
-| workid || {{No}} || String || if provided, this value must be returned with results (see [[#Block Submission|Block Submission]])
+| workid || No || String || if provided, this value must be returned with results (see [[#Block Submission|Block Submission]])
 |}
 
 ==== Transactions Object Format ====
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index bdaabc9180..6d3718b3cb 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -22,7 +22,7 @@ The template Object is revised to include a new key:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| costlimit || {{No}} || Number || total cost allowed in blocks
+| costlimit || No || Number || total cost allowed in blocks
 |}
 
 ====Transactions Object Format====

From 3cfa48d1e073090deee8864070274c54c000250a Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 23 Apr 2016 21:13:02 +0000
Subject: [PATCH 0334/2326] BIP 9: Clarify GBT "version"

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

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 56d3d5c330..66e6806dd0 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -188,6 +188,7 @@ The template Object is also extended:
 |}
 
 The "version" key of the template is retained, and used to indicate the server's preference of deployments.
+If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF].
 Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired".
 
 ==Support for future changes==

From cc4a94c1c04284fc8eca3f83b8d139711fa2a345 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Mon, 25 Apr 2016 00:18:39 +0000
Subject: [PATCH 0335/2326] BIP 9 & 145: rules/force mutation

---
 bip-0009.mediawiki | 13 +++++++++++++
 bip-0145.mediawiki |  3 +++
 2 files changed, 16 insertions(+)

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 66e6806dd0..95dd7408ce 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -191,6 +191,19 @@ The "version" key of the template is retained, and used to indicate the server's
 If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF].
 Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired".
 
+The mutable key defined by BIP 23 is expanded to optionally include one new mutation:
+
+{| class="wikitable"
+!colspan=4| mutations
+|-
+! Value !! Significance
+|-
+| rules/force || the miner may ignore rules it does not understand, if the template is to be used as-is (not modified by the client)
+|}
+
+Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks.
+This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation.
+
 ==Support for future changes==
 
 The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account.
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index 6d3718b3cb..0448b6ca46 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -25,6 +25,9 @@ The template Object is revised to include a new key:
 | costlimit || No || Number || total cost allowed in blocks
 |}
 
+The "rules/force" mutation MUST NOT be enabled for blocks including transactions with witness data unless the client has indicated in the template request that it also supports the "segwit" rule.
+In particular, note that even if the template's "rules" list includes "segwit", but none of the transactions have witness data, the server MAY use the "rules/force" mutation to support old miners.
+
 ====Transactions Object Format====
 
 The Objects listed in the response's "transactions" key is revised to include these keys:

From ab4f511c5cbb714f87fc9404a6b166da903c08c9 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 26 Apr 2016 18:13:40 +0800
Subject: [PATCH 0336/2326] BIP141 clarifications and formatting

Add rationale of block cost
Change the name of "witness nonce" to "witness reserved value"
Update link to reference implementation
Formatting
---
 bip-0141.mediawiki | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 09676f8f90..08e354e54b 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -60,30 +60,30 @@ A non-witness program (defined hereinafter) txin MUST be associated with an empt
 
 A new block rule is added which requires a commitment to the wtxid. The wtxid of coinbase transaction is assumed to be 0x0000....0000.
 
-A witness root hash is calculated with all those wtxid as leaves, in a way similar to the hashMerkleRoot in the block header.
+A witness root hash is calculated with all those wtxid as leaves, in a way similar to the hashMerkleRoot in the block header.
 
-The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is:
+The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is:
   
    1-byte - OP_RETURN (0x6a)
    1-byte - Push the following 36 bytes (0x24)
    4-byte - Commitment header (0xaa21a9ed)
-  32-byte - Commitment hash: Double-SHA256(witness root hash|witness nonce)
+  32-byte - Commitment hash: Double-SHA256(witness root hash|witness reserved value)
   
   39th byte onwards: Optional data with no consensus meaning
   
-and the coinbase's input's witness must consist of a single 32-byte array for the witness nonce.
+and the coinbase's input's witness must consist of a single 32-byte array for the witness reserved value.
 
-If there are more than one scriptPubKey matching the pattern, the one with highest output index is assumed to be the commitment.
+If there are more than one scriptPubKey matching the pattern, the one with highest output index is assumed to be the commitment.
 
 If all transactions in a block do not have witness data, the commitment is optional.
 
 === 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 32 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 (for 0 to 16) followed by a data push between 2 and 32 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.
-# 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.
+# 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.
+# 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.
 
 If the version byte is 0, and the witness program is 20 bytes:
 * It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
@@ -93,9 +93,9 @@ If the version byte is 0, and the witness program is 20 bytes:
 
 If the version byte is 0, and the witness program is 32 bytes:
 * 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.
-* The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack (≤ 520 bytes for each stack item).
+* 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.
+* The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack (≤ 520 bytes for each stack item).
 * The script must not fail, and result in exactly a single TRUE on the stack.
 
 If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.
@@ -108,7 +108,7 @@ If the version byte is 1 to 16, no further interpretation of the witness program
 
 Blocks are currently limited to 1,000,000 bytes (1MB) total size. We change this restriction as follows:
 
-''Block cost'' is defined as ''Base size'' * 3 + ''Total size''.
+''Block cost'' is defined as ''Base size'' * 3 + ''Total size''. (rationaleRationale of using a single composite constraint, instead of two separate limits such as 1MB base data and 3MB witness data: Using two separate limits would make mining and fee estimation nearly impossible. Miners would need to solve a complex non-linear optimization problem to find the set of transactions that maximize fees given both constraints, and wallets would not be able to know what to pay as it depends on which of the two conditions is most constrained by the time miners try to produce blocks with their transactions in. Another problem with such an approach is freeloading. Once a set of transactions hit the base data 1MB constraint, up to 3MB extra data could be added to the witness by just minimally increasing the fee. The marginal cost for extra witness space effectively becomes zero in that case.)
 
 ''Base size'' is the block size in bytes with the original transaction serialization without any witness-related data, as seen by a non-upgraded node.
 
@@ -202,14 +202,13 @@ Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with
 
 === Extensible commitment structure ===
 
-The new commitment in coinbase transaction is a hash of the witness root hash and a witness nonce. The nonce currently has no consensus meaning, but in the future allows new commitment values for future softforks. For example, if a new consensus-critical commitment is required in the future, the commitment in
-coinbase becomes:
+The new commitment in coinbase transaction is a hash of the witness root hash and a witness reserved value. The witness reserved value currently has no consensus meaning, but in the future allows new commitment values for future softforks. For example, if a new consensus-critical commitment is required in the future, the commitment in coinbase becomes:
 
-  Double-SHA256(Witness root hash|Hash(new commitment|witness nonce))
+  Double-SHA256(Witness root hash|Hash(new commitment|witness reserved value))
 
-For backward compatibility, the Hash(new commitment|witness nonce) will go to the coinbase witness, and the witness nonce will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way.
+For backward compatibility, the Hash(new commitment|witness reserved value) will go to the coinbase witness, and the witness reserved value will be recorded in another location specified by the future softfork. Any number of new commitment could be added in this way.
 
-Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, MUST NOT use the witness nonce to preserve the ability to do upgrades of the Bitcoin consensus protocol.
+Any commitments that are not consensus-critical to Bitcoin, such as merge-mining, MUST NOT use the witness reserved value to preserve the ability to do upgrades of the Bitcoin consensus protocol.
 
 The optional data space following the commitment also leaves room for metadata of future softforks, and MUST NOT be used for other purpose.
 
@@ -283,9 +282,13 @@ For Bitcoin testnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestam
 
 Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 
+== Footnotes ==
+
+
+
 == Reference Implementation ==
 
-https://github.com/sipa/bitcoin/commits/segwit
+https://github.com/bitcoin/bitcoin/pull/7910
 
 == References ==
 

From 8bb63058fd80b6b89b2e09de402ad5ba635e9eeb Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Tue, 26 Apr 2016 15:23:12 -0700
Subject: [PATCH 0337/2326] - Reset bip-0070/extensions.mediawiki to the
 original BIP70 contents - Remove status_code and status_message from
 individual Payment Protocol messages - Remove EncryptedInvoiceRequest,
 EncryptedPaymentRequest, EncryptedPayment and EncryptedPaymentACK messages
 from protobuf definition file - Add ProtocolMessageType enum and
 ProtocolMessageType and EncryptedProtocolMesssage messages to
 bip-0075/paymentrequest.proto definition file - Update BIP75 text to remove
 old individual message encryption paths and include new encapsulating
 messages for self-contained PaymentProtocol communication (including errors)
 over various transport layers - Add initial list of status codes - Update
 BIP75 to use AES-256-GCM and remove message hash as GCM mode provides
 authenticated encryption - Update ECDH calculation to use SHA256 hash of
 ECDH's X point instead of the raw X point itself

---
 bip-0070/extensions.mediawiki |   4 +-
 bip-0075.mediawiki            | 345 ++++++++++------------------------
 bip-0075/paymentrequest.proto |  70 +++----
 3 files changed, 128 insertions(+), 291 deletions(-)

diff --git a/bip-0070/extensions.mediawiki b/bip-0070/extensions.mediawiki
index 947622dd7e..b572b1d498 100644
--- a/bip-0070/extensions.mediawiki
+++ b/bip-0070/extensions.mediawiki
@@ -5,7 +5,5 @@ Add your extension below using tags starting at 1000 and submit a pull-req.
 {|
 | Field Number || Extension Name || Field Name || Description
 |-
-| 1000 || [[https://github.com/bitcoin/bips/bip-0075.mediawiki|(BIP75)]] || status_code || Status Code for Payment Protocol error communication
-|-
-| 1001 || [[https://github.com/bitcoin/bips/bip-0075.mediawiki|(BIP75)]] || status_message || Human-readable message for Payment Protocol error communication
+| 1000 || [[https://example.com|(unassigned)]] || (unassigned) || (unassigned)
 |}
\ No newline at end of file
diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki
index 6bac44a956..3b0ba1f9ca 100644
--- a/bip-0075.mediawiki
+++ b/bip-0075.mediawiki
@@ -14,9 +14,9 @@
 
 This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol.
 
-# It allows the requester (Sender) of a Payment Request to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. 
+# It allows the requester (Sender) of a PaymentRequest to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with. 
 
-# It encrypts the Payment Request that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details.
+# It encrypts the PaymentRequest that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details.
 
 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and 
 "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
@@ -69,12 +69,12 @@ A Bitcoin wallet developer would like to use a public Store & Forward service fo
 With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address or payment information, only delete encrypted messages.
 
 ==New Messages==
-Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well asthe messages newly defined in this BIP.
+Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as the messages newly defined in this BIP.
 
 Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained.
 
 ===InvoiceRequest===
-The InvoiceRequest message allows a Sender to send information to the Receiver such that they can create and return a PaymentRequest.
+The InvoiceRequest message allows a Sender to send information to the Receiver such that the Receiver can create and return a PaymentRequest.
 
 
 message InvoiceRequest {
@@ -106,190 +106,97 @@ message InvoiceRequest {
 | signature             || PKI-dependent signature
 |}
 
-
-===EncryptedInvoiceRequest===
-The EncryptedInvoiceRequest message allows a Sender to send an encrypted InvoiceRequest to the Receiver such that the details of the InvoiceRequest are kept secret.
+===ProtocolMessageType Enum===
+The ProtocolMessageType enum is defined in an extensible way to allow for new message type additions to the Payment Protocol. This enum is used in the newly defined ProtocolMessage and EncryptedProtocolMessage messages to define the serialized message type.
 
-message EncryptedInvoiceRequest {
-    required bytes  encrypted_invoice_request = 1;
-    required bytes  invoice_request_hash = 2;
-    required bytes  sender_public_key = 3;
-    required bytes  receiver_public_key = 4;
-    required uint64 nonce = 5;
-    optional bytes  signature = 6;
-    optional bytes  identifier = 7;
-    
+enum ProtocolMessageType {
+    INVOICE_REQUEST = 0;
+    PAYMENT_REQUEST = 1;
+    PAYMENT = 2;
+    PAYMENT_ACK =  3;
 }
 
-{| class="wikitable" -! Field Name !! Description -|- -| encrypted_invoice_request || AES-256-CBC encrypted, serialized InvoiceRequest -|- -| invoice_request_hash || SHA256 Hash of non-encrypted, serialized InvoiceRequest. MUST be used for verification to prevent oracle attacks. -|- -| sender_public_key || Sender's EC public key -|- -| receiver_public_key || Receiver's EC public key -|- -| nonce || The nonce in use for the CBC encryption -|- -| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. -|- -| identifier || A unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default. -|} - -===EncryptedPaymentRequest=== - -The EncryptedPaymentRequest message is an encapsulating message that allows the transmission of an encrypted, serialized PaymentRequest. - +===ProtocolMessage=== +The ProtocolMessage message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, non-encrypted communication of Payment Protocol messages. The message also includes a status code and a status message that is used for error communication so the protocol does not rely on transport-layer error handling.
-message EncryptedPaymentRequest {
-        required bytes  encrypted_payment_request = 1;
-        required bytes  payment_request_hash = 2;
-        required bytes  receiver_public_key = 3;
-        required bytes  sender_public_key = 4;
-        required uint64 nonce = 5;
-        optional bool   requires_payment_message = 6;
-        optional bytes  signature = 7;
-        optional bytes  identifier = 8;
+message ProtocolMessage {
+    required ProtocolMessageType message_type = 1;
+    required bytes serialized_message = 2;
+    optional uint64 status_code = 3;
+    optional string status_message = 4;
+    optional bytes identifier = 5;
 }
 
-{| class="wikitable" -! Field Name !! Description -|- -| encrypted_payment_request || AES-256-CBC encrypted, serialized BIP70 PaymentRequest -|- -| payment_request_hash || SHA256 Hash of non-encrypted, serialized PaymentRequest. MUST be used for verification to prevent oracle attacks. -|- -| receiver_public_key || Receiver's EC public key -|- -| sender_public_key || Sender's EC public key -|- -| nonce || The nonce in use for the CBC encryption -|- -| requires_payment_message || Internal PaymentRequest requires follow-up Payment message -|- -| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. -|- -| identifier || MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value. -|} -===EncryptedPayment=== - -The EncryptedPayment message allows a BIP70 Payment message to be transmitted through a third party without revealing the details of the transaction. This message allows Store & Forward servers or other third parties to match and authenticate PaymentRequest and Payment messages without revealing the details of the transaction, thereby protecting privacy. - -
-message EncryptedPayment {
-        required bytes  encrypted_payment = 1;
-        required bytes  payment_hash = 2;
-        required bytes  sender_public_key = 3;
-        required bytes  receiver_public_key = 4;
-        required uint64 nonce = 5;
-        optional bytes  signature = 6;
-        optional bytes  identifier = 7;
-}
-
{| class="wikitable" ! Field Name !! Description |- -| encrypted_payment || AES-256-CBC encrypted, serialized BIP70 Payment message -|- -| payment_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. +|message_type || Message Type of serialized_message (using enum ProtocolMessageType) |- -| sender_public_key || Sender's EC public key +|serialized_message || Serialized Payment Protocol Message |- -| receiver_public_key || Receiver's EC public key +|status_code || Payment Protocol Status Code |- -| nonce || The nonce in use for the CBC encryption +|status_message || Human-readable Payment Protocol status message |- -| signature || A signature of this message using Sender's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. -|- -| identifier || Use the identifier specified with the EncryptedPaymentRequest, if any. +|identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default |} -===EncryptedPaymentACK=== - -An encrypted version of the BIP70 PaymentAck. - +===EncryptedProtocolMessage=== +The EncryptedProtocolMessage message is an encapsualting wrapper for any Payment Protocol message. It allows two-way, authenticated and encrypted communication of Payment Protocol messages in order to keep their contents secret. The message also includes a status code and status message that is used for error communication so the protocol does not rely on transport-layer error handling.
-message EncryptedPaymentACK {
-        required bytes  encrypted_payment_ack = 1;
-        required bytes  payment_ack_hash = 2;
-        required bytes  receiver_public_key = 3;
-        required bytes  sender_public_key = 4;
-        required uint64 nonce = 5;
-        required bytes  signature = 6;
-        optional bytes  identifier = 7;
+message EncryptedProtocolMessage {
+    required ProtocolMessageType message_type = 1;
+    required bytes encrypted_message = 2;
+    required bytes receiver_public_key = 3;
+    required bytes sender_public_key = 4;
+    required uint64 nonce = 5;
+    optional bytes signature = 6;
+    optional bytes identifier = 7;
+    optional uint64 status_code = 8;
+    optional string status_message = 9;
 }
 
{| class="wikitable" -! Field Name !! Description +! Field Name !! Description +| message_type || Message Type of Decrypted encrypted_message |- -| encrypted_payment_ack || AES-256-CBC encrypted, serialized BIP70 PaymentACK message +| encrypted_message || AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message |- -| payment_ack_hash || SHA256 Hash of original non-encrypted, serialized Payment message. MUST be used for verification to prevent oracle attacks. +| receiver_public_key || Receiver's DER-encoded EC Public Key |- -| receiver_public_key || Receiver's EC public key +| sender_public_key || Sender's DER-encoded EC Public Key |- -| sender_public_key || Sender's EC public key +| nonce || Microseconds since epoch |- -| nonce || The nonce in use for the CBC encryption +| signature || DER-encoded Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively |- -| signature || A signature of this message using Receiver's EC key, serialized with a value of "" for signature. REQUIRED if server requires authentication. +| identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default |- -| identifier || Use the identifier specified with the EncryptedPayment, if any. +| status_code || Payment Protocol Status Code +|- +| status_message || Human-readable Payment Protocol status message |} -==Updated Messages== -The BIP70 PaymentRequest, Payment and PaymentACK messages have been updated by this BIP to contain Payment Protocol error communication. The following two extension fields have been added to each of the aforementioned messages: +==Payment Protocol Process with InvoiceRequests== +The full process overview for using InvoiceRequests in the Payment Protocol is defined below. All Payment Protocol messages are to be encapsulated in either a ProtocolMessage or EncryptedProcotolMessage. Once the process begins using EncryptedProtocolMessage messages, all subsequent communications MUST use EncryptedProtocolMessages. All Payment Protocol messages SHOULD be communicated using EncryptedProtocolMessage encapsulating messages with the exception that an InvoiceRequest MAY be communicated using the ProtocolMessage if the receiver's public key is unknown. -
-{
-...
-    optional uint32 status_code = 1000;     // Payment Protocol status code
-    optional string status_message = 1001;  // Human-readable status message
-}
-
+See [[Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]] for the process of communicating using encrypted Payment Protocol messages. -status_code and/or status_message MUST be set to communicate a Payment Protocol error to the message receiver. The message consumer MUST handle status_code and status_message if either field is present. +TODO: See about adding some info about using ProtocolMessages -==InvoiceRequest / PaymentRequest Process== -The process overview for using InvoiceRequests and receiving encrypted PaymentRequests is defined below in two sections. Optionally, the Sender MAY choose to encrypt the InvoiceRequest message and therefore MUST follow the '''Encrypted InvoiceRequest Overview''' process below. - -===Non-Encrypted InvoiceRequest Overview=== # Sender creates InvoiceRequest -# Sender transmits InvoiceRequest to Receiver -# Receiver validates InvoiceRequest +# Sender encapsulates InvoiceRequest in (Encrypted)ProtocolMessage +# Sender sends (Encrypted)ProtocolMessage to Receiver +# Receiver retrieves InvoiceRequest from (Encrypted)ProtocolMessage # Receiver creates PaymentRequest -# Receiver encrypts the PaymentRequest -# Receiver creates EncryptedPaymentRequest (containing an encrypted PaymentRequest) -# Receiver transmits EncryptedPaymentRequest to Sender -# Sender validates EncryptedPaymentRequest -# Sender decrypts and validates encrypted PaymentRequest -# The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages - +# Receiver encapsulates PaymentRequest in EncryptedProtocolMessage +# Receiver transmits EncryptedProtocolMessage to Sender +# Sender validates PaymentRequest +# The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. -Flow diagram of Non-Encrypted InvoiceRequest - -===Encrypted InvoiceRequest Overview=== -# Sender retrieves Receiver InvoiceRequest Public Key -# Sender creates InvoiceRequest -# Sender encrypts the InvoiceRequest -# Sender creates EncryptedInvoiceRequest (containing an encrypted InvoiceRequest) -# Sender transmits EncryptedInvoiceRequest to Receiver -# Receiver decrypts and validates EncryptedInvoiceRequest -# Receiver validates InvoiceRequest -# Receiver creates PaymentRequest -# Receiver encrypts the PaymentRequest -# Receiver creates EncryptedPaymentRequest (containing an encrypted PaymentRequest) -# Receiver transmits EncryptedPaymentRequest to Sender -# Sender validates EncryptedPaymentRequest -# Sender decrypts and validates encrypted PaymentRequest -# The PaymentRequest is processed according to BIP70, including optional EncryptedPayment and EncryptedPaymentACK messages - -'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] below for possible options to retrieve Receiver InvoiceRequest public keys. +'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] below for possible options to retrieve Receiver's public key. Flow diagram of Encrypted InvoiceRequest @@ -300,48 +207,44 @@ When communicated via HTTP, these messages MUST be transmitted via TLS-protected {| class="wikitable" ! Message Type !! Content Type |- -| InvoiceRequest || application/bitcoin-invoicerequest -|- -| EncryptedInvoiceRequest || application/bitcoin-encrypted-invoicerequest -|- -| EncryptedPaymentRequest || application/bitcoin-encrypted-paymentrequest +| ProtocolMessage || application/bitcoin-paymentprotocol-message |- -| EncryptedPayment || application/bitcoin-encrypted-payment -|- -| EncryptedPaymentACK || application/bitcoin-encrypted-paymentack +| EncryptedProtocolMessage || application/bitcoin-encrypted-paymentprotocol-message |} -===Payment Protocol Errors=== +===Payment Protocol Status Communication=== -Payment Protocol errors MUST be communicated to the party that initiated the communication via the status_code and status_message extension fields present in the PaymentRequest, Payment and PaymentACK messages. For example, if the provided hash of each message does not match the contents of the message once decrypted, a general error MUST be returned to prevent oracle attacks. +In the case of an error that causes the Payment Protocol process to be stopped or retried for a transaction, a ProtocolMessage or EncryptedProtocolMessage MUST be sent by the party generating the error. The content of the message must contain the same serialized_message or encrypted_message and identifier (if used) and MUST have the status_code set appropriately. The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an EncryptedProtocolMessage, the provided hash of the serialized message does not match the contents of the message once decrypted, a general error (100) MUST be returned to prevent oracle attacks. ====Payment Protocol Status Codes==== {| class="wikitable" ! Status Code !! Description +|- +| 1 || OK |- -| 1 || General / Unknown Error +| 100 || General / Unknown Error |- -| 2 || Authentication Failed +| 102 || Authentication Failed |- -| 3 || Encrypted Message Required +| 102 || Encrypted Message Required |- -| 100 || Amount Too High +| 200 || Amount Too High |- -| 101 || Amount Too Low +| 201 || Amount Too Low |- -| 102 || Amount Invalid +| 202 || Amount Invalid |- -| 103 || Payment Does Not Meet PaymentRequest Requirements +| 203 || Payment Does Not Meet PaymentRequest Requirements |- -| 200 || Certificate Required +| 300 || Certificate Required |- -| 201 || Certificate Expired +| 301 || Certificate Expired |- -| 202 || Certificate Invalid for Transaction +| 302 || Certificate Invalid for Transaction |- -| 203 || Certificate Revoked +| 303 || Certificate Revoked |- -| 204 || Certificate Not Well Rooted +| 304 || Certificate Not Well Rooted |- |} @@ -349,7 +252,8 @@ Payment Protocol errors MUST be communicated to the party that initiated the com Communications errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). -==Process Step Details== +==New Process Details== +This BIP extends the Payment Protocol as defined in BIP70. For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. @@ -358,7 +262,6 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen ===InvoiceRequest Message Creation=== * Create an InvoiceRequest message * sender_public_key MUST be set to the public key of an EC keypair -* nonce MUST be set according to the requirement above. * Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD return a PaymentRequest with the status_code and status_message fields set appropriately. * Memo is optional. This MAY be set to a human readable description of the InvoiceRequest * Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to @@ -369,97 +272,57 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen ** Sign InvoiceRequest with signature = "" using the X509 Certificate's private key ** Set signature value to the computed signature -===EncryptedInvoiceRequest Message Creation=== -* Create an EncryptedInvoiceRequest -* Retrieve endpoint public key to use in '''ECDH Point Generation''' as specified in [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] (see below) -* sender_public_key MUST be set to the public key of the Sender's EC keypair -* receiver_public_key MUST be set to the public key of the Receiver's EC keypair -* invoice_request_hash MUST be set to the SHA256 hash of the serialized InvoiceRequest (without encryption) -* Encrypt the serialized InvoiceRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) -* encrypted_invoice_Request MUST be set to the encrypted values of the InvoiceRequest -* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation -* Set identifier to invoice_request_hash - ===InvoiceRequest Validation=== -* Validate sender_public_key is a valid EC public key -* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. +* Validate sender_public_key is a valid EC public key * Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). * If pki_type is None, InvoiceRequest is VALID * If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID -===EncryptedPaymentRequest Message Creation and PaymentRequest Encryption=== -* Encrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) -* Create EncryptedPaymentRequest message -* Set encrypted_payment_request to be the encrypted value of the PaymentRequest -* Set payment_request_hash to generated SHA256 hash of the serialized PaymentRequest (without encryption) +===Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages=== +* Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] (see below) +* Create EncryptedProtocolMessage message +* Set encrypted_message to be the encrypted value of the Payment Protocol message * sender_public_key MUST be set to the public key of the Sender's EC keypair * receiver_public_key MUST be set to the public key of the Receiver's EC keypair * nonce MUST be set to the nonce used in the AES-256-CBC encryption operation -* requires_payment_message MAY be set to true if the PaymentRequest requires a Payment message -* Set identifier to the value received in EncryptedInvoiceRequest +* requires_payment_message MAY be set to true if the PaymentRequest requires a Payment message '''TODO: How are we doing this now?''' +* Set identifier to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message * Set signature to "" -* Sign the serialized EncryptedPayment message with the Receiver's EC public key +* Sign the serialized EncryptedProtocolMessage message with the communicating party's EC public key * Set signature to the result of the signature operation above -===EncryptedPaymentRequest Validation and Decryption=== -* Decrypt the serialized PaymentRequest using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_CBC_Mode_Setup|ECDH Point Generation and AES-256 (CBC Mode) Setup]] (see below) -* Validate payment_request_hash matches SHA256 of the decrypted, serialized PaymentRequest -* Deserialize the serialized PaymentRequest +'''SIGNATURE NOTE:''' EncryptedProtocolMessage messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. + +===Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages=== +* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. +* Decrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] (see below) +* Deserialize the serialized Payment Protocol message -===ECDH Point Generation and AES-256 (CBC Mode) Setup=== +===ECDH Point Generation and AES-256 (GCM Mode) Setup=== +'''NOTE''': AES-256-GCM is used because it provides authenticated encryption facilities, thus negating the need for a separate message hash for authentication. * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] -** Use '''secret point's''' X value for Entropy +** Use '''SHA256(secret point's X value)''' for Entropy ** Use the given message's nonce field for Nonce -* Initialize AES-256 in CBC Mode +* Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) ===Initial Public Key Retrieval for InvoiceRequest Encryption=== -Initial public key retrieval for InvoiceRequest encryption can be done in a number of ways including, but not limited to, the following: +Initial public key retrieval for InvoiceRequest encryption in EncryptedProtocolMessage can be done in a number of ways including, but not limited to, the following: * Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] * Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] * QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] - -==EncryptedPayment and EncryptedPaymentACK Details== - -===EncryptedPayment Message Creation=== -* Encrypt the serialized Payment using AES-256-CBC using secret key calculated in the [[#EncryptedPaymentRequest_Message_Creation_and_PaymentRequest_Encryption|EncryptedPaymentRequest Message Creation and PaymentRequest Encryption]] step (see above) -* Create EncryptedPayment message -* Set encrypted_payment to be the encrypted value of the Payment -* Set payment_hash to generated SHA256 hash of the serialized Payment (without encryption) -* sender_public_key MUST be set to the public key of the Sender's EC keypair -* receiver_public_key MUST be set to the public key of the Receiver's EC keypair -* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation -* Set identifier to the value received in EncryptedPaymentRequest -* Set signature to "" -* Sign the serialized EncryptedPayment message with the Sender's EC public key -* Set signature to the result of the signature operation above - -===EncryptedPaymentACK Message Creation=== -* Encrypt the serialized PaymentACK using AES-256-CBC using secret key calculated in the [[#EncryptedPaymentRequest_Message_Creation_and_PaymentRequest_Encryption|EncryptedPaymentRequest Message Creation and PaymentRequest Encryption]] step (see above) -* Create EncryptedPaymentACK message -* Set encrypted_payment_ack to be the encrypted value of the PaymentACK -* Set payment_ack_hash to generated SHA256 hash of the serialized PaymentACK (without encryption) -* sender_public_key MUST be set to the public key of the Sender's EC keypair -* receiver_public_key MUST be set to the public key of the Receiver's EC keypair -* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation -* Set identifier to the value received in EncryptedPaymentRequest -* Set signature to "" -* Sign the serialized EncryptedPaymentACK message with the Receiver's EC public key -* Set signature to the result of the signature operation above - - -'''SIGNATURE NOTE:''' EncryptedPaymentRequest, EncryptedPayment, and EncryptedPaymentACK messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. +* Address Service Public Key Exposure ==Payment / PaymentACK Messages with a Store & Forward Server== -When a Store & Forward server is in use during the Payment Protocol exchange, an EncryptedPayment message generated as the result of a EncryptedPaymentRequest with the requires_payment_message flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. +When a Store & Forward server is in use during the Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest with the '''requires_payment_message''' (TODO: Should add something more generic to the encapsulating messages?) flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. -Store & Forward servers MAY accept and/or overwrite EncryptedPayment messages until an EncryptedPaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further EncryptedPayment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. +Store & Forward servers MAY accept and/or overwrite Payment messages until an PaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further Payment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== -* Each EC public key (sender_public_key, receiver_public_key) included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. -* Each ECC signature included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. +* All EC public keys (sender_public_key, receiver_public_key) included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* All ECC signatures included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: @@ -468,7 +331,7 @@ A reference implementation for a Store & Forward server supporting this proposal A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here: -[https://github.com/netkicorp/addressimo/blob/master/functest/functest_ir.py InvoiceRequest Client Reference Implementation] +[https://github.com/netkicorp/addressimo/blob/master/functest/functest_bip75.py BIP75 Client Reference Implementation] ==BIP70 Extension== The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70. diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 912fcd3a03..3c1ef40608 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -23,9 +23,6 @@ message PaymentDetails { optional string memo = 5; // Human-readable description of request for the customer optional string payment_url = 6; // URL to send Payment and get PaymentACK optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message - optional uint64 subtractable_fee = 1000; // How many Satoshis can be subtracted from the requested amount and instead applied towards the fee - optional uint64 fee_per_kb = 1001; // Minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations. - optional bool replace_by_fee = 1002; // Indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed. } message PaymentRequest { optional uint32 payment_details_version = 1 [default = 1]; @@ -33,8 +30,6 @@ message PaymentRequest { optional bytes pki_data = 3; // depends on pki_type required bytes serialized_payment_details = 4; // PaymentDetails optional bytes signature = 5; // pki-dependent signature - optional uint32 status_code = 1000; // Payment Protocol status code - optional string status_message = 1001; // Human-readable Payment Protocol status message } message X509Certificates { repeated bytes certificate = 1; // DER-encoded X.509 certificate chain @@ -44,20 +39,15 @@ message Payment { repeated bytes transactions = 2; // Signed transactions that satisfy PaymentDetails.outputs repeated Output refund_to = 3; // Where to send refunds, if a refund is necessary optional string memo = 4; // Human-readable message for the merchant - optional uint32 status_code = 1000; // Payment Protocol status code - optional string status_message = 1001; // Human-readable Payment Protocol status message } message PaymentACK { required Payment payment = 1; // Payment message that triggered this ACK optional string memo = 2; // Human-readable message for customer - optional uint32 status_code = 1000; // Payment Protocol status code - optional string status_message = 1001; // Human-readable Payment Protocol status message } // BIP-IR Extensions - message InvoiceRequest { - required bytes sender_public_key = 1; // Sender's EC Public Key + required bytes sender_public_key = 1; // Sender's DER-Encoded EC Public Key optional uint64 amount = 3 [default = 0]; // amount is integer-number-of-satoshis optional string pki_type = 4 [default = "none"]; // none / x509+sha256 optional bytes pki_data = 5; // Depends on pki_type @@ -66,43 +56,29 @@ message InvoiceRequest { optional bytes signature = 8; // PKI-dependent signature } -message EncryptedInvoiceRequest { - required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec - required bytes invoice_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication) - required bytes sender_public_key = 3; // Sender's EC Public Key - required bytes receiver_public_key = 4; // Receiver's EC Public Key - required uint64 nonce = 5; // Microseconds since epoch - optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default - optional bytes signature = 7; // Signature of this message using Sender's EC key -} - -message EncryptedPaymentRequest { - required bytes encrypted_payment_request = 1; // AES-256-CBC Encrypted PaymentRequest as defined in InvoiceRequest Spec - required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for authentication) - required bytes receiver_public_key = 3; // Receiver's EC Public Key - required bytes sender_public_key = 4; // Sender's EC Public Key - required uint64 nonce = 5; // Microseconds since epoch - optional bool requires_payment_message = 6 [default = false]; // Requires Payment/PaymentACK message exchange - optional bytes signature = 7; // Signature of this message using Receiver's EC key - optional bytes identifier = 8; // MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value. +enum ProtocolMessageType { + INVOICE_REQUEST = 0; + PAYMENT_REQUEST = 1; + PAYMENT = 2; + PAYMENT_ACK = 3; } -message EncryptedPayment { - required bytes encrypted_payment = 1; // AES-256-CBC Encrypted BIP70 Payment as defined in InvoiceRequest Spec - required bytes payment_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 Payment - required bytes sender_public_key = 3; // Sender's EC Public Key - required bytes receiver_public_key = 4; // Receiver's EC Public Key - required uint64 nonce = 5; // Microseconds since epoch - required bytes signature = 6; // Signature over EncryptedPayment with Sender's EC Key - optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any. +message ProtocolMessage { + required ProtocolMessageType message_type = 1; // Message Type of serialized_message + required bytes serialized_message = 2; // Serialized Payment Protocol Message + optional uint64 status_code = 3; // Payment Protocol Status Code + optional string status_message = 4; // Human-readable Payment Protocol status message + optional bytes identifier = 5; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default } -message EncryptedPaymentACK { - required bytes encrypted_payment_ack = 1; // AES-256-CBC Encrypted BIP70 PaymentACK as defined in InvoiceRequest Spec - required bytes payment_ack_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 PaymentACK - required bytes receiver_public_key = 3; // Receiver's EC Public Key - required bytes sender_public_key = 4; // Sender's EC Public Key - required uint64 nonce = 5; // Microseconds since epoch - required bytes signature = 6; // Signature over EncryptedPaymentACK with Receiver's EC Key - optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any. -} +message EncryptedProtocolMessage { + required ProtocolMessageType message_type = 1; // Message Type of Decrypted encrypted_message + required bytes encrypted_message = 2; // AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message + required bytes receiver_public_key = 3; // Receiver's DER-encoded EC Public Key + required bytes sender_public_key = 4; // Sender's DER-encoded EC Public Key + required uint64 nonce = 5; // Microseconds since epoch + optional bytes signature = 6; // Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively + optional bytes identifier = 7; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + optional uint64 status_code = 8; // Payment Protocol Status Code + optional string status_message = 9; // Human-readable Payment Protocol status message +} \ No newline at end of file From 6c9625e8322359866c2bffc6812da5691e755d3d Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 26 Apr 2016 18:12:29 -0700 Subject: [PATCH 0338/2326] - Fix formatting + fix/add links - Update images --- bip-0075.mediawiki | 141 +++++++++--------- bip-0075/bip70-extension.png | Bin 88989 -> 89308 bytes .../encrypted-invoice-request-process.png | Bin 164633 -> 168540 bytes ...mobile-sf-encrypted-ir-without-payment.png | Bin 106744 -> 0 bytes bip-0075/mobile-sf-ir-with-payment.png | Bin 113169 -> 103390 bytes bip-0075/mobile-sf-ir-without-payment.png | Bin 92902 -> 88090 bytes 6 files changed, 69 insertions(+), 72 deletions(-) mode change 100644 => 100755 bip-0075/bip70-extension.png delete mode 100755 bip-0075/mobile-sf-encrypted-ir-without-payment.png diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 3b0ba1f9ca..a439cd6d53 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -30,9 +30,9 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Motivation== -The motivation for defining this extension to the BIP70 Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requester of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. +The motivation for defining this extension to the [[bip-0070.mediawiki|BIP70]] Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requester of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. -The motivation for this extension to BIP70 is threefold: +The motivation for this extension to [[bip-0070.mediawiki|BIP70]] is threefold: # Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party. @@ -58,7 +58,7 @@ With this BIP, Bitcoin wallets could maintain an "address book" that only needs 2. Individual Permissioned Address Release -A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, BIP70 specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. +A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, [[bip-0070.mediawiki|BIP70]] specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity information about the potential sending party via an included certificate. This gives the receiving party more control over who receives their payment and identity information, and could be helpful for businesses that need to follow KYC policies or wallets that want to focus on privacy. @@ -71,10 +71,10 @@ With this BIP, returned payment information is encrypted with an ECDH-computed s ==New Messages== Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as the messages newly defined in this BIP. -Note: Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained. +'''NOTE''': Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained. ===InvoiceRequest=== -The InvoiceRequest message allows a Sender to send information to the Receiver such that the Receiver can create and return a PaymentRequest. +The '''InvoiceRequest''' message allows a Sender to send information to the Receiver such that the Receiver can create and return a PaymentRequest.
 message InvoiceRequest {
@@ -107,7 +107,7 @@ message InvoiceRequest {
 |}
 
 ===ProtocolMessageType Enum===
-The ProtocolMessageType enum is defined in an extensible way to allow for new message type additions to the Payment Protocol. This enum is used in the newly defined ProtocolMessage and EncryptedProtocolMessage messages to define the serialized message type.
+This enum is used in the newly defined [[#ProtocolMessage|ProtocolMessage]] and [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages to define the serialized message type. The '''ProtocolMessageType''' enum is defined in an extensible way to allow for new message type additions to the Payment Protocol.
 
 enum ProtocolMessageType {
     INVOICE_REQUEST = 0;
@@ -118,7 +118,7 @@ enum ProtocolMessageType {
 
===ProtocolMessage=== -The ProtocolMessage message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, non-encrypted communication of Payment Protocol messages. The message also includes a status code and a status message that is used for error communication so the protocol does not rely on transport-layer error handling. +The '''ProtocolMessage''' message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, non-encrypted communication of Payment Protocol messages. The message also includes a status code and a status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
 message ProtocolMessage {
     required ProtocolMessageType message_type = 1;
@@ -132,7 +132,7 @@ message ProtocolMessage {
 {| class="wikitable"
 ! Field Name !! Description
 |-
-|message_type               || Message Type of serialized_message (using enum ProtocolMessageType)
+|message_type               || Message Type of serialized_message
 |-
 |serialized_message         || Serialized Payment Protocol Message
 |-
@@ -144,7 +144,7 @@ message ProtocolMessage {
 |}
 
 ===EncryptedProtocolMessage===
-The EncryptedProtocolMessage message is an encapsualting wrapper for any Payment Protocol message. It allows two-way, authenticated and encrypted communication of Payment Protocol messages in order to keep their contents secret. The message also includes a status code and status message that is used for error communication so the protocol does not rely on transport-layer error handling.
+The '''EncryptedProtocolMessage''' message is an encapsualting wrapper for any Payment Protocol message. It allows two-way, authenticated and encrypted communication of Payment Protocol messages in order to keep their contents secret. The message also includes a status code and status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
 
 message EncryptedProtocolMessage {
     required ProtocolMessageType message_type = 1;
@@ -160,6 +160,7 @@ message EncryptedProtocolMessage {
 
{| class="wikitable" ! Field Name !! Description +|- | message_type || Message Type of Decrypted encrypted_message |- | encrypted_message || AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message @@ -180,30 +181,28 @@ message EncryptedProtocolMessage { |} ==Payment Protocol Process with InvoiceRequests== -The full process overview for using InvoiceRequests in the Payment Protocol is defined below. All Payment Protocol messages are to be encapsulated in either a ProtocolMessage or EncryptedProcotolMessage. Once the process begins using EncryptedProtocolMessage messages, all subsequent communications MUST use EncryptedProtocolMessages. All Payment Protocol messages SHOULD be communicated using EncryptedProtocolMessage encapsulating messages with the exception that an InvoiceRequest MAY be communicated using the ProtocolMessage if the receiver's public key is unknown. - -See [[Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]] for the process of communicating using encrypted Payment Protocol messages. +The full process overview for using '''InvoiceRequests''' in the Payment Protocol is defined below. All Payment Protocol messages MUST be encapsulated in either a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProcotolMessage|EncryptedProtocolMessage]. Once the process begins using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages, all subsequent communications MUST use [[#EncryptedProtocolMessage|EncryptedProtocolMessages]]. All Payment Protocol messages SHOULD be communicated using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#InvoiceRequest|InvoiceRequest]] MAY be communicated using the [[#ProtocolMessage|ProtocolMessage]] if the receiver's public key is unknown. -TODO: See about adding some info about using ProtocolMessages +The process of communicating using encrypted Payment Protocol messages is enumerated in [[#Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[#Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]]. # Sender creates InvoiceRequest # Sender encapsulates InvoiceRequest in (Encrypted)ProtocolMessage # Sender sends (Encrypted)ProtocolMessage to Receiver -# Receiver retrieves InvoiceRequest from (Encrypted)ProtocolMessage +# Receiver retrieves InvoiceRequest in (Encrypted)ProtocolMessage from Sender # Receiver creates PaymentRequest # Receiver encapsulates PaymentRequest in EncryptedProtocolMessage # Receiver transmits EncryptedProtocolMessage to Sender -# Sender validates PaymentRequest -# The PaymentRequest is processed according to BIP70, including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. +# Sender validates PaymentRequest retrieved from the EncryptedProtocolMessage +# The PaymentRequest is processed according to [[bip-0070.mediawiki|BIP70]], including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. -'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] below for possible options to retrieve Receiver's public key. +'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key. Flow diagram of Encrypted InvoiceRequest ==Message Interaction Details== -===New Message HTTP Content Types=== -When communicated via HTTP, these messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined per message type here: +===HTTP Content Types for New Message Types=== +When communicated via '''HTTP''', the listed messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined here per message: {| class="wikitable" ! Message Type !! Content Type |- @@ -214,7 +213,9 @@ When communicated via HTTP, these messages MUST be transmitted via TLS-protected ===Payment Protocol Status Communication=== -In the case of an error that causes the Payment Protocol process to be stopped or retried for a transaction, a ProtocolMessage or EncryptedProtocolMessage MUST be sent by the party generating the error. The content of the message must contain the same serialized_message or encrypted_message and identifier (if used) and MUST have the status_code set appropriately. The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an EncryptedProtocolMessage, the provided hash of the serialized message does not match the contents of the message once decrypted, a general error (100) MUST be returned to prevent oracle attacks. +In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST be sent by the party generating the error. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately. + +The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]], the AES-256-GCM decryption fails to authenticate, an Authentication Failed (102) '''status_code''' MUST be returned to prevent oracle attacks. ====Payment Protocol Status Codes==== {| class="wikitable" @@ -248,54 +249,53 @@ In the case of an error that causes the Payment Protocol process to be stopped o |- |} -===Communication Errors=== +===Transport Layer Communication Errors=== Communications errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ==New Process Details== -This BIP extends the Payment Protocol as defined in BIP70. +This BIP extends the Payment Protocol as defined in [[bip-0070.mediawiki|BIP70]]. For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. -Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the '''nonce''' MAY use whatever method to make sure that the '''nonce''' is never repeated. +'''nonce''' MUST be set to a non-repeating number '''and''' MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the '''nonce''' MAY use whatever method to make sure that the '''nonce''' is never repeated. ===InvoiceRequest Message Creation=== -* Create an InvoiceRequest message -* sender_public_key MUST be set to the public key of an EC keypair -* Amount is optional. If the amount is not specified by the InvoiceRequest, the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the InvoiceRequest and a PaymentRequest cannot be generated for that amount, the InvoiceRequest SHOULD return a PaymentRequest with the status_code and status_message fields set appropriately. -* Memo is optional. This MAY be set to a human readable description of the InvoiceRequest -* Set notification_url to URL that the Receiver will submit completed EncryptedPaymentRequest to -* If NOT including certificate, set pki_type to "none" +* Create an [[#InvoiceRequest|InvoiceRequest]] message +* '''sender_public_key''' MUST be set to the public key of an EC keypair +* '''amount''' is optional. If the amount is not specified by the [[#InvoiceRequest|InvoiceRequest]], the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the [[#InvoiceRequest|InvoiceRequest]] and a PaymentRequest cannot be generated for that amount, the [[#InvoiceRequest|InvoiceRequest]] SHOULD return the same [[#InvoiceRequest|InvoiceRequest]] in a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] with the status_code and status_message fields set appropriately. +* '''memo''' is optional. This MAY be set to a human readable description of the InvoiceRequest +* Set '''notification_url''' to URL that the Receiver will submit completed PaymentRequest (encapsulated in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] to +* If NOT including certificate, set '''pki_type''' to "none" * If including certificate: -** Set pki_type to "x509+sha256" -** Set pki_data as it would be set in BIP-0070 (see [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) section) -** Sign InvoiceRequest with signature = "" using the X509 Certificate's private key -** Set signature value to the computed signature +** Set '''pki_type''' to "x509+sha256" +** Set '''pki_data''' as it would be set in BIP-0070 (see [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) section) +** Sign [[#InvoiceRequest|InvoiceRequest]] with signature = "" using the X509 Certificate's private key +** Set '''signature''' value to the computed signature ===InvoiceRequest Validation=== -* Validate sender_public_key is a valid EC public key -* Validate notification_url if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). -* If pki_type is None, InvoiceRequest is VALID -* If pki_type is x509+sha256 and signature is valid for the serialized InvoiceRequest where signature is set to "", InvoiceRequest is VALID +* Validate '''sender_public_key''' is a valid EC public key +* Validate '''notification_url''', if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc). +* If '''pki_type''' is None, [[#InvoiceRequest|InvoiceRequest]] is VALID +* If '''pki_type''' is x509+sha256 and '''signature''' is valid for the serialized [[#InvoiceRequest|InvoiceRequest]] where signature is set to "", [[#InvoiceRequest|InvoiceRequest]] is VALID ===Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages=== * Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] (see below) -* Create EncryptedProtocolMessage message -* Set encrypted_message to be the encrypted value of the Payment Protocol message -* sender_public_key MUST be set to the public key of the Sender's EC keypair -* receiver_public_key MUST be set to the public key of the Receiver's EC keypair -* nonce MUST be set to the nonce used in the AES-256-CBC encryption operation -* requires_payment_message MAY be set to true if the PaymentRequest requires a Payment message '''TODO: How are we doing this now?''' -* Set identifier to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message -* Set signature to "" -* Sign the serialized EncryptedProtocolMessage message with the communicating party's EC public key -* Set signature to the result of the signature operation above - -'''SIGNATURE NOTE:''' EncryptedProtocolMessage messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. +* Create [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message +* Set '''encrypted_message''' to be the encrypted value of the Payment Protocol message +* '''sender_public_key''' MUST be set to the public key of the Sender's EC keypair +* '''receiver_public_key''' MUST be set to the public key of the Receiver's EC keypair +* '''nonce''' MUST be set to the nonce used in the AES-256-CBC encryption operation +* Set '''identifier''' to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message +* Set '''signature''' to "" +* Sign the serialized [#EncryptedProtocolMessage|EncryptedProtocolMessage]] message with the communicating party's EC public key +* Set '''signature''' to the result of the signature operation above + +'''SIGNATURE NOTE:''' [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. ===Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages=== -* The nonce MUST not be repeated. The service receiving the InvoiceRequest MAY use whatever method to make sure that the nonce is never repeated. -* Decrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] (see below) +* The '''nonce''' MUST not be repeated. The service receiving the [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MAY use whatever method to make sure that the nonce is never repeated. +* Decrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] * Deserialize the serialized Payment Protocol message ===ECDH Point Generation and AES-256 (GCM Mode) Setup=== @@ -303,25 +303,27 @@ Where used, '''nonce''' MUST be set to a non-repeating number AND MUST be chosen * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''SHA256(secret point's X value)''' for Entropy -** Use the given message's nonce field for Nonce +** Use the given message's '''nonce''' field for Nonce * Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) ===Initial Public Key Retrieval for InvoiceRequest Encryption=== -Initial public key retrieval for InvoiceRequest encryption in EncryptedProtocolMessage can be done in a number of ways including, but not limited to, the following: -* Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -* Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -* QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -* Address Service Public Key Exposure +Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption via [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulation can be done in a number of ways including, but not limited to, the following: +# Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +# Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +# QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +# Address Service Public Key Exposure -==Payment / PaymentACK Messages with a Store & Forward Server== -When a Store & Forward server is in use during the Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest with the '''requires_payment_message''' (TODO: Should add something more generic to the encapsulating messages?) flag set to true MUST be accepted by a Store & Forward server. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. +==Payment / PaymentACK Messages with a HTTP Store & Forward Server== +A Store & Forward server SHOULD store PaymentRequest messages until either a timeout expires the message or a Payment message for the PaymentRequest message has been received. The timeout SHOULD be greater than 24 hours. + +When a Store & Forward server is used for a Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest MUST be accepted by a Store & Forward server if the associated PaymentRequest message exists on the Store & Forward server, otherwise an HTTP 404 Not Found message should be returned. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. Store & Forward servers MAY accept and/or overwrite Payment messages until an PaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further Payment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== -* All EC public keys (sender_public_key, receiver_public_key) included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* All EC public keys ('''sender_public_key''', '''receiver_public_key''') included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. * All ECC signatures included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. ==Implementation== @@ -334,26 +336,21 @@ A reference client implementation can be found in the InvoiceRequest functional [https://github.com/netkicorp/addressimo/blob/master/functest/functest_bip75.py BIP75 Client Reference Implementation] ==BIP70 Extension== -The following flowchart is borrowed from BIP70 and expanded upon in order to visually describe how this BIP is an extension to BIP70. +The following flowchart is borrowed from [[bip-0070.mediawiki|BIP70]] and expanded upon in order to visually describe how this BIP is an extension to [[bip-0070.mediawiki|BIP70]]. Flowchart explaining how this BIP extends BIP 70 ==Mobile to Mobile Examples== -===EncryptedPayment Required=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, an EncryptedPaymentRequest (with require_payment_message = true), an EncryptedPayment and an EncryptedPaymentACK. In this case, the Receiver submits the transaction to the Bitcoin network. - -EncryptedPayment Required flow diagram - -===EncryptedPayment NOT Required=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). In this case, the Sender submits the transaction to the Bitcoin network. +===Full Payment Protocol=== +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, PaymentRequest, Payment and PaymentACK. In this case, the PaymentRequest, Payment and PaymentACK messages are encrypted using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] '''and''' the Receiver submits the transaction to the Bitcoin network. -EncryptedPayment NOT Required flow diagram +Payment Required flow diagram -===Using EncryptedInvoiceRequest Message=== -The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an EncryptedInvoiceRequest, a Store & Forward server, and an EncryptedPaymentRequest (with require_payment_message = false). In this case, the Sender submits the transaction to the Bitcoin network. +===Encrypting Initial InvoiceRequest via EncryptedProtocolMessage=== +The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client using an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] to transmit the InvoiceRequest using encryption, Store & Forward server, and PaymentRequest. In this case, all Payment Protocol messages are encrypting using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] '''and''' the Sender submits the transaction to the Bitcoin network. -EncryptedInvoiceRequest without payment +Encrypted InvoiceRequest without payment ==References== diff --git a/bip-0075/bip70-extension.png b/bip-0075/bip70-extension.png old mode 100644 new mode 100755 index d235992fffc85637fcc901af4b22d3776a246432..e02db322d03f12b22f921eb881ff0a3b3960e143 GIT binary patch literal 89308 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 diff --git a/bip-0075/encrypted-invoice-request-process.png b/bip-0075/encrypted-invoice-request-process.png index beb5df1f02252605624de50490ca9f41425a8906..918cf7088855f4451a5f59c6d1e19236455b1c08 100644 GIT binary patch literal 168540 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 YyYp*&*@`V+%HJuc&i*25^4FXG6Y7t4OaK4? diff --git a/bip-0075/mobile-sf-encrypted-ir-without-payment.png b/bip-0075/mobile-sf-encrypted-ir-without-payment.png deleted file mode 100755 index af66a4d08ecf58c47611e1642fb473f4d475b6d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106744 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�#%7W1kzx3ZPyCTX5?8Z2`Z_I-lPg;1)JjQ-N55gS^F|Lz+!qY|^i zz);cQj$bVc#^F1hKk8$M3*9N=NlOf3b2(Gm(ue-onf}x6@;$N`dJ5p+`2(-j9t#ys zp3B_-E20M(ez5lgDd4YZ%1^8JYi!LLV?R;S)>gLo-I=31rx~9Tjn7y+Z7H@U{<-9N zd&i}X*N(9>4O7Hc(Wl&*S01ZNJ^#`)-@sCy4+RQ4y-KIs){74+y}~MWS}XB&S{Kdo zJXX=@Wj7%jH(~96|I&XCLDx)B#SgDYcMN^?(zl9`#mqRXkSF z1*4vz`toVG?yHC})%iS*by?OUH7}z&otev&I?V}YRpEiA?}G0PljS{Ik|ELss5Y?B zN`lnW%$?P3I{Q`P{1?aAk^lMI>exuyqpTj!iFnFwF7B*`wGXc@8fmC|K8uJU*8 zb8c!f81u9!g!iQ$024zzl=A-PI^cT?H4(jCo-M@yh$(+*nV`x;;hPoy|LI0eI@Waq z;iYQ^Az{-9OC(Sn4}+*Ox!pupp7-MkQtjevZPLxgDVCbefhz;8 z!5~vKJP!cq?kVnBjQ4`B6RS<~FEOv%yGAiTBrKKV3j?2Ui=Z6{aMWfUXK+{C+5V_l z11f>6Sze-!YfSBi;8M2~pPs_&Xw6CiaCu;lCT^ z&Z)kBWY=Pjx682|mUKZa@RG=eR6gH;0&$pM0#aZCMy!UXNJ=C+(GtBZQgP1I48EC z5oeuq_UHvHA>U--s|ckq z6mJaao|;!K{iw>R$#azWH+S4PXl4ELudg zuR-~TFS)<1-;Zp}T{9QE=!Uj1NLp@8s0MB!BH#JU4NXjTNzr8uKf?Z)LX^9iD}n;Ry22qACC#A%8 zQ6!`&c!%Cy+_5ApZ{SZmC|;(Bjp9H~nV?9iaD%iIPgB%exVB=* z3V&R`)u&6K2y)VfS|cu+$Zd9KxMeY*_eZTS=xlqrZwm7VwR{p03ukG`yI87oF~L$5 z8he>!=vdP?vFV9=ct4IH;zWw1KtPS{nU}@je&&^vF1}o9Wz6Dxg?(M~DnbyTm~T-g z=d{rMpKif)gRaR6n;&9k_^E3$6MO?{_qZDBn9EQcyaXHG(23f!D$$zVg4`Kf^)_af z_<^b*J^h{%T&UB!>?F)vBO7;fJ>}N%BC7;s!uluepJEmmP@4e-4kl?w{+#buJ2iT> zOMFolMYbiGw&;DZw3lg6t~7GPh=<>=w*LW624zFp9`(UBkz-IeulZ+Eqoks4LRW`U z7kru4naE6z%tAiP{uG>3jA41J1I6s}x*ZgmkRrdCsC0|c>H;~#r4EBvwTcgcN`rBk zVg}nDd8du75j9E^uz{jXgrfO1ID@+ypw8g|b8qJCOa>RVYEwh?{XjQ<5V+P8!b@nJ z98n2pmmVo(p1_J15;YJ@F%MIXE}7WcC|=%3!|sW>d3j8qy&!Cax^-te#Zhne%r?;J z5?dOac;!L{X=}W1|Mo|UI_G;Z;VrSbi4Jv>q9rsHQgr-MoA;q!8gmr%V^yVGXHb;JZz zC9bd~3q-ezGK&pg1DO&Wx6YxXQn&*};VJo*`SZF3B3%C1&$~XIw4B#l35{zw-5kr# z#O#$Mv)Mo&KcLl{08*Y5MnOp;ci@(3vcu{-+i79sK`oeNAn%^H!-eIM#o*X9_~8}J zS6(#Z<|)CJ#ix%sh$3v$J7hPZ%;Hry!TqA3rSe%Omm}YGtJBkd?<^%z(#8H<=wQ+N zek;$U92^HpD)Ak_ar*>EEu|jPi6=)zu>?BY!)M+;D+ZitI{K(3?U&ZgdeDCZv}FL| zcpCPiViP6J@g0@~x&`%S;+|_Z{&3=@T>tP8+)999n@qiUT0g-^-U#2`Q0lBb+v^>` znN%~VxQ3_T*1X~l3?Iks89o{J60nPagzV}>YkWe0F^6;&N}a1L_yIB0S5(+14KJ#cEHd1r_krPn1ZLhsOqL{25D}G}5m1PRUj?%4zSWSIUWuY)L6j zTx8(Pr&iN|1&|!LI4U*kUF-~fxktuO6_4UpdX4?iIIO*P!@NDm*vYzRoAY|HcO+)* z!geE!`oJ-_?T_kPs`GO`7*5R&4Bo#*KHD|BXaB0%qMB)j;@*7y{H`q(fC=D& zZue_tYqT#_aaad&%B)*H=#>wzCGkHKd#oPxnM{3JAkVY7+`p#3h||4RG;C9Z>Kutr za+0n2z55K5<`XFK28*h>cARwQ`+KXhIF6Z1V&8U^cF6yP@5P^wD(B;EBci+uHPXth z=qJ;5HDgyT76mPFNX2%0y9ti=ST>Nh8c)rpaRT#uSWN{Pm%>C6S^%EAk~1Y|w@m`4 z-+qMKovhf$MK6>49*rkxm=!bFY{<+<&WF{$SpR`)WqC zqD}NHNtjF;$R!7QGnQS9$oc$fm)TyH4dyy&P{N8}WnQAe{9>kN;bfcwYA`rAuhYun zJm^8`Y8(dzVihpnt~iIQLwbK ztCTST&Ac*eBtMA$;+;6l({7BCNa9^ScuF)F!x5%GDKZS?+a2?Dcww-#I`AP*8*i_d z^fr;d$W}(R6sHtCJTM3+my{CSe1c>c5u z;*2eyLeh&$c2+w)G_bwz7W3XIp!Q*){a)GXN>YdqMil!ne@eDxUHzwLv#hf3_qgcI zwtw}&=bF9x2S9c28*E8-MhpM~pb`)^J%AmMVo6f;Y5`Q26P0|iea9@%UHtNp=>E{K z$(mjojJ|NXFTcZ-YEehfiVO7+38I|90Du?#j&FAqK1GR+XiAor*x()P?jScf=QQgI zP|tx^4@JQV=xf*jH%=b2ePw^igX5Pv5`v8C9)(7Bn1NJx+Z^FX-n7vV zfw9RHHc0k6Olj>y5ujFs1S};R_iVw;(HHtYZ}w7|4WuXlxIWN~@?|(Ve8oN?&7SFEw*SA`gG>S_pweFsv;nCi~hoa;BDptGyDOe(%Z@&;d9yUF_-}$BZA&rH zRP3{`(0Ob17SDn_8FpR8y}TJCA58@U4_yl}viEDrKn; SFDk)*o9(x6$h6yk`hNfouU^RAxfvG;fHZ}0m%-aqR&_R}ZUTA#J9`x?&cyv}=VHwF14%NB23OhG}hOiEH* zk%D4g7X<}X@}dR!iAV4*UHnC3DS6VGf?~;P@;^$7z#uvb3V}UF%BnW1a+xuT;Z)Y&l72dAGE5|8kc}UODNYcSd zPsu@ES;xUdXP@qNQIW;_?FDfGGd&w^275D8b8A6+;q5=JD~QkJ#~j-kejH+BBD`IU zd?ACXoC3ok3oAVaUUoh<9WE{|2L65QT)YB2+`Oy|+?-sz9Gv?&xH#E3xdgd51-UsH ze*M`lvKXKCTj}ZxDvC?|`a1kec)OvEjin$5hn<}ryB!a^g_QvZ*S>xGI5@dExVhPI z1e^7Fa~o}YHgoG8KQHpvb;R|ob*zjmZHz3;8OU|D&sf;n2yfp`zUc2izn;s?^6xJ) zxBg{2SdqhC+meHeos;7~ousSt_c@lfR;E90O;?9Q&s5J$&)miu=W+eV^DGT5Y%Ht| zE&j__{{8F!`o&liIk~^T`#;{Vnc08*YHORr=U{?gCjF0RS}UKo)Zlm36yRz)(`1h0kS@D0arzfs$qbCB7%!=ZABS{M)Yt4_TO6SmCzxM0oad{HGt!IqQe7 z2}+q;+i08X=t+r-;0NqRM!JH0`g(kv+WMSqI{ch`Y(aXamzSP%`v17}Q7a?lI&ITA$B?`Kzx|5;aGC${ zRgy;5@X+&fJQx1^BbzDdo&DFJ{`Ct}qaRtxQrpT}kHnnt_P>Je?=<#zmLli;h+RQ# z9g@#PbVx|(>F($Fm!JM~TYsPV>olYPzYF;D`g2bI@84l(sAvAa1=P<={W$8sU&Pu% z-^NbcN>9uHKJkAR?LV*kuP6Td7wqRC6~NT!Uzg(NPycm={_@%XxuW|?ViSZn;Lfyv ztOD15j{otqf4=$W@v3B1O>KW1&(F)9I5k6jC9^U;N|Ni5DKSRODUe8oj+z1hDP5hEP+OMZYI=33*opZ}Qawg$6Rx*@!QXT%=KFn%{}0cx#n8qx1ax*>$fJF zd%z!a&9%mFKmRe;Z%s7!fIsG%YmMK2{$sA+nrQ9;f6O)48o&Mg$6UWP(cA<6m}{;z ze*5{4xqfS+xd;3)*IaA-_VXWe{nkWt5BOuQxz_mY=RfB9t%>Fy@W)(pt?}E>f6Vn; z6U{x~kGbYrbIrBJZ$JMr*KbWU_kcgBgELoi9bCyXdV_5=x~lR1c4Hs4R23PSa>Y1_m}8D> zBWju)Z!Ow>@F1giQB!g7l=JLNSLFmBeWS67xO!z_xMxXvrBg+EqV?CQpk85H>6jx2 zC>geHyR!1&BJ!UMqvfx3l4oaEY-wTUTJ`g1i?%h%dz)|P`gI8YDI)de>R$-;llo- zA^W$nvbrx^v32FfjW$!{M$dUVIj>*Cd`)X$zhdlVUYX75HW9-c!ihjF|__+SLB z$>ki^hzO?T%a_wFUErfgp{lBi6U6Y{g2Br-ZQ3L&CwJD)F3R##?(_8YV~-?P1qBB` zO-tM5GBb@IXzS>F(+E8jthjsKhMd1{D`{`UnyRWQadGjLYu4oX?ooMe`H5=Vwr%9m zLPF$CO<9i}J4W%j?A~gAetvaz^&+nw3vb`P{jQ-w+r;G7y?YzJe*LPdrUn}wdU_^b zLHa>`Z}B~zUFU~BpYLwFdHeQGR@S9UmMoE#m9-!4T7~VM%n<`)W4m~HeaFY`-&R+< zd3x^JzdtBCntAJf`vbDFODW{#6A~>Fc}p>XP-5R_!Iq@oK)U`M2)wQAu#I zk?oHb_`@7`(Y``K=ii^8J@21=hfv)yy6aO>BPFV!<0e8a*Ru=Z{q9!vrP z0YycUrlzLM8W{o!2?@`iKUc_hcIv5%m#KPqn2W2J?@*l7CH7w)Xz~8?!W9A+#yQh0 znmgV`$f##s*g$dQ$dNC7eZ_Zot?<~yA9=2?aSgk=YTU63iQ?`hhYufKwQ5z)>+37_ z*?rx->uAX5!L~w1CZ<(ew=O@BYFrzwktv9~4mA~S{rLRqyrKu+M&z-*uI%IBDQc|L+5cPq}ef^Lgb252n zdx>wjVb#NT@88R4U0K;5?>P4Lsd4S@@(W8R4J>tH*k26Xp zo;+}XqPH%-ttLi^tYBWAc!>|op}RZfx<0<-U%Tgo&yQHNzd!6Ce4pQ<1D?ED=$!kV zJ1ea^%G~bWT@8yMpbV??ZupOx4r_*2Ng5h5BP^BUPI#!L8ds%T8yMHdGKtY1)OED$ zZ)%SUbv{#gd&~U!^IJZD7Qeh;Syz1`{YX#k-Akou%=`A;gR?#{ZQ#DWMM%QlULf7N zGxE^&<@V>#f9mdLp>cq#i-?HqKR+}d;gN1UlmGfomEj{iu@8&V0uvJx8fiX1FRvVU z({t<2<=x%gim%5wR`WPII+plz97U$lFm^ub<@Di&?JbV1@k^R6-`Bb(>6N}EcUkw? z?d40MtBco`j9%``pkZNQ8K0W6?yT6de2ZXS!s(Yc+}v_1DsE$Gc`l4wnwpt0DfD}# zr0kuZo?f(Q5yhS6CYMhqm-yaXyT=>Zj7D*7xpW}N?a64hqVN#!)%S8ZhGR| zn%&AbDn)05nlc^l?l`iXref2DMS-F&B5^8-3$#8Ld6fll&6AOlp^@iXvvq3)>~S*9 zd`o@8>DM1V1bzOjYnG)m*#A}Y#EBCm0V4T^hwnK3!sY>!`c+6VJXYezCNnYA9;2Sl-CpWnh=|#gu8^@GHOO6J$Hj{m$H&JlM|zH% ze|(XTL~`Ti&4;?h-WNt243=)-W|XPC$jm)8Qm=VW*pbhl{d6vF1}mtTq${;sB|$bq z+L!rc5+ffUpRTU1+zdCN_Yw|TOvr7Y6a z)ZDyf%izF3m`(Rvn z7IWpwd>Z+6&#c;|eR&MzshL--SdnT}z0)@!fcfJ2c@G~xta*6&mhz|Et82qh=^r{z z_3_h`34Ou$mekdqpfrZR(B5IS58cSEdxJ_D`9|5wDrtWE7GE!~2U(Lnd-U}6BPnWA zjFfE02ef@dLfCW8&%1Q#Qq3c&yFSUu$y6wAsXl3GY4baHCFSK$v=w^Rhs0-QWYi$` z895tNB_(fc6tE0CS1~ox8-?4^=w#Q?l)1EZ{rV_Do31d5g!c_jcX(+W7X5GP{vNt`q-6y zNVi@a)|h6IxOBng`HV|mTD9LyN=j1H*Viw>;Z#GnCq7-LPw6DN=3st7fwV%?!|)@X zv8Zq+)SBAb+O$3@3~X$2asixTFY5|D=@SvbjGX-qyic@psPy#oBGy(QHDqj}nMD2Z zm5)+#ZA>w`8&uAkXSg@^sZQbU1HNphP6#_st6uV^t|;CWdf_2O?Gx=oYd3FZ6)Qey z{^9upX+PE&3SP6uy);EaX9ikw7AshHlzC}o>=<^)92y>0b`^9Oj-LN{%SspqVHZ`) z91$5Qt&nu*`_$MT;|P)F}La$E91(i6Q>Kb8aM9UP?n zFSDAz2@_kaU{d!O_jFn9nQ07#ZP%M^G!pC1wdT=KM_-s2iorExa2A(Nfnof&JW=aU zxzxU*F3!}^$n!GWeC#Wb{MUpbNHp4=dTSZGHf-3SrunV>K7VP0L*Z84?C+zeXbMg_ zJdaU$aLIkiz-{}1mWxTLsmD=VP9Q(P4GrO^ixp4??`mbd4&*b7r5Hio$4#W1$zMzz zjRGLa*|h5V@-2$4u_xjKZ+d#-p{^Vi{jN+ItC8ujn~_nRYWs|`x_XfD#}}zo%HKN5 zH4h)Ih?9ELTN4vbVLRA*c%Mvv0Mc|uLdS;Iqnr2JD^SKBzO|0l-A-0f(c8+-P6dV3 z`;h?`@`F26T3DB}w;p0m?e=XhBZf|gOOvE9O7#UhMyPGm!Qq=$|G|OKSIX|RJ9S!hb(qLcc z^nIj$u>u_3Un^rL4Gqn1yRRQ&k(gly^$Qm=tSl`RLPA1l-C4ts@Jn)Y4@P#E=s&Y) zPN1-Dc}0muJol|bjyk$hWJ>mums~}=E9E>!I+uaR?>q6tOmwZH@1JO2rcy?Fojraj zK}kBF>h`S7f{{$evA40u_wboDiX(68@=ckx+&wDtsWa4NCnx6}pb5zX8c(k++cY%r z=@3#W+K0QY8Euy?Up{MXtusFGsVr1flWNG1z-5%@Z%DCko|&DZk>sm>aA@I$3m2Z- z^@q%FW0R7SdVns%-rnAFphXP7w)|YQDsZn+Zi(-n?)Pc^j$4)h9(|u2*=OCc6wdTe z>h4afi#Jqq>+AioJW3D6X#g{>#mD!RX7PU2Wa>g_p=GFgVQX^k>jxGChD~R!tR7+= zrbpjf(7LMt_8h)2GtsG@Vef_IM2xucn$*2{X=j0QdidiDTP6mJi&0U#95O?Isw6p+ z9-whjc&y5GB3|uqsE89IgM}FW8V67%*rvExippDV>DK)L5i<}TAd#s*cKTXnaCkV&vj=0l69;MyLT@(Ffed) z<{Nsfm-p%Q^@*0tD;OCP51>^*M={*r9EviHo7KKVw`o&pu#g=iokak8Iecr!tBdpY zn$*eSK2puzuS4wtxFWyy^jrZfs+)gv?Qn1XQ7Z3p?`i{IGXPR&4xNFjBlJ&QW}UHK zEDB++>T6n47cE;Bf$&(vrse|-pB*w^c<){xAR8XLuj&%FH?th8yta|oI1gUQ_{sh- zDqub^8p=pPW1|`_{vqT1-NkEnOWK8|g&hqQ2@-Kq3luf523Cngw7*qsXCt8N)2C14 zlatagD>CGp_*48BoSaxrJ^SJ~(hwzkFZXlt-F;_U=a2N(``;4FIDzhP4YPtPY?!Q5 zcspC}joeK4@{Y<-Pauca*OuKiG*GIJlzUxS>A8BByd>vL`0%jJiN~rr$gGU}DkA}3 zD^bsj0MnW1EZ!maKkAqkR!B2HJ@mQw^~HG$VWl^)rNFr_bk$Ku5w}XGU!IGAJC+6V z_GV6gIO4fg4~ITJl_u|PJt*`Hx;2r2jr#eH8sQx7I5P8VNo=U|=*IuN#sLa6?5{yhSuL=ezaO zii?Z$3JS8kbd;o#MF!>bxR{x56crV%&+_y39x6C9YA0y-wG7erIoIX#I(BtQWFDjH zNRRnDHf<8LVa}c&T7u@ezudt5{WCTong?(_E6N-Ek!aE`4Cb$2x^eG~fPerM|1eF! zFRaNBfTNU8aypjgsYSC0O`c1N)6_Wt47r)<2`0J*RoInu*V!|Zar4`jr8|zXqY?69 zJvn4iAH3Iymfm@M8-gVq_)={wm~acLRt=Wi{pS3AlCS~Jg6TGV$XVO^CA{;^BdOI6qhH(*ao1PSJI8gtMDg11JRML|qntk8d}oW$ zxi`ocG~#^qX%?F3r*JI?4w3%h?rJGnS>1*tJ*%PoP5da;=q)zzn}3Ltd82|z?S31< za^i7-xWIjrh9ss1mp|!EO5G4$wRUYj@NpMFy5D}02w?od^mg#@C zt_Mu7#^$W6%ZT0{DC_W^R8favX3!r3LPDZrneVflghHK0H^iNYKT{bZtemJ33l#E_sferJM>xV!^e-a=Q2Tj42%!zP|cfH)on99{jJgz zR)aAu(Rw4NOG!(gfor;N;Mu7Z{{TJn#J5fZ6lFAIPe5&uUV&XROZL_}HhcWkddk|$ zDi>`!I%`7H;Ne3~5#kI9-W!by;G1-?plwm8C^5mS>gu~rQ=?q=16n5%HI_|_&}o3s zQO$JVMM~a*bO?rxWL_AEf=<|BZ+)Vs0r0A6V~QJzW>i`Vl;gvLt@-!%pXZilxweA7 z0tp*!#4_MGMuUo=%KS3Jy~d#yNOI#76KLK_P!Wx4W7h(RJj7RjX-ox^u_Tb!q~Hj> z)1$sIw9~Kpd56)@?Ao#8GW+QlEp2VDfm9Mk&i8>S0SecJ@56uhoOpbr%J6gU)g@Mg z*_0{?>N$0F>y93+tbY*-=*|N!QFg^3u-gS-E_+AE+3u+<0AWPq=!YS!2jN2i9M4``*eEasTMz6CU`{`JU zROjywW(`0NYr__-*!q|a>_TlqtwFs#ywX=uIzKPZu#{fd;gOG`aqbnG*kj=mjYIHM zbbZqwW-OYs;^Fl*u#}IYG>8`|N@Ij^;}q!xN56iI^HJ=958lf%LHRg=-bw}cq8NWF zts*5GM(gVbI*S9K$l_c8c1{tgvm&OF1foH}mgdhc z0GiPBpyO(dsM{j!kg{9#N!V_sNcWBW=0WGa*Cw1k)z_FRLp^_fG?@NqaKx|;z{&AV ze5MNU93@oa-6A3y8P803^ixtRiNV5eUz-e|8qo8~|~?__KKV@)O9+C(t9-J?m|4eaOwt zO&E%#v@{jmxBXXZ5H^x)cPmSx^2?5Z#{nhH65-SH?rHc&p>vNFrDOWDrsROYFrlYQF%SX0V>|ZsG%vtkpW_1`LW=C(zWv~oBf``e>AA8`6#raC$9aGyqQ;v^ zrY13aCKlQII51)@a<4LymTy#4r-|r__s`6f&B50$4V6WsZOg5=!uLTX; z*AFf{4(J@_Ad7&)X^fV2H>NSh%~?)ZQqt`r(I&`;?2pOh5D-vx0^Tr&i!~d)s&-Dd1W;wltV*ubs1B=9>L}6tB z$W%Z)Dw4(@DN+Ufp%S2svNQ`>Q;;DKSTVL6?Tfp)j&0I_qcF>6*$Z&_fJilQDjYKY zx4|Ya1|3VlI9&T4h+3Tf2+03SQ|5hOJF0B{(_h{^mI5AN-||d%TqU|10&EOrnauFdzQN4_-N zMamRa8B%{?W3*pbI5n^bwYcTWm&d+Y8tGQlU}y>U2e|HfpT>b(eluxuN=?l;G^eag zHtu6T$_x6n&-X2|D7Ekvk5!*u0%d4Cb=%EN8@V1=bwgH5w&_+xGcJK4BE8Er7kt(+ z;oN{N%kkJX7&G1r?7vy>_^}rSOU(|%C}|i0S(4zxmK9Po1)!7}A56-wqBw z9XV1~RwgMe-3p(&a_t)Jx^)Gx3C-fg50T?2Y7$Q0hwoV8c=Fuv6iUPD$Yo<+Kkfj! z#1R-S5_kssJwHGHs%>vw6>u0T-!<^^n7$$)2Jr!`}j%U^>;7+Fw{vu{>DbzuWE` zPzc6tMjus3pZM}zpJ9E%7SWmU9Te>B?4}J#SK$cNpgZM5MdE88A31#ZQ&(5?$Lx-Z zU>T$eqnhX{>(mcueG2j1C~(G8=gyt$fJ3S+b9AF+B12hl@H+3FXz#UX3VLbR|FF9I zNlFU1)iXv$ZXm-(9oyR54~I*5r1W8I;!PYuN$!HA`FBKRow>SfXFjz(AUSDh&;d4_Qw4!8qaTHiG-c06`=tC+D$xx?=B%eaOTK8kr@CKO)8|hTpE}!q1qQ zmBX8OQm+8{E^c-j+X8xmNmzIbnT*TI5}+(PJIw>+5e`NLZJj5|?iqdkYZ{4#RaIVY zt9K4(?;N($+<**VX`|4Ye(jPFvw+eTJ%oCt1!!B+O~~SNJwb$I@Y2G zhpr<=`>n@X(=g;QzH;@d*PS~9x%K55=MJ4cdzLvOXHXpemO}}B61iRo?-xo_V!bIdp^b{-S3|6K!zav zk$|8eYAWG}(Aqr24cK(Oxd`Nihq?|jsG_0*gDp;UbeP&oA|s*srvqbNyZ9vqMqP2j z2ap3Wsa_NRiiAvxX#*`nR%Ehk2f%kZ=1c*o0Pyy@tq&;xc@9I2fayvr7Uy%R|B79^ zc5U2icmPy4y1S#1MyXbxi!Nqn3gZhRz=H+tv%ZF<)Y8$peEIS`Br8Ylp+P}Kb-`3q-42c2QO%9|6OchtITPJ~wqd{cHeB*QZeSg$r z41m02LW6KcFoguKgIq&f^G*FzB_4VLsCwc{awQs1Q3Cvt!7!RKP~+IX{Sq9M`)q5T zZ0R25=vTz9XaPVX5D5pM3zQJ4c`2Ai5z-Pw)l=PKTK&q9ax^n1vz>*(!sw$l0~>`o zXa#OF^-_{Sxe5G577lt$`ayL!(QSYPFR|GSf(N6PE6A6}BBa-n6ath+hRA579)PID zu<(kjE5+l-kKgo;Fh^KgSy6?de?w=591$@RuOdy(%bJ~WM0&g7;Sm9LR{Y43Y#XuC z(jbe$p09fcD zeG8@N4PpR(N4MXe6HS3OS{m6nf23fZ34ZZ*4z(^A6-YfT4%cR;1?kV2p7Lh)UXb_lR2MA&|zLJUpd!r&B^ioJvqh zkyfPr_C=z9vlL4jGha^(StEK;aGp$n)&6OPVC3XKFJaU1xC#O?l7`@-h!oC zAe~|H2R>)um;wR{=+FjU<28^X)Ff(#l36(dhj!H}F>qHTk`7#?0)cZD1O|qK zl@J&NVCahml}R(}0!g8u94|sSfM*fMg!$bwvrXv4h2hxq7c5YOPXh6QjD7m-SqCx} z2kTO&?)l#vTsLtz?r^%Fy4&SMZbEf;%95dz&C4@2D&g(jwQ=i#bhH4*8xPed+wyR8 z6S`u+(IuTDd)gZ%SOIK3cvo52&9E_r1wNl!P;d=>E2$yyL(YvJ1Vpd_<^>=tUVl%O|9=KAKc$ zm7)f-Gv5J3IRVc}PDYANw`yOE!ddY4tv8wzZcsJbckFPxb*ozXPN8|#vp$^(%f3ICfw=P(|xd_gU znaUYdH=F*ZE%1fKYnXpf4ZzE|U=&#M=PzHbMyz7kM~KpteoN>zy6fUM=@huR@}pi z$x6bB@y?!}n@IeK>Bim{A%E?DZ#_`O_MCey7m6XGD$H;>?a99+Dgch0{Ja&qpTo{>B1(!$Ez1ETo`}cPb0B@@olW* zZ3qSV`21eIdL>Ka008;!h3y_Bsl1vRA0QfQkb^+q1z7j-p14FyTiblh$OtFc*T@Tn zR0`wghFLaNR+67lmeIUi4+x-xS`5;&{Hm(K^eGhyi3KnaMlJ{9JQ5WnZl0UPEp5eZ zI_%)t5AINRYDxu(NIIs|xxXnA^Z|ZdfoP)~`1UOv?o8wt2?KI zEK0+-kK9H-3_c!FL03w|X-!Q{YD;{8qNV-Wab+8Sl7nk>Y2>vHJ=@;1-YyTIe^{uqa+ZI6`gm zG$lnBH~=cLZ&+J^R8%0+tR?BmfR8B#c|>qArjOH@(2&6nEt9ks?i>B1YjdGMXX>_#O}B2vhppp@&8 zuq|4Y8}9Cpkjp`14?s8Z7MT?J>q>Gm4+>hfv}Z{9iVa(~5G)BA_g>)V9veZnr)f`~ zyn-r-NCC~v28V`Pk%I}c0ue;+5UBby&4CPVkZ))N7lRfAS}nm;_XaeO;2D9{Oy)gq zc=vAQrcJlvwsc*%6`o&)84M}YSNTN_k zP~TVJNl&C-q|_p4wXtr%Wltf@F%y3ydhUUOw3oN{K_GIpGe@GT2XhwED}+ldD{$ZN zP5ojaKpWwM5rM7mEwVx3U59fRrLI8~Rero8K8k?!^4}<_k3M~`;Tu;FK6e1_F!4=Q z`$*C}vOdx6VbWKLZiQy~a{ao;C!zgR#8*I8`M}HsJk(~93jq*@4B;D&pr`4kTe|ZC$$8e+0!L7fx<@_N+FDM75+r*-}5Y!Lcy| z#B5%E{$RVmrm@`Tm$tnUD1r^o&+Z`27fR(0tjz`QCfut`?4;C^qG7g|Fi}3U60O6CWiHz_FnNRH@ z54^UgKJh3J3CUfch1=1exzlkSH1U`yymEpiqV|BxQ1LD@j)UEfLEg1h*g+g#!QF?+ zM4`dQ}a(Oo-tE?B>Qy@cmhISlH_93J%m zxk~|>+(_AbmoNle1YAO>Dr7an_h z<}jHa`fEDV9Kif;!#=A=Cra*ndtZY3l_*-ljzb5Kgh@IYcP?IDCa73ZaYe>k=0PJ{ zjBuqS83cXhBcM_QM<99)g(&$gEn_=#kh}Ci_`twAA!Dro??7}bsBf+T{1zdjrx7iM#l>!5 zfJqyUiC`JnGE`22C{W_S?@j>ZkiHZJJ4oQ{C6wBy;Ok;l5-YI0M6z_^)oHYFWR8k_ zIq~&ne^*2DF2L#*(5k?5SCJL0AwxofAY7D&z>d7Q3n#GP<#m;gkj4iD1{!~KPNGs# zQ9)1~Kq>;X+zyZf*C#w6^e>pt?=^jQ2RM=&V}2x@!)P+2m7o)j6?XQmq<$!~$*Hokt1F=N!StWRIRg2g{i$E~~Q zTW2NwM+B)$$x(6&OVyBKv>GX`5Qza3-|9?9yKBq0NJDjic&;_(!ZO9w-dwR+;0~^> znC9b*?Z|Fdh5y+7Kx+AyZp2&nAVAlk5;^C?zK6_MdBi9oInkA8JP+0&Bd{kuO z^HsU41U_Q!ni_e7;5SlDLkFSv(=sq91krep*JK?$iGh)EK0uBcg}1@H1;OB2$al8n z%)^r{K7gp-XWO#|{Mp;BfmjPdVWH8M%D`ItS;PXL9t7W{s(A##W4< z7_r&n%9SgfllHg1bmI4bpBY|fh4cE$PruI1)tGX|cr+qa1Zw5@y1*YYm%9T{zWZ8a ze_x0G5lfsRb|f1exAR2%dUuKN6Qxa2N9nOng$wB~8~~6eNCf&=9Uv!U_}T872T;@% zl$XnGQpKop5~Ep(O(yL)qFU{u88}fSwN)E8mS75Z_T0Hh0?$-c6`q-%gly#X~xG4M11y+;~@J;N{w8>$hORsQ~hG(i4oa8Ym{1GGyI+Id`tOmUpyEx`{3K|OFjg%^8=mUt3FT)SSZhEPPKZOyRvtt72Hr~P zd=B-Y0@4fmZD}woPo6&A22}$3Bg3`_viJGq97Vu4^z6Bx)pz_kI$mI0m%tT0K8jCY zHJ|9*$;haHQn~YJ$aHS{-NU2RPj!x9s5M(VeXDhBX9xzB9mruPW2JoUg^BP2Eh@rC zDe}B%e(xZ5ApmIRK#r}UD#MoKk0NAr^=j+L6jbMs^R$CRq;=>2(m-+B;w_pklJtOC z$`t1rWf~Ko-L~x_)R@IrcQ%np^HYet5wb%M{o6DgZgU_RkZ6dc**+y?-Qivrsyb~A zL`qopld*a786pt*fPmBAn6I26LYM<2(k~c@UGget+O^9XchVS*%Gx1!HvfGx_Lul5x(G@?u^-ue z;;|%TDyRvx?qjcT1JUq;XR|@TE{rH?Ncp8w>n+NWu@@~}`Uq0A#GPXOAS!V}rQB1- zq)>y)(UKnd+5Vu!Fl$y#HTIp~CQL>kjnB;XT(rOZ!lwHY4IAt*=q!>nYI3-iuLEB9L%dr)@xoE^o+Dy(|UX(;shhUhd=}PZnUzC z_gQ_`!jzEqqp3MavAyOWR2STs^2C7tHKx@m7vGDI+H{m{0R1Kng#mPdcfg4py0)}x zfi7*sH;pwbR}Mt&D7jT11=<2mdxXlX9H4c>>eY8;laJ~e015397XEHwkhHSZmH-!k zjPsw$xMu~$(o$0+Ftj9c*zG|cr@>hwLy}=4O@Yf^gshJurfCN+d3ltFiiUzG1e-w* z;q;TltVv8LOGUQ?pUij(;Ts0}t<^_GYbExqv#1E*(m~7Jh8j!jZfc4a8;thQRV8ly zBX}BpG)IJ&!cCP@Gc*ODAqGY&y+X4ZGwktFTTO>GV+P>sSkzLO(Yoloa;2p0GmVBy zi;U#J-_sQA8Gt@;5MSpN7`WTI#NZGV4d8T=F|9R|-a4osfBK~#a`+Xbb47H;knK+P zsiO_Ygu5|iUu!u;@@Psd;gC>0rWjOi#e}aMjsiVI^LjGVzGp#U-Cr_l+(I5a3#u56-AGck%IwSeTeJ`@P^(=A;Xa5CP!e5gQUyO-vhxaC z6A-L$pHqws4X;26f(aHRlQ2yF91?X%0tK=z1_iE?sDT;kVfK}SC4?VBES$yV03m1I zdIs#AJ$D^!paJAb7l0KMPkAkaM&t%S08!aWRcPLY5oq12qe{%Wra1zq}|wL z!N$jTg2;O)p#(WQYos*0PfSIcY>PUM9*8;`XsvjI!x5Cb!<5G03C$Q-3Rdh;2MK|_Is!LtS@6%<#11}45jh( z_@Gr}(i5~=$03lUjz$@fI?&_|6YjyE_O32w8qIZMj}PR3{CIk+d6O7=+~c^~30IW= zYmM11+4I}kz`rY@i&e&^>ct?-JQSfgr46tv!(y%t!<2GQs{6?g@Z7awq~n-K_wY*JwPQ^9Z3QG*|Qo# zqL6BmbOKP+b9se`f@@Dha+I{JtWTKkHuy!X*yRO_6#%}mDW?tHXB3KhG(~$$OBgu3 zaAc)Npk0^*5|2S1^+Vi4_UNn$!?-jatH3DG{{%5~9McNwXcnbNcm^HF6SlK=*lA|_ z#(Ep9)zHe-0wpstADoz++>PzC)Y0(#SXWn9mGp^sF2d!FnwS#OfRt**Gh=6(FXZrw z@oKyqcw5+xNfXF~9$p+2Bj#ZSpmJ#gSamUT82-|*+Li1>1rJAyc{@$nDI)GbMFjOQ z55N@6z-0uZj8+m2_69;5Sb|xTEQU_|Fz4P0rz{i> z9=xQMr0cdDZ9A1RQrG8+PrMy`V2|Iv$Ry&iOG8@)><7Z?j#nVMwxIF0{rYvJCTy02 zo}M1uiV4{#350|mG7LDKOm;9US3stN#%@PG_w0jn?cg=Ae|ZUf6pe*|<0z{qz35JW z5On|7;Y?H*@zc}^F<`xM<6PLcfR4Zu5D=^mxaGylk5#?U+qHfDdKVvI!yO2CfKM5ySRWL z^@xj$o4@NmChvNf`Lmu(x`MkUO$FdsllZNY=ltGbqIdoL3edidWAj4;22NPPpW_-y zkZxon`>9hpQ2v1Bjawlu%>rrvEoh`*3JP#LWV~x*GknS-OAnI^D=ThHNSPy^q^9O$ zz=2W%F*}*AK@WtH?(U&wj@PNFsn23BBOjV6^!ZP5Bm@R15ZIOs9t^jhHL~;hg3FZf zY2XV4Y7Ue~xVD3XAa)CZ=EaC)sP6VraIlaiXr@#!{l8V2&6ENz#ouCA{4` z@1U+!W#FpWL^A3{#L?U-vI1|m&!%f7JeKIMAgR#VyAc}z=3^kUdDEu*X%79DnwR7U z2L)jvszPQ#UV;kU4n^$C>lx)!{@9(cZ{LRSsv8g_fQBF#&df{>Bn77Q%a(22dnaLs zg&4F@AXIgM+UYzb2pRy4@2-hi-OY=;csUgCSim1IXPgBo|XBeJU zRjq>E5GrWVqCjseTKShlZEb}Og62&bZW@V4SPsj|y4UR*F?))+GiW&I6fo#{$i{)O zDmsvZiS;Jbr!8J5=eh$_X>rn#dEM*Rm*I4!^E`@%FzH78}oBGHMgC!5DH*1X~A=@REFQR!`k zsD#2BrhWkLK>s15Im@aKA1zs^IQo`^9r_qM72Kj_yw;_Pa6UQ-g+zK+t z8H|{0`Wn}onDp{HNn%@PWe*`Qk$HL8Hev4_sE4~Piv~prZw@rb&BnveUszap#CZJ5 z_zHYCI;K~ZmHp}Uh?a7YW{i>trx!w6b_QhCJwIROV^kIv{b_@i>`jP^v(xY{GBZLJ zJ!4^U6ii_^hym=!@?wuVc>pd7)>aSbnoz0mY2y8FBbK1eJpVqPrA_wpn#^}t?hu&@ z%4enx2bGn5=1bm~eG0ay)31BP0jk4+DxId&$XZa!OMj7mn4n=ZUoirjQPtuN>@a~@akNSzfx2W~ zM20<}n1`^x2xQVdL0e9{f0CD|z!K7Tu8d!9X=z!{?lL~`VE&Os z+r<6WV1E^Q@|h|pxf}lN=;yGtX9HSsq(Ab=q0W7npz}w!-%4o$^69Aj2ytSOA)p z04=mJGRX0kc6R;-G1*cD{g9NwB_Vaug{}f5$=#qJcf|9uO?wV@{GwlpZNQgG_7oauR3V* z8k;f6CU4#VjZY*%NHG`zX`%ih1-16{NQ1{i80CN$2BoF=Q+afl>{abqN;B(+Eip*8 zXr5O9F<}CRH*YXNHUxx+zUAqYCkzmhBeS%EkOy8f#LR~%0jszi-5uHgeu<0jHi&%j zvI;lEDi@?EEn{NK=<%ic)$od4}mOqLal|j+H60Sw)M{6Z%RsXXw}!3Ak7jKxj-wCF0(U@CZHq0 zAwY|I1aD<|`t&JW;2SnMLoi#8MglbjSx`q$?<%AkWV10|?!!q3bwQVnAc_>muH=nH zc%RZn55nN$jR^phC?VvnPS6}e=mxJZ#6N=NkAOtO6_66O_HHC&7mVys(kU>_!E)w6 z>VREN&;ee;YlOfLMgozMRlstB;bGCp7d)Bq>)lg>%aOZ?Ty+hH#xzGg&qfb0 zj#n_Vi=TLo1xD_L+|pRe9ui|fIeckYb@w~W3lN<5o)MOV_~nHQ87G!l=;(y6r9$sd z>x#({V8|srDmFMAU>T9;%lYR;Q+a!IPcD^yS_$Wlox%q z(Q^J~vI`oDyyl|LkLlLCP=DKG;vM^&gh^3F{>RICUO_#CLPooG?TBLkibacBFq)Vh zr#qEmIOtDJfxB=>7&!Fvm1AB`Qp+YC&wyXWyRVF-&ZBQlzc9f~fgv-I86kha1^Ff6 zPM3pj2>c2w(i&kYNxK789FW@hP$>r@Kpc@}U@-O}3*BfDQW8j#0>BF-4N}dBOmd?K z#bb@kKyXG%m@$)N4rLXXvoH(>u?G@`-UI{K+jw0VcqcuSS0o5-SdQ#S#NrUu(39k3 z((z)bB5_J|=gw=C^A;ffVw7WO!E8Y6vH|0jduSxMpfQ#$+(b|B85g$)%C4M(f}PbS zDB10dNZK|cVR`4E6jN*{KT-$oVS z!fR!S<{DWG0IMC7Qz$);yf4ImpW@~)P>VvB@56S=4DE#g^wBK0+LBHzG zj8Kf2%TeqMbj5Iw%za_W!&rh1qR#s%&}$ZA?1G$@bYa4ZOmhHch>^k3Jc5I{Z{lC> z3h^ufi)0Fi^a52-Q3^eMGm0F^Nry9OB{57afXg{FA38umaFr6*{6onmjM#;4d4dlxJl6q@F+G{F}X za0j5a>)`ZA^MJySXVJpO2(ob+lqe}jn3)#CqsTT=^rZPP4kWBpPtLYU0QwfgUK<1~ z8L)ek35g4G>ou4`VLFP*#@kazD=5iq9OH$H=--Gu4`wE_TD2pAqBK8I0L=?~8f<7H zL4)Rr+vqLhP-kT&%u4p4fF?k7U{`-mFd)`)hlt2la8wS%T{)ny@#>5=fGdb!xy(NZ zV0R8QU(kGxq&r>3*gxU45a#d~oA2lHLn?*x03|1(9`Jq~vJ)4IBC_2Clk6+-c{0d` z5eRJy(_7C>pZ}@*Yy+1&pPCv2Mro+z$j%lD%$QOz%CF|~*?k<_saBBL;YsYK!Gx$a zxl%+2$K9(-MHc{>D4@>(y7s5oTLnb3=m0uD^3pUky6zi!Z(?Of`<4*N=ntN=iTwT3A`G^9k7Zbd&Q-7Yu1PZcm+VuKmlKVfO<-1mnhR(`uao)L{#-g zc!L654e#Yre;(OwKooX2IK5-Z^26E@_d#}Zb=I|!0 zju4GN;Uov(+|{dAUBn#{z6|g42tzev)yxWlVhr&QX;}TUZ>G&;rjL;zs4Q;~7NE@u z%K*7Hrp??CabVOtroI&13X#Q70C1Lt2;aw^Hj)6~WIVN_yCVR5TObfYqj}fIM;z{p zFU0Pyz11H)0n<=Du3=?}C=sYgHQkDdw7TFi0I|rB9xsy0MR`?CFib~4L)~GS;mw6{AD~oA9cnfa`stM0@|Ng1SgV)l|3Jdp&3~WaZihux;Y%RbD zYQpQ6{b`5!cL)jwqJS!4U})F#9C<_rDm=1DMw$fxqan?L9u7!0Fe1pf@zxd}Mbh;_ ztZ@wJuJ1cosv|7<$VG$zA(V@_8!f3Z5VW&h#16o46dQCN*q$PV7A*So%V*C#@H-U5 zLtszQ%P_Z1$~4+E!1J)l&9$ne+D&!CW->Xk;`x;tKqI=@YrM0dN&d6 zNp-<3r%@H>6A2X11QEr<$?}_;M5+bxp&d}GGBXW&pvP*d($30P#{F?Q(m>YNkEPd> zDI$(w0)Zie$A^65>(%O4NY(y;0n&H!94$bctJOD%5_t$T>a<}hd*qGZH1lAvz@cug zuRr>hW=!m9m_wlRvW|J4RkB$(ym5H7GD}81qumnb$WSv~-;ChAWH zKrdLLl{>U&SiSshao}i)-b%1FN*pRq{9jBorpXW|Aj^=atNJXHf*U4}Dzi9WsvU8Z zAo!NeNmQ9 z&O|Qw5vE`uui*7$?dX$}hp4xJ+yCJNIyufteOYkVlAcP== zhFu_TO0O}YYSqd`w7d0K+SfTnUbHPq?8xh>BMVfPivEPlnVWdYQ*r2C9fJJjse=zoOG#D z=TMkyRtIS^j6gn=4H%|&?%a7K4V%L!3D*SrGO8^(95s8MCeS5}0QvBwiLnatG<>d~ zpIMO-qJXRz$*NPYUSY}|+J$NXfYGullZSR{RHs^{gV{R8& zWiY85^}0lo1a~RVIFG;6wfO%vON6L_nVMVBfVPM;0A{>@gcaWEHzDyQv;+p#14SGV zjxW$w13_oVx_s^KzZ#4zFQDW_P0}w~qIHC7I#EE<_ zDM1_pKS3-?jQ=vt!8JX+-cJ?hX=#Z(72vYIfD6p7VLfo?6ygL9t1B}|9J&ll_^fc- ztyZm?r1iLa0BUzb6?$KZsT51MegPXsT))gU7^Ai6vS6(47rgH3v6~{u%C}4lA72j%X0ZDaQi5W z$3Uio0Q{{-m6Y^~^mV89JF2nQNC{q&DfTeeF3ujH^!g^S|6e&Z>cIC&+fTxmN~4TN zHgUx;xBB~MFJ4sh!QVur0+W&$J5WF$BMidD()V3{{=BMz4pidRc5!rt7byz)=MT5+ z9EiM~2Fs09B9S6_YpjSr?pY)eHLHdg{d)YShB> z|ML${A~ODe{=uIM&e!-aR63+r#oZ;({O{lRZ*}%>NtRp(&`I25>Zv5e_ZuiUaQ(PW zyF%Q~==IdA5^whvB|hbq;2q$QQ_bP8S+k~l$Z8IS@-zlqM4l^jZ|z5qj`wbLnF`+0@p7>ZedJUPG4CCI z2(}EheD=UCZ(MLO!=>kE^~hwZ73tZyIwCPSnlNoKL#jTiM`Zy7o*i5fpzhZfzxt=V zJ-T(7717ay%snWiN$GH>m&D0j$7R$*l*Z>jj z=F{Oe@y?koXMMDsmbIVqpxy#$8Q{m6^}E5vevC`Wo~SS4TDT2lTuwJk?oLK>-&|e0 zfd8`=Acf>`nM&kD8g%&)Fd%F)pjNKAl}-^0Pwi)& zO!z;I9i)MBQ&Jm1lnEgkDc~79doNkENVcNfEz3`tTo>7ZW{#9yczL| zdpx+F%cV(p(vy4#%3qTqAei@36)Q?x08VaJzkb)JvBaRzG|CxQ3}Wf4EGLiWCkVKC zat!pV$<&u^ABKzwY50_>7)DGyM@#Xb8IIVbY!Fn=ozxk!ah{C zI&lAL+0|GZG+zfGN_oBzAyzfwJ_J?8W=^GYF(-fxL?d_qndW$C=`6Z9{V*H6LV9dz zHmlL;=1rS2eUOLj0ZF?QPO**W_w9IiHk`B9N;y2?%0N;G-fP`e3>7X+ zGu#*KSkt!D{_3S+In96#VPIrnCf{R>0XA79~>-NGb*sj`cjHW$#s~Aewh{# zL%}niLPn<&CD!Dsw9zeG{~)o5(j_jxPENic7hor$E&~oaLew7l5$$^E~C9jZ~6LwLULP%N$C=f(9 zf{bW6h!47LAYG~`dB~To)4c}5cS=~PjmJE;?8VBak#!~@kP98CwJqFCQ4i{y#siKpt4=@$P zEAGCz$vo=RKbnVp9WiVP$>kSaH~c#2m`(%2P9`KD6LOf=DO0Ulj>D>&jL1^yGY;7e zyM83SwV0zIuH5Gc%aRA2crOD!1|SL9IZyxmETi$Mi4!JtnL72z!-2E;#bW2x#gUfe z6Wpf=^W%_>NJ@fvcPNsyW`aE44eA9g5+dO|cR{8}Cd|?5J)unj7?RH1K#oURVG5;L z7+ll99ir_n3?c08d5{;Vp)|?`I`rQR04=;fM}qoCrjC_C7#Zf;Yvl;+O#baaYv+=C z+-1y*=BY0CmUxebu)3k)wGqe06gE(PfQ9!3Gt(?ljn^+ljrvx|_iu@}u#|BbMj&{R z)G#-H*Ep8HS%nFcga)RCv%Q&4iN;z4#u)l4Kf?jHzkAZ7i2~t9(9rfeaCGi~AqO_x z&&dp;ux5IKWDs1Cr(|=V7ZrUW8dKk%4MZh3Ca+ zu|4m9z~Q0SsO&V7&rjchD~cI&QE0pAQuOWwyP{A)iA?3FiD8Dg#E8<`)2msg_VPBR zu_O$9F`YOT;PT%@xM6sRm^hJZWTkC1ozB-@RG*AkiLm6n^!0%s2Me4fio+WGm39WK zNn;3zoHSrc@;o{-c{p(}CniUxNgAkSUKyz2H4OxIK9IJ-wV&Ks7s6M&uQcCl+f6DA zjhoN;`Tg31T^Zg*3vw)Ud$nRnIS5ZWPNp&8+&EN(==NV4w{){fa(vER*Qg{pz8<18 z16vM8F`*)h20A&Ic8%2&vL5_siU%aoLYrTd!ZmjRn>vK#=(4D>l$ULh4W3e-aMHEAS zgxTZ1{s;cf+Fq#Uu@YFSmbo*Sfx|r8GVfrjj`?S2pM~kw(V)(HH4|3bx=fXtISVMk z`@@D;m>UU1wf)feW|cQaMn>{Vw(NHZ-GA~n2jRulX+JYE_K`b{?~{nLeYrLRIZgJs zQ<|C{K;hF57_vyALcM9H{2r#Iq}bz;=6xodS&@CnkPgt+)!)5gnXhke<_j=%r0Uwh zFFAROYHuIUU_Zqfj+j%mc!XoI;hs}J;G+7JYdBdF*ZO1j_{-$c{o^AGxn+WW>;*2| zIKe2FOi;f5xRc`bqyJ!`DU~{>L6)XiMFMuWn)P)T{HXn&G@DspJJOMMe;zig?~oac zg1957_>}DHTPPIkDq`HB?#bbd!8jZpy-2>0e8+0l4nx@b*IUe|ml11y3k!Qb7?nW` z^mBjKoSf`Aefo(fM;({YL;ii;uW9gyr>8=&ndB&hj=fP{ze47;nnFw?b=u{AfN-xC z(Gk4X-JF}CIa9Eq9~>*;!-t<2l9hQA3U)5EyC2x; z@bs$m607nh#w?Giw|lgSUA_HRQ7yPX*}LC+45o5K4B3|F!>e4fMrz_&Q)U4fL3}p+?`?u%(zXd^V5BeYc{y+cqzs=%*TFCz&P<~e7rurmf8g{Kmv!eJx z95vtFyQ_8ualNq5kt5aS&7CV9$o;^%zkfKL&u6^V3Ue^nE+jGQwr#6=21h@%XwjnJ zIVe5wL+%;;6U&^88-N#>NIU4^Wf&Zj#Jh z=hKr>98n5VJnhlf*s{g?Q~;(HN4PS~5U3fZ43l*wE{mv^nRJN$3H3zymjx9i|1Y3r z8tn7pVwKvXjeUnpFU-a89gv`mfGG7)LzF31bD;sbz1gp(|HYI(bMYYp>Qn8B815H_ zDX<%gSQc~}HsA;%xgl~zjg9l&nb$Xy`i^tt;2Obzn!^dFc3_lzlNuHlDUDY{Yp~O* zOOGD;L4Y@q=lfFd@{%r)eX#T#4X@|7<#N%Kh%Y~WjN^1mp#pUtwr(=?Y9Ppglo0GH z%ebHX?b|m;us^JTzThxputosNOiT8KJZD=Za8t$o67)~A2+p|W{Kz#ma=8_k;oKTD z`w0{YymNwmPxMc!l7UP04abe!Q~d3ZKP+zZ?6>T~fZvy#IgQXqA-;s&29z?IA(s|` zz(6$3nbv1=lZuq3yn+pU3;71&?y#WGGFq{#*UBab5VDW+vKW*v3qIWz%nHIB1s_9! zi+Ev>uH+AVkPNKg0ABCXZIGj*BeVfR%Dk*#a!05kCC?YHnd`?t&5TQ)gq4Ey37a=h z1zsmyzCH&E!So#X3SfG&J$?avzu51+GV^6p)`oI+EnfF#A-ycuogq93!U zbP={c@d8q%5Q`7%Dt<)Yu3btE&s!mXl7e7kU^H(P}clK>pNv0f;c+AZc4FM4W)*1a-U@- zZL-z?k51@v2w0ikEuT#Pc*E;KfOE|S=w)aCaxr}AjbQ6h1U+H~!cd{n(Cy&Mm_x4S z-{isiG4DC}ifddq7A2YV-`{T(E_?>{ir|*((6P#;gm-9wy@0XZhUQGwqU2+6I|R=} zmX6&&IhgjbVPO}@ZjF6YuVLw7(gc{je!snK$u6=Rh3%ju^=Ft*lrD|tvFudg!YazB zHqk?DYV2F8){XU*S>Wg~50GC6i(N6~Fa;9@ExemRqq^0OzVma}_%UMycQD>W>bi*K zi3VNJm{KKshUaW-W*7T@I@%iJmR*3eGNPzmvO3*t zu|TK+T{9F{34!Ro?2hAXG5;J${-r0VCP||@bENME#&9mPctDgPFb}41cxE!; z5w8LMqJdBx8dUeoDEJ)AIBLtfbni6r_rY{kbI%urgba}3D}MG85nU|SqBG6iKJp^W z3amg18V<;zE)%%UV1eel)k^a&wSYrAcJPBIlU}BM*oSQ_ZQNThcu;oHH?$nL=`1lG z>3K4;1hOhCR&P=#J)CRWdiuMzl&hfXw!zWYHf;Qt5pJ-2`Eo6HAoyBhwIneFJsq#|>9IHxw39nA&2dd7u4r{kY9 zlM-r-ywjt&@t{rG@pRmAD#N46*%cxdUUeKkmHsx~+bH4tpg-2GKO{#JurSmS0LjA9 zaB$M!cwCQ&!}$k#W)FCg!`IJ9o|zZ`zLEbU@CLvjreXzTbWM@3eX_ig$NUwlMbSKP z(cP1!J2BAY?$(949k7+L9@HpUyu@sIY?><=0tu;$+X?ZC>%SN=6=fMicN((-;JC*_#YASo zM$%G@LXFI{QDo1XBR1^iS5I#8PwZN=q*PC?Eqnr9g%!VcLiW^D&o;aUo*DWfB_HAZ zY;x+E(^`&+r0L`IV`(RkNVmbKhK`m+XU@qQd8O~CZSKn$1qb{#e^iK=f%o^pmS_J_V*ab|2iNS>@jkM;@w_Z%1G>P&vt}#c6JE#B3`fCh8x|Nen)SVVDlsj@aFyZ`Mc7?1a3|IUyt__N8^_XM}!( zX;k~-U@IM!C@t;W!Sk-_?s90PwVFsQTQ6)4XjE98+J(qW zemAJYCqk=+Kq|T~^^_5}I3Z|(v%eNbuH?90i(ND97xdb$ak)uJK8!wpzkHRWm4#7#~%MEsnIk?shH zc1Sl(4L)Q} zwp@xx%9(Pv3DYGE5;BwaC*&%_{RG`kZ(axc)fB-GMh`9(Poj|2&;QYELl zS6bEbmr_~l8UFo6yS5!CJvx$h_|cGZomM=5)ahgRC8v+gokt&B8lLvT^l#tr<$HaK z?@GIUJGrFy%@!T|T6bCTDQw#kyT<{30amS#fAsT8K3%?I<;pql|M_&MUYEw0iL0a| z$GfikU%oVXI8T@s$lD<`%Z(}7#U%2^BO=~VKBz0ARm)X)JqI0lMNKtk{P>`IPC55m zHfYl(eCUn$@7`tY&QsqidP^l!)1VmVdoeMWu3jzFp+koiD_0sH=1dHAC|0~UC2&Tp zOCugPqjo+JLU1Uq$Nu*-7$aa1HRBG&0$VD4&O@v#zR*}0e)35+b! zJkrN$JqEN#yP$g`$BaSj?svu-nRPvSns@Kt?=UaYs#PoHUwg|<2@Eoj&@Uv9#(B^UUX!AOufT! zS-$qZcP{a4H{-D;;1uAgE?f(t*SK$p2Z;|p@)Zx9MTpD!caD=Lt>DL!0Yv$V*5om( zSi!VJe&wg}N}*6g)1xAh%6{ppRkpo)tp>($14-j-9xVpB?h9Xv1fe5b7coK;vYa$a7H)wtE@A`~ zy1tWrIcknB2%G)>oXn1-k1wf2awAj9+ZAVHQHZYZTqtF5MvIA_yjfvXDGh)gYPW8^ zm8Y~0|K$M#9>)Fry8E6JGfLXDs$>cj!65i@>H)G$*zAmT!0Mw%j`X3CD_Pwd*1ZTF zxceU-J!8`Ry;D_`fpn zl@WW8a=LFf~~Es(e2caxcm3+)r3K#B^3D!@hIb_Yg=11W<;^ZpMRDo=%Icpv3ycw&>-WEtm; z8&~J?1(6)xEL4A2e9EOdbhT^)5RG- zdY~QK12L8;9Au6OWhrg~l1BYMD7)Ha3=2dX6M)p-aDVqcy_Ru*Q$Rou!a8-?9+*e^ zg!s>&Z*z||ti^l7aAgTsid%h?ei!n+2zf?@81Od*pWJ|jtk56;{Sej9p^`v9u-qYE zV?v)W^3ho%PFKPSckzG&wTV2gmW8=p%XZ>6+nH)npPRlZpbS2Z3k2ctG`DTjh&d4= zh?~iwNcsL<&e#%HLemu9^Gm*z9xD42pazm4L$g^=pK>VR%nIP#K_;7(lV!yxlO45g z8W)QZZK8Kcs9#4=dF(f;uC$e3A_9c-m@Q^oCMF~-;-C*6JXqyEA4YJBl&J(nTu|i& zIfgD&vxA%tlqBRrFXVS4VOc>|ebHdqV;Mwv;TV>Hw#8p~FAP}o7L5E=3v?;OU{L`oOyB%oW zJv}|u#Zb1Qa*}SCQwZ!>Y|flHbVK(@UX2=+Kqkj6xa-smO10ym4=)e}uy9ZQ;moJ< zrL^&Zu7jgEiq0#{Gj$n5B=;EMM7e!8I{G!^dE9Vq^8Eh&y8sHhdmMiB|L`biq51WD zhrKd>ys`7};YOS-a7!J1s~rnV1+Mge)g{s{=pMNXjZITB!Ohg6gg`Rb7!rUI46Tz& zcgji$4hS6^4MlTr%Ivvxoisk@FI2oDeU?@f%Y(6Uvl`}j%1Y88@_JslG;m^(`J zNkAj>Bo<0cted~(qEe?j+nCmjs>{URHiEnKdP*1?ctc!FlZ^Hu=e>WNcZ|#O0}173 zX9kUZ@#9&@ri|mMp)}bk*^{4U2BmsuW{qfABAAOaU_f~y^e&(l*ZGBOM#VuQSV(}* znLc{b)Xinga+88@uNx?z9-O|QIUA~a3FD}n%*@QPf*p+~92zcOyqHk6 z9-I=DLlaBOpEs_hBxf{EOlWRlQIl1~aE^2|W_350YM)h<^fwrbLsFn{c8Uc2U#?M_ z)zSC|X`92>wNWPfz2mz10p4pd!o9 zDHeK2RBuW)hZ;X}VXwbdA&*Qwe`cepKl|5B}FA}U)tADzG-q!7g`VKZ0OjigQV+^Dq(6>h(|cnt(T5jc*#CLV57oCH~!RjwaSZaj2a8Mm){r#C+&?Jj=XlVCLWE$%Sw;kHExrbCYf%vgW1wW0E|j+24A43gsO3SNXTl4I6ixACi%2e z3hrbYZw*|m9W5b$^5BTbZ2-97Ltjs=?jLkdOaW*G^NOzkdt65ssTt+{j#Hz#A`022 z2xSZVmI^HV9;P^byXMxYH|T+`(xc$)@iFq)bLcmS>MD#d$@K(-1F!MF-NSD7G&`6` zPSPU6p_F0F9?%S0?ZUZp2Kpv|iVo}=(b64ki#*zl%OTP>1_2sA6j4Ie^#E3v1e<^$*Luw})zyfyA9!hnCJt9U9 zaf1iWr0S$}5~-nmb_7{roy1M>B3r;?oi#d8X)@8?2&{!)0p}n%*fZ}YDJmeYWKZNR zI=j8$MUk!ucH=X?raat*0*X&Q65+?BFo5TZJBYYAAC}uVB&}90%-kNWt_9gll-wlEurT&soidC)Mj@F`MEvZp? zZtOcAF9_5Qs`fJFe$~#ax2{@M0%m&*7{<03LW;MQb&V{pSHheLl;Daq%D z$MGQJ4&W(=p)LI>BV%%=p!m6a@1FWyRo37Flu9O&)rhn?y|{;hDb!KHgh4`)$5KzfP$Tj; zXjeMEZ&pNo<`}~ob6vIA&iH=f7C*lfmevSnRG~^=A~K!IPWgf^f$Y)ha%M8Gozw>v z4+|1SY(@gt{QRx!*BNcA;xVjY8_aO{{X~8G;sLRD_!pFle#OPEDW-7-LIH`}z~=BbdgJx_TorSBkF=kQy2S=PCl`jzYCLW5y2~&j1F6;-1^m zrkdW!*|O98gQeBCQ%289hX!QYre&RK^P|_;@#7uw3WC3;V(%%6M@1k}; zeI~;D@UL2k$4UwKCSUpXzG-{8=^%PbU~JhWT>JP$-?TmGZOh~nxL5rwe^CVu0@5DD zNo(IZuG6RQLb3fJnNWszLdpo2r8$Epz}O`Wht$i1A}{$dnK`#&gpR=cYpsuO8Z?US z{4XW0RwUeb?_qp^8Qx`N&^b-6Wjv(`3t#`?b9Jxzpn4P(LKi*mh)-nT8p+z)d>z7C z+`lx8(ksf&yzUMpQKmvnklk|)XWz{nN`#?s&PhrC*6VG_MXO2>c$`bOQ3j3!sV|J7 zIizWsVl}O6@?#36^dxi1i-O^-8|al#?Y;GS9w=O!gCGCqjb`IvMi8`(2xv?#=MU+F zl+O5>N?tj7N?_Se_Dul)ue{YduMY|A*12=~_O$1a&4fpx zH;smenY--yl_0A}J2g|nqX1EiCRN5|T2Bad;DUb(z5)8M49FLEjb6-ajL)q0;lqb@ zw7b|$p|NxA!@IAC!>Vj2h`y5gQZp~xx#sV`Z8;Lgsn7YRpozU8jVN?IgEI+R-N@sh zg|}1FC7!~5E;uBh?D|ND1#bum*ccFLQ+lQ~81Hc3+p(2>O=~k(TMm4sPWIGSZ}=sVQ3RR1&+Yt~ku5|iKK zzd$i}J@paqN;W_gxUs(641VgFO@KH-8OdE5W=zH_J&GpCp~Kkm^f z{&F8on>lb7L3QgPl94{!);3RwOH?x03F+pIXMlg@M$|9#tFI4D%Vw{NYw_RZAi>|j zM6YFR+%tS7RrrMlpMx4?rmX-zPQ_7_IN~M@OWCWDAy*Th^;`7|>7Q72qa(yXYKgY| z8MihrW5z^5LPeCXg?&qyWGLqS%ppI#F|P$mS^aBbbzs>{ z+8#~&E7$Atfe{JF7S)KPnwhM^WGeEK6E(5KFeFN#k!Xyjp?uma${~{fa%QX-I1Go{?OM8q|&gi4OC2s0$fVqB=~H`$o*3C904j5fFm{5f_llhz}}a7DN}=CzjFP z-$DO)P6T@U@|&*c>FWeknC$4lyT6jOjkLI8IJ+~YyKRmg*kG20|6evL17<2@o!uc zmP}?{KEp8KD|j&|#7Yes9Jo{8szuYLFm#J#n+QzYIc)}|=wvEOUi;mBee04qA2fPc zd1am04SrM|8WAH`(fll+ke09pX)-j3%*jdE7l0`qL554l#&C~Dzi1rz!dyK0&1>KX z!#^;b%`KHim`!tK(Bd8>-RkH--(Z2bZ{xtx4l+7U?1Sm>;kW6sa8v7m zI6^rSGtP6F2C?YV^!3f+#flB$L;&H9Lqdi{_i}K|K4dv57>M_LngoPsvc`1&qd4U< zvP&8&-tl5QdycZkfOP2e_*iYe=UY*uya>Y2Cl{6cTiaLRC%kd_E#k{wET#3QQ08WC9Czvx~o?bIaCnpWo*1Se;kZ_cE za_Wb+1lXo33#tQK2tg-xe&s*;S~a*dxwdIxe<_O<8)7gOn1JEQF+bUV-$ZGlVR z$7&%2BZ(Ym>`mH?8Hk~g-^TC!`I$cXjS8Au}vmn^B3LC!ZaLJkc*U8X~ai#E>( zaD`?8X;HI{WsXp@DjX*2QR9sHsC8D*k5FTCWxeOjKAX#R?&R3aokb&MhWK`1xBDUQ zlaj=<*#>FWRYfgtfULhR>BgZ_?PohtXA_TzRUl}b-fFU3GNuo|az{*%d>c+%0u z6-0Pcu9N+hF2+`+Z(Y6G+vVM1&OH9)$ZVM&y8Plr&Y?vesQVvB%xR4;#_7urN$=jt z<4w-_Bn9Mp*PHhr3#o{IymsSiA33YX$V<0@gQSZigA}L%Pz*bak3j%d@F4iKpmaI3%j4< zF`TL9_2tZou5YBIFs7z`k+X4C?FcO}?NN9b$S=a(9SgOK>_=1=#xEo4YiSsEX#le9 z%)Us!3rd|IC*RfRw}AWNDCHL+iR3|Ipl5(rWQxJ{d0TD3fMmn%d1#~gGtHYf?>}d? zST*0(?=N;tzL?QcpBco4#W z?9rnZu^u=nId{$$}|#oo{Y zJ`4BS1i~a4gkOX$xR@z?A~RDUt@d-eABZ`IZdxo6O*fUF>`p1A@NvjBSt3}#%EKgY zq7+JP+6;VzRWoYp6sUPkV%#Z1#}JWD?`eMg*s*x>fhYzl5Rig0)aO?THGa4!PzmvZf%`LZ$v2X!@f z9RdYFyW*9!=_k`+I;@4)l`@Wiu#p6Z8|v~`EIDiFZ|-rSeE+*N`2RMJIjNIFhMXz^ z=F2$0mU}W=^*fpa@YWL!lMhE#7{2=H^$8Xw8E)g26Bnx!G=R0=(IjvPgxb6|YZILC z4Ag`~FZUGy`zWaSn6ba?Bzn8-CE`=Px1)zZJyEWqLpiLp0P_=~a@vj=H%_j=5Z2!= zyP+Q(1tnI-EM+hjaD`}GPVf14^Y(3d_~=$qs>*jF;^&73aAk{;6LPniX0O8R9%z^b z&LJp7p7C1u9bYZiOW2*eAtP*P1uydXh^o869yQR9wF4>)A)YWdNQLMR1ln?T^aH35 zdjB(Z6rk<8i4os5iVkuHdl+*C4ps_W6vpxmWF|>g=W6#5Z7^e*h;mmOVnM6H=yOKB zI_fTQ5oLCH4-7MV2lA1!T6?6(hmonL**=wwJDj*iB1iI=Oy0h16QNkq{rK|UaB8EH zFPJxP-q4*>sGI1O$XW<55UsLpTdS6tbP+0vUt&#SJ}3xw`r9U+@rzvV4@Dv$WRwbY zI?$Unr5OZ;BC!&*^IgvG~foW#m(I<>y%Z?mJ&#U%300&Y6cbYmRRJx$(rjz0ZU#Jn8p8a z_@=qJX-XTJVV}wMsxu@dXb`LlQuH^iYs6X^U$&%{S8Tf8baQy0_UY*r9+p~YYV!ia zd;LC;>c#KMP^p39^VVg^CcZjxUAu+Ighz=BY1_7Q0kUkmbi|iVA)l!M;KfiwPa+?I z913>2cEC-Ce~RZ)z+@LY5JL^RF>ghO=yt_5HzqCb9vps8QYe&za*=-O1B)D1qI^dl(%r(EUY;}In9Yrt~%n=Qi{UEdVF`vuPEWQjf@!`q-6uPye(21HXXnJxjg z`*{S_r_bMprz3}hWf4ol*8X}J&*+zy!gJjvBl>vHX_S0tBl6Sp$B!B{kK<0dw=^=&m6g{jdPGFSb}gDW&)%Lk2b6(F4?$mQ*6)jifux)^ZR0up z@aZ9!BC}p)8Lx!2ZrSqXt5-EmWR`S8lo0dlteVM1%v#B5D%hNTk~}>s#D?b)u%vX6 z*omw!sr~$#zmz$zXkRtd;D}O#zX}(=0guajbh+3zC=*{xk97)A#=)QK4nawf?cL+gm-nTU+Zvm(w&$i z{lW$j3tkMfF*Qs|$Cou5_H0op?`uR7)#IS})nn$aCS6i&TVP$wfasf*SWKtb7b#ja zh{E#(d#Si4-P$fp@7Sd%ccQV7RGNUF=D}|Cm?e3#7`PRHo57xBIjg9{_948ot_-`c z#nm7(-I^>+Uzq!MdkqWoSW6NX>$mzxMcl=ND`D);1hke(&vInUZT1(k8|%&r0oO7q z#&7=j#k8LB2k)3P^fJhL6|=VVoJE!Q0p}?@*0dN{h%UJS8Vz#3O!T3$=0oM@>*U+Z zfBLiv?Xz~!^D#YA}=H&}QrVYa}b} zn*(&LXBKnB+vzehFa6%&NjK-rR=#um>p_B<7s*R}REDizI}V0i9~s)4+)_ z`r!iglF~=2zr(}Ux2pF`GHy)dH;KF>tIYZH3YgqYs+fIjBm$q<&Ksm+y>ShFZhXLF zR+3{VAtM}qRw)VsXl=75|Nb2A%ksiy>rgd+8(eiJkhvDyXkMD1Fa8>!5U-gAb$La; z-kreYmL`}8dX%w0O@hFdaEEJR z0pAnm<1&a~3Dw_x^>MUYAb_`e*<>#a2nfhG;MeeIR%t32 z`a7jmdFe4pL_vZE()@gB1ddvzLT1{9yj+<{`puy-o+G0RC7~>*QP;QtRR*;BO$Lw= ze62lKq-H9QFT2%wq8q+%62mh#zhvh7>7GRCfQPy0NKwWsGPR4Ek- z!UQ#swdD4xSSJfjL;J{P5xTZs2AySQhj#PJ%hm7Kd47Xm3WS_oKoH`zjBa@pGj|g4 zgExG6=+}nHR87W+!9^ne=FJ$TudZEpGUcE;j9D2{;sS14zJ9q6B;NZJbr}OB*L_R> zZdTE_fPkS{H$=IZ6K%}b(RcMA1Pah>Fi8o{HGc~%N$OWa#WYxQBQ(sHDVR~_?F4wo z7kU}s4smZDBZB$tfBl9)+;l3F$JcE)u59cEo2mf@2rUalY6Ro&kIO$U8&6mI@#(46 z^ny~#-M%g5fJ$w6=&az(b>W6$tKodym}Tj2YR zp+3SLuUvjOcoix7E8`!pa0P z5jHwYhJJ}ZzJbu(&ZFR)lSfLm*L*h(YwF-zb8=kJC%u9NpQ ztZRL@A%h1W<%Nv9v+WiKcyQ$0HcGJANzyD04cYYVr%Si^9H$Z9$r*7^PmSn?ew*?D z9cUgjNSchIr<86OE=PJ_=WL@~VaEjLT0C)o}j6EoyJu2tN=+guGM^~=L9sMV>6M8jN)S)f4!OW z17E_ScDTX9X_uM+)FYeGE6~wftDRltRgEO0CIlD}gp(7IPxv}h^^T|#h{YxVDDp_v zd>jB5O^w!whIeU6k%}t^Mf_IJAnfFtGH!Mc;)Q8a?%<{~aWsDgUh>sc%CC$ePy$?N zFc`6YIUl};dKjQOMP&V8+OdCaq;d{9{$n#eGAC@t%$Yh1(o&%#hYA@>ft0$*YiyyE zde^tM2+7w@rNLPec75K`BHN&~BeRNL>jH!hfqx#tgSqH0NO!=`G)QUIHh%qhC#OQ1 z5|fiOCqtl*LCBj37M#uKn9*;TQ6~Zr+zqlT$sX07wBxdICorf>1308No{#1XNJ;Q; z_Oq_tx@n7xs!%Fl3uZAHnG|}&kZBOzA%o^k@b5shdJUvN;sbzstqMoCAwMDdI^J5~ zmhGmMEAMx_OSj8lYa$W)gPY7F4!F6{$WXsXL#-2)THpfNS??c-E)QreChUYgP`}Z< zb#Y$&VXeoZ9%v7!|0N|wQZXsP0i5{sj{w9d>4XZ97PY#T;Fqs0;f@_pHNe6-4AU4- zfNT*I+~m(c_wY5u45MRc0);7W81hB$a*Mc;JLmv-aQKnM(}*(qp*ID_tjNr)E{%i^&QhKq^hz+w8{f^L~pDGR{vimVLUZ@rbV%5nZk(<(aiuqaqG&2*nbe z^G^PSj0%*l=_u&?fB>1yl$L;4o4+k33*j21!4=k!A>d^IaD-Wzou5l8|G}5$Cqha08!}PY47jN7 z74eYC>`qlP{ny`oJN=dBS8CR5_dLYET6>*0f{=;}`df6g-FTIUClmAB&uZ3yqy>K4 zl*Z_#`;9Mz3nuCMA9nn~Xd;hE8ZZD&dV46ZmS4_vbGrQl+liR$`!O+$5JLDOgulf_ z-b-gmcD(fXamGs18dlHWxsCQiI!?I2OKh}!#4cZEQ=o|t6`8O%;;EEm+zQ}NG`syz ztv^1(>PF=3j55NW49MWL4gj1)AR!I@zoICb@p!rvkjsMjVZgtyWR%J0%pB@wX+m;# zazXlH*Ht*m>lmyb(C2b8z4*Y$ibYe7UZ3FpiB<+aAc&B4V)E0!1(Zyhlx15haLt-? z5UHqt&Vvt;y`;?{=kzXDJNE8Y5^;3I94}FoWDNj}I!JFw;lgy#r&ppQqY9Va2tl|j z4mSAEt>Ew*wAO?QSfm=T)GK@qASB;EJ=K_Dn1C($5?6FMOb+F$4_yC&>W@5(CVmXO z8^AI&NPg)56I=?S=RxD!8Q`WK`@y&xeInNsO|jTVXhVil8%R>3Q*K#*?Hju)$`P@D)t z-CHjK=aStAJqg$AeQd@+UCRm#HD|+qmqer4FAX>qRve-@V4@0utp}@ev$`w3@O$|Yy?+?4rjXlny z5qSpyB1$mw`Pnbg6`KcKMwjtKFpl#%0TuTZlZ^85GoT2#fkKBP~%+C59V3_3n;WuCAUn5%;%kj{C`tm`R3 z8?=tV+shOHV0KdTXv&7dUyPj(#MGzk>w}zRuVERy<9+-}$8u-7GOCsDUDNg0NqKm9 zgr)whOfNsa(t2{q0Fw>exBaWzU;||$!D@Ky9AK=zGL$l0htak6^%y&DT+Z$U4r8#P z>zFZb#=A9QYp6M0ic5F|ueNUWw(-XqBsxsj6P{Wb*!W1kcX1W!He_5%{?n-OT|>is z(-=w+Brp68zCr_OpjMhlhM4{uaO?MmQCDifMsrs065P1md#tC78l_^*^_G3MH4Vg6 z3WV|v9d`9h`Vo;Z-OJb%fc3%t{z)re zr$y?YTm<^BXm$kh0#}ln!HEY3a$#$>Zf(jiANVG#e=f1lp>gsRe!qFYy`}ggiDYKP zmbCH;i#+kHAy-a1UMV5IopQnW@F#jMai-YRtg79!S1+3UqIeO&fkXGzYSV^twkmh# zLB&0o5brl{XzjuUWBcgGl~)MpIK@Blii_lkbDBS`wmb<8KbF(#x{e71FEc$wI?+A1 z$2Q2RM%=~WU>?DZ>SJK=Do-fSNs^Hx#35ujQfr*vW@LDot%ALS?XG9Uhk;(jJ?Aa8 zcuZb502B}k*CLUpd}3783?j?uHs6#XB<@AbbLXiWpHRw?Je0c{&%vL>;e>)hs zkTC6p1`=?0ZspPD4$b-V1T)0FHFF#-n;*;_j=NWhtF26XHaX%oN*%m2w$Nft#f8k! z)4%0;+*Kc8^X20(VK8HtD{X^%R!x0svpDi_PLe>=?aLVTsNl#)!LHS~-d z+XiVdZ!~ZCjCz`3oN+*iF5zpXc&8$WnVgs5r7y7UFH@^LA_TwXm#Aw(qp|nW*%J?Lo8-Ik5 zy+L6O)Fl64TnWqu3q5S|ut20sq{5E9dX?mf%t*~i{cdj{7ixV9d}3(r7f80z`Mq?n z@Ptq5mJ;6yP|qjUu{&{u7d?{vR^=~`QZT&CJun5vs9BF5dx3bO_@?PpJr697kvPu5 zlTiEJ$35ny`=)IF)Vi#Yg>aMn7|RAJ<$2=rQZXpGb3lMvC^>rsB>$9jCnjTycjj5b zif7(-P@RBylr#r&a-MFj*xsN=MJIPV_#cclh;%R;GwV`s4kVoXi<_% zmc0$WF0lh0KYv6%4&@pQCz~B!~mBT;qMxNhO6T{ zw6`xu%PRLDhA{mxV-C1jY52?}21o7e5{;jWnpUj1H!|t{dugdCFQmyw_0oTRmVZXz zC1V{xZOCL5J6-?&Bct7CNAMRwtORbflu&d?YnY6o@0Y^^4_@69A|iIJbwLR)wpfnC zH1XnMLBX_~gxe<*eo9(#A@o|BLC41hbv#|I31%V!aCkO@!abXlmNdE*9DD_Fl}zy| zS0!C?x>w6kjU_7-fWqSWa@u;i(xC($*J$nyO8FxY5a29>=m|)x`L>6ZfnXzbD9QKt|6H0K>wKGmA z0bb~~K>8|3;`lK;Pdem*4pTHS@EnCvnw9d%a8X7*d^p(Qp|p8k=unZlFi83Ud8 zl~H+LQmKsMkYr(v#hSK#4c)zGv}lEoI6~=rJbdtYjjWzIa|WQG*}!8M9Ny+TQR*{; zy5GBdb8&2I_<2bsKa#=W!14~ia|6l8EuOjNrwO~SDGi(t%wSWr>7guWst>boQCKFD zKC)N~c=|&{IK}X3vzcMmz^1?dL2GKirtaN6p#?=(67)6Vgi%ZRMh^hX^S^35cNz*( zE9FT|qyt;4BLKH3Im5`^)>yNeeHtv1leALPveKss)`CExYA6nBEYl^5a_xNpRk%&^ zllDq|BiDo5s#hQpGCyCt=?nrQ&@S-jnzGZ20B8pT1>x1vzMN)4V77s-Mo~jHb9v!U zC?fP$G!ToXPM>Z@^niq&NU85RWT77Z~1Mt;RJ;jAJOn_y)_a?8Ykxase%&JLF3vxhgv2QosEs;#nOO z5V9Q0AwoCup8Nv>^k`+Aj=c`I$sQ08%WF~hJOLu490@3cMbLdYlZZ}}$?yeKZOFFr zYB~(ui>AKM*~mn*JK!%Wo)KM?2ImipES@VBH>Zktfr(AQmKR<;>?Q{y$Hw3 z019hbec+?eENWdE*pVzoV&N}mih2`3q`u>wXqP4plm>XY zd;o&d!^n?Ag%4Ax0}e=LzIIbHBBFQ8X*{#mRCKOf|lk!iaN}z=@ zwuCNpE;{#iQuaeiD@Kv?QJQi*P2~~D72exrPS5!zwe^Z;qdrYj<4CoEdGhjks73+y zb^>Pyrp^iu3Asadd0<*8G7$iVK0Vpy>@`L{+auJ+XyRk_Mw|TnmJ%~t*`18Q2F!;Z?~~;6^lgAtjSf@uU}7-_Lee4zi3#JcX%7ht7659J$PT% z1Oi_Z(3D(oH$)g8Rz1IYuuWJxRXd@!H=XQDcb9ThH}Js^Ce}$bLWCz$kgMLLZIHzT zwZ?;3ufU~yxkOM>mmWPzU(m%jIy#!PU5q(=VS<5tbSLI|42>Rz>aK`h1Xf9y zm{YVz3HQ>ysC&<(XH>=762&8#yo0p<&z1*No&iXtaJ^|ue+6v%iu)f#B>|!CN6pMG z^2=xuh~8s)t#Yz)cD_z^*b+{OtkXAb0{`2&);D~n_U8XK_YfeXCS9c-CP_-Q%VwMx_#Jzwd6=|DtI~mpOm#zB2F;Hg zmzjZzKBTMzeZRA|Qr$o3DyBdM zz}I8)wYEcdK{d4tnw64!4Rt77@Plu^4X-ft=GCj);TohNffX$UW5Nxr2$oD;@gY>YR0cH5QY=y<9Ea1PHe`WyKKe-B-4ec!hL{O)gfS_%Isa=Bnh5TZjug%l zQ0BTd)?tS$aAon5?!$o*Bv&R_~VDVZMu}iqxWv2-$ z5az`Cd*7+|^2fx;Io+vLSI+tn_rt-Z+cLLh?X!QhVHjcB;W%(uw}$JR_6&!tbP3-V zO&L0Lb;60yCcM{Iu-`jHR^>UhN;4D98 zaR|qnQ#ynbiEQqByU#|{44a!xC`0Vo4N0%wlH6@U)WRLUC&SDL(Q8sE*M{RbeS09d zyym3oE!jFRpD4MS0)kVxX&dd&7Gn{X}4{ z&BQQeO}L`~8g`V?aqm)&;VPoZRE`#-4g;3|!7JO}#>DmV5$F+1cof--f?0r6?S|EG z?&h_M?q?bhAt^b3*p%#u&FOFcDyVzNSkBkYcQ6SArQ;e-Z6wn+}{U#JmD1oP< zq#`CWKlEj$%bT!?$Piq@f5e?4$5v|p`@-}is2+oTTY$jWn!HE{^&9{kX=YL;a3KRC z^*Lz$dGSA1pX$$@IyJm033*N1qA4Y*-p%POL1rigzg_-Hg>@aN#&1*r`FjJs{A^c! z1bYX$0DmU|Y@TRQE!sKsbWY$mFGRI~@rTTp?Ih-S*D>V}x-(uJ(B zLQpU|-+GkU@Y~9-J)$X(? z#zz@Z*V*EAWS$MLWL=Ib-1)|g5*!fsuvx1{1on!|i3A*HD%bF#<&>8zcl;iCD#vAf z{q$5LTYmv@Ml%M1no_YBhUA53mB>#Ijb0%I!&0_oooNt;FQ^hAQ!F38F&yW-V(ySd z*|C9f=s;YipD*aTGH6p$A5;yKq#*RG`wl?h^qEyfQf6Mdbm=IwE(p#}6G0V}CfkDcr_QW-cm)XG~8=H-nw*RO->p2> zqZ|(XXxw9|SyUi&&<=Pgxje-KR9wn$8t59`22L}TNAsE z9ruP??J9csDhN|23RecWs%PER_6QVkG2fm(cEe|L6?rlhQkSWL&ZbORZmbX}%c zO3#h>CTWU(fuido10l7IMRMqpq&Ec`xXt-=ZS~isJ@^3>>j2g)4**`~5Y+Igo*xQ&R z0RrJpH=FCz0r3+TPxGQO>Y^gNHobG8A2-y%x`5kce0kf=pAAI|z+I5to4Hwx z?S&p~;LktW?9{!{mKz{LYR>m19w6#o$4?8gSH{Mg}H4`3=+0wjb zPH{9l>8FCr(|T@Dbl(juCyY6dIl=Ne>VdIaLTxsW`_%Usjyw5#^QN{FO8yvjrk}|M zK#uwh2`|rM4h6gnK*$yE?gY+wk?k6t$3So2kW+`{<2)8wVv+5@;=OpY{dk8PD4*-m z2Nc=P((JbU$qDy%E&}J+kD9F>8Tw9WNel?=U(baA9t#jwWIHuoJ*rB3M#>LuXf*8S z%H+~$DK(8;jsZVdvcdY%(3!t=vfqH$+He!ywgxJ*4T?t+K{7bAw`W`db539%ViPKE z7CV^YtT>c}fuYDUODq@i({%0IX}At?w}B(FFY_#&Sw`=*6CN()p;@n+@K6pL$mQ(t zH&9Ll$`EuzLrKh3IVViuXcizH4P^o0n0yd)Ae~Futo>%#PCF{41(+|-K_nk#kQ!a- zt3H0bsY-oB#9ttzuX)b~PSO_06^O>)4E!=%?5vO^KnJg*xMqf5&9H<+IJTx(Jxw^el)$>F1%8C}0Db53geKipUfI+)TBx9lKqo7!fEA=smU8-_3 z-|Bw;^QYoIQj42MOr6H@fcNYG2#hzcc0US+VNtHnFI5E&CV4>VwfPzsP6Hr+zr-4_ zWt9wCWyq>{<`oU@kMaJMUOv>;4iLpB_V{o7lsB!?452NDqKjve(Tu4_=(ju}XFp7A zR+)s;jhaa2IJ7q)ZTps@Sx<1AT-WY)4i#{!I~!-TDzy?yYLWtL>sQmqYC;#g@%=M` z?$kRB#`WtV#M|_RpoiG+3MiwvOW4;WCGH7K5A|gI1t!dx>vWzNZ)eu9VR0XB9ne#x zRkS9SIx^c3%LGoiXlR{vqrbS=WiHrPuy$6$1Xw__~hD^+%2c?wOF7pNh zdj>4-W0#mZa1Y?YP`7o=T<>pDTKiA|Pzx0*WDrka;LnxlWG{{nHCC|xB70nUwxMgD zftJT~3}d{X$5x6|#OX8eq4&@zewe`->c#ESI56RFHp)d{_ICK-9z2F=#4{iV{cETeL+Q!2)i%eD7Y$p(GHTc=%r`>y}8|i9pV- zbzX${KTH_`E?tc$c@Z#&i%gSp1-|fJY-})yvjJIq{~r6@*2Pt^%Kr|JyE=6WP&7nj z{}`hGU=$){J4ufG_{L$NeK~h;Rx=2fRm_K4`EZhA^#)G(=lJS_kx{bLw>f!3Yl(q( zG%1OUK+A8~vw*ATN;(IF2G6wq$I@~qCzq7eFT8Z`;GR{vU0sM$9Qg6{1XR0IIn?Zk zTLn^2tD_BOBB?bWDj9QKR@=`u8&eI#s3$w+h*@}XI>*!M9%vxkeCF93+L!}8*c5Fc zLqrzMo6BoX^Y~-Oc4DGKL5cpPE-4sxv+Kw>3ut4KhArx(7apHcrR|{&0*gbvR|)EM z_sL06Z&g7r;9r?0-xlE#C&gDGNn7+<4WNhTk*E8hfYq{4x*lx;BY$WoF0%L0Q>K(S z$5)7%@)i7GG)I-rCxxv3=FATEp^PX}{twx28q_5d{s6=FXWoMcC$1Gd$7z#_gt@U@ zoG^Lv0EB2#`4>B#e_@D7G49ph z6SwMkbB|6>c_vGU>~KznF|BsjUcGvp^nO0S1XftxAlqHrJVZQ=i_`dGKjD;J!(+)8 zJU^4(godF>xjgA75zgo?BU8VTnSPDlT_qT5fL9Y&SFYIQsbxJ8=$I@z3KgmC*YdRO zPEJmT7dEs5fTh{EK;MU2f)hjaBeNgof(fk)_@6B|i&wWEdZ^Sk%~ew-xrZG`B0|t{ zDOaLwr11r>Xf^X->~r{L|H%tOk3pxV1Z+8iWII>1pHLVIOba5~wvegcLbNaQ6_E*?IxLUBTvh8Dr}s%`qo-@fP8vs^1~Y-+0lU0&HQ>yJtK|G3dBC zkVe>XP9F~9gR!==#u~n0Gx@Xnwn}syvly;ji%sZ|9lV?>hwNHzxd-?q90uk6?;@oy@tg)ZT zr|JN7wWuUIEQx%~UQL`sFlGp@4kqLV`p+}~xJV_{&=;hPe>T}n<)?QsV62$**Ss` zSA}mK9TUf;L0cq`NsYgp&i(;rHa|PVrtNFMSbBy^cF2TU#1CH0X=)!h=0Jy0-?`!8 z6_M>%xwl8sx3iCD9e>6Q3X=^ZjFHTNAS5)GKPV)L^x+hA7jqJgL%}otZ6^1@oBExf z+qG64ZzQ##_LpHy@m z1_3&d%Pra~yx98wr9b`Dw9|nhb_s0(J$+bm_C3;O>STkwBOyXH&=39!{>x2PQ?yp8 z77Xe~pxrcCZ{yB^a>p>AAxng#k7=Yy6Q*%qY9E6%cD#Y0<4N?B5zO6SK8l|dTxTde zt?~&!V-KXBNO45bho;8V(8^Hq0X%IfhtTCTq85&GHL zHhag1A74=EIh%mwjBI96YH!8^noJat63uC{g`NZ;0U>(Q7T43V2{7i_1mg39CT{nF zwF>)nS=#qW(MIl!cph;UFQ6pP^xgWdtyQ0(U2I3FwkjPsE04DaMa?>0*6(;(Q z&%9_L-atoBCpQ=EkX*UtbEIagfqq%<{daV@XdEo}@wu61hZX!3CntG!0;Eo0O%7tA zF(D6n?XjhAF9kIi`*w(95apeS2o#Pd=4UjZu2Q3z&rP+_hjycSi4?=Zgm!hOz!h@a zC(53upkw}EI~*0mEAXWnLgL8pp)ODbNepT4jMt4F#JxeZ4L?ZR%ORbm>b_I6B-N~R z*BZp)7;+Kz+-LQ_Mb!bz#k8Y_2OWwKF>oB8fFobVY{1n(#(C*@A;nRNk$hz63f<+z zx5SbI?sO@q&OlwPy{Vj$a#+~VcwuPB0L8#F;~q@A{nyW!46NzXuxbS1w{UCz$GkVu zG9c@^+0QSEkFsLjy27B7RSHL5KgoYxCN&IRiH0fo_$}gx2nM44C19=$s1Z}>?cmwX zW<4H!z~Y?tOk?j~>lo>gWhHSB{6E#{jiSETTGBs-X9G%*u)8tNYs!}?BXg?vk9ie{72iQkKnK!;>;PKB`(7)@B($}eY?Wq}M=XzHXc_r-8PE(Q6Uk^M zprri?6kzx9Z6zM27SRw>j}V>=f6uaznmREh1WyPo9S)>FU0ATtK=8XvY-CyWC)lvS zo9N%o#u^On$sl(W+RR#+LxIej4c|VQ)G9I%a*I~y5RRYNJzzS;LJ2SV0P!4DAK=(6 z7bZ9{+D3lNt81XqK(?1d$dBRc}+7IVKaLWC5 zyd6q=Dv*vRj}?yT(`RXylzZpS^{BlN1giDz)HE~;_eE!fKt@XmgcAd9jUH(+CGA_( z`K4%e8SP*L{JN$r0OLRN@$c{W>~UJ!Km-)kSri8wvV;4GsjFdc(m60CO?-_yLepfo zcUz!UO22iiHT%-mZTtTD|$d|CS z3n7oRRGv-<9yEjC(fJsVFuX=rDRnu@f^>YNeTQeyovYnc%nuw}@}4tsCas4nc9WKt zmh_})DCvw6N~Iv6CQw(1xloPd0qG7yx2PVqCwa;rmL~U=x#bEHss@Fwaka#m!3h)q zXO=v)l9cm3JZqSo__t*;27}cO_k~nf_--g~sbp77GCi6%tEr;be+JLIPX`c8-gu0uGeWTh67ivmM7p=7QUjvd9*Ych48B#fl3M5}^N)qgPdu5JdK9z*RyGTccuNE!tyuN?$-c7pJ zSd)hQbs0IDcxn4g=%kT`B}|Dok?*ckB_X zn#nJkh|_2ICcADS=nL*VspL8^VGFisuwS=Nm`V^;7r75+kJ++j^=caHA1~WQ4jI?t zKmTD()Y-9Po08x)38Nj!K(QHS2RTJa82*E189ADIa4rqZ>8vg^5bY;u3o~O(8hD^x zf^Q3t{KGw~)n(2n zM0F+~?MZBIGb6F!GQ6yoiEt90iyHA6FM`J2QI~$^1!x+P$?D4V~Yk+VK1#dmChxz;9ef6`X3NU^6 z-JPW&lb)4z_1J2a*|rnuwKjeF8HaSZSI5N&S2mNB`?HjK4M_TQc7R$DB~t66(iuTx zA3Z*Ew0AD!BoJ)4LJmkwD=1mAWK;Z-hZ~;3;?(`-J33Ln6ZRrxUu68cT=ZSm4MJxU5qL;ga zau=doA7);3N&33yL)i;~E48^Cj~J|AAPdl1dbawYIZ6&ohOcitE}~iBT~sm zwSD{Du$#2iD&yeW{X!luut{S`rSt^T6ShAh0EhL1TE4;nw={D1kEMC9@YN;hW-X6x z+uaVx#8>1E&Xpyxml7_{pspooKuT_C=;SduyzsJVuUoggJ#%olZ7@g%(^rWGiyz{7HFSNqU*qDbzrh0ce#D_X_BIT!T+$1^R_pz;-3`1PaFYhqlii0`W_DPH zGk`^vJ=*y|4avOi?mE&yg@L8C`4N%C5`xfNLU6(};*OYIiZE*AFof#{8rh z(j|au2yJaydk7M+y0$`4r6;c(CG{{9vAH0nP?$6WGnj_O=JQ0C6 zaEp%WMZ64W)_rHTY>0{7G}KTdZN(%^5AT9l_LB;}dAh(sUVx4t^hPpXPA8u&%#q z;iIn9Y!k7C*fwr>k~M{q6OV8u;t*KL-LR;-X0Kb!4C%)qL0k!0NnO2*8N-o_f>;Rj z8zHfYEE>$4kPbF#6u+cge)LIbXf&gCkpzWk6>=#yE^Y)x&Tt6T%}Ab_q0(H*Gyr13 zsv3dP@6DU=W{kpF&33Pwb;E`|c~tY$vfHEU$xHt~imIkLshLv4$hKHuxsQ3Zvz?+4Q@b{Y26l7PTtG? zA*}DjDS90xu~|s?vGQ2kfV?b(8Bq?Zm?eifQI@D~<||T#aDqiS;g_vNPEy?EIuRVwH6F$i*#5gAgPAr~r(sAMN?!LNV&dIhIMyKs($c8A($ zZ|6=bNg=#Vq;9+)2J>=D{s(I}ftX_w`Lp2+9vnP)t#Vaj;GpH!t{#=p&=(dA>s_T5!aoZW44{o2jPa9QY9YW zB~Ze*475PeO0YxY-uy8(XS6j87;bK*yAS?&`uOn~8pH;fgwlG)WNs50KLda|48LDk z+Ejj!>?(Mi+)UPnx23or6@CI`&SS#7yj$=7E}sILKo-&{N@UC^qiiXl;hCro1a?+} z!zKr?JKT(1avrue$IWkyJ-IrbB}&$8Cx^%fy8F? zUi4yEbhmLW5{y0Y~f)9A{7^ z+_}&asX}h#$Va@)Gw%K#4a1fDJ}tyd&1Zx?^}BW3hM4lV=o9FkP@UC-m7*BRh#P7* zoZRs8?g1TCO@V-;H1GsaH%}fA%vQa`PN#tihLEwx&!0a}Qk;Z5Z$>6>%@E27O6%b{ zT~q%wj=f`(ngOVl)}M-}H=;Wf0=pJ8?nYog^{dYxi#eIvzetICi8d`f1WH8%jmz3# z6Afh1j=BL&s3}Y|AjFUQzz(=+mJ;>j4{n$FKsr(1iUUnltJ%H|KinX9W`y*^_z-e` zhem*7p~dqlJ$B9`yU4ntq}jvwdAa6C$Ew#gXL(@@m@%Q+RI7s8x0vjnAA+b34dtkT zX~y^U_wKpOGX&{3=7vJNp}wR4OONOWv{tk&%+4?uBvX-Z z!zmd~LN^@ijbCtvyj7uSIf{4UsVn*DV`_WP#HND6PO5wYzdV=;T(cQFqWQ7^_-S~A zZL)=dpyN`OF-HL@sc*}uNXNB@!Eann#cI`}NN8wflKGrx(h@8TGw&ZA?wbe!jt17W zuA9O0_Gd$IGhx<(9t8`IWYsQ9YB)-*+2AeJ#7p}XZ(u7702(^zHQ={7QM9u5-hcK8 zQ6P9BJvU=AqcVD0u;@<-j`C`FJ+BTI0img84;O5Ok%bq4ZwW_9ZvC2dEU}18Cs_iJ za_@*2XVb3a7pWIkbJxs=VT%I07X@~l{mnJ>j8yhR`&V(__q64O4||{T?e|{W)^(Id zS&&G-?SDybH6{sLz4#=-M@r7h_6WgmEPN0Nlhnj(O!UXev<|oI-;uv($Zt5+(M-*~ z@!JWk@ua2we7pOwi{tf{z4`iju9Fum%O8lA#piR;w+}uJnz3p(X9l~#U+IN})xmRj zn!L0RjQM8fOk-VjhB$nbsjvH18AUYJfC^_l+1zxn8u!*TLf0zD;;9$^#H5u1&~?03 zqedljBM+Z{vw>$x^lsPg5BGvG90$0z!Znv)zk0=iI~t;D@0k&_m0>@~8`24bfJ4U^%kR-KCBG*qJV zss$phaz8zk!Cbs>qP8?lxI(edN!gpVFVdC9v1%%)G7quDM`8b}3o>S1kEboMXxN8M{{DI0=Y&e&n&(qz zTwynVOYQskc=EwXd<$ULrUAm$Mx$I489ukhfpz0a%3ukrFTYIoPK<}~;0?)*-a1X? z2QLSx=~1T$;YG6~6g`>DZkfAPf%ZdEDSACt)Ke%WFlHYLR{IlO z7TBE@(nQ9d7!{EL5BUNWYP0y$l*#K6uhIk5zA7NH6FFRXanz_$V5#1;3i*zT#AI%h z0zdxXVBT#Fra&4sq~oDA;=syGtlgioW*$(6Fg=;Ea(P&jz_5$DqBO%5BPK1WQYYux zo}k6@RU_-7 zJ79Pe#pI|l!E*Am(_DFR*Kje&sU3#S8ik{b5Re8D7k5xJo2?!i-EU~Nne#Dj$HYQU zjIJKKcL78Mgqrlqw|nwq`67P|hrs-KV5H^VBd z|IO>I!>*1m%zLaacWeLK&o>O)u>N%a4);<^mS0%uY~iB)P0UkMJJ}4Hx@TP07XL=6 z4(;M;sRgMW2zRHxIqc;LW1(%(qIaVMUYDX3i}F{qX%e3T72-o2Q;BTy_NOo`_K06i zGl%%p7}8hxnhstYWX3P!Lt-hS)LXI3Pq#4n8t$wJrLJ*g(uGJj4!;v0k8*nh!P|F+ zd;@q|17Pl@k#oL(RNf!wp}>JPD)^nDjpq6#kXYTtxo010#ne|tn!0GDETa)lizozfm<4{eeroG#JU?kUsdy*^N#H87 z_>Zh*-B_=X>RsNp9tQ(9PqrjSrp8=B?x0Vgj|G`38({u(QtN6bcq3t{@2qImph0HW zIjcU{4Glf9YI(j9P)`A}46OXa`?t=k`!wV`G^WC(o+!;-p&F0?vyJ~C?gl(wDVv1_ zWVhP9hP-XeLaL=C+ePIp-ZntQ@?+UogI4wF)oXq8Q7tvM$SmS{@+SMhcEjkW+_0gF zqBnjH+Co-gc#M8YzTmJf1$atc3v?8yB-HE%;>(|$7&sdf#w_a}Eh#ai-wu=@px?m4? zgB)Uc*t^)s4k4s>87l&{vglB3Y&UHPt-ova3qWULk3o1u*M47ry=lk-vg&aAsulA( zu3WhiTWU)$`h0L4XE+WLFjFEoLifv4oSht1k-9+!z7(L7&v=;u%g@)!G=A7To1Mrq zl;LVe9GY;}_jnqMfI}h+xbq`Uz^ju*)s`YwB)xojg;HBX&s2vhypa%6fK75pVDmP` zFyvBHK>Oz845fV$uZ1ZN_@;UD5kyyC~;H9JS+#~==~s31E#Vwb+9 z);RDTy-juPMrZI>8kxRkDyj9aRg)*=EE5 zmYc}QfIDNcoiKw%e)ahsq8yM?m}#_=`~yt5fy{o=RGoU-6vxGfLJs22`zrsx2;&}5|G!6|>UmyJ)*Ehks zhO#K(MoI*gj@SaL^@4Piii%UbM9=5Vo1tHQ^*K-*W!DBq+vJ6+R%Lp6YomRpXCnQq zfRt*mSAT83Jd3e>Iu^BQZ)Tk+MS{>l-8D2Q5GB7kN|JyMGgn4W5d@||+^_K|j0E!c zf9p3Wc#qfq0X}!BZ-L~V&L+XcP%S#rk8*PuhqSe9|dJsP(NkGELIX@o(_yx3<1 z$V*6>hY+9~(oRQon(^N5SLVg0#0GAIb;cd!;Ku$;{U(3f>X+I0qW|qx`9|-e-~IEO|96vmck|4+j#~BPMarvnXuT>0Y~b zGv@+}lleg0d7}2E>DIqZ=b{@l;8SIeqVq5Hj`m0L#&Vh)+uGJ4>JY|yA|p|2ocfAG z#GpSmJPpX~1REglMG)pU{fML$E0&y7F|VCM4Yc|_JbqO4HXpf~yRBVcl=dtB_#?|W zUd!6=-d)hu^lym2K6V$Tv~2^kB1=7FK2cyu-t%BEAjRUx7jqF@@yq<=@_f@?M3RB{ z2^2jvlxvV&s*v#b#oa6@tpPeJW?GrcaTO&Xn=^$Oa?bP}@&`U&wW@c51^nM-3;_5a zZIP29#P@o94R(07Y*4t15fnim&3i&hX|iaz>Dw19nX@W9s_XBhxmORvHWI0B?j7E+ zis@^npY4qHYzm=OQ^7P5_Om0EU%IBa)Z9V@g-~z zAX%EV;caw9$*u%&#%T7G$>?~a-SY--mNRy+nb(44=;u0St_Z$4J-=t1>4&|Bf!foc z$@W!Ig-(Q3oqB4HNT1hi*|T66$0ZPz=dO<5^SFH62QebLa=TYc*PY-6RtBNT9T2yF z3n~csBzS?v&i>3(1(JN(TX2yG3NO<$ARdrNcJhE?Ot1MUl*-4ae$P@&jciMac?rR) z)5^zFlHf!a_{bn8NINArhm^FmRQ-ZbBx+OBO5hbnX!DNEGSZ-~R(7fN<<8WnY&5bv z8pt_kH4Uokn&=3%qxkXT?W^?O_Db+rP-=X^NSaJyu%VWB`P+hn*m#<8#fejL0eU*h zzg=T8K&w->z*`JNvcexcWN{SX_5FjKnIf(JJoIFD`SNIAE&wpaWXlQ_@RZkg#%q!# z^bJqBG1)Q3MY=~48kP5Epzjj^0eH(X?H&9xUGzpwFsBsaxBSzVEf0+2kAn>vu(!~v zvJp@Zu%$iF6Y{=lRLb?O4S2lJB}9v!^b+JJ@k(yA8g`kvQRE1WD@7AtC6<8^k%xGS z2a%ZVYm_<_y};1$lOj6$`L?W$+Qm@35kr2l1_t7Y_)};v(v~+hxgi{d7ai`MMyMZ$ zS@Y?F_b$L+Gwsl!GwcNJDO=a}p^cUUioii*NY^glLB>Nc&j65{mb6O)OcMrS;TocY z1;qGS?6Rjb=%EonkFX$Pfj@}QU-rwXqbX>3b}|_dai8Mh{_0Py#O*}k$=j5)bDixZ zDgpy{eHph1IP;VB>$cU(8dP%d4%51@$K|pUzC8vQy5NcDm!_=7qlD2sf62}aG({!?6trFk z=kcoEXYHxt0csM71v{KtAc-sR#3FXVpJ0XSTxZ;?BrU_LP8(81VriYQUi(w z0+>mSQt7V_{=_>iS~;r=Fjc-F_|zWpFe=YW1BsvkUCOPJEsA1E<~zOWSR_2AQ{#r_fWQSV;e!1p(S8p$`ukb6iEejosgMmw|uPa zht-^s*08+AAm-}TPw{t?K`^u!+>Te+w1VD1swbq9J*Y(yw*3NvuxL$+)~p=Wk#NI^7E=-*uqs;}8cfa%B5;`|$!M%NI^7`-%HGgZ~GO#1qz5?DR*SG#ywOarQrsM zNihS+@_BA0*(=M~W;FLNdRy0y1`+EZNEvi-MOrh!nBOXfq78`j3EVu%s9##t1k>!K zQ!hQ!`j+FnP`dQs1u5R2!ilNs#W8Qo!ba-fo_P0F#}vDi_m4atf0w$r4U;Ws7FUGL zX+WF-NNRi(5Ld>Y+V(l;faLTmT@_{qV?AvgJ&!vm+L4PA28asBZ1Tl;ffuJo3-28GB7!2UYbh`z+ zv4?gJ&sg5MD=RncK_!p$ZZhSU^Zk*~*h1!jC?qmZsPoVKF)evNySaf6xxCmM<4F`x zQ?6`UfsjnrJm5hJ!jB;zT&GRDOgzzxLYnv$*Jt`o8&UEx#HO~SOp)o`RsogDO9wfC zo(LZGmpDgZRR56$@0;^bzJyQIj0ExL216>g1-X-DobXVfF!iRCO$s%V@mcS)KAFKwf%%T=Gv(T z+pj4s(A;L+WPx*$?7pAzmOx?~bnsuT> zK}6pwG7Dthq3zUb(*u8LI>L&^v37S69i@6;2y2VwB*n*0eC3l|86UMK(p zdVcTe8IgB9mryCrL2L$EHc_oSDb@|d*%;Ymk~iP3un^>`iCIqKujKw>x1Ov#VsZ?{ zf-|CDmhIJJ^AprzLCfo8z%8-fRr~rxqQvm%8v6i;Di5(XDrScaNkM}-mCPu2KW0eR z6O+wj|FS=H{H|XB86h)pN$-IddzYN!(U{6|1>hbrr3`?6oEF>p!JmJ&hIKnKEp`aT z;1mw6EoW|w?uC$xVU7uCGI)fN^DZvPo5r1|rt2z5gEh*RL}>Vl+qHTy4#Ut$W0-{U zwz*!Kea4B)?fIfM+f$J#fD^F^jUkA7O$)teSN@0e-}|288P{Sh7-=w*NuI^|8JB$n zyLYUyCS^Tt!clCv)qnxsMPCxLFHX0e+6EeAf+`&}uOEDyP;^$4~IB8NMpb%gY zIYl?q?0aY|1HZXQ-j`*xI`D9K_w%QI%s;=P>I3Jt{?|@jL;JsrvY%0HpGE_}pmMqv zdf%>mlGVoOTHAx_MyevD4FH*bEp}Z;m%C-XfP@oTSCh#mG~2}qtu?62OA|#j6kmcc z{lfL@<(T$jI53K6hR9-XUb%9x*(92hl;{@Po=N5)KD5Etiwesl{jnL^?Ue2Y4(`23 zV`SJz<^MO{iSyor0V8@cUOO0U!{D1)V7H*xSmU9(S0>}Vpea{|pT?^%ifBq(eGD~! zfGgJ~f{g>oZFy3lM-d|NGj&UcoN>HAevz|Z=lwvE;wS${i!FpYP+`FbPF$?jnrZ_8DD`Iu zSqCwBMQI&OTaoDT!gPi($yB*&r0IAR*G*~IlH2#AD#sPyk!V_BiF~l={<=V9!2)KSA`@#6;qr>-@grXckCQm$8mJU z9K%jQEe8;i({H_{e%b=<`(0cAL8ia`01M-j(U&h@M$XlNpW7Cz>I>wBZtOgdA4JI& zOrFY$pnV<;=@EdaFeZ+CG#D_^hJ8N~M;{@m8iAol(+(Z(M*PJLOdJxLL0Fbmd2^y>99WM0#l z!`N92{UZ?R4miyBR;{t516F|zbhBNVKLY$X2s|8;-_aS~tJ(S}M@p!PSGIP}Y910o z9@}f5nUIF2vw6rm-i-a7jO+F+*!xvM8?vhNf+bJxO&Av&+4uo7arxu2+*+;Ox{Zl= z-@9zTU4_*}`gfJnQ@b6FwfykYv{37+%}2g+e~|sO3mA{1J0$BQ+n@3}yh=TFGV(G2 zKrB0lKXF@XXv5#_a-P1d@BH&oSpKV`hjjX4z*gfh4Z(S`)wb|fYrTu;5cgsBRr7qa z=s8f3I-lFcm@|i{F=dpH|cQqULN%86U0ZxHdBb-%4q zT_-^b;^uPRW@WzJ0a~I=9Evc`GSUfhK5bV-213v!c%XEskHIR*@08DLyTUTZ`3YIZ z_3vE%G=X=}d-674{wZqjDD3YTOuK1!`eUl&*>{mcs+uUXl5>3A@1o=o!AzoRwp7<) z`Xv2D?$ZN?#_xHNBV%fB_;lROT!v)(VvyugQ$$R;mR=MS5Y=@$z*G}$)v7H=kS`rZ z5#1#=ad7Ut2d+59X@LlD?enzjrfW2PNseZGh~4y=wHgENi=`32787lszNpScjzcRZ z{UEJ?b98I@D|?$LjhQ$xE8#lAE_qy@fRfWm-1%QBGiWNJIr(M)v9P#CKw>T_a^=cz z9eq!My!fsSShKN2CID*V_{9H;m}#q>F;M&x{(S&+^}Q(6=qtb6d{vbzkA6L=iR$<~ z@$J97rAKY)h^R|WFg-vSIF%Dh{xL^GAx9g~c_(9mjX|;wD-O~IL;s8lh&%wo_%Cx zQ+*qKmyn(yOxbR#lLO!-%V>6tD$eLm&2T-PZm7$R&ie2^k^K_ATQ-Q?&vQl!tUiew zhtWC&6EDeUZS&K6O7}<|Bw^D^tG|DS(HH!07zXKtD7Y6T1`aOu;M7wj-r3V*h0c|T z!9-^ciMS6C%E!NK$STb?>1#T4`P<~J-@x>r`7yi9M&XBMBRY34`j9Gb+ zaznDnM(a5Y=5kqKn(6(OJg7Bej!PYe0i*lYUG(#T1F!3rNyVIF0#6deDBMY#>!5dI z(Uz8kihK{Y1)7JOS5Z zk+PoodT1w&-oRd|FYJBx4BcAVeG>?!{F$W}?9*^a3wl52NzsBId@KqyBCw@^HDw!x z1a$wAd9TL+3aY^}z^gUnZ4(_vm>hwQib~rc8tvQT-}$fIW4iJAuWx%7G!{xSmSbj( zt71~U4CcGSRO{>t_BQxiA|gy*QZP(dvarOq2=QPNZ6h&68drFz~m5!6Xa?y}`V2ISs*k27Fs?;GP4_ea2YSJh*q)WTjOMVSDKtWmG_T4^e;I@L=BHtE_3+AdbYM7UbQoD)HFni8c4ts z`e|)lJI=W|#7;ZQx0L3z>FL%rVr33ojzNju-QAMvo)UC9fB^iIGP6(LzHXF9^oF7t zgAaJuscY9PoTFOPl%zjV;tUUMK1IpsBU9=VAUrdp8`D*l974h$4El*26DTs&)uzJo z>FhRjydh*gITJn}0BTB7QC;7;2R7MWxWD?EKDK$umAKA=@X#aSCr(IAN19Ez`sR~s za1{aTZJ?nvl?jTEiBqwIgh#4%8jZ{acGZ+24UH-^sDQBkc1ByOi*}at=66^=mIVUD zN++iK5OJ5>7=3|h)@tlhRd=yv%j=%M(@Qu3a|_e6hbE42c;(8yD2^DyGvi)QqGcgz zIh^SvC#RA&;g3$EGcu?h&x{&!lR0J)Kf#+JtrTBf{K*($8QFW7eWCk6Cf2DmBw&z- z2me&|jf8o$UI8&5Jh zOFY$*BYDU0-f94ldtc?H+^n((#^En_Ys!@2m^moqAEyYb*6K+Arl7%;uYnhO1h%jBhH1cTGMUg1 z$ncf{&eNyocw5w1*YaMCNv zs26(>@aiFmZcT+~;6lPblBMGPQJ45~UVvY2bvbo!;S2U6YNPj@LgQDP9br>&OLjxl zr1lX4EiL+h6+QwvLQ;q+T&5DB#0%SbDbbiuqGql3F?oq*PDKtdu>uSj5!72#>m zylRYuLxoR+eaX+yij@sGKmRb5wOV4_MN}MES*(F{Lk{%?ry|;~O+%QC$>d0Z7&?c@ zk8)X&B`QN=Q7Avkl!k-HN~^{F>Ca0Z@It~UC;=#0Szqy<}lq zJvyQI>uu(~7pBHs_{y~yHZ7U;Lt&-v&rlWNI8Zp$d&Q}%WlLGeafuSmW+wVzVR_Dk zNOBTT;I`>^Lu~Jm3JTrYju|_GZihkc32?hSew@_fZHCf93`21YD~v>?f|p2$2TevF z`BD-h+FD4O5M`Z(dej^*bO1TM{otBdg?&=4+~R#RspT)Cw!&MH%*u=41XrvDcItL> zKG|&49r*5Hm)INQO8VLLVvf>~I7Ay!Th@@=HQ`>72p4!4*JXvN)QD|Sf#O84dgsoh zh2vKtOyxB7qF-W=7Yuytz#Z7l7@Rb-t+ z)(t|C1d4H?`!?O!DGJ)8GV=*;p{dZWUE9(57S#prF=NL{BOsK7dq{Wzu7Oj#8Yr6@ zFk&GVl^%^jHg}wJ9b@2ABVvNm6vrIqcQ8I!T0a8>HG{0yA73@G^=(uFttWsm&#T#LIj{c_N`dLQL`rxErE^-dz$Y zlvr8@r5B2ZbNpf4(P!f~@=3vsXXr=84GN{iBT7jT%>Mw|KBa{p(y_Eck^95&{Lm2d z_haX`wJpET`$ld|l_UQe9p*v{5rDU_3t|9|p2Dx3K9=LWYm&W0n{KLmWLoFE~lKHtl z7#XD(#dJ&--JJ0ylw05Ym};!K5}m>-4B<0&I|Gw&pD>%>;rST)R0jAgZ;!y#`X74( zh@BT3ZO!xDTD|iE1NsH^&B@MQ`x%)qS_)v2xM92wfGw30mx;ci|WD_*{^Ih!ml+vnV zUXqp~3B8^6>`WA%Kn7DVB@U2g3F1PHL@Iw@{T@9O%`20!C`Xp|ZVE@0py!{u2CWyb zE71zLeud1S6lfp^sta;0$S%>Q5WYeB4{FmCXX4OPh$PBF#;jN0oSsY#r`|E#i9Ex! zpny_tx`UiT@-b1O9x>2xz{2oIUiPx`bs3%Nfw75j1@qa=h)!-@trOHpz_k0)NK!QN z5}MaTEP=*tvULp&kn@Ah^g1ixQej4nNbN^xr|EO@Tis}v&Gx;L->^Odyy854?O^c0^ z$KLIr3Hg4!1?Z3$i?Vizk| zHiSK*=Z7&{v9KUIbYi1JdN8py^4b%5gPq{7IQIPhp@~sQqJIW4;e?<5as;(TYkX zbW(n$pTSzMaaGqYUmms4gqV#D;SDrX3wejYXBRpq)lq0lwNQBH&W7Bbop8Kbk@+g& zl-3{pz%aG+DnxuxY6^WXsf&R?JX$3(169MXkfMw|WU+1v(Stm#)NQ94*TxZbH|h4v z(n+)@bb%V~z)rPSxah-7&-36e0S?VD3+C#&NrK0dZA}6N`54sS=X_5=iXiNy4@*`P z*fY#~^=EgT3A$N2bQJ%38T2gSEx!jq5S)h+`k;KyfJ2d(5qu=RUwU>zJ!|XABp=AR z)fCDwE;|Xw+I+duHDmrDheqTrJHKhhU(Gb?E4AyLd%Ji)?Xd&4|T7 z$_lk>&pciG{dgzq8i=%Zk_=HD8?eJ`&IN+Vlb@VlMq(e1NeU)P(I}~j*Cn?@ZF1Dr z!35Zpw`XQ%FRsNz?_JyVVsWF2t*3qIu_3Hik<0kCO zBDy187SvVt;{fPj@jpnBhG9d_wZ>9si}L4!XoFslc#TYLJsylAY&<<}2pcJ!f9XV# zESRllLp;~nlinup4cn6jYw1_!MkEbmlRAZ@Z1m255ZmGYhj7(Dg zG(AnCDHV!mYG3m;t5yLSy#YI0EEeEk!By;Hq~1AY5o87}tZ^F&mxHV-(Sy+#LrOhQ z*ekFmSSh7^CvB^Rsk-82X7T({ct-=V8h*Ks7nJgo7cW*o3jqroA(Uk#gB*K-kZQ)s ztq-jI9nYtHoA(N**bN~)B-UoY(q!Tvy309-l=>XsI}9}xepteKH-GhflCLn1s(B== zuO5ZR+t_c5o^p@wnBN>7;~5lX&rv?Y)fQOi8<%9HN=Yyt}D6Y;CB*{j~x?s>;Hb zjgtW+WX<^9hwTEG&f{>Q>7GE=*9sOik0WsZ(@w!doF4I(Ps5J-bi) z?9AAFmSv3(l|4zPN9gV9mP3XR*AD86yM3Z~>{W@J3!gyTRpv8_Lbb7Ws{6;H%z12Z|(%UzHjlHy7IeE=sp z;u;}_zDoO$cqZt8UN=0qgmU94Z`E@nxM-Z%AoUX!eLorna4upkk@Fp942*=LehH{? z8oVT4$<^uiGe1O*YribJsuOK?fO2c>_-%6^Td>wfdP>v*XJL)VIayTY=CQLb)}<0O z(4dlx8j!>J&?uVKMy11zyohq(qSjDHoVuP{`-CARStv3}eeTkwrBLWCW0vQ<`5fmv z>5!1oI5S{DKrb2C%_`&RCwW9a6UZ|5pei)Fe?1G?R#q%AuYKVwNCPO3n8;~S>(AzI zoew@GYPaFgB#~}YJQ%fO0BaYesq=AZe^~G~tKef^i;PxmAp8#xVsN_yaAuL=s_Y<# ztEVI~%&$p>y-58q$Wm2mK*6vyOKU(n!`M9N}Tk`hxAqCcf^i z>JD_~6RHt-F3ZDt0naXRdbmcs8Lpb^rIS-&zUc68MMTwqn<0NUJk)aeU%&RR9>@Q_ zo3cD&<*@;3@)cSUpPU#6AVA>q*c){SLjJr*dBj8s^buR8@_?!KKSM^Jl?D%vbf+4$ zFzak6-_KmVn%3%A8%jj5)K~P|)ukdWM{jN(A2i07{78KXYc4VqW`U%>Y)FZUJ~`_b zXy_r?Q6rT*2xZzP0dSK00pK7fJZss{KZ{w`n;?$_UW$NtX#bwD7vF+r!AN^}wy?bU zt&U~D0jnK=@P;nc&-?eM1v$hscBG@mU(_3bo0%U?k5d^*D&7`<%pSFEJ)gcFd6y2Y zH+O=zMs?akyV3l)e)FI%C{5k2GG)xAgF?P?3(i$Dd@vq=BAX@sS+#CmfwxKvW>C>E z`_R1ke(SVVYu5&IzJDJZT28y&wY8h#y!;u+Oz^HHVYPTT%p07#UPE|!DK#Z#5WR9u{0{|8mS z_@WQrYBZB_23U*TusbRhv>Nm7^8HwU7 z7Tmpk)u3LsSWH%fF-XJ+TmNC+vYuORK zE*%I!-n%__Ez^}K={}^hTTWKPEX-L$aswSrA$u^qw4BJyV$3LN-`G)(i+TgxwY`)( z!e%$cCDz(a07UoUK#3wGuXw(_+1Eg7Tmph)G(Zk_2&;?%$I+Nr*KI~NoW#KK#*LNi z3iI1hdQ1cH3uJ;@3450a*bwp^jF0JrS_tft>-WL8LDuZR{SgqoRr^wSqsW;(7*PRW z)(4YT$Xmgf(?O-r{y<}cXx zHN=_$I_B`=j|R7$)6#a9Wz7+xJI{1vOtfJ*2J3ej-<%Bm1 z4w+MH*c+PZ&B0a_Eqd6{UM<+X4t`Vp>#UTa5>e&6-GGD5s)QRAQ)pE7VPW@6{a_Z z*N=(IWvB$D91{Yi(18yE@)b|U(ZtdI43RH;C}cZfj) zra^I2^lKo+;Nal!Fv4RaGFFJ`58-JYtH~{RjjmzZw7x`CS~@ADJ@D;k=mKG(dU0C# z^CSo%Ro7J9TU=^ag|$6gD*f$S>(HbyfGeYEv&y{&RRh(s5L+VoyLR=|pIgeaD`6S; z69Z=YmBY}pG9_y`gLR;$oBuk8ZtEyB49C@abCV^6;jckSl}_6hPu@tKYLn0xyc)c&c{)X z9z{b^q3i4RQ><&Kd3EVhAJ-;D$e@AIfy_@xy$CiTX6FCp2^P1)oJXAxmz+if@0h(W zIT`%SWgM^F{;>o@M7i2PrA=C>8YBUvx!kxz2S$}Dt64I5@S>&$#QP8PujRQ>V=(ny z7sd{^L78iU?qQ{IwF|O(+!fC`gwlxXVyTP2#a~{VSEFK@k?MpAkx6lp{Uxz@&P?B-;#@x&&>}L!qHe;{|GH^3^Mn)+G96C{mVEyvsk8 z;GHva*;o)9gR66|o-V=QC9yFrG5}0Ph1!r}rd9TLeErF0_v*adQlYS_ISL?&R(uyXfe};N!Lf(H z4AeOq-NL_)qFk>%;>VQunKNfHjcI{!OkLC`FJG=?GK6QX;12=Bn9(Zh*fSO!)ri|E zsqp1dObe;JRXk#Pg-4r3-8lkkQ%391w`NgH1#|9Gf`ZJ!xHU$LCKo^B4j4SReIvecYC9y>GwXDncg?dFqn6HN zaEl9g9ogy4e)>^~b2y1^V@XYeAoi@$e@7h!8d!grXk8=jT8?KS8pxO|?py2}26waG zwE8RP=JY`$K0qOFG1{RS(wNkn+u2qACmG`N&-%U1dGscKQI2-NN`?5cJAEmSWtt(> zWRd<4&eCsTpF}I_$8X0L76dgx-iJ#=Tz>fO-Mhm^z0dn2A#z(`A*pEEVuzZ6kKX4` zYL%1akdbO*8x_D}P5L0hiW~+E7$dH%Tnk4~#z~j6xkVIPNa&#W03| zq<`lnycO~8w;*G9AvmUg)`wLeavmIyIPsdz1<%bZRrCtYO#CG@CD9(g*U?hDNZA1cU>cSMTTI@Wj7rVC{7Ftpq% z+C4bVEapViQO*k@%+HqyS4Rdr@X9H9(3e+$EskYQLjYi)fn|Rwb$!X6LJ&e+ER}B! zUzgPuf;9z4Y%{UWQBhIW-QM8%31OoR)r?M<2x$T^Wjqx5jKGfM8I3Sf{$;&~&jt@@ zYla#!^pP;D*zR%Ky*JYIfCUV0KN!7Vjgice1r;aH91JSn2LluELL*BMWxCih^`_=xD3uGz$#KW~A01M~u>FxxJ$2_PWP(Z;q1c5&Ay0cLdt7$=HQ z(GVwfY-haqxTU+9VOD*!a)KcRDjAMr)hbU25!JpjOqS}?n>@({ub{z4bYusMcg99VHR^KF-{A?)Zh~_ zi956wF*3~{4jO!>Nhr~NR7Wx!IO0^TV?gjZQe+2%wpb35+Ok4vQQlQ3y_E zC=FOz+KX=^?m;64oNGU%w`Aof;Aq`cFtOhQK)@(E{t5fOF9#KP2AWG=o@m%){Z3a| zY%HQRNVapgGVgTUgq$&e8&5NdzI9u;*5sHizT6<}lJaVaO*rh~9yacWL` z{P5)nKyEAdH5yPIL++zi#&dc!*bGs?{K-vfX@gb*a`)xn3mi6o%-Ob_0H9Sx!ih5A z&wZZyR;UUzrt*msP2=bjdoVS&^o^NUIujRH3Ft4ls8-ADIsa2X4L{ zFe}h(plPA1j1B?r1d1fug=b(ohyg&a$VfXrA%R=Iju<=jhc*?_1g~wyyUcZ<92qHn z1bni_UZ8xi9?*O>nutMk5AslYc>raB6FLhL?V`^xKuBDG;#E+DN26SrjfX-pT@B); zkh+k+kav`K&xzL>^fa968?G$>$|5?cjXC`=S!&`lK2C;ID_}xfe*oVe3MM@|tOX^b zQjY0pWumw%dL;6FGANHRgnf}S$yn+0&oynT;+MISS~sXT2lE==y2eX4TJ|w#uNL{s zXeSH@+H5|aQcyiWuRW!w!zN57%c(^qTf5l6B>ty^fv*eMQz6l;11QnkWGqyoZ-br; zr5k6`KPclgN^BrSiNJ0>Z6QMdyT1fKf_%`~R$PNn5nW3%sKk*Ntb`DMur|?S4<`kZ zd?msD@jbU^EE_bh$8JT6x2)IiDO}Xdq9=(I*tK9iRa|L<_gRs;Ks^XO8IDl-{lp)T zMP0Ky)BT%x@TMzB2w`>|S&v-tn$^0RxM9#Os}V|qk5L<);Cf|Q#WR;q2Y}OV?#r(c z2cQ@@!vaW%Qgz;VQFnA~R(!wfQpstlDr|;Rxs`9)ZjAmJ?9zFwUHM=li^4JwTHRk% zdodHU^FB! zlyyr{u@WnPB`T|P%3&1|kd;r%Dy6&&(ZXw*#RKMJWOqi5e1VwvN%``r%*s36*xsEY zxi+`_=5!e=qI)4sK-6vLymB-zK0KZJdePX(#6Gc(=#-bLaj%>Rd_c8F&Q^ozb(pf%cbP(1Fx@z14~6l{`KtBK3`j z>+=u6{6$6|y*Wt}VHl{?DMHmKQZU7@R6A*wL89~CeE0Cg&HSzJX?d!74Gli{j|9#a zGM3d;FC783!O88a$e%!*>j9aKl<5EEEzhv-p-3(0b6ZEY7@9`;;C z*;cQILZsZ|x@GLe!PJBSku$*cSuFJh?~~i(X_@XVJnv* zGXV|YkqD`ick+IwTrNSt?hAPgANvFfj}!cV<2CiiT`8=*7_Z*3lz|=FRAf74tq-DWO@Th|^rn4)ares6KAfeb|Utt7)fBf7+a) z%nathMI4@2yVLh)HlcLE(y>>_oh&BB(CrnJ=(RMRYQO>D)MoeoT!`vJ_S#ZctX z8{OY~%S;!-4ci}M!w2q&->CsKT1z;$egC{6N}x%LZMyeL4#lDc$odI;X|7ULIs_Et zyIf7!#0&7^al|tMvme4DK1(vooxbGZ$_#^$^;@R~8Z!)7nrWM;!Dv^wEmmh?9OAA(3ng(7-r43wr z0C3Qgr9c+^%00tt*`aq)kbyPrD2s(ubOGWQ0JIaFoObV69&x#NrXs55QP>wkST3r) zZ^{7qhWhj_N=(&c?!mu2+pqz1vj6~cFnWuN43!DAn)YDqqojDnB>Twe0a zsH&tGgV}-j$?N+-^Y~mLy{4N#`WU-y+f!V682zKC2wqCYj}8D_u`Y3&jEac^KTxC= zQ~xw!zo7UJIfa$wNREBJF~L${@|khg((!D9L+nFs6>Wo!#ZNHFx0udHIaZUp(tED^;$liXydZ_T*E8YgW&6_u}Vu6+H!&HscEPmBc zj1|OtxU!=OwX)E!I-NuiQpw{rIZ6uK2o1aa-{A|_&LcC~Iu6sQv!E!)GN}f*8A(hS zxIC3P>qoB9wD1Xr?K+{GHslTh9W+~7uLZGu^ucJoO_g1q3(O>X$8CAPyrZ7D!EKbZ zoqyvyHGz~sHoDF$;@@py2cmcqf6mZ<6|WyHEWg4wLO}pMA#GqZnl~fz`ET|UmZAY0 z3}oQMF9T)p-kxQUr4LmUuBwK|yht(~CeF$<>G9~0T%M_4N7p)BmzGRQ+eR;H6H;fI zo1em^XhK)BuIz}XTS{fUV#uzXZoS4d>(i{La*eP81hJ#tiw<^cvZ_X^__+=NZ}MIz zt6lMof=mWslI~-n!lfYG(^MKk@&_94aK>fM!1F}|XDEmyQ;^37F~r1kp@IasK^%R_ z{0?_A4mws!817RTN-7Owz+y>>!C7j{1|n%8RI>uN`3!AC+tGayr~-aiNcn-2*uIem zYVfX2LB*qbRz5BOQEV1PeGxQCzmhvpwh5|25GBE)LQ)Sq{@rMFD4(gMl$Z!goXk!C8T~o+8*W40;dB9J1KJIxH!n1a8bOv7iXu1r)*VhJr6JUm z&aOTqE?*Rw%p1sHR2(%XCFJ%v_VCHMS69T}q~UOx**b3EaJp-<)0cv`T3I!F=z%ba zs}?##-`tYVD^&1Ww#*U?)_`gj;tr9?P2YF>D4VD>%g&!y)05sO1g%a6@`I}AbTPls zem@*f5pn@0f1qVVPJz25ZZ4HJfSus&&MiU}K+o0GgJ&$i%a6SZtW0DO-9RkSO7QP> zMU)G1tnLA9Y?>N~kPdIISe|!vcAtY8AA@O2D75o1XpH1~sdKyV-Ur5wpa8Y+Fgl=p z+8=f&TC|8c^$0rAxzwMuN0Ja3v)zGh;`T&b>BUq(FxBE5n0<`(W95_IJ@uLuTe4Is z1j6T$R#LCa)Q`7J?;ve&ncjk+LSB75dgu`9#=qQM$0wjfqmWCYkh~M!uvjXX8PDhn z6+hIbyiAneQLL(Yi0*BfuXz`HnjnnAoVj!7PX2w0k-W#=gsi@ubA*)o8 zHH~BSBjIz?`tY{WK5UF87pQIS1*1oo`!h1SU>4KR;D$-oHN?{LOyH{o|Kv5pi^l_T ze);ZcR(3HB-yqYMZ!hT>^FewkC;${3D6ZD<4(#%eN7X=Zi98az0NR$ufcl8==^QsL zh%m_2N4o=PwOI_q1|=(&w@hxPXa4X(Mt^-U_BXmLRmEVd6XD?&v4PEvi@S#5g~Ho& zhEt4UO^Z1w!ZN=KM=%cbDG9bJseM=5A(?eS(gdMiB|$HP3INNTN0~(Rj9BD6p+vj_ zZT6kW(wG+Yiw_4qjGpK6ynKNg6gK^d-3zsC)?`yCkLY~KT zo1X7}0WUKZVI_mtL7Pz0*xR3J9{KqUVoR|F;VR^HKXdlwC^%jH0k`>!{~~d#lc@n7 zXac*Vw%%tAHsPNYM7F81#(-p}F!oI&plV3|p(mkPOlC4%w7XJLx2n~vub@8VxVAcV zobWnoakrp+r{Tp;f(b6Pj*K(Hs(N>pE2&)lIg}sHKglBJ2vVH$bze$KacP=|t zUX(xZCZtprH4$RSDT_;uPaa&Rbm=GL{AL&I26C34x+VB<=C-rn1L>uH%$(D z`^Y^}mN4}BE`s*S3nTvZRh?J5X#J?}O;ODKudo00RXL#W@p>amp zVxPzcIIBqRLk9{{%;y^@{|y>7-(FE^`Vf02+29tCG8ch6 zwXYm&VWu9_O_BTyRs@%<0em`B>SFD&kp2qv_Xr>!RSjA zlNpM1`M|zr+y8mA<-mrr`peDDEp$7L97AMCl|j86YJT>)Y4Rh}9Gg~ZGV+(?v0#U< zKp`Y!dKCE`=2!HI?_E6973s5SQwe(%d&=!l7%)TM!`uP!Vt`f<9EZy^`sZRB)6ThN zjhMr2LS0s(b-u7_c|^-%@R(fwh$-X`SyJI2X8ymw`G27A|4;ssPhl|Ohbhm2ODYt% z1Uw?udnY=by4e9EDgT}xJZJc$pUPb`R;*q<8h-Md<;MDwH0xKvUaA%CRR%+9cj2F? zc6gcO`Yd{uDM@rvvXAk$EUytGL`s?fU}m;I9rowsLDGN{4p0Kwh5mq4It}~*PSd7Z ze%BMdhnY^3#Q(55QcB1TjrV2v!Ev3bIPj4%o4{RW=h!A5OgrZEDA)YJw4gxkEFx)b zkx=60%l8Sj!-dyCDOpB=6C^}NhlJ_YFU@ne?8S@K^r>1?!}3`5@HnvgVG;ryn$TTZ zK)3@nIIVTDOfPWzct^ zc!!pjbSN%hNdtQ-5v2SnwV{W15WjHt#%~63XyYUC0(8mV z`%RExZFwXz52jUtBU=(ln0c5_=imJU1B)mCgAfskV<#VwwD>*d&5-k27%4$4qF))I z(S&DAY#pQ31ZIe|QZ8xnl{ONNxeX%&0zbz8FpK>_H2Vu~d%VQclBu9ugK#Pp;s+wg zYf5}5S|G1u$Fc{WdPXUS+s~A@fGLZanCsEc+J6xECcsxd=9Hc)tGad#_r04v z4hLn_2TzGbo*!O^$}Esb2ZP!JaOTIXFu&LxkG1J4o+>%q0H126O|An53<$_(D=FgM z(i0p~NPNt~ETP`ol8Uv+WMHYhmC!IUsStB)(YA?QI(N=Hb|7v_TVx!9BUT$<46U77 znD#|Bv?jp_`SI1}7AKLPcJ4gd_4B`LYC8a)<_5vHNGTVzNMp|$r`CrdzxXdyTrr@H zoAm45UhhZU^@s6h+6IPrMnJqKdFV&RL}Jd$Wcqn7k+p4u;?g|9F_K*Xh{EWg5Gr;6 z>r=k}EOvqK_;KU@#3PNk0lr*9ZE=Va4$kB!`al%KWYDG>Iv^+wrxmIJ6p0o27SkDp zqfUN8$&+IL9b7O2EX7a^Z#xMRX!E1IVY|cihf8_=ZXiphp(jvEo>hnR_~cDA(ZGHz zUtTyfcIK8r@{udN6_$rNJeyVy_y+s_XY>Y6xuoTl810XYj7+Fd)MxFLu$B9W&iOim z06C$!e0rL$KUGlSK8M)Etdk3z3SU`Phn|>>B!W)K3I<&f;qpp8#tL^LytY0VkqH^E zxj+M@@3m7ODU^4EEv4!tuZb-s7_kzp8jaWA$AxX+E~`@jEg3__g5s$h{Xh-*^T4#I z6e3ANk^fQJxySW4;eQ#7H3Nyb9TStV3bB#rv1mJ&6G+Ke?NAvu*w z$5mR2vg@Z*Y&zM z^WhvQ-j2iriO~Kd7hry9MXQ3a<@bf_W;pY2ZPUs~z##~UK|6n>=@z4hG2}hVE(5Z& z_M&twm5RC*DLy7osW=*s$;LpWA57!;1yEhGxr&&zO#f52FL|mNmB}*9p<)%`r16jg zdSeJ%$p5ehc$;kx{c8pBgKhT-m4CsN4T#P~Qx`d}ZCBagDJ>1xc4C->n4~qlEQR&t zaOWJ<2LqncQKdNIy*5ycTh8JK{bo24Z?zK-ngx*fyt>Wgcrg zM6ltSk577LT>W;_`9NEmONIzKB?T%kYWG6vP!J1!_E$px=O5lUgw{+m?dY)|@cg#C ze8a!aW)=4jw(NM4{^~hP`uWRA zD(9vxzS_sz+wbth&C>RXF0(V=tk! zvI}D=ye3ozCUaj&oHFnbhFiE=O&ikRgiKE+P>`n`T)&D&3^GZcn5$qG(5={x(~zhYCWFr}O%KxOvGuy}7F~|l zr}9BUE4DAN$ zjk)Sv>?7E75+lOMnlcp!W=4UwBF$Y}LFZv8|H=TwpBZ-wTUVtWPSU2-d&bBa5kq9b zuze%=OE{T$26AZ4M6iH>W+OruknV0gxl#&IL;dYCz<`*cq)B65b`+s#5=UBTO@Kv8 zp|zziRB*x7m!zLVRUy(@m{b`yhXofFml0P!VIkf0#Nk(B z9m5m+KyH_j!`|pD?T-J?ttan%-?r7{8&Ma5AccIB&6m6ZO(vAVfVij>u1eHHE(C!7 zL8L@f-B}h#E^SIeZntis}K2xj2wzHF{Z|8;|wbY#UA0W=_!I1uoi zB&3Q@l31dHn~EOxtW8yqQ9mypIHsig9IE$*mz)QLR+uYF{?n{3LK!A59n zr69| zq#-tXkRh}l*-)O@{Wu%o$3)~11ssEz%hH^?l=!UR>eX2e+>N+X?UL=}$3hU7D!Z6=m_02YM1ISr_h0S+&yRZhD;tp%zJ#B)mG3$BS^R)m`vSJ@O5 z5wyRxP0qZKn))1`c*iHxCrs!`QYEK=(;h(b~tjeJ@^L{L0I zbX!G5MOeyaGqvc$VCNBY;I}{-lKK<4RpdpKD|a(95RUls7Z_roZM}Zy&PND4K+!V9 z!9)C7PTe<3P31!MFp|YQ-^aPlS)* zz5An^mWPakD%B%8v@=^@KbM{b275xOAbwx9U75NDLm9C8{-VVlNTBs1kC!+Q5J^NI z4XZk-dyj_Ge0Xt@M*G{A)XZm|PlHs}b&KqW+drMPYtkwxD3IL&(za6AYpJ@us~ZEy zKe2f44&*#Shk&DHD2xNo(}m7} ztd^k*ZlYKXiCu@>0z3@=E>o%FRxs%qouZrh;g)TK?kn-je4v0x%4Gxro?F>kFAOd3 znX&WIAIb!7J%Y++9Xl^Tjn7={3T1X44WE9?LD@Y6~g$U3%DL^DF&9~23U<*0IzQ2I^G`~VM>*Kx%s zcm`y@1PI_e5F}bQI<5k^n8Xqn8U=T9lJ9lYvU3$b9`F##u`3-^S7xQ9uKp2^ zq?6(m!2y!`6p>qMJ1-)!ELx+}A@*!!hf-p1Y1w(Mz-_`Wd`DL~!3d}6hj0ehTQvS4 zh6Q3&$ae~+M|MuxI0F5k4Dkv_O2GG12%iitAaP#V7?9_Od2G#%U?8 z#C01|;^?+S;@@5r9H0Q{R&ZWrxhxW?!(p4~!cO+>j7Z*14m6ix9{EBRobj(3Dl8iF zf6eLFa$yZ9tf6LTv#4Y!IUDq%ST zy$y<1aU7cqJ@qJXHViUaY7sU1kJntN+rnR%X|wcUe_3J8tvJ{xe7qL&HLOYz@O zh#VmAi-IvYdKmrvKXt7Bl&6+%A1(scFqFsAQbYJR8Okde@$OIVhBEnoBj5d>-*iCl zhRwuw6N>g?<-eSPil`{E7&2yQ6X(W>7H(y3`H_z~7tDr5Sf z;_<`HIz!r6vGP)WrZvD`#DYX>gjbg-e5EM_Y*{d=hB#$L`HLz{+y>B@D`Zs$uuSBX z3aZ;{Jj2|Giq0xB47O906&Ab1I+?}|zbil8Qx5?JTQ%EU%k+3^>5R*=GPsDeI(JL} z8QGfbQ`%sCj~Rb1mu!bu2$2ahs|4cdMue1IQ444AUemACcF)x(6_><- zd*)Elh!c$zYmlKbGpe9L^qm+JLg2-N!`kQklag*=rnhR<6Rj##_hSSP!tD`a6L5r( z!B`Rk>!OFqwwP1k1DOt?)~ik6QIkCbzOGi$ zO(;uQXe6dDxI&5djYvUKphMZJagwW7>XnXUk*G9BLM2x(EHDVSbAMUf+=0F_|^!X>&A2egN5TSfLD3z+ES$>&lypb|e2|Vn@US;=TQTpM?2`evFU1FR;{x3hxmDEum zHf&bA&cyADCZ^tLY%dF$qb#a7DhSc|Kr4ybVbP4H-Gn-M&Vl3NG4APVPNuqoN)s(~ zJc3B17>2M?VrT@RXGKNE1nQ4shD<;RHOm8bkQ!z69&>{CKz3p+B94;in~5zGKoYP3 zQZ6&=bdtZ6IEuwXhHgyC{s7=yzz=u6tCcI^9+`D3~?B1vI-)A9NBt{@5$ z$S@#{TzjT`9{|Wf%VLHBd=<5X7sv}oebF5NmSom;Yu>KoK+58n3^MW*Jfz@=tVs+t zC2r2tcg%(_q|Oop>YQS5=pOCNDTNLE*n zrY>5P8F*+vJSdMi?H!Tpi`E*eq?1G(k=8hC-gygP+W8DPK=GOv)&Tt(%X z9i_Yi?I;;cWb&ACiZX$+jebvmPft&&_?hAMvQ2A(@n)!jWtD4QRTML^4DR-5$hU=n z;XV!&2T)#LmRKTo)o~ah&GBTJJ$S=iw4Q90a*HTM|U|Cyd%x>g*) z`6!zr1V)Mfhe$V&Oix9z%|`<@)mFdEG&3_3Nf+WG0qV46WP}?U2sg?uRDm~{#`xaH z=U2mOOc_MI0s)?;bv^@*L$<;LV5ehW0+am*x?&l5W!RDWWcQvuN||%aJO>Rx6D@!- zP7j+2%JxLYS)Ck@LDWbgIAX+&79$Vzq};wgB@$D&HH?#E4C4lOl35T-{I2D^B{sLk zyOw=voZB||SIcn;<-JGf%(T|-Izs8p(8YH(&)v8=AfvF`E-Z#F|JTDU2Jr)eROTM+ z{L$89m|e7~lNKP1FD zvAG43y*$9w;(@rfdgu)qGL!7|v)ofQc_++PQh0fNqVPn;QC)XyxNl3@lYXkI>N5EF zBz<$?G_q%8YU)ae#icZ!4h9B>6D?Pb^fy2vTz?aQ@&Kvacn*aNJJVV4m5L?ASmuHn zi?%I-LOgWh#EB%IW_O`SJ~9xT6!-?WO#T6vzSlm`lTEgaH7f^0)X9HRKBO9n$I# z$(ld8G)t6&dRbZ)yDO!Ur&XtJ38lXo?Rz-m{{8i~ofMZhUB0QgZ>_{7k&TW{Bxz}CjTDfVft3p8w(jqCFRWc<-} zHBH)F^E>zNo3KqrI&l>5chOZF}q!$xkkH$tn-USSu7+9zC;^o=z@(@gfB6$+GV}v*HRL z3|1%#EVkZNRmeY`o!h_6ocW=Al}Anf`FnZ$mmXP4?O&A!wtwj~t^Lc8lOM>}jvx8! z6*_+8uUF{!k&ajB_z^|NEBqgRsbfYyqNd&HKk1H8cm*MJ2_f!Pklxs&eGm@d?)t== zzJueaf7_}K>1b#yz#{Jfqf=Z0_1-Ef5uC!xqO=Q?)1$UEdls8s0ZW%uSH~cPagPfO z2(SYa@SGll=#ECVZ|FzOs{s)~I5hM-N8Syd>NJO85|1@Xit~G3rB;3J!tRn;E&AnO ze&`jne8q|g2pu~x{5z`XI!bFhlA5Tgizl{GEN+0aPT%$xz0&AWqvldqKAe;}J%mJB z&M^MbX)ck#l6v1qlQ?OV-^r~Oix;0H^0MXDtlqmB?|#6=cn!--tEtFM*u!Dr@mk*? zo0ArugJ#i-cyjXj^R+Xgxut8tcWrleHMjL%-siI3Rn2aE{0(GT_mTs1>tJ*z2d&cy zx>s3vAsNBXFdD7yHD|)Zt7tU8dGjWlk%1U$gE3lK%l+gO19Hbqn6L!>(K)7aPJyQ~ zG`qb=%QN4|X!*Q(-$h16X~Vj9>D-xJ8S{uFCUkNUEu3YOh)XJFTqNNmT0YO1gl!qIDwCWlf0lRkXx|5N?yA1^ztPD)%SFc2xib$_6+i-jZ zN?>_|5Gera8QYOI&|Etb8kP2#;~xN}CbmQab={Z4{lQipho^|}^ZQhetDiG)g==rb zp-7^dh=%yy$PIr-Vt83u83~TF=SK4;auMLD^z9n~Ckjxjgf=$j0M9oxtbZA3DJTva z#2vY~Hq7>jQKJm~wrtrFUF+oH62NYZjrR81w9eCN?|;Eu^t#y}D4zC-iit61av~)C zTSt42@KXoa(FylX=vmUKdsAPZOR-yrFiI|iHFcu6ppTSWL=XKOol#0Y(Qn+eIukGMo?2AIu$Pt4850WIy1 zs~=BuD&2>SB8Hl)lAFPd^g%*C9&Hg&0qfSUSLb(;jA74@sa4RwHRay&J3>K*XF)!Q zGneV>?;*UYRS=Zb$Bz$WssL~j3;E2CN5;l31Z5bLd(PqKL>igz$6T_io4fl)(CW&> z_50xnlUS|;4LZ|Tx8X4Nl78~()YNIZ^$(Y+PPF+BEo>xB;$S^b3y5u#S+jPsm2eDT zX~FU7X0AnU;V4y9$a!?_bMx{l(UoSgR7j;qk2T6qNj52j094>s=G}R4jNRQ+)mSex zX87>gK;#@QvC$Ml+r3Y9%N4ClNyF22w48^03g?mBPC0n*(gHqyWJE+3r$3inC;aM|WAUXl=+F>eEs8fa&9n6)_*IKB5wmf9^ykiPwF#p#xC zOqCBpd?@3`fCvKu1MR7jnJhOpGTH~s?LBZ{%-+2p)z=hTLJU8?wEY5AybEA@px%zv z0Jwnsuk%1`XDcf=7J9b5mvqhv27rvbrs-Uh*0?fmpl9tp9pfcShC<1^xw#Sb7Wk>b zelk9N>&lf=w_To>l!P8THXsR^8cT<4uaP8(^XHEfq)F>%>gt?xA3iK_Ja2p4Z4MZJ zskwP!daSayRYY{Ok=#ZJ(FTkQ3pGHeGi*+{E9l@>UPI+=1Ky!Ae9yZ06(uDlYP(1{B>>m zdP{smm}?JPlXp}{hl1q*sLEwvCxxWfmS>LJ9+|sV6m6?9HZeIwU=13u8M!Z7+@C~Y z5cjnYmn1H(rtOwqY2EwLt1eX_hB2xjvhTv8l1Qho#E@*u&|r%S!)?6sbm5O zib)%ftEwx0r4gjb1c*Pp2)|Hihf05xAt5kYIh_Jwp^J-4>ekn%0mCsgZ|wUrnRAA|o0ansa z62TflGhw05xN$}>?v+oHqq0wz^?>IdHVD)p8u+}#-bcJ>3RZWBy2(6uC9#g=4lQlWJAzn zdoX&;7z4^h_g5)p(K&}gY4lej5uLXE-8lj=(#}wtU2;u$N6@)JYPT~p7m>{ULbtt2 znOjj&!3WF5*+sQb`BDm;%wEI=`9~BA$1gOyh5R;iI8y+V)wJK0{r>yctO?rNNlBTe zZ1U|*>mkPWd&fjXXfo6PHM8b@{r1te)V|Pwh+CC)={I>4yCvp-t_H2w8# zZ0ux63Y&+yx!Ue=v9b5jDth-+QL%Z*4|rSk?boj#9OPk_0`DC4v11ckEtW1_yWH3~ zxBtzx@hznjwFg|nZnkLRcIa?#Hh0IvkM#f1b^Es1wv>c~Y?Qfglzlc$sd@f9Ed57b zpepI!+W5WglxH+R<)(u;l-Cyk28Qo*E zJ@SK%Tb?k4HW@+L=q$^S!-Jd^o?mdSF();Ga1%Qg)!@yA1JL+K0+)5P7g8Ta>)uk1 zF~49!OFIt`9Q~+2N-q02NB)=Uf~t3qj;7vBwHn{#U^m6Xz~Fnj5)p7DRUoDGXIme| zrB``=1LCFy*ZvXuYdBo9Ybp8$n7wzuvO=LXmRR2wL7~2^vjGw<`iU3(orRm9Cq}W*8-8PF-M*jG3YKeti<(vN9cm03MoTsM08L9`AylHD|uZ6tQ1Ahq3 cZtJgD*E}#NbVesjc?$;m3%`n;wPxo(0Ht(R!vFvP diff --git a/bip-0075/mobile-sf-ir-without-payment.png b/bip-0075/mobile-sf-ir-without-payment.png index ab18d0f5c3f37072c7a51fe2596e5b24904856dd..19cf84228519dd94e8d5ac047572f297c9529c44 100755 GIT binary patch literal 88090 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 GoBs_?f{H@` literal 92902 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 Q;7^Y(cAXD*95Mg@0!%>mzW@LL From c2a73346a3b2c4da8189cbdd0278069a062e6ee0 Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 26 Apr 2016 18:14:14 -0700 Subject: [PATCH 0339/2326] - Fix straggling EncryptedPaymentRequest reference --- bip-0075.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index a439cd6d53..51bb1ec93a 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -101,7 +101,7 @@ message InvoiceRequest { |- | memo || Human-readable description of invoice request for the receiver |- -| notification_url || Secure (usually TLS-protected HTTP) location where an [[#EncryptedPaymentRequest|EncryptedPaymentRequest]] (see below) SHOULD be sent when ready +| notification_url || Secure (usually TLS-protected HTTP) location where an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] (see below) SHOULD be sent when ready |- | signature || PKI-dependent signature |} From 32d9f9d266f7bca15ea248b15a75092a46a61902 Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 26 Apr 2016 18:51:54 -0700 Subject: [PATCH 0340/2326] Adding linebreaks and fixing some bad links --- bip-0075.mediawiki | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 51bb1ec93a..32649c9b4f 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -101,7 +101,7 @@ message InvoiceRequest { |- | memo || Human-readable description of invoice request for the receiver |- -| notification_url || Secure (usually TLS-protected HTTP) location where an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] (see below) SHOULD be sent when ready +| notification_url || Secure (usually TLS-protected HTTP) location where an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] SHOULD be sent when ready |- | signature || PKI-dependent signature |} @@ -181,8 +181,12 @@ message EncryptedProtocolMessage { |} ==Payment Protocol Process with InvoiceRequests== -The full process overview for using '''InvoiceRequests''' in the Payment Protocol is defined below. All Payment Protocol messages MUST be encapsulated in either a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProcotolMessage|EncryptedProtocolMessage]. Once the process begins using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages, all subsequent communications MUST use [[#EncryptedProtocolMessage|EncryptedProtocolMessages]]. All Payment Protocol messages SHOULD be communicated using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#InvoiceRequest|InvoiceRequest]] MAY be communicated using the [[#ProtocolMessage|ProtocolMessage]] if the receiver's public key is unknown. - +The full process overview for using '''InvoiceRequests''' in the Payment Protocol is defined below. +
+All Payment Protocol messages MUST be encapsulated in either a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProcotolMessage|EncryptedProtocolMessage]]. Once the process begins using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages, all subsequent communications MUST use [[#EncryptedProtocolMessage|EncryptedProtocolMessages]]. +
+All Payment Protocol messages SHOULD be communicated using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#InvoiceRequest|InvoiceRequest]] MAY be communicated using the [[#ProtocolMessage|ProtocolMessage]] if the receiver's public key is unknown. +
The process of communicating using encrypted Payment Protocol messages is enumerated in [[#Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[#Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]]. # Sender creates InvoiceRequest @@ -195,7 +199,7 @@ The process of communicating using encrypted Payment Protocol messages is enumer # Sender validates PaymentRequest retrieved from the EncryptedProtocolMessage # The PaymentRequest is processed according to [[bip-0070.mediawiki|BIP70]], including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. -'''NOTE:''' See section [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key. +'''NOTE:''' See [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key. Flow diagram of Encrypted InvoiceRequest @@ -203,6 +207,7 @@ The process of communicating using encrypted Payment Protocol messages is enumer ===HTTP Content Types for New Message Types=== When communicated via '''HTTP''', the listed messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined here per message: +
{| class="wikitable" ! Message Type !! Content Type |- @@ -213,8 +218,8 @@ When communicated via '''HTTP''', the listed messages MUST be transmitted via TL ===Payment Protocol Status Communication=== -In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST be sent by the party generating the error. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately. - +In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST be returned by the party generating the error status_code. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately. +
The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]], the AES-256-GCM decryption fails to authenticate, an Authentication Failed (102) '''status_code''' MUST be returned to prevent oracle attacks. ====Payment Protocol Status Codes==== @@ -253,7 +258,7 @@ The status_message value SHOULD be set with a human readable explanation of the Communications errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). -==New Process Details== +==Extended Payment Protocol Process Details== This BIP extends the Payment Protocol as defined in [[bip-0070.mediawiki|BIP70]]. For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication. @@ -265,11 +270,11 @@ For the following we assume the Sender already knows the Receiver's public key, * '''sender_public_key''' MUST be set to the public key of an EC keypair * '''amount''' is optional. If the amount is not specified by the [[#InvoiceRequest|InvoiceRequest]], the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the [[#InvoiceRequest|InvoiceRequest]] and a PaymentRequest cannot be generated for that amount, the [[#InvoiceRequest|InvoiceRequest]] SHOULD return the same [[#InvoiceRequest|InvoiceRequest]] in a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] with the status_code and status_message fields set appropriately. * '''memo''' is optional. This MAY be set to a human readable description of the InvoiceRequest -* Set '''notification_url''' to URL that the Receiver will submit completed PaymentRequest (encapsulated in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] to +* Set '''notification_url''' to URL that the Receiver will submit completed PaymentRequest (encapsulated in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]]) to * If NOT including certificate, set '''pki_type''' to "none" * If including certificate: ** Set '''pki_type''' to "x509+sha256" -** Set '''pki_data''' as it would be set in BIP-0070 (see [https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) section) +** Set '''pki_data''' as it would be set in BIP-0070 ([https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates]) ** Sign [[#InvoiceRequest|InvoiceRequest]] with signature = "" using the X509 Certificate's private key ** Set '''signature''' value to the computed signature @@ -280,7 +285,7 @@ For the following we assume the Sender already knows the Receiver's public key, * If '''pki_type''' is x509+sha256 and '''signature''' is valid for the serialized [[#InvoiceRequest|InvoiceRequest]] where signature is set to "", [[#InvoiceRequest|InvoiceRequest]] is VALID ===Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages=== -* Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] (see below) +* Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] * Create [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message * Set '''encrypted_message''' to be the encrypted value of the Payment Protocol message * '''sender_public_key''' MUST be set to the public key of the Sender's EC keypair @@ -288,7 +293,7 @@ For the following we assume the Sender already knows the Receiver's public key, * '''nonce''' MUST be set to the nonce used in the AES-256-CBC encryption operation * Set '''identifier''' to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message * Set '''signature''' to "" -* Sign the serialized [#EncryptedProtocolMessage|EncryptedProtocolMessage]] message with the communicating party's EC public key +* Sign the serialized [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message with the communicating party's EC public key * Set '''signature''' to the result of the signature operation above '''SIGNATURE NOTE:''' [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous. @@ -317,9 +322,9 @@ Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption v ==Payment / PaymentACK Messages with a HTTP Store & Forward Server== A Store & Forward server SHOULD store PaymentRequest messages until either a timeout expires the message or a Payment message for the PaymentRequest message has been received. The timeout SHOULD be greater than 24 hours. - +
When a Store & Forward server is used for a Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest MUST be accepted by a Store & Forward server if the associated PaymentRequest message exists on the Store & Forward server, otherwise an HTTP 404 Not Found message should be returned. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. - +
Store & Forward servers MAY accept and/or overwrite Payment messages until an PaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further Payment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== From b5517bab86c7039e654cc1c1f6584808a3cbba39 Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 26 Apr 2016 18:53:05 -0700 Subject: [PATCH 0341/2326] Add more linebreaks --- bip-0075.mediawiki | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 32649c9b4f..95e620f062 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -182,11 +182,11 @@ message EncryptedProtocolMessage { ==Payment Protocol Process with InvoiceRequests== The full process overview for using '''InvoiceRequests''' in the Payment Protocol is defined below. -
+

All Payment Protocol messages MUST be encapsulated in either a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProcotolMessage|EncryptedProtocolMessage]]. Once the process begins using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages, all subsequent communications MUST use [[#EncryptedProtocolMessage|EncryptedProtocolMessages]]. -
+

All Payment Protocol messages SHOULD be communicated using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#InvoiceRequest|InvoiceRequest]] MAY be communicated using the [[#ProtocolMessage|ProtocolMessage]] if the receiver's public key is unknown. -
+

The process of communicating using encrypted Payment Protocol messages is enumerated in [[#Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[#Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]]. # Sender creates InvoiceRequest @@ -219,7 +219,7 @@ When communicated via '''HTTP''', the listed messages MUST be transmitted via TL ===Payment Protocol Status Communication=== In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST be returned by the party generating the error status_code. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately. -
+

The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]], the AES-256-GCM decryption fails to authenticate, an Authentication Failed (102) '''status_code''' MUST be returned to prevent oracle attacks. ====Payment Protocol Status Codes==== @@ -322,9 +322,9 @@ Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption v ==Payment / PaymentACK Messages with a HTTP Store & Forward Server== A Store & Forward server SHOULD store PaymentRequest messages until either a timeout expires the message or a Payment message for the PaymentRequest message has been received. The timeout SHOULD be greater than 24 hours. -
+

When a Store & Forward server is used for a Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest MUST be accepted by a Store & Forward server if the associated PaymentRequest message exists on the Store & Forward server, otherwise an HTTP 404 Not Found message should be returned. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. -
+

Store & Forward servers MAY accept and/or overwrite Payment messages until an PaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further Payment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== From 7d9e11dbcbb9b14fa748848b4c75c69b9299d054 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 27 Apr 2016 09:52:22 -0700 Subject: [PATCH 0342/2326] - Add information about the use of GCM Authentication tag - Add requirement of additional authenticated data in the case that either status_code and/or status_message are in use --- bip-0075.mediawiki | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 95e620f062..ef10c08164 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -312,6 +312,13 @@ For the following we assume the Sender already knows the Receiver's public key, * Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) +

+ +====AES-256 GCM Authentication Tag Use==== +The 16 byte authentication tag resulting from the AES-GCM encrypt operation MUST be prefixed to the returned ciphertext. The decrypt operation will use the first 16 bytes of the ciphertext as the GCM authentication tag and the remainder of the ciphertext as the ciphertext in the decrypt operation. + +====AES-256 GCM Additional Authenticated Data==== +When either '''status_code''' OR '''status_message''' are present, the AES-256 GCM authenticated data used in both the encrypt and decrypt operations MUST be: STRING(status_code) || status_message. Otherwise, there is no additional authenticated data. This provides that, while not encrypted, the status_code and status_message are authenticated. ===Initial Public Key Retrieval for InvoiceRequest Encryption=== Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption via [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulation can be done in a number of ways including, but not limited to, the following: From 1e6e914ca7ba8946614abff02fcd6d917771af0e Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 27 Apr 2016 09:54:06 -0700 Subject: [PATCH 0343/2326] - Fix spacing --- bip-0075.mediawiki | 1 - 1 file changed, 1 deletion(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index ef10c08164..9cbc605a03 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -312,7 +312,6 @@ For the following we assume the Sender already knows the Receiver's public key, * Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) -

====AES-256 GCM Authentication Tag Use==== The 16 byte authentication tag resulting from the AES-GCM encrypt operation MUST be prefixed to the returned ciphertext. The decrypt operation will use the first 16 bytes of the ciphertext as the GCM authentication tag and the remainder of the ciphertext as the ciphertext in the decrypt operation. From dcbbc871dc552f946a1ddf56190f3bf22ed1fcdf Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 27 Apr 2016 09:54:43 -0700 Subject: [PATCH 0344/2326] - Fix spacing --- bip-0075.mediawiki | 1 - 1 file changed, 1 deletion(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 9cbc605a03..b3e3498341 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -200,7 +200,6 @@ The process of communicating using encrypted Payment Protocol messages is enumer # The PaymentRequest is processed according to [[bip-0070.mediawiki|BIP70]], including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. '''NOTE:''' See [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key. - Flow diagram of Encrypted InvoiceRequest ==Message Interaction Details== From 057591da8c25e296e71333b355d12fe6fa6e81d2 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 27 Apr 2016 10:01:03 -0700 Subject: [PATCH 0345/2326] Fix spacing again and pull IV size down to 12 bytes in accord with NIST 800-38D --- bip-0075.mediawiki | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index b3e3498341..27dbc44b03 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -200,6 +200,7 @@ The process of communicating using encrypted Payment Protocol messages is enumer # The PaymentRequest is processed according to [[bip-0070.mediawiki|BIP70]], including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages. '''NOTE:''' See [[#Initial_Public_Key_Retrieval_for_InvoiceRequest_Encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key. + Flow diagram of Encrypted InvoiceRequest ==Message Interaction Details== @@ -310,11 +311,11 @@ For the following we assume the Sender already knows the Receiver's public key, ** Use the given message's '''nonce''' field for Nonce * Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) -** Use HMAC_DRBG.GENERATE(16) as the Initialization Vector (IV) (128 bits) +** Use HMAC_DRBG.GENERATE(12) as the Initialization Vector (IV) (96 bits) ====AES-256 GCM Authentication Tag Use==== The 16 byte authentication tag resulting from the AES-GCM encrypt operation MUST be prefixed to the returned ciphertext. The decrypt operation will use the first 16 bytes of the ciphertext as the GCM authentication tag and the remainder of the ciphertext as the ciphertext in the decrypt operation. - + ====AES-256 GCM Additional Authenticated Data==== When either '''status_code''' OR '''status_message''' are present, the AES-256 GCM authenticated data used in both the encrypt and decrypt operations MUST be: STRING(status_code) || status_message. Otherwise, there is no additional authenticated data. This provides that, while not encrypted, the status_code and status_message are authenticated. @@ -367,6 +368,7 @@ The following diagram shows a sample flow in which one mobile client is sending * [[bip-0070.mediawiki|BIP70 - Payment Protocol]] * [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] * [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] +* [http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf NIST Special Publication 800-38D - Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC] * [https://tools.ietf.org/html/rfc6979 RFC6979] * [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] * [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS 180-4 (Secure Hash Standard)] From dde47fc973b015c6cc91a0ed28fb3aca57add5e6 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Thu, 28 Apr 2016 17:47:36 -0400 Subject: [PATCH 0346/2326] Update to NODE_WITNESS service bit --- bip-0144.mediawiki | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki index 2da222cfa3..f2c8857f5a 100644 --- a/bip-0144.mediawiki +++ b/bip-0144.mediawiki @@ -86,9 +86,10 @@ Currently, the only witness objects type supported are script witnesses which co * '''Rationale for the 0x01 flag byte in between''': this will allow us to easily add more extra non-committed data to transactions (like txouts being spent, ...). It can be interpreted as a bitvector. === Handshake === -A new message 'havewitness' is sent after receiving 'verack' to -indicate that a node can provide witness if requested (similar to -'sendheaders') (Note: it might be better to signal this with a services bit in the version message) +A node will signal that it can provide witnesses using the following service bit + + NODE_WITNESS = (1 << 3) + === Hashes === Transaction hashes used in the transaction merkle tree and txin outpoints are always computed using the old non-witness From a79432ac99e0ccda46720047166ef2500cabc8a6 Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 28 Apr 2016 16:39:16 -0700 Subject: [PATCH 0347/2326] - Spacing - Recommit mistakently deleted encrypted invoicerequest flow diagram --- bip-0075.mediawiki | 2 ++ .../mobile-sf-encrypted-ir-without-payment.png | Bin 0 -> 99162 bytes 2 files changed, 2 insertions(+) create mode 100755 bip-0075/mobile-sf-encrypted-ir-without-payment.png diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 27dbc44b03..b5110e0e73 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -306,9 +306,11 @@ For the following we assume the Sender already knows the Receiver's public key, ===ECDH Point Generation and AES-256 (GCM Mode) Setup=== '''NOTE''': AES-256-GCM is used because it provides authenticated encryption facilities, thus negating the need for a separate message hash for authentication. * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. + * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''SHA256(secret point's X value)''' for Entropy ** Use the given message's '''nonce''' field for Nonce + * Initialize AES-256 in GCM Mode ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(12) as the Initialization Vector (IV) (96 bits) diff --git a/bip-0075/mobile-sf-encrypted-ir-without-payment.png b/bip-0075/mobile-sf-encrypted-ir-without-payment.png new file mode 100755 index 0000000000000000000000000000000000000000..fb0b5d1ff456d809f15e31900738f8f180f8f842 GIT binary patch literal 99162 zcmeFZcU;bW`#*jnlo1jN4Gk6AI}K5k_Mo!brL>oJDXWkc4K3|~tRhs(3N1}Cnp&i2 zX!m=*a9>yVeP5rC@Avok{^`1|`*y1He4p?4@j70|@jRZ#^LPbms_$C5Xzd~jg|bvx zNkN-Jnb%FB%$cHIfS&|$?fr;9XdILboGFyWE6M-nP-5d4C=`j!R=WBw`f93DruMdc z#%A^==6vq94tO_(A}#0cU~GEC+=bP|+|tTUhOPg8F&nFunGBnrsG5M9!w&PqR!W{u z<~pA0x~85-OeM|ONQ9dzVQ$ayNR&hx_K~V`|A<-?YLIQ%K`~s5vf&#n(f>MG4QbGc( zzy4v9U4&QCPG%NT+6p^=eI5QL!*b2k6(;6QB(WtyZ`ZiZEgSYtDRjG-C%-WCjG}xI_r8knDc9!JKMWDnVKuQ z;ZfNC>FHgpEdE}cf4dU-&Hs4s=I&Pi!^g;PetztSEBss`X*{dc4kvSC7kejNdwUz% zpI)Z}VO|9&RU3sMW|MNqCulV2BGgmNnF_(o$it!4F@Cu3R3cwu& zrG$le1;nKU1ZG|2=R5!78fx}tRu&%rehmp-K`|*|ar`&?8nfQ{pVz<+GBb8D{y)0P z?Dx*Pj+v>Hg}sxlv5Tygt+Ay!zk{8nH2>c}ob}GX{7Pzvy^XySZp&O&SepNzemv__ zKYUF}+0NO;*v`~kSwR**;Ipzald=#u7Z8>Z7vmKah6zO^gv@!31trCJMNN!_ge1(& zg(W2{ei%_rZT83i>(UDLrmkea{JON+|K+7;ef+;Jt>I*aSZ8cA>pkS||8KwIA1?D> zU!`Q_3=j2~<+EV({T0Ukic;h=KlZMa zu_=jXvZiE9n43xS|JzUhzOBDL`Rij=|9=+4 z+1|qCsIil|yd`|%|7^Gayzak$@ISvmnxA9<8>@d`il0CI_Z9k=&;Iv{N|V4Q1#iHe z8UI)XL23T~`q|&#{PX?#WL0fkf4pB@NC5vJ{o$WqAD#W{|NN-I|Nhb0zy8mU{{6{4 zc2+L3LchN4KYl#xQzZKS3=BE|3g)t6qN2j0()|DV^J-|*KBM2_Vpig{nkXY-|)v=v#s&l*MH3QTNBNG!yj|aw#IK?|1sBZO*H!rf6O)8 z8oz!0$6UWP(d;+;G1qKs{Py)9bN$vtv)}N?T(hn5+t+{0^;;9oe#0Mg&9=sGU;i=J zZ%s7&4S&ov+Zw-p{l{FtHPP%h{4v*TYy9^0A9MZIM6=)U$6T|m@!Qw`tGO2aJppKL zhq1q-nD2Yd6#Wjffvl!V+G-SvCntsCA4s8$&EU@-3dL1`Lg_W4P^6+Mlr{F@hEH}< z=IqW=R*=_qZ~7eXs=Mmb_q)&R3f$P;{4*I?^^=kr{8!I6eGD(BA6!p@Zw4{qFhymoZ1?>Bg~`&= za*gHT!_n25S}DgZDq=b7GPT$R4U4>=&tF8Z#HW9~CDCqduuG$%x>~8Bu~EaOCRI7$ z*fDvNTNV{`o+FB`htw?mD(V^@)}C_{OE7QKhkX^_J6bZdq#7#RyxnCCd7Y z3vSx9iH(P+$8yp;{Fvp7nc@x90jxj&Gt&%@i13)6lzbM#WI8d@x5eP*@zzJDYHyhC za&d9V)Xk#fRJq9EH$54-#UOmso@~uxU!PbJtLZ)dB^VHJ-5CW(SoM> z`8JGO-9ERxD{y|`Ga)AIca}w=dcOQ}svrLeQNMci>Rq8%RQt2@?R|Y}jn@teiiz#i z(~H`EVv*Ke2jdqPc~z#yhkI%>mPKq-Gx^%~#OC$&V>?dK!hB1&@7NJ^?wp!xYt+I?B>Bqgym~+{Jvy~a*t(9JTo&tPdB32=(R?pN$^EKdEI(9uzM zyXK;beA~AScv4SKPkO!s(J*Ljs`AQowM$RosX;+OE9BQ;5swcI&6}Pab54-)dOFxu zWj?XyEf&LL>>H=Dva-{5ngG_x`R7^WEJi-RxouT@GFkDAHjG$aUOq51)KPtThk~M_ za%j;CV`JmbO?hXUeJ9SHT)HkCj{~>cm7yN5U*N=P|KY)}FYAAfJN^3gt8vT2V=ldQ zG`6<3H_cz}gquE3khyO&W1>TU;y{6u7M${)OHaU=GmBqdbSlN2P{i%t8DT?q zfBKZdy~wqmfE zLQWk@*?V$!=G(l<+<%Af{XN(AJI%fb8cYZ7xdiRMW9K+E?)ql>iQA_J-pWL|D%gu* ztJ{`_h6df-L-C*A+|t2zOxH+McW}5KcN*5weOKgjDN83qJ42o6rbR{Yv14;;)79EP z6nZi8I=<16KX72ZWmSSXwrqEAZ#eIMv9o8-4h#=-a&T~%F7h-nVZ)vwU+?baReN>6 z_*#*}+pts2CZhH~I=R&9Z9XsAH@M9>X^-&Jr>P49gf<|+v`vl;+I)BrgLq?NYkRdJ zJ+iOacIjG?BwPxSFHr50nB$js1w;9jN~2HL%X&v6)?MaabZ)I^X;qa*!#5u;x|J&n zu%QzY60)!CH!vWNO;f4y_|!5M1Q4ntjn~ZE9tTCo#Jsw0ykqR#`1xX6H#axj?TJ9g}F>MU2rwj6--;>qdamORZn(#RlevE<{+D6XSl-bG)! zbj!ZE$o~Dw(f$BtCZ>v!zPCN^?~CVI*Rx^YL~hm#p=FY4X>Bbjj}iVlG-TFU9&>Z* zOhs*N1R_>-q1RFD62$~*5AK8aL{_g}Jvur{Hf({XkN`rv>2Pm7*`Qe1aQ0oa2$~9T zJqB5C2|QkTtfx*IGj<8-ebVBEidKSF4j)yq(7 zhv`X=v**q|j}_e<5)yKt$lD;`TcD)dX9jqgf)>4vjm=%ZnIbCAh;P_34+;wf#l}w3U^WB*L5}SM&wPhk732d8uh>E0@e~tL43X`SR!Y_oK8@c4q1DZ{g*Y^qss*#Wjzt>-g}e zT}9qw)pd1`>+3I^TPObQ^BZBBN^v_8yAKZ-F*3hNH*?#E2OeZW^sXHUYcXS6u#EX^ zGWYAIrWdz+UCN%ES!307o5$d$S;^bC`{#xSNq7!%cXoD~Rm5Is$~z)#QOe2oW^t}5b@p#`pods8%91UDxQS;Q%(FZ>LVAMq-2cG#7Nf5?(&L? z0*}GY?`vFGSXjs|fvZY7wD@}q^_)gr$ZBg$Q(4m^qI`;kaXNJau zPAy?%oAcbCY+!77Q)A-|pI!_jr-L-?4oIbvA?5bp#p^ZEJtX`U`K1FGshpImNT#_;&b6Jt}; z9hGsCZ|*v#kfpY)VvZRLRmO8C8hG9|U7Nen|vEE-( zQxjfYT|L9s?KSdQ>t!u9V-&Up0=}J{9o^afvVi%EHR(_A=%gzN2nk^0ZP%j5;3KC zEI~pfl4AH_jnPH`z%@QTK8sdw89f@s;%87D7#PT-ok|T1MOUx-u(RTl7X676i`VQH zD4K`;ze2J~!QImnxC$P5!6=m-h+!uZftif?#tvldj;cf!IXO9+ol+(UN+ibgy}hF% zAT$Tj^RoNbw(yqEiyuFGR(t=bJ*?YPlSa3^HAese6o32H@f?fNTLhvG$x$?8qhHzg}yt766{Bd)uDH4zaNMNtxA)_%tY5a-l>eZ`nfM#PS zn3$NX8m=&+SlFSWviV>~+KpScA{c$;C@WX4+^8PMeQY$Sx}o7|W8?P>k77JrI?`J> zMQgN`l)9*dZ=rgH$FZ}s`%d(U2LUz%=03m3`<5jniQ4acbTq^5+qa8eSF7@(?Jpc+?Z<`|_^y%nCbq);#cV&bNCX+bOwD+>QfCkAssl&0`B6AFaK;{mzi} z&ygJcs~Atrn>WwkhRJ;7iMCfMyB>CZ+X4@uV%@Oen2guR@^$N8qJZo{Xu}({osEfy zprF5jWC!erbYzTsI8f{xk3t|rgi06TS3YFDq>_>nrKS5-3IikK*Dvq4QtaN{J$C>8 zR_D%gt>$Mi-50!D3NNkUKa}b@2{7gE;gKelKyc=xSltcx>J zj;`=CW@PV!#bp0qw6hGlTTqZzzHdAU1+*e5e-7SvGe5o98s%+Wmd+_87-K7|v0N%) z5s}C!e#7ZHxgsqsEfP2FMcq!wbs~CqRK{OI!Rj;E*b7s~O5FyYeDd&Ni^j|4uKge4 zSFrC)Ehxrjm-d}x01L97iD~BBaR2-Jr%s$W(WHMqIJorb)06P->?&{$xX$GT_hWcLjs@y}zI!F?)GYZFjHFE&^## zolWn3eie5{FeC_ri0oq#+D}SR1q}>1khp!~#C+hwx~u!69zRwPJ(3p|wgP3#Sw`Un z&d$yNlsng8ouR=(K`9X<=QnN0{0PYJMt=TY`{uijfo^?GY1Ul# z3JQF_HZ8n<<3`D|XQ!}d2$?D8a}}H1=c~;8g$r|-ygoHt)!Ev6;J^U^5s_42fo9I{ zPXVp6G%uGPHCR2ALiYEnO}eAWO4Hl`l*f~~T|U2Ffw&0Vo8l{%Am_(C`as%hu(M*u zy&37Y*JD`ExILSJUZ1iHKpa{XA!ZoF?VI z%znJ6$Tzls1VAO3dv`Wx0C4>tzgtC*k?ZttAAY4b!Pon)Kp6O5J*uk%`}4~^l)dy(h{wq(DKtx$erzcT1agc(V{93~Pq;T_|dw;n7k#zp=c&X}-8Vd(T8?qN}zxU2JSDxFz9w$=4{`=oOV+ zX_>(e?KveMoP_0y!?$Kg_0Itj5SIP;5grMp-nO-2gdM~+bYAwQQXh|qi10iMM)AtN zyhZ*<02$diQjTp3_>8=ZiwJ5XYtweXM4RTK_^ztNd5OCe*NWL>hR{tXAVjowb}sNf zv=8am2ag2D*a)JynODnj`}Voyn)~ml^9A&CcZ1Cy-5;NWV5b@{bwSFtS2NFg5B^9^ zFvQ!eP46O^_s+b2`?melClwd6LHbZDrYCBQcyL>MLHlmTAT}YkwZYqIXXI) zl$D(Zo79T$0oFcN#r}qey#v&(Zf;*>nku}02S}N|?wYzfGazZJ4=)ivtiW^Qj_Ps^ z4f`J4$;(SaWaHrCYVYsY0Q~g$+BP5Md`F|9-+UvWf!?Fa;8Z{wb-)AaviF=p0Q)vR zd}PVerNqqKECkP+iQwa--@f-svOiz7FRr1k zPIuRs+n0A)FX;RW3M4;#_y8`R#E_ita;V#YVzPv~<&3P~>m*5}~p`rd~ z&YT(dF*PySuB1c_ZVUUY?~)(0yu3W>3Kd&nOAG8{6qsK3q|)UB7i7in0cR4)ZbHLdzKs}cwG|=Caw^&6*Wut0zQvOGj&pU8=#8q>|hR@B# zEbG>-Lkul?-6MiPI6Q*#6y-!@ld^Yj9nbJPjh-u4^>RP-N5p9%!ijW!M)cs>pT7nE z*;`(LOp&EN^0j>z>ZI)eSObHDI)3+2e#Ir>M)dgtZV9S9y7P0qr}uxoza!kN}=7_fVk;I8~BKk#1|U z_iSckVc-F57sd;R;}F5+G=B?u{FQ*b0x{zmGpQZ{b`4?@*0CN zYHGB7fQ0#w?-sV8>LzY|{kp*V_3OzEqaM~PcF$0|v=bS6Y^Y}?LhMF9z7UwI=BBv{ zOab`XiH}iHQ6Vb==jvoMrF$>LO4Fk-vM7(1$Eq0IbIEG*Uk8#F6!W-Uq7QaaedXNN zx6U75tU_k|9>q>U0LhYyLKz;2XUose=h(P08FetAy}|9nTASwdyh>S!yXgY3vkq)W z{Y=lTNx@Em$1(_+DaEcRKxLGimi7eH&-MI#3()x@_8$%~?HTn6RMw(j&Aab0z6mTg zt+@RMGZcNdt?PIDB%C_65NvWA)(`u8M`81;S7F#I=rEltE|x?6s2VF0#J(%UVPeGA zy5UL?a3siS-7ESl{IN}Pg!he)^j*r{LCOIefQI^`<^8#LB9G)FGoiv=j;;e7h*8Ll z8s@d^t;>4gJr=GWFO@Zc5_#{|ZB4hW9>J7kCxP-bMr}gqK2VrW!@YaJn>@O1{Ajwt z((hY`va86UQCZw`?|qK&rL?p=4GmdPL*%_;S-#vqB!o6SJslX^@%xv9vEue2Aj1F* z_9~{LZUmBxgKKJ|(*`6gub@DMUu~3>WWkAff?@_0mrvFXl{4H`ty-Xv}eZc?E5Xq?DA1FBiF_ zwr(}Gw%(0o0mno+zqijpNL-vtKp+&g3t?x$kfL~30J=h8ir`dPjlxp@jvW&c?6az> zWq7c>_PclzvWH1g4%!ePamRUPnbGihO|M@I_>8*@kAO}Eccc{C6?5rQj>!RB7bWQx z*}d3oB228lzP{y&axCyL*Q_^Sh3h!2kP6IzTH>}IrNzRAu*iiZCbG<5yxI(VERyfw zzNrMI7^aI(K3*OkuTT>1%d>t0!)JnW1JY~7W<$xr1d{>22IS;y2E#`}RwTDp05V7V zef3yi#m78{4jmHYsfkH2xa)Aa$!m}kUXv2yv_=0q1rXH4#H8#Z?nN_YU%1YEhLi zReMErd@sB%``nnla%#_w<3zTJV~ z4C@;9@yfV;j&2G{!oGbO#ZT^ZQ}^(vMlNaTIDo~>ln?NLUL_O6mEzYqpL%;=AcDU} z{r2U{m&cDEXVwP6!DbH5_d(GX&i!SpQ(u$lH((iy-r<>Vt&bKiS+WG|+bPdx&WR^p77)4rU*B~OY`#_6)b|WB1vfs?~ z!>+8X;N(<;;JJR%Po_wu%+lG#>-8qzcK_25rkC(~WDTuE(CHFLPpB`vM+c5!337_% zL0|SZ!=b=(-ap#k-I$x$bS&Shb|c^xwReKWB{-I@@Bzx60Uh_D?iH|dJ4$~Lfvv5r za~>jc)Qfrp2&;(h@dZha;G@;YVR+Mw2C!N)w>DCHCrXwHlenVCh;G~v792Iu*y5dz z#E0IM_h2JwzM+Le)>x;OY5jU2R(=pGBzbJ!ycx+O$IT^;TJgfBJ>3Aw10Eb#ko&>p zsP|D2hv6eK=x!^?d`Gpr9SvMbK*-on5^0a}KrMiJ)AOl7`JeNgN9W?6zBji{0nyG& zv}{hL_C#0+3Jy+2mo!esYxSt~s^%w8PJq}Mi=ASylbuB6Pr>@g2AudM)G#kP&xq0AvNIs7P$-wNF5`hxb?_ zn)Y_-Kns9MW}!DTPsrJ`srd5V@6)IQ1jNKTL0>VfTZiJZ43N9d?Hx>uI%RvTLEXs6 z2;s(1#*q|`ZdkNM&@)hx^&^M9y`|B@y9}B(dtpycPnv;nF<3U&&TAJht_C+|f;J10 zJHQxPm$%P<@ZdpRj2`O14%|d#i_F z-(}qR+WtGVYHA45R>|rMN%ab6JAU$HO_Kb)ykq%L5|Dl(D2j2;Sa6?!QFU1*;4@93 zl2A>MW<)fTmX-#nAzZAq&p16hdx}fg@JK(YTmfA+@`lYk{2t48Av*drR1qL3jJvBZ zqq8yxPzH<(iDrPpPtha?C70e?h}IP-fz40~3b_v$!3%bvqcaL>8Vw><&TbGz>t#G6(HuZ_TZ;g6>cWLpEVAC3 ziGzjn-@khG)&A=HHAS?IxrQ_Q*}HkV%s{#HH05oE^G9yl6YTE~&5_$@rFbbx%oSc=WEVhh3kPl*~bs*p+?;KFGkpP@SX4 z4@w~I1+a+PrZ;bHm@Y);2Nu(9v_Rc$RhJpoWN`QJD>m1m_FM^%Z>g$|GnL>Ivf0a; z_f;=lvP8mfTAFND7~iG4`WX1E>bxU*hl;#|K=5o@2(pnh?;tf98XiV9%{(A^`7-n84K=l9)I-$o!DuQ7Sk-Xg!Jh#wMng9QKCKg5K*Xv>q2g=H z$B!g{-*x@88Y&#?Ln)EN!>cy$o!l>JTO^L)lLGC4@(ZA5Q=xz)IgfA0=gwc0I{wOU zuyZN;BF9gi0%O7inZdCt9ebU}!sa3lKqiFtLzPio0Om-U)<`(3UO3k2;!2uE39F8kj@qmZfefA|OyE!1z_MTKHlTyde?Uy1lDw7i#`G z9{Gd!Tv}1HBK&7Ab)zg@x)i*gG7MCo^3V>g-aL+@P%JeWVv1of_(xAQrNXC=hJuXoB03%i3^u8x8U25z))P2JbdVn9}K+Y zFV6hr_vJ(3O9UG*HEFY zDp=9b1@)eq<>2u7wIE9J6tN~ip20ggyU;j}Llx+K!+FQ37|LKDad{2pY6;YaSm7tw zR$!9}&4%I^zL=tZ#}CL6EKdtyU3Yi4fNQTVMU=l3xzpQU zvs%%qqp+sgx^*jneMS+1R+$Iy=S!`+0}$0wacRw{bU=cT=~eWzv#6#Jp+Ix#*seKr z-|ZYC1?_r?ZOEuPg?6f{OCUyi^!V{{!k{6Oq0)1onU+E1eppu4eV=P^%797+J%=9k z>iD?0x;SQ@csbBY)?H3uSy5{bG^Hw7>NK56a^Soga{$% z+(eHmJ2(hn!>9_IzG`Y3UzY0!<)w(QJm^XFLeJr8p{?Vvp7tL7o;SC+f|FbN`YJ#{ z@#toTj!)dQdoKlokjP-90>`l(NC{2&9*}?7*jn_8@$v`JpcCysj=GF^J%}d~Fi~db zRXnhLD+b1QJ6a9J(V?TeZX)Hqh~iI71=0Ux(%va#h-_P2q$1h?IRM4~9B*}Xo%?RK zVs`J8(CGp-*9jD5O&10?(ZO4AFEJukbf5v-0lY~83u)O+gd9jwDsf+g)k05^lxlbH zN{~SNV*87xBou61%B#_9CWfO=LNo*D z$kfTGT(hov^WH0HFS_!2nVE6m-jb0e9(Gv`Ap#r2ZF`U0FDUr>*1q@^IC4DRtA>V+ z8#c_*)6>I+o?_c(8r({6;)be*+;`SD39wFvyr;-lK)Z)>7u8}act{WeaUcY}qw=!B zt4HyCX^sIe;JwCbdCeM#X!b;CEowdmPss^nZVm^Pm{k)S?$?1j5vBDjM7_4QHd1`R zvZesSq!?ahK}0I6d4o|2iXLe&1Gqs5N@f#S`26+`=>ekt$l16hA3_ssVI&}7K=ix=ZFfKt%w)v0O&@(3;=}*+Jc|af zTJ@_}CDqlTcXTir@FCGFJdOWqZ)_AYdRl?h$j{u z00HMtRnh)xcsU}j>MfTX#2e%*-y6L9P(Y)75dTzWy?U5s&L^v;CHJ<@) z-t`zvzqglA2&fp0EiE&Adv+=)RNt{T%rkq4EJ_+5jjswJOu|xSzIltVk|j2ZS}rr8 z3=sC&t5+-FZLU*0J+I|{FLrl#$9-`UR19@?kxFtQf+cjG$-ZL%rutJ}$YRz!XIff} zu>Q~BKlSC`u!`mYTL=gXp@VbnFak(HNI40cW*)KGv3+};t70*K;)oYgO|+zQ`uK@x zr=?TAOufiVha0akfn+4|R78aps9!)HDygcP5umKp0#%EExVRqB_*TgA|KE+%b}`-T1eMG#RD04*IIL#Ogm?a_`sfBt-vU|eWuX!^+Q^XHcl zUJuw3X(<@7f)39IE)S9dEtNE=S6g~|l(FQHmg~*JHUmw!vm3 zAz-rASR)XZ(a@EO+vhxc`V=yjG*!dP96UTUGBSlOdUl&PZ3+emaR!7CS*0TDJ(`ps z29@=d%B0|+Afk}4E`3Lj7Gr|-^)_q_v~X6gT9p>EmTTk2Z$R@RU3(N19&~JPw z2!4iIbRI~fADtbyeeUj~i5C@BB^#Rg)l?m?HCNsBL_oyCt6jJ)vSo{E{4t_?7=8^b z7nxqTX7%ce+1EUg)zOX6iHcKHP{{0Sf$jt@6n$;|UF3MsX3u!wgs00+XW_F0gXZU2zm0R>hyilk1 z+H7v^YQ-Lb&a>-`@;>2p=#XYzoWE$hXA(*+vWc~^%yPP!n#YI?O4pZ-bj2a=s0-6+ zZT<@8`5Pd1dTMxRL4n_ltRx~q#F*}AKH)Us$=Nh=C(5h9vBKuTRBc#nU-Lk zs#i8?({wuscQ#2s#tb=`3j8ot>UgM~1RMxhsuK>vvZ`eVm^TMV)ygInKqo_bR-&tX z`naDu8uMr+Sy{6$j=2QIl6Ik|t7~l0z!dtDV|+o3Cx(up{g>TKU;4cj@Dvb3yuOBW z!(e+`+qc@Yo6zA;%F4>(JHPxmONIZOdD^`VewzNvP>1hTNu-urh>Qe*xbobus~F^b zAE?fse15pOXzHjzB2TJ0dJCkWQ`26zVerNe;ZrLZ9cY^T)6&v9-i!tT0H-7LSoI#X zv;dG)L``EJlRWSU>P$M4ybuVW+2N@b)uGFwiMfPsa`xV<;|D)kTUgLCODmD}sSBeQ z;zE4Gvg~R|oY{sN%DkabV;ktfx+P7e-^sqNyJ9eSX87!hazufxWgrx?JFdjUBl2(3 zyS9btOX;!>z2KjZQwy+;&1+5FOyb!T% zbVKI>()ztk>nC)Pm=-KyU_Dm$cnPy~^jcBt)STED zxy`6j374F{(PBF(=fR$EEbk#DK`2yfNQcmDJqEwNXx+L?iBbzl;~7<{^*I~)(FU+_ zr|>_&=S)QgtN=P>XDlhC#=pIurX#xU5nN^4p>JxTo7K9uIXM#YS zp-TZAtMX#`;^wo+QJQFs$!)fZ-dnAs012a~f`Wn)y)X@KAOk{4)I^2>UzZX&Aj(fj z@FAjHK_+T|gpoc~Ao9c*4CK<@K0cfbj0Y;kZCG~)>KyNYFuL-lAe(S&dOCl=__JLp7vL${oyhq(+zl_nL_sTZrh=B++cbn(W;d3T2)~TXj4&Fe1{9X+ygBeX1dmX%DuIMX@}?NV$xiN+8Pl`2A#)n+)mG( zYoI34llam<`I2R^)HW19sLX#Xz3irWgb@QBjZKOD^$_8a=fGV7P$;45*Ou&bauNd2 z1J4kM4Xm_HXgNAF0R7<@2-v6=tDvfSmWng}>qy`J@$dcTlevdJHEI;G2r~d;KpS=v zit&;%BWb_s^&p$Fb+by*edJ*E3q-)1;{>*q+ z0PXS>E9CLy+=m|AJ?2 z4SAR@bjb^3G9IW>f!EAn-f$gGrUA6#0fklY*Q`T@_ipnD2|%fm28Ne_SFnV;w+T@Y zz|t_?79Aa}bn%2ShI-ZWE2zyb9#nlUro7?4m3gbw{GzIG6D zvLJ6Mb9@1r`vF_Ld%+8r?Wj~~X=!`MU&C=|c1v-{$|hixB(vEW5^}o8CF(E$#Aif} zi18=}bd*4J@UZ7Mhh=7RBe(}b`VVRPW#kWFcNHU{Iq=3uuU|(aablDRQBqs&zldJ;PkMC&dzHW|@&Ew1=D@*R$;@#d<*t&Iq~ z=B3AJgxJDDUKjanMOq+Je+c0kbHix~9Z1A9*v6yd~h8!+^y>!-c&*AlQPV*{=8KyE-k@p435Y&5Qem(woS zu(%VL0CJHKG$f3H<^d?UA=w7`W(hdyBxJE2ywmeb;{2%HA@|am8?Fuw$UJleHXs~< zad7A?XQX+d*M@`wD7pZX1lO;(;F@%iiE$|Rj3NJlZ$dj)OdCEeEU#e<>I!t%2~b?s z#eRO0f_}^S4?Qr#)L|*>TgcOIzgd*4xvdgnEtXt5FP2@;eN~;M^UV z1ka=A(LN5g#RwVz3=T;6PD-%I`9`kfk66jf9D?RES$G7f@&uXvPHU#Nd3*+M2$-LN zB8*6E0=}KQ3o$BE0Wvk{QGT6fKOs_vLMsHk%>hDasJH&p5zfr1qXD#uUKQ|ib#NbL z;hc+MPeA3H7;}XBf6_4y4J_X2VyKTZiFUeD{4Zz)Wp&I!(ajk z;f@>#jq*e6lGlI`%ig0Gx)VKJ^v}72!>!k0W(rKI+@yrgA)=llG%!YOp1W*eG9pSM z42On7m<7J0gf!=1I4oi)#m5{iQ0hgCi0I<(-Mf%Es9|A=#ugDUlFqvMhE6IPp=dnL zM`ez*j_`AvYGVYE>0p>H1Wg;5+!(+e6SW;jiXIoQ8EPIJXx)L#gb*&AU2Zi zCa%QLFI$&k81vH3YUnyRCAQxqr7ZHzD+q1#rbusJ%B9;sKAs8m(q)w7-`j1 zsfgY*X=b3sNP1!9*@)Z(V{T}!v2t$oV?|e-h@uHif!}0#XdFMQfl)#dCqW96fdj(U zSXL5DGRS-A%O~pb{-BT$q6;N!hPxF$T+NCa^yIBu!i8Sn(=mM~=i&_J9^ z?;RF4dg$-sIECzU9_R`)Kv}wt8rZOo=*vQM+S4}9C}2bZR5wLgOI!z34#t(@{j}S* zFZY!ILRDw)3Qi8i+!XK-=NvkrCBT9Qz&9eQ3cG#Qhs=zCA`s!I&bv;{*dgDCVoWt0 zN)g@0eaM{{paBIScyKa5?KTZ*Sz%EnojRzOF-wOU(PJo5?M~wno-)^ELY*W_lAjL&+ApwD@kO7Pz1fiA7j9E zS&!g)M8A%qTDl~coya{HgegJe72%U8&R{Ryv!1wFE{bx>=)=8$ zCRM_vI}|BxXDY}05Baw1FpES+sxjn-2s|HP?KLF2o(?66I)o`M8s$XcYz`4g$LCeY zBQ6;vx+wLT`jbo;)gy8jaBYHSWy?`S@@OSffwoUV*NT8$P{Ck5L~(nygZnWg zjhSpb>+&CetZ>;-=!82X-6fz{^mYU9?Y)N_if*~7t!)J!`^`O9q6HzUI#@@r_6ZIW zScX*T3~3TnM3u-0WCJW%uz(&-do(z;;h_kh!Jv0A#n_7eHscrD;G{F;34cB4J?eX* z@}RLgP*Rb>Lxhs{)>e50Tr>>CKm%iV47(-}4H*#mgj+?@i3LMMW&{BUpTifZmo4Ms zllfc0!CxPz;O%R^mF^q(sIH%m(Lv1j#8nt7Nu^ zAbD{3WEu^Pk__~sh|U>QANtp$eRrBkeFtd|shbHO`UY9+Q8=fH{#}O+NaD(a$mlOo zVLW~Nb{*z732h0JI=Z^1A(|2Rim%Cf27E4$(md-xfe@6JXn5BYI9pJq%jOb=Pxv6C%~<8y{6F8DW}n#AK4u(P}j`_XEmnCGPXZ4`LiN{$y?8 zq@+m!O>d8o82%q~1<`1?IKxHBvV#meefI3+{+SslQb81aKW`|GbcjA2Su=8I1lCW8 ztd9!x!P&Y!_IIw%UooW0-wjS5a|;xx7H;R|q0O;DL}W;=ulCuqQz+!q3W`zj!`4#u zKEN}mRsp65-+vecaDfu2q}lTe=v**7i@`?K<>)N~z(6GZekTny`Wy6NJ6KrSkrm&d zpkR@m#?UyKoFpd#{9K9cCtJXC`HfE8_WEu|6N&}$M05u9HpgTk1qF3AS`3({%9XVQ zB?3D0B2i_7m!FT);~D6e7#S}yNP>Euksd3s5s7mbPkvL0Z4?$1Bs1o{MHFBNbX-u* zWj-4~!{i3g`LHCk8J$p7Azf1$8X97Drv4co?GXW_5Nc2W-N~44Z#y`}E^wf|eegLl z%Lg%Pqi+AJmoLwtToQQ(=W#(`nS%ivRxz=?ylReP-^>$aeO^F!1lLvHbMwdX0djr` zK(L6+iyq=nnq|wL{S<8HRH5lc=2;*oIt@{M%V60A@(+n|m@aF9-$EvP2Hm|bhwY9()h~$bQaFR|Ia1MnqO){QC z578?R zkj#CSMJ@qxPz%$YNIn`60>N2GI65;}_Td9FW-g$IN9hMjR~vii*H$`S%-IbBK7ta2 zI5H1GzZSQS9;F5ZbZDybQ4qk0`w>V57s^R_x8vlJ%K($TGXUU`@Zyx5oScxy_wV1w zEK3OtZS;@=f+2NxAxwnuOn@fjq_ODUVVHx;`%vy7KnCDVqHZ~iggf97S%k+!^PjXR z0U0T%0m<5sQB}+vP;mIc@%((ZY|~L_lp(4CD-nm`M(t|{B*AIVA^8MBPJMV1jzR|L z2?L0TkHL1zQZS4Rr8Y)B*pb74`4&>ZhY~z-%kunM z4bqasI#*&$gPb6P!U!EbupDzR3e$nKLSj7~=kC-?gJl4Z^`c>@5y-qpoTM{~?GsI} z*bp25by$D=F>`jNfOzu$N2jmQ*1P1Vb z4X^}e3A5?1u%s{|(PDv|4<4TcB6R`;g=DA)B`F0b^CS_X@1E-!aAV|{4CFPC^?F;W zVIc#Y-2(uwk|#GReHAjkaS)XOgj85-+uv|?9cm|~VQ-Ag4-E}bgQ%2{h(@(G0Qt=D z6nrx?;1G_PAbdEwJM~?tg)d?MB1{FM#zy;tB3mUv2An~nl)QOk;8TcHd&}n7lq{4Pp>mb*6QV9jO%G-4z7jTQv**42isj zs+0qP#89t#9Zp3-IOc(V<=%UoqVODXw*I>_0v$9=WRli15!nt_CQ=s^R9W9MuEgZu zzO8$rm#~-6xIo~j4NQz+v*aQ8>>`PP4-f-?DDruUo>^HGKMOWw?-7(2WJ)>fQz2S^ zko2yDH^BV?fQ2Iv;A7sLu{-m*|bNkxuA05cnK zZ{z_mtre9I#?nzPcb@6mfr^Sz(B$~0ZUo^jKr568gvz0i<8FXnkp19A@rd+u5_dJf zfA>z}=$G}N*R;RKV5Saf=zLVv8eqIG5pfY3BylM7agt6VPS&NVe zC_1sINa9og2apZlB}ZFy@gY+I8D!m}hPR_~!{innL}w@%_sCbpZxsg(V1lPVY-RNd zC+d)Ghn3+pp`loWK>jDQ;~!qU}`_p{~fe4 z=}Xhm%_VG){yi5Sl)Y976P*?7(87OAU@pd^pz(N!<_@Xw0s`u;^nxlR)DqZ=IS!c6 zA!QUmjt8_;*b9#l+|irC{KEpM;v;)qfu$~O@|wmq(ZlR`4yRGeU2P*1CTiUB(_s-D0pn(7>?`7WdAJ3{@-8nuh9Nij3;0H zFD&>I5}rXm{i`7Q^xYQP!9eb*p4Sg zV*CF3iqbno5r#-fcrXzD_2ei!0;|zCbi}~_+u#7$anZ*MZLikchzcXhhjI&u;lLg?7XC_}U=`4N6J@(|O0vfXq z1M1_5FaXDAAi4m!jP2|~kT$?(Y(Qm!BWKV8;>Jxvopc!;IHF5J@-?!vs|0KqL$#=% zXT1tu`4MCeStT-Ohz*Sa=b-cFXZZSa(5Lu^MM~udw}4V*4iNn_6g8mOj4UjkVqg#0 zk1%=YwGjbiC?fpsNN#e%2B9;6)=H|X&V!dD%3E@v8&F*Bl-I@o-T{1*%Ym!OR}ei5 zQa%ag2w%bUJON17$O~)$gXr~u@c>}4m>m5IeJ6G%9||{R1a`FEV%V7f;oiO1F#2Km z0j7V1kvO0aas&wq{bRUuI1ee-ZEeq?g#`TD3M+wSnidhHo0Z31R{Z$4HHVIcr3zk0 z$|b0?Z`-^HM-0aiHE0#3lAfVe4Nhy^xEwMQghLPrGd=Aa|JtS4b3gwr^=m_bzH*=- z9C$_xWv}ZwcT`P;+lS|yL+VR73;2fe!(TXAp_+5szhcFt9;Rjs9NQP5HT?*&4Ch8g zz!`!5QEm`^5jO~mub}_p)PcX*20}U@Van)0bwY3`Sw~Eyfep|>R|+3S97QQcj-WwX z@dez1!)PW9^=a_G(<&q$gc2%5m`w5@;iIMpQn0`m!i#qupWN(>Nio#G|Cy?htgFyC zHbLzSyU`(CVGk&)t54U?km)}Na1Cu3)-p1_!Z;6bFgE_UxLW9HM#izIXR)O~891>e z1?C|#CqKWL;&(?u#3EoH%ATmgIV*X2!_B_$6Jv;~7@Qsw_}D4KvVZdi!d1-pVLxMm z7hruXkYC9NDpF~>r#d_cd9b$+HIks)=hq?=z15fJ0q+xm9B31?G=RNTId4Hy)Bfnx z%vK+5<}<mj5VEqIkwNC{#VRUsH0te3HvA|CN7i+N_ zM5te*8Pb4y*Fud^rq*>-8^&ZWge+w-0P;HSCIkuSf7an#GG# z&@n&+IOXr}uRC$;=1np#mh}a?bPiO>^B=e?X6Rjz`<*2tmUj|yUL-os z^{?9C!P*cRQqTb3jwDTvj>P?7GYM2o;}`=nDo!X$Y&F6Yf)bl|9hw~|^vThPD5*$` zlblckr`3djl~ll}fe0jrPYvN%Ig}0&n2!NVk5dCyfI&ZOZ7t+C?Tw7QEr^a2LTw{B z7Lo3v@HmLl57LLDA%Fn3f2iXEG+^@F})lU){!nkjD081E(>>^An3gBEy^e830Mz)aS zPN4C&8fipHi0FbmNHqW8nStcjQ6Lxu*GvE|IXDCJMTFD|+19uc&QtCYb;@T%tgrkcEIolVDEx9l09%1X&>!FJCSO*#LS1Go#yqsN;)Z z4(2`8sP>d#N|3^-sBUn!3zI*p*7lB$#}F6Pd3J+jncD&kPYNV3(7*!gdmD2#;D<6~vlBQRT@s1{H+3Uq?aheF#hD(Y zhNY(`Cr#B^jp8_fBs8lC1&0wg3MvQ!QZN(IMZN)|(SwT95&@5mPH1w-ZCo`T`Hj?eL?66uoByU6q~51!`5=lo z1BsPSTt&iMBb?V<;Jh$Y>R*Jzzfx7ebOt)%I@l4=ro8|WNW^QTMnS&hz0fIxv8Fi=ZRbNpk?mvPK#au`DX%vOXk8II;mlQW?Q%v2UQmDMvF44EFpa5LxI} z82A(+eN&2xiZFFBry6s1aq;m5-eW>!pP(?ngJ~rz(BRyHm)Q7(>LTM}1Y@if;a1BC zymV*1G3GwrC%QPW<|&0V$)lEZEcAfsQWpraFkIO>29lV_R)KuoGGfApV) zAk+HNTznq>3zVz(aq9b#kHVX=02$kk%>^Pun+;qToGwjDT%me~8Ii;Sd&Bx$Np1m6%<0C zM9>uoLt4){Z{KvA251*k}y>oE6#I?4<{<)*{zWg?Fg0&~%4 z)}038+8iFv)+;30aF@{@%(UlEiEWreg zM|A$UX%%+1E)x?F1M#-3NG6!@jw^D*?4ou5MI%K|`(r1`aZKXzhf`V!Rq?BQl+qxs z38^le$eCmO^Wh!tuWH4Rp=#xU_1%{)J$vNkX@F7=w9VA?+;87@p3r43K?5Dh30+Zj zBAiEa$PA(sU&HLBg+NxSyY<8Y%haSK(9*^f>NxBXP?={(N7E9}lD24k_g*l&W0;#= ze!rY#kJgDUJD*08lt7_@3Ynivij+Wz`sUoZSrEj?<+xSi;L8Naxw%xe8>smez~l4g z&Fh7%hCk|bO8lUS0)4oAz=pSoONaU`Yz?jv9i2#p^&v#;nyU(=s@kaH(1#BnMqV}h zm&7^DK6MV|xT9lIwJToYXk)%adO2}B-#Kg7~gCNQ_2XxzN{28JntG{zK-V>%Sl z>LPIkl_TVdWT+Fmpw<}Nq{DA92ktQJG9(y30gN>-FK>AMrO@rK{o3@m`zqS;jvQ_d z6UMY7(dT+6rhINbYz9eCrqPDk^P1HaJY;TUWUe&Jaw>_7!Q_0JRG=)Js&){YqJlq? z%^JUL_WK)3I~(7HT51+Grc0Qs_N-k7kplq|2sQNYL z=QtcqTeaG9LKnE)4-{3}e~^Q;P?>haU$_a6C)PDkFY9crssGoxR{8Pp2KBf%$JzNF zU2$jKR=)cpZadoC>grRmyr!wPwne++weUfMbHhS?jAx5(!LRc!jXi!s_o4s5gQSm$ zna2#4dP4is;G(=l6O4QXQ7wbz)v=h-e=e6BA=xU5k^!?Ks+R z2kHL_gN#fMF-U-Xk-Aq#RTzY2GD>mQDRC#5l3o$c)(W$OQ~to%0A5m#zu0q8ssR!{ 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 VAFum7-oXFq(Z!+j-i{-@{tt3X=v@E+ literal 0 HcmV?d00001 From f8f05f0ac943ec5fc688914c28b733fc9b31497f Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Thu, 28 Apr 2016 16:47:37 -0700 Subject: [PATCH 0348/2326] Updated S&F suggestions, some other tweaks and typos. --- bip-0075.mediawiki | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 27dbc44b03..7a24a0e87e 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -187,7 +187,10 @@ All Payment Protocol messages MUST be encapsulated in either a [[#ProtocolMessag

All Payment Protocol messages SHOULD be communicated using [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#InvoiceRequest|InvoiceRequest]] MAY be communicated using the [[#ProtocolMessage|ProtocolMessage]] if the receiver's public key is unknown.

-The process of communicating using encrypted Payment Protocol messages is enumerated in [[#Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]] and [[#Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]]. + +The process of creating encrypted Payment Protocol messages is enumerated in [[#Sending_Encrypted_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]], and the process of decrypting encrypted messages can be found under [[#Validating_and_Decrypting_Payment_Protocol_Messages_using_EncryptedProtocolMessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]]. + +A standard exchange from start to finish would look like the following: # Sender creates InvoiceRequest # Sender encapsulates InvoiceRequest in (Encrypted)ProtocolMessage @@ -256,7 +259,7 @@ The status_message value SHOULD be set with a human readable explanation of the ===Transport Layer Communication Errors=== -Communications errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). +Communication errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ==Extended Payment Protocol Process Details== This BIP extends the Payment Protocol as defined in [[bip-0070.mediawiki|BIP70]]. @@ -327,11 +330,14 @@ Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption v # Address Service Public Key Exposure ==Payment / PaymentACK Messages with a HTTP Store & Forward Server== -A Store & Forward server SHOULD store PaymentRequest messages until either a timeout expires the message or a Payment message for the PaymentRequest message has been received. The timeout SHOULD be greater than 24 hours. -

-When a Store & Forward server is used for a Payment Protocol exchange, a Payment message generated as the result of a PaymentRequest MUST be accepted by a Store & Forward server if the associated PaymentRequest message exists on the Store & Forward server, otherwise an HTTP 404 Not Found message should be returned. The accepted Payment message is NOT validated as the Store & Forward server does not have access to encrypted data. +If a Store & Forward server wishes to protect themselves from spam or abuse, they MAY enact whatever rules they deem fit, such as the following: + +* Once an InvoiceRequest or PaymentRequest is received, all subsequent messages using the same identifier must use the same Sender and Receiver public keys. +* For each unique identifier, only one message each of type InvoiceRequest, PaymentRequest, and PaymentACK may be submitted. Payment messages may be submitted/overwritten multiple times. All messages submitted after a PaymentACK is received will be rejected. +* Specific messages are only saved until they have been verifiably received by the intended recipient or a certain amount of time has passed, whichever comes first. +

-Store & Forward servers MAY accept and/or overwrite Payment messages until an PaymentACK message with matching identifier and valid Receiver signature is received, after which the server MAY reject all further Payment messages matching that identifier. This feature SHOULD be used for updating Payment metadata or replacing invalid transactions with valid ones. Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. +Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a Payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== * All EC public keys ('''sender_public_key''', '''receiver_public_key''') included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. From bffcc0c29a25e3fcbf92ee15fa6f23fe53a7c469 Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Sat, 30 Apr 2016 22:19:43 -0700 Subject: [PATCH 0349/2326] Update bip-0112.mediawiki CHECKLOCKTIMEVERIFY is absolute (not relative) isn't it? --- bip-0112.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 9d8228ca24..19f74b60c7 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -185,7 +185,7 @@ Alice might look like the following in Alice's commitment transaction: ELSE EQUAL NOTIF - "24h" CHECKLOCKTIMEVERIFY DROP + "2015/10/20 10:33" CHECKLOCKTIMEVERIFY DROP ENDIF ENDIF From 56cd35957f9c0b7c8cf0e8782a229322e4b54ca0 Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Sat, 30 Apr 2016 22:28:52 -0700 Subject: [PATCH 0350/2326] Update bip-0068.mediawiki Fix typo. --- bip-0068.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index ab66e1250e..0082db3874 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -43,7 +43,7 @@ This specification only interprets 16 bits of the sequence number as relative lo For time based relative lock-time, 512 second granularity was chosen because bitcoin blocks are generated every 600 seconds. So when using block-based or time-based, the same amount of time can be encoded with the available number of bits. Converting from a sequence number to seconds is performed by multiplying by 512 = 2^9, or equivalently shifting up by 9 bits. When the relative lock-time is time-based, it is interpreted as a minimum block-time constraint over the input's age. A relative time-based lock-time of zero indicates an input which can be included in any block. More generally, a relative time-based lock-time n can be included into any block produced 512 * n seconds after the mining date of the output it is spending, or any block thereafter. -The mining date of the output is equals to the median-time-past of the previous block which mined it. +The mining date of the output is equal to the median-time-past of the previous block which mined it. The block produced time is equal to the median-time-past of its previous block. From 797a4167b86723d7ff3beee7452be0998fb7df4a Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 6 May 2016 07:23:43 +0200 Subject: [PATCH 0351/2326] BIP141: BIP9 parameters for testnet --- bip-0141.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 08e354e54b..07e6a7f3bf 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -272,11 +272,11 @@ As a soft fork, older software will continue to operate without modification. N == Deployment == -This BIP will be deployed by "version bits" BIP9 using bit TBD. +This BIP will be deployed by "version bits" BIP9 using bit 1. For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). -For Bitcoin testnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). +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). == Credits == From b56f7d7b6da75a31acfff42a678ed31b0555259f Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Sat, 7 May 2016 07:17:02 +0100 Subject: [PATCH 0352/2326] Add BIP9 assignments --- bip-0009.mediawiki | 4 ++++ bip-0009/assignments.mediawiki | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 bip-0009/assignments.mediawiki diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 509a8a94e3..6f8b430be1 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -182,6 +182,10 @@ The fallow period at the conclusion of a soft fork attempt allows some detection of buggy clients, and allows time for warnings and software upgrades for successful soft forks. +==Deployments== + +A living list of deployment proposals can be found [[bips-0009/assignments.mediawiki|here]]. + ==Copyright== This document is placed in the public domain. diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki new file mode 100644 index 0000000000..4e98097a33 --- /dev/null +++ b/bip-0009/assignments.mediawiki @@ -0,0 +1,37 @@ +==Deployments== + +List of proposed deployments. + +State can be defined, active, failed. Dates are in UTC. + +{| class="wikitable" +! Name +! Bit +! Mainnet Start +! Mainnet Expire +! Mainnet State +! Testnet Start +! Testnet Expire +! Testnet State +! BIPs +|- +| csv +| 0 +| 2016-05-01 00:00:00 +| 2017-05-01 00:00:00 +| defined +| 2016-03-01 00:00:00 +| 2017-05-01 00:00:00 +| active since #770111 +| [[/bip-0068.mediawiki|68]], [[/bip-0112.mediawiki|112]], [[/bip-0113.mediawiki|113]] +|- +| segwit +| 1 +| TBD +| TBD +| - +| 2016-05-01 00:00:00 +| 2017-05-01 00:00:00 +| defined +| [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]] +|} From 6313ee0f3bd591a773a0ed7f2e1c7b360206b529 Mon Sep 17 00:00:00 2001 From: BtcDrak Date: Sat, 7 May 2016 22:41:49 +0100 Subject: [PATCH 0353/2326] Add sorting --- bip-0009/assignments.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki index 4e98097a33..ee56e17ffc 100644 --- a/bip-0009/assignments.mediawiki +++ b/bip-0009/assignments.mediawiki @@ -4,7 +4,7 @@ List of proposed deployments. State can be defined, active, failed. Dates are in UTC. -{| class="wikitable" +{| class="wikitable sortable" ! Name ! Bit ! Mainnet Start From 162e2e002568dc8f1b4a85180d903366f74f40c4 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 11 May 2016 17:45:08 +0000 Subject: [PATCH 0354/2326] Replace "rules/force" mutation with a "cannot be ignored" prefix to rule names --- bip-0009.mediawiki | 14 +++++--------- bip-0145.mediawiki | 5 +++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 95dd7408ce..0e1d7bd9da 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -191,15 +191,11 @@ The "version" key of the template is retained, and used to indicate the server's If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". -The mutable key defined by BIP 23 is expanded to optionally include one new mutation: - -{| class="wikitable" -!colspan=4| mutations -|- -! Value !! Significance -|- -| rules/force || the miner may ignore rules it does not understand, if the template is to be used as-is (not modified by the client) -|} +Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character. +Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs 16, 65, 66, 68, 112, and 113. +If a client does not understand a rule without the prefix, it may use it unmodified for mining. +On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be BIP 34 (because it modifies coinbase construction) and 141 (since it modifies the txid hashing and adds a commitment to the generation transaction). +A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified. Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks. This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation. diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index 0448b6ca46..b04c9e6edf 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -25,8 +25,9 @@ The template Object is revised to include a new key: | costlimit || No || Number || total cost allowed in blocks |} -The "rules/force" mutation MUST NOT be enabled for blocks including transactions with witness data unless the client has indicated in the template request that it also supports the "segwit" rule. -In particular, note that even if the template's "rules" list includes "segwit", but none of the transactions have witness data, the server MAY use the "rules/force" mutation to support old miners. +The '!' rule prefix MUST be enabled on the "segwit" rule for templates including transactions with witness data. +In particular, note that even if the client's "rules" list lacks "segwit", server MAY support old miners by producing a witness-free template and omitting the '!' rule prefix for "segwit" in the template's "rules" list. +If the GBT server does not support producing witness-free templates after its activation, it must also use the '!' rule prefix in the "vbavailable" list prior to activation. ====Transactions Object Format==== From e1d74be3b664798ce869bf4a9b565f96abd5c1ea Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 11 May 2016 11:19:30 -0700 Subject: [PATCH 0355/2326] - Update ECDH output to use SHA512 instead of SHA256 - Specify HMAC_DRBG security strength --- bip-0075.mediawiki | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index b62c75310e..0552758cd1 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -308,13 +308,14 @@ For the following we assume the Sender already knows the Receiver's public key, ===ECDH Point Generation and AES-256 (GCM Mode) Setup=== '''NOTE''': AES-256-GCM is used because it provides authenticated encryption facilities, thus negating the need for a separate message hash for authentication. -* Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs. -* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] -** Use '''SHA256(secret point's X value)''' for Entropy +* Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs +* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] +** Use '''SHA512(secret point's X value in Big-Endian bytes)''' for Entropy ** Use the given message's '''nonce''' field for Nonce * Initialize AES-256 in GCM Mode +** Initialize HMAC_DRBG with Security Strength of 256 bits ** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits) ** Use HMAC_DRBG.GENERATE(12) as the Initialization Vector (IV) (96 bits) @@ -380,3 +381,4 @@ The following diagram shows a sample flow in which one mobile client is sending * [https://tools.ietf.org/html/rfc6979 RFC6979] * [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] * [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS 180-4 (Secure Hash Standard)] +* [https://github.com/bitcoin-core/secp256k1/blob/master/src/modules/ecdh/main_impl.h libsecp256k1 ECDH Implementation] From 40d4246d3d83b7f9be213b51bc7ca4ef6e0d3980 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 11 May 2016 12:59:02 -0700 Subject: [PATCH 0356/2326] - Remove libsecp256k1 reference --- bip-0075.mediawiki | 1 - 1 file changed, 1 deletion(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 0552758cd1..9ce90f6d82 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -381,4 +381,3 @@ The following diagram shows a sample flow in which one mobile client is sending * [https://tools.ietf.org/html/rfc6979 RFC6979] * [https://en.bitcoin.it/wiki/Address_reuse Address Reuse] * [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS 180-4 (Secure Hash Standard)] -* [https://github.com/bitcoin-core/secp256k1/blob/master/src/modules/ecdh/main_impl.h libsecp256k1 ECDH Implementation] From 5e6f3ba3bef783807191f8dccdf5bec1bcbfdabc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 11 May 2016 21:54:09 +0000 Subject: [PATCH 0357/2326] bip-0009: Remove n/a paragraph --- bip-0009.mediawiki | 3 --- 1 file changed, 3 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 0e1d7bd9da..162b264dcb 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -197,9 +197,6 @@ If a client does not understand a rule without the prefix, it may use it unmodif On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be BIP 34 (because it modifies coinbase construction) and 141 (since it modifies the txid hashing and adds a commitment to the generation transaction). A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified. -Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks. -This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation. - ==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. From f71727f1c38ab42b7c28b50aa491b3243e04cbfd Mon Sep 17 00:00:00 2001 From: Steven Roose Date: Sat, 14 May 2016 14:21:46 +0200 Subject: [PATCH 0358/2326] BIP0009 code syntax fix --- bip-0009.mediawiki | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 509a8a94e3..e9b61eef81 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -112,7 +112,7 @@ other one simultaneously transitions to STARTED, which would mean both would dem Note that a block's state never depends on its own nVersion; only on that of its ancestors. - case STARTED: { + case STARTED: if (GetMedianTimePast(block.parent) >= timeout) { return FAILED; } @@ -127,7 +127,6 @@ Note that a block's state never depends on its own nVersion; only on that of its if (count >= threshold) { return LOCKED_IN; } - } After a retarget period of LOCKED_IN, we automatically transition to ACTIVE. From 1a3613622b15cb85c301e3ab29697b8c19804421 Mon Sep 17 00:00:00 2001 From: Steven Roose Date: Sat, 14 May 2016 14:22:56 +0200 Subject: [PATCH 0359/2326] Error in BIP0009 code --- bip-0009.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index e9b61eef81..8941247ab3 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -127,6 +127,7 @@ Note that a block's state never depends on its own nVersion; only on that of its if (count >= threshold) { return LOCKED_IN; } + return STARTED; After a retarget period of LOCKED_IN, we automatically transition to ACTIVE. From 580db159079a7a8f0ee3d6646e7e6a668fce00a2 Mon Sep 17 00:00:00 2001 From: Steven Roose Date: Tue, 17 May 2016 02:06:18 +0200 Subject: [PATCH 0360/2326] Less visible error --- bip-0009.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 8941247ab3..995ae85a95 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -120,7 +120,7 @@ Note that a block's state never depends on its own nVersion; only on that of its walk = block; for (i = 0; i < 2016; i++) { walk = walk.parent; - if (walk.nVersion & 0xE0000000 == 0x2000000 && (walk.nVersion >> bit) & 1 == 1) { + if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) { count++; } } From 62a82092687d235ba48c9d0a77c9de56657c77a8 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 23 Mar 2016 15:57:00 +0100 Subject: [PATCH 0361/2326] Add BIP151, Peer-to-Peer Communication Encryption --- README.mediawiki | 6 ++ bip-0151.mediawiki | 178 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 bip-0151.mediawiki diff --git a/README.mediawiki b/README.mediawiki index 974870e0fb..5a90ee811c 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -505,6 +505,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Luke Dashjr | Standard | Draft +|- +| [[bip-0151.mediawiki|151]] +| Peer-to-Peer Communication Encryption +| Jonas Schnelli +| Standard +| Draft |} diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki new file mode 100644 index 0000000000..18d390179a --- /dev/null +++ b/bip-0151.mediawiki @@ -0,0 +1,178 @@ +

+  BIP: 151
+  Title: Peer-to-Peer Communication Encryption
+  Author: Jonas Schnelli 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-03-23
+
+ +== Abstract == + +This BIP describes an alternative way that a peer can encrypt their communication between a selective subset of remote peers. + +== Motivation == + + +The Bitcoin network does not encrypt communication between peers today. This opens up security issues (eg: traffic manipulation by others) and allows for mass surveillance / analysis of bitcoin users. Mostly this is negligible because of the nature of Bitcoins trust model, however for SPV nodes this can have significant privacy impacts [1] and could reduce the censorship-resistance of a peer. + +Encrypting peer traffic will make analysis and specific user targeting much more difficult than it currently is. Today it's trivial for a network provider or any other men-in-the-middle to identify a Bitcoin user and its controlled addresses/keys (and link with his Google profile, etc.). Just created and broadcasted transactions will reveal the amount and the payee to the network provider. + +This BIP also describes a way that data manipulation (blocking commands by a intercepting TCP/IP node) would be identifiable by the communicating peers. + +Analyzing the type of p2p communication would still be possible because of the characteristics (size, sending-interval, etc.) of the encrypted messages. + +Encrypting traffic between peers is already possible with VPN, tor, stunnel, curveCP or any other encryption mechanism on a deeper OSI level, however, most mechanism are not practical for SPV or other DHCP/NAT environment and will require significant knowhow in how to setup such a secure channel. + +== Specification == + +A peer that supports encryption must accept encryption requests from all peers. + +A independent ECDH negotiation for both communication directions is required and therefore a bidirectional communication will use two symmetric cipher keys (one per direction). + +Both peers must only send encrypted messages after a successful ECDH negotiation in ''both directions''. + +Encryption initialization must happen before sending any other messages to the responding peer (encinit message after a version message must be ignored). + +=== Symmetric Encryption Cipher Keys === + +The symmetric encryption cipher keys will be calculated with ECDH by sharing the pubkeys of a ephemeral key. Once the ECDH secret is calculated on each side, the symmetric encryption cipher keys must be calculated with HMAC_SHA512(key=ecdh_secret|cipher-type,msg="encryption key"). + +K_1 must be the left 32bytes of the HMAC_SHA512 hash. + +K_2 must be the right 32bytes of the HMAC_SHA512 hash. + +It is important to include the cipher-type into the symmetric cipher key to avoid weak-cipher-attacks. + +=== Session ID === + +Both sides must also calculate the 256bit session-id using HMAC_SHA256(key=ecdh_secret,msg="session id"). The session-id can be used for linking the encryption-session to an identity check. + +=== The encinit message type === + +To request encrypted communication, the requesting peer generates an EC ephemeral-session-keypair and sends an encinit message to the responding peer and waits for a encack message. The responding node must do the same encinit/encack interaction for the opposite communication direction. + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 33bytes || ephemeral-pubkey || comp.-pubkey || The session pubkey from the requesting peer +|- +| 1bytes || symmetric key cipher type || int8 || symmetric key cipher type to use +|} + +Possible symmetric key ciphers types +{|class="wikitable" +! Number !! symmetric key ciphers type +|- +| 0 || chacha20-poly1305@openssh.com +|} + +=== ChaCha20-Poly1305 Cipher Suite === + +ChaCha20 is a stream cipher designed by Daniel Bernstein [2]. It operates by permuting 128 fixed bits, 128 or 256 bits of key, +a 64 bit nonce and a 64 bit counter into 64 bytes of output. This output is used as a keystream, with any unused bytes simply discarded. + +Poly1305, also by Daniel Bernstein [3], 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 [4] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [5], but differs in the layout of data passed to the MAC and in the addition of encyption 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. + +K_2 must be used in conjunction with poly1305 to build an AEAD. + +Optimized implementations of ChaCha20-Poly1305 are very fast in general, therefore it is very likely that encrypted messages require less CPU cycles per bytes then the current unencrypted p2p message format. A quick analysis by Pieter Wuille of the current ''standard implementations'' has shown that SHA256 requires more CPU cycles per byte then ChaCha20 & Poly1304 [5]. + +=== The encack message type === + +The responding peer accepts the encryption request by sending a encack message. + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 33bytes || ephemeral-pubkey || comp.-pubkey || The session pubkey from the responding peer +|} + +At this point, the shared secret key for the symmetric key cipher must be calculated by using ECDH (own privkey x remote pub key). +Private keys will never be transmitted. The shared secret can only be calculated if an attacker knows at least one private key and the remote peer's public key. + +* '''The encinit/encack interaction must be done from both sides.''' +* Each communication direction uses its own secret key for the symmetric cipher. +* The second encinit request (from the responding peer) must use the same symmetric cipher type. +* All unencrypted messages before the second encack response (from the responding peer) must be ignored. +* After a successful encinit/encack interaction, the "encrypted messages structure" must be used. Non-encrypted messages from the requesting peer must lead to a connection termination. + +After a successful encinit/encack interaction from both sides, the messages format must use the "encrypted messages structure". Non-encrypted messages from the requesting peer must lead to a connection termination (can be detected by the 4 byte network magic in the unencrypted message structure). + +=== Encrypted Messages Structure === + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 4 || length || uint32_t || Length of ciphertext payload in number of bytes +|- +| ? || ciphertext payload || ? || One or many ciphertext command & message data +|- +| 16 || MAC tag || ? || 128bit MAC-tag +|} + +Encrypted messages do not have the 4byte network magic. + +The maximum message length needs to be chosen carefully. The 4 byte length field can lead to a required message buffer of 4 GiB. +Processing the message before the authentication succeeds must not be done. + +The 4byte sha256 checksum is no longer required because the AEAD. + +Both peers need to track the message number (int64) of sent messages to the remote peer for building a symmetric cipher IV. Padding might be required (96bit IVs). + +The encrypted payload will result decrypted in one or many unencrypted messages: + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| ? || command || varlen || ASCII string identifying the packet content, we are using varlen in the encrypted messages. +|- +| 4 || length || uint32_t || Length of plaintext payload +|- +| ? || payload || ? || The actual data +|} +If more data is present, another message must be deserialized. There is no explicit amount-of-messages integer. + + +=== Re-Keying === + +A responding peer can inform the requesting peer over a re-keying with a encack message containing 33byte of zeros to indicate that all encrypted message following after this encack message will be encrypted with ''the next symmetric cipher key''. + +The new symmetric cipher key will be calculated by SHA256(SHA256(old_symetric_cipher_key)). + +Re-Keying interval is a peer policy with a minimum timespan of 10 seconds. + +The Re-Keying must be done after every 1GB of data sent or received (recommended by RFC4253 SSH Transport). + +=== Risks === + +The encryption does not include an identity authentication scheme. This BIP does not cover a proposal to avoid MITM attacks during the encryption initialization. + +Identity authentication will be covered in another BIP and will presume communication encryption after this BIP. + +== Compatibility == + +This proposal is backward compatible. Non-supporting peers will ignore the encinit messages. + +== Reference implementation == + +== References == + +* [1] http://e-collection.library.ethz.ch/eserv/eth:48205/eth-48205-01.pdf +* [2] ChaCha20 http://cr.yp.to/chacha/chacha-20080128.pdf +* [3] Poly1305 http://cr.yp.to/mac/poly1305-20050329.pdf +* [4] https://github.com/openssh/openssh-portable/blob/05855bf2ce7d5cd0a6db18bc0b4214ed5ef7516d/PROTOCOL.chacha20poly1305 +* [5] "ChaCha20 and Poly1305 based Cipher Suites for TLS", Adam Langley http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-03 + +== Acknowledgements == +* Pieter Wuille and Gregory Maxwell for most of the ideas in this BIP. + +== Copyright == +This work is placed in the public domain. + + From b8907db95076abe39596934d4f04a3b8ffce0160 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 21:58:51 +0000 Subject: [PATCH 0362/2326] BIP 9: Clarify nVersion interpretation and bit order --- bip-0009.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 995ae85a95..6ea0ddd244 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -51,6 +51,8 @@ With each block and soft fork, we associate a deployment state. The possible sta ===Bit flags=== +The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number. + Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be 001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. From 4e9591d8c787f0d32b5a79862c8570300dc742d6 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:22:09 +0000 Subject: [PATCH 0363/2326] BIP 9: Add softfork deployment "name" --- bip-0009.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 6ea0ddd244..a8604fa7cc 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -24,6 +24,7 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): +# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. @@ -32,6 +33,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu The following guidelines are suggested for selecting these parameters for a soft fork: +# '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name. # '''bit''' should be selected such that no two concurrent softforks use the same bit. # '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software. # '''timeout''' should be 1 year (31536000 seconds) after starttime. From 4c124a8c5dad794b9c13d27990fa42651f44676f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Mar 2016 22:38:57 +0000 Subject: [PATCH 0364/2326] BIP 9: GBT specification --- bip-0009.mediawiki | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index a8604fa7cc..98eb19071f 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -161,6 +161,35 @@ block, indexed by its parent. To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). +===getblocktemplate changes=== + +The template request Object is extended to include a new item: + +{| class="wikitable" +!colspan=4| template request +|- +! Key !! Required !! Type !! Description +|- +| rules || {{No}} || Array of Strings || list of supported softfork deployments, by name +|} + +The template Object is also extended: + +{| class="wikitable" +!colspan=4| template +|- +! Key !! Required !! Type !! Description +|- +| rules || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value +|- +| rulesrequired || {{No}} || Array of Strings || list of softfork deployments the server requires support for +|- +| rulesenforced || {{Yes}} || Array of Strings || list of softfork deployments that are active state +|} + +The "version" key of the template is retained, and used to indicate the server's preference of deployments. +Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "rules" and (when clearing is desired) NOT listed in "rulesrequired". + ==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. From c7a31304e7741aa369864059ea183ae8e3b0aa33 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 23 Apr 2016 20:12:41 +0000 Subject: [PATCH 0365/2326] bip-0009: Recommend name "bipN" --- bip-0009.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 98eb19071f..a54da6810c 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -24,7 +24,7 @@ In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule Each soft fork deployment is specified by the following per-chain parameters (further elaborated below): -# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. +# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number. # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. # The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning. # The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block. From adbf64c626ca4e79bd4ff983ec37d9ffd8577148 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 23 Apr 2016 20:20:13 +0000 Subject: [PATCH 0366/2326] BIP 9: Switch to rules/vbavailable/vbrequired GBT interface --- bip-0009.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index a54da6810c..63341423f0 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -180,15 +180,15 @@ The template Object is also extended: |- ! Key !! Required !! Type !! Description |- -| rules || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value +| rules || {{Yes}} || Array of Strings || list of softfork deployments, by name, that are active state |- -| rulesrequired || {{No}} || Array of Strings || list of softfork deployments the server requires support for +| vbavailable || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value |- -| rulesenforced || {{Yes}} || Array of Strings || list of softfork deployments that are active state +| vbrequired || {{No}} || Number || bit mask of softfork deployment version bits the server requires enabled in submissions |} The "version" key of the template is retained, and used to indicate the server's preference of deployments. -Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "rules" and (when clearing is desired) NOT listed in "rulesrequired". +Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". ==Support for future changes== From baacb0c64572548829db9a0609036b17e5d25a5c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 23 Apr 2016 20:32:59 +0000 Subject: [PATCH 0367/2326] BIP 9: Use simple Yes/No rather than templates (which don't work on GitHub) --- bip-0009.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 63341423f0..fbb0fde6b9 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -170,7 +170,7 @@ The template request Object is extended to include a new item: |- ! Key !! Required !! Type !! Description |- -| rules || {{No}} || Array of Strings || list of supported softfork deployments, by name +| rules || No || Array of Strings || list of supported softfork deployments, by name |} The template Object is also extended: @@ -180,11 +180,11 @@ The template Object is also extended: |- ! Key !! Required !! Type !! Description |- -| rules || {{Yes}} || Array of Strings || list of softfork deployments, by name, that are active state +| rules || Yes || Array of Strings || list of softfork deployments, by name, that are active state |- -| vbavailable || {{Yes}} || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value +| vbavailable || Yes || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value |- -| vbrequired || {{No}} || Number || bit mask of softfork deployment version bits the server requires enabled in submissions +| vbrequired || No || Number || bit mask of softfork deployment version bits the server requires enabled in submissions |} The "version" key of the template is retained, and used to indicate the server's preference of deployments. From 074909a173cc5c425f057dba12dad8bf52eb0eab Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 23 Apr 2016 21:13:02 +0000 Subject: [PATCH 0368/2326] BIP 9: Clarify GBT "version" --- bip-0009.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index fbb0fde6b9..38a4396ca0 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -188,6 +188,7 @@ The template Object is also extended: |} The "version" key of the template is retained, and used to indicate the server's preference of deployments. +If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". ==Support for future changes== From d28a720f2aed00c2051b51402d4093062a8c431a Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 25 Apr 2016 00:18:39 +0000 Subject: [PATCH 0369/2326] BIP 9: rules/force mutation --- bip-0009.mediawiki | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 38a4396ca0..52c2add9a9 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -191,6 +191,19 @@ The "version" key of the template is retained, and used to indicate the server's If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". +The mutable key defined by BIP 23 is expanded to optionally include one new mutation: + +{| class="wikitable" +!colspan=4| mutations +|- +! Value !! Significance +|- +| rules/force || the miner may ignore rules it does not understand, if the template is to be used as-is (not modified by the client) +|} + +Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks. +This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation. + ==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. From 949bb13c1d1d4f5b1d1166c6ff33c924dae47dc3 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 11 May 2016 17:45:08 +0000 Subject: [PATCH 0370/2326] Replace "rules/force" mutation with a "cannot be ignored" prefix to rule names --- bip-0009.mediawiki | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 52c2add9a9..45123e0986 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -191,15 +191,11 @@ The "version" key of the template is retained, and used to indicate the server's If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". -The mutable key defined by BIP 23 is expanded to optionally include one new mutation: - -{| class="wikitable" -!colspan=4| mutations -|- -! Value !! Significance -|- -| rules/force || the miner may ignore rules it does not understand, if the template is to be used as-is (not modified by the client) -|} +Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character. +Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs 16, 65, 66, 68, 112, and 113. +If a client does not understand a rule without the prefix, it may use it unmodified for mining. +On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be BIP 34 (because it modifies coinbase construction) and 141 (since it modifies the txid hashing and adds a commitment to the generation transaction). +A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified. Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks. This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation. From a95b8f8796533f52061d62442d8a596ba65902fc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 11 May 2016 21:54:09 +0000 Subject: [PATCH 0371/2326] bip-0009: Remove n/a paragraph --- bip-0009.mediawiki | 3 --- 1 file changed, 3 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 45123e0986..153f6dbc9e 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -197,9 +197,6 @@ If a client does not understand a rule without the prefix, it may use it unmodif On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be BIP 34 (because it modifies coinbase construction) and 141 (since it modifies the txid hashing and adds a commitment to the generation transaction). A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified. -Servers should only signal this mutation when they have verified a client behaving this way will not produce invalid blocks. -This includes verifying the client's supported rules (listed in the template request) are not lacking of a rule that would change serialisation. - ==Support for future changes== The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. From 20a842244bbdf85c36b16544def261b9da0948da Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 27 Apr 2016 21:19:57 -0700 Subject: [PATCH 0372/2326] Add compact-block bip --- README.mediawiki | 6 ++ bip-0152.mediawiki | 186 +++++++++++++++++++++++++++++++++++++ bip-0152/protocol-flow.png | Bin 0 -> 32870 bytes 3 files changed, 192 insertions(+) create mode 100644 bip-0152.mediawiki create mode 100644 bip-0152/protocol-flow.png diff --git a/README.mediawiki b/README.mediawiki index 5a90ee811c..ee7b0d8b91 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -511,6 +511,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Jonas Schnelli | Standard | Draft +|- +| [[bip-0152.mediawiki|152]] +| Compact Block Relay +| Matt Corallo +| Standard +| Draft |} diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki new file mode 100644 index 0000000000..b9a83f9a20 --- /dev/null +++ b/bip-0152.mediawiki @@ -0,0 +1,186 @@ +
+  BIP: 152
+  Title: Compact Block Relay
+  Author: Matt Corallo 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-04-27
+
+ +==Abstract== + +Compact blocks on the wire as a way to save bandwidth for nodes on the P2P network. + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +==Motivation== + +Historically, the Bitcoin P2P protocol has not been very bandwidth efficient for block relay. Every transaction in a block is included when relayed, even though a large number of the transactions in a given block are already available to nodes before the block is relayed. This causes moderate inbound bandwidth spikes for nodes when receiving blocks, but can cause very significant outbound bandwidth spikes for some nodes which receive a block before their peers. When such spikes occur, buffer bloat can make consumer-grade internet connections temporarily unusable, and can delay the relay of blocks to remote peers who may choose to wait instead of redundantly requesting the same block from other, less congested, peers. + +Thus, decreasing the bandwidth used during block relay is very useful for many individuals running nodes. + +While the goal of this work is explicitly not to reduce block transfer latency, it does, as a side effect reduce block transfer latencies in some rather significant ways. Additionally, this work forms a foundation for future work explicitly targeting low-latency block transfer. + +==Specification== + +===Intended Protocol Flow=== + + +The protocol is intended to be used in two ways, depending on the peers and bandwidth available, as discussed [[#Implementation_Details|later]]. The "high-bandwidth" mode, which nodes may only enable for a few of their peers, is enabled by setting the first boolean to 1 in a sendcmpct message. In this mode, peers send new block announcements with the short transaction IDs already (via a cmpctblock message), possibly even before fully validating the block (as indicated by the grey box in the image above). In some cases no further round-trip is needed, and the receiver can reconstruct the block and process it as usual immediately. When some transactions were not available from local sources (ie mempool), a getblocktxn/blocktxn roundtrip is necessary, bringing the best-case latency to the same 1.5*RTT minimum time that nodes take today, though with significantly less bandwidth usage. + +The "low-bandwidth" mode is enabled by setting the first boolean to 0 in a sendcmpct message. In this mode, peers send new block announcements with the usual inv/headers announcements (as per BIP130, and after fully validating the block). The receiving peer may then request the block using a MSG_CMPCT_BLOCK getdata request, which will receive a response of the header and short transaction IDs. In some cases no further round-trip is needed, and the receiver can reconstruct the block and process it as usual, taking the same 1.5*RTT minimum time that nodes take today, though with significantly less bandwidth usage. When some transactions were not available from local sources (ie mempool), a getblocktxn/blocktxn roundtrip is necessary, bringing the latency to at least 2.5*RTT in this case, again with significantly less bandwidth usage than today. Because TCP often exhibits worse transfer latency for larger data sizes (as a multiple of RTT), total latency is expected to be reduced even when the full 2.5*RTT transfer mechanism is used. + +===New data structures=== +Several new data structures are added to the P2P network to relay compact blocks: PrefilledTransaction, HeaderAndShortIDs, BlockTransactionsRequest, and BlockTransactions. + +For the purposes of this section, CompactSize refers to the variable-length integer encoding used across the existing P2P protocol to encode array lengths, among other things, in 1, 3, 5 or 9 bytes. Only CompactSize encodings which are minimally-encoded (ie the shortest length possible) are used by this spec. Any other CompactSize encodings are left with undefined behavior. + +Several uses of CompactSize below are "differentially encoded". For these, instead of using raw indexes, the number encoded is the difference between the current index and the previous index, minus one. For example, a first index of 0 implies a real index of 0, a second index of 0 thereafter refers to a real index of 1, etc. + +====PrefilledTransaction==== +A PrefilledTransaction structure is used in HeaderAndShortIDs to provide a list of a few transactions explicitly. + +{| +|Field Name||Type||Size||Encoding||Purpose +|- +|index||CompactSize||1, 3 bytes||Compact Size, differentially encoded since the last PrefilledTransaction in a list||The index into the block at which this transaction is +|- +|tx||Transaction||variable||As encoded in "tx" messages||The transaction which is in the block at index index. +|} + +====HeaderAndShortIDs==== +A HeaderAndShortIDs structure is used to relay a block header, the short transactions IDs used for matching already-available transactions, and a select few transactions which we expect a peer may be missing. + +{| +|Field Name||Type||Size||Encoding||Purpose +|- +|header||Block header||80 bytes||First 80 bytes of the block as defined by the encoding used by "block" messages||The header of the block being provided +|- +|nonce||uint64_t||8 bytes||Little Endian||A nonce for use in short transaction ID calculations +|- +|shortids_length||CompactSize||1 or 3 bytes||As used to encode array lengths elsewhere||||The number of short transaction IDs in shortids (ie block tx count - prefilledtxn_length) +|- +|shortids||List of 6-byte integers||6*shortids_length bytes||Little Endian||The short transaction IDs calculated from the transactions which were not provided explicitly in prefilledtxn +|- +|prefilledtxn_length||CompactSize||1 or 3 bytes||As used to encode array lengths elsewhere||||The number of prefilled transactions in prefilledtxn (ie block tx count - shortids_length) +|- +|prefilledtxn||List of PrefilledTransactions||variable size*prefilledtxn_length||As defined by PrefilledTransaction definition, above||Used to provide the coinbase transaction and a select few which we expect a peer may be missing +|} + +====BlockTransactionsRequest==== +A BlockTransactionsRequest structure is used to list transaction indexes in a block being requested. + +{| +|Field Name||Type||Size||Encoding||Purpose +|- +|blockhash||Binary blob||32 bytes||The output from a double-SHA256 of the block header, as used elsewhere||The blockhash of the block which the transactions being requested are in +|- +|indexes_length||CompactSize||1 or 3 bytes||As used to encode array lengths elsewhere||||The number of transactions being requested +|- +|indexes||List of CompactSizes||1 or 3 bytes*indexes_length||Differentially encoded||The indexes of the transactions being requested in the block +|} + +====BlockTransactions==== +A BlockTransactions structure is used to provide some of the transactions in a block, as requested. + +{| +|Field Name||Type||Size||Encoding||Purpose +|- +|blockhash||Binary blob||32 bytes||The output from a double-SHA256 of the block header, as used elsewhere||The blockhash of the block which the transactions being provided are in +|- +|transactions_length||CompactSize||1 or 3 bytes||As used to encode array lengths elsewhere||||The number of transactions provided +|- +|transactions||List of Transactions||variable||As encoded in "tx" messages||The transactions provided +|} + +====Short transaction IDs==== +Short transaction IDs are used to represent a transaction without sending a full 256-bit hash. They are calculated by: +# single-SHA256 hashing the block header with the nonce appended (in little-endian) +# Running SipHash-2-4 with the input being the transaction ID and the keys (k0/k1) set to the first two little-endian 64-bit integers from the above hash, respectively. +# Dropping the 2 most significant bytes from the SipHash output to make it 6 bytes. + +===New messages=== +A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are added: sendcmpct, cmpctblock, getblocktxn, and blocktxn. + +====sendcmpct==== +# The sendcmpct message is defined as a message containing a 1-byte integer followed by a 8-byte integer where pchCommand == "sendcmpct". +# The first integer SHALL be interpreted as a boolean (and MUST have a value of either 1 or 0) +# The second integer SHALL be interpreted as a little-endian version number. Nodes sending a sendcmpct message MUST currently set this value to 1. +# Upon receipt of a "sendcmpct" message with the first and second integers set to 1, the node SHOULD announce new blocks by sending a cmpctblock message. +# Upon receipt of a "sendcmpct" message with the first integer set to 0, the node SHOULD NOT announce new blocks by sending a cmpctblock message, but SHOULD announce new blocks by sending invs or headers, as defined by BIP130. +# Upon receipt of a "sendcmpct" message with the second integer set to something other than 1, nodes MUST treat the peer as if they had not received the message (as it indicates the peer will provide an unexpected encoding in cmpctblock, and/or other, messages). This allows future versions to send duplicate sendcmpct messages with different versions as a part of a version handshake for future versions. +# Nodes SHOULD check for a protocol version of >= 70014 before sending sendcmpct messages. +# Nodes MUST NOT send a request for a MSG_CMPCT_BLOCK object to a peer before having received a sendcmpct message from that peer. + +====MSG_CMPCT_BLOCK==== +# getdata messages may now contain requests for MSG_CMPCT_BLOCK objects. +# Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object with the hash of a block which was recently announced and after having sent the requesting peer a sendcmpct message, nodes MUST respond with a cmpctblock message containing appropriate data representing the block being requested. +# MSG_CMPCT_BLOCK inv objects MUST NOT appear anywhere except for in getdata messages. + +====cmpctblock==== +# The cmpctblock message is defined as as a message containing a serialized HeaderAndShortIDs message and pchCommand == "cmpctblock". +# Upon receipt of a cmpctblock message after sending a sendcmpct message, nodes SHOULD calculate the short transaction ID for each unconfirmed transaction they have available (ie in their mempool) and compare each to each short transaction ID in the cmpctblock message. +# After finding already-available transactions, nodes which do not have all transactions available to reconstruct the full block SHOULD request the missing transactions using a getblocktxn message. +# A node MUST NOT send a cmpctblock message unless they are able to respond to a getblocktxn message which requests every transaction in the block. +# A node MUST NOT send a cmpctblock message without having validated that the header properly commits to each transaction in the block, and properly builds on top of the existing chain with a valid proof-of-work. A node MAY send a cmpctblock before validating that each transaction in the block validly spends existing UTXO set entries. + +====getblocktxn==== +# The getblocktxn message is defined as as a message containing a serialized BlockTransactionsRequest message and pchCommand == "getblocktxn". +# Upon receipt of a properly-formatted getblocktxnmessage, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with an appropriate blocktxn message. Such a blocktxn message MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. + +====blocktxn==== +# The blocktxn message is defined as as a message containing a serialized BlockTransactions message and pchCommand == "blocktxn". +# Upon receipt of a properly-formatted requested blocktxn message, nodes SHOULD attempt to reconstruct the full block by: +## Taking the prefilledtxn transactions from the original cmpctblock and placing them in the marked positions. +## For each short transaction ID from the original cmpctblock, in order, find the corresponding transaction either from the blocktxn message or from other sources and place it in the first available position in the block. +# Once the block has been reconstructed, it shall be processed as normal, keeping in mind that short transaction IDs are expected to occasionally collide, and that nodes MUST NOT be penalized for such collisions, wherever they appear. + +===Implementation Notes=== +# For nodes which have sufficient inbound bandwidth, sending a sendcmpct message with the first integer set to 1 to up to 3 peers is RECOMMENDED. If possible, it is RECOMMENDED that those peers be selected based on their past performance in providing blocks quickly (eg the three peers which provided the highest number of the recent N blocks the quickest), allowing nodes to receive blocks which come from those peers in only 0.5*RTT. + +# Nodes MUST NOT send such sendcmpct messages to more than three peers, as it encourages wasting outbound bandwidth across the network. + +# All nodes SHOULD send a sendcmpct message to all appropriate peers. This will reduce their outbound bandwidth usage by allowing their peers to request compact blocks instead of full blocks. + +# Nodes with limited inbound bandwidth SHOULD request blocks using MSG_CMPCT_BLOCK/getblocktxn requests, when possible. While this increases worst-case message round-trips, it is expected to reduce overall transfer latency as TCP is more likely to exhibit poor throughput on low-bandwidth nodes. + +# Nodes sending cmpctblock messages SHOULD limit prefilledtxn to 10KB of transactions. When in doubt, nodes SHOULD only include the coinbase transaction in prefilledtxn. + +# Nodes MAY pick one nonce per block they wish to send, and only build a cmpctblock message once for all peers which they wish to send a given block to. Nodes SHOULD NOT use the same nonce across multiple different blocks. + +# Nodes MAY impose additional requirements on when they announce new blocks by sending cmpctblock messages. For example, nodes with limited outbound bandwidth MAY choose to announce new blocks using inv/header messages (as per BIP130) to conserve outbound bandwidth. + +# Note that the MSG_CMPCT_BLOCK section does not require that nodes respond to MSG_CMPCT_BLOCK getdata requests for blocks which they did not recently announce. This allows nodes to calculate cmpctblock messages at announce-time instead of at request-time. Thus, nodes MUST NOT request blocks using MSG_CMPCT_BLOCK getdatas unless it is in response to an inv/headers block announcement (as per BIP130), and MUST NOT request blocks using MSG_CMPCT_BLOCK getdatas in response to headers messages which were, themselves, responses to getheaders requests. + +# While the current version sends transactions with the same encodings as is used in tx messages and elsewhere in the protocol, the version field in sendcmpct is intended to allow this to change in the future. For this reason, it is recommended that the code used to decode PrefilledTransaction and BlockTransactions messages be prepared to take a different transaction encoding, if and when the version field in sendcmpct changes in a future BIP. + +# Any undefined behavior in this spec may cause failure to transfer block to, peer disconnection by, or self-destruction by the receiving node. A node receiving non-minimally-encoded CompactSize encodings should make a best-effort to eat the sender's cat. + +==Justification== + +====Protocol design==== +There have been many proposals to save wire bytes when relaying blocks. Many of them have a two-fold goal of reducing block relay time and thus rely on the use of significant processing power in order to avoid introducing additional worst-case RTTs. Because this work is not focused primarily on reducing block relay time, its design is much simpler (ie does not rely on set reconciliation protocols). Still, in testing at the time of writing, nodes are able to relay blocks without the extra getblocktxn/blocktxn RTT around 90% of the time. With a smart compact-block-announcement policy, it is thus expected that this work might allow blocks to be relayed between nodes in 0.5*RTT instead of 1.5*RTT at least 75% of the time. + +====Short transaction ID calculation==== +The short transaction ID calculation is designed to take absolutely minimal processing time during block compaction to avoid introducing serious DoS vulnerabilities such as those introduced by the bloom-filtering in BIP 37. As such, it is possible for a node to construct one compact-block representation of a block for relay to multiple peers. Additionally, only one cryptographic hash (2 SHA rounds) is used when calculating the short transaction IDs for an entire block. + +SipHash-2-4 is used for calculating short transaction IDs primarily because it is fast and is reasonably able to limit the ability of an attacker who does not know the block hash or nonce to cause collisions in short transaction IDs. If an attacker were able to cause such collisions, filling mempools (and, thus, blocks) with them would cause poor network propagation of new (or non-attacker, in the case of a miner) blocks. As SipHash was designed, in part, to be used as a key selector for hash maps with malicious data, it should work very well for our use. + +The 8-byte nonce in short transaction ID calculation is used to introduce additional entropy on a per-node level. While the use of 8 bytes is sufficient for an attacker to maliciously cause short transaction ID collisions in their own block relay, this would have less of an effect than if such an attacker were relaying headers/invs and not responding to requests for the full block. + +==Backward compatibility== + +Older clients remain fully compatible and interoperable after this change. + +==Implementation== + +https://github.com/TheBlueMatt/bitcoin/tree/udp + +==Acknowledgements== + +Thanks to Gregory Maxwell for the initial suggestion as well as a lot of back-and-forth design and significant testing. +Thanks to Nicolas Dorier for the protocol flow diagram. + +==Copyright== + +This document is placed in the public domain. diff --git a/bip-0152/protocol-flow.png b/bip-0152/protocol-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d1d17497cf7589f95185e34fd6999289b75b76 GIT binary patch literal 32870 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 P9A^66dZYVmb{zjVoQ$_T literal 0 HcmV?d00001 From 7ae81736cfb5504cd60d8982be86d0ee1e63a7c7 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 22 May 2016 18:23:15 -0700 Subject: [PATCH 0373/2326] Replace my generic bip@ email with bip-specific emails everywhere --- bip-0037.mediawiki | 2 +- bip-0111.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0037.mediawiki b/bip-0037.mediawiki index f76891e5e4..eba06287ee 100644 --- a/bip-0037.mediawiki +++ b/bip-0037.mediawiki @@ -2,7 +2,7 @@ BIP: 37 Title: Connection Bloom filtering Author: Mike Hearn - Matt Corallo + Matt Corallo Status: Final Type: Standards Track Created: 2012-10-24 diff --git a/bip-0111.mediawiki b/bip-0111.mediawiki index e0ae9e85c1..f759f5c8c5 100644 --- a/bip-0111.mediawiki +++ b/bip-0111.mediawiki @@ -1,7 +1,7 @@
   BIP: 111
   Title: NODE_BLOOM service bit
-  Author: Matt Corallo 
+  Author: Matt Corallo 
           Peter Todd 
   Status: Draft
   Type: Standards Track

From 9d89d2b77819734dd262603204a16be016746880 Mon Sep 17 00:00:00 2001
From: Matt Corallo 
Date: Mon, 23 May 2016 22:06:06 -0700
Subject: [PATCH 0374/2326] Update to new BIP 152 Protocol Flow

---
 bip-0152/protocol-flow.png | Bin 32870 -> 25231 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/bip-0152/protocol-flow.png b/bip-0152/protocol-flow.png
index f1d1d17497cf7589f95185e34fd6999289b75b76..207a78e9b04f59e9e707b8e7aa0847a8b5541606 100644
GIT binary patch
literal 25231
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
X1MPO1lrM9Y0jcwJ^>bP0l+XkK3IW|u

literal 32870
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
P9A^66dZYVmb{zjVoQ$_T


From ed0f8da4ad97703f1c57919303da082810885fb7 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 23 Apr 2016 20:32:59 +0000
Subject: [PATCH 0375/2326] BIP 22 & 145: Use simple Yes/No rather than
 templates (which don't work on GitHub)

---
 bip-0022.mediawiki | 28 ++++++++++++++--------------
 bip-0145.mediawiki |  6 +++---
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki
index 35b59be7d0..4b33e59529 100644
--- a/bip-0022.mediawiki
+++ b/bip-0022.mediawiki
@@ -26,9 +26,9 @@ Block template creation can be influenced by various parameters:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| capabilities || {{No}} || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#Optional: Long Polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#Block Proposal|"proposal"]], [[bip-0023.mediawiki#Logical Services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#Mutations|mutations]]
+| capabilities || No || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#Optional: Long Polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#Block Proposal|"proposal"]], [[bip-0023.mediawiki#Logical Services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#Mutations|mutations]]
 |-
-| mode || {{No}} || String || MUST be "template" or omitted
+| mode || No || String || MUST be "template" or omitted
 |}
 
 getblocktemplate MUST return a JSON Object containing the following keys:
@@ -37,29 +37,29 @@ getblocktemplate MUST return a JSON Object containing the following keys:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| bits || {{Yes}} || String || the compressed difficulty in hexadecimal
+| bits || Yes || String || the compressed difficulty in hexadecimal
 |-
-| curtime || {{Yes}} || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
+| curtime || Yes || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
 |-
-| height || {{Yes}} || Number || the height of the block we are looking for
+| height || Yes || Number || the height of the block we are looking for
 |-
-| previousblockhash || {{Yes}} || String || the hash of the previous block, in big-endian hexadecimal
+| previousblockhash || Yes || String || the hash of the previous block, in big-endian hexadecimal
 |-
-| sigoplimit || {{No}} || Number || number of sigops allowed in blocks
+| sigoplimit || No || Number || number of sigops allowed in blocks
 |-
-| sizelimit || {{No}} || Number || number of bytes allowed in blocks
+| sizelimit || No || Number || number of bytes allowed in blocks
 |-
-| transactions || {{Yes|Should}} || Array of Objects || Objects containing [[#Transactions Object Format|information for Bitcoin transactions]] (excluding coinbase)
+| transactions || Should || Array of Objects || Objects containing [[#Transactions Object Format|information for Bitcoin transactions]] (excluding coinbase)
 |-
-| version || {{Yes}} || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
+| version || Yes || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
 |-
-| coinbaseaux || {{No}} || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
+| coinbaseaux || No || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
 |-
-| coinbasetxn || {{Patch|this or ↓}} || Object || [[#Transactions Object Format|information for coinbase transaction]]
+| coinbasetxn || this or ↓ || Object || [[#Transactions Object Format|information for coinbase transaction]]
 |-
-| coinbasevalue || {{Patch|this or ↑}} || Number || total funds available for the coinbase (in Satoshis)
+| coinbasevalue || this or ↑ || Number || total funds available for the coinbase (in Satoshis)
 |-
-| workid || {{No}} || String || if provided, this value must be returned with results (see [[#Block Submission|Block Submission]])
+| workid || No || String || if provided, this value must be returned with results (see [[#Block Submission|Block Submission]])
 |}
 
 ==== Transactions Object Format ====
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index b90725e05f..a4528c5b90 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -22,11 +22,11 @@ The template Object is revised to include these keys:
 |-
 ! Key !! Required !! Type !! Description
 |-
-| costlimit || {{No}} || Number || total cost allowed in blocks
+| costlimit || No || Number || total cost allowed in blocks
 |-
-| sigoplimit || {{No}} || Number || total sigop cost allowed in blocks divided by 4
+| sigoplimit || No || Number || total sigop cost allowed in blocks divided by 4
 |-
-| version || {{Yes}} || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5)
+| version || Yes || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5)
 |}
 
 ====Transactions Object Format====

From 3dc43c84b134b4318376f40015a6840f6d900d14 Mon Sep 17 00:00:00 2001
From: Chris Wheeler 
Date: Wed, 1 Jun 2016 17:54:45 +0100
Subject: [PATCH 0376/2326] Fix typo on link to assignments

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

diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 44e29a9b24..2e4da43c9d 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -224,7 +224,7 @@ upgrades for successful soft forks.
 
 ==Deployments==
 
-A living list of deployment proposals can be found [[bips-0009/assignments.mediawiki|here]].
+A living list of deployment proposals can be found [[bip-0009/assignments.mediawiki|here]].
 
 ==Copyright==
 

From f2e10ba7b2f85af97265ab50f1f2698941fde4a2 Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Sat, 4 Jun 2016 01:37:52 +0200
Subject: [PATCH 0377/2326] Eloborate hash function design in BIP152

---
 bip-0152.mediawiki | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index b9a83f9a20..e53d17c815 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -162,11 +162,32 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 There have been many proposals to save wire bytes when relaying blocks. Many of them have a two-fold goal of reducing block relay time and thus rely on the use of significant processing power in order to avoid introducing additional worst-case RTTs. Because this work is not focused primarily on reducing block relay time, its design is much simpler (ie does not rely on set reconciliation protocols). Still, in testing at the time of writing, nodes are able to relay blocks without the extra getblocktxn/blocktxn RTT around 90% of the time. With a smart compact-block-announcement policy, it is thus expected that this work might allow blocks to be relayed between nodes in 0.5*RTT instead of 1.5*RTT at least 75% of the time.
 
 ====Short transaction ID calculation====
-The short transaction ID calculation is designed to take absolutely minimal processing time during block compaction to avoid introducing serious DoS vulnerabilities such as those introduced by the bloom-filtering in BIP 37. As such, it is possible for a node to construct one compact-block representation of a block for relay to multiple peers. Additionally, only one cryptographic hash (2 SHA rounds) is used when calculating the short transaction IDs for an entire block.
 
-SipHash-2-4 is used for calculating short transaction IDs primarily because it is fast and is reasonably able to limit the ability of an attacker who does not know the block hash or nonce to cause collisions in short transaction IDs. If an attacker were able to cause such collisions, filling mempools (and, thus, blocks) with them would cause poor network propagation of new (or non-attacker, in the case of a miner) blocks. As SipHash was designed, in part, to be used as a key selector for hash maps with malicious data, it should work very well for our use.
+There are several design goals for the Short ID calculation:
+* '''Performance''' The sender needs to compute short IDs for all block transactions, and the receiver for all mempool transactions they are being compared to. As we're easily talking about several 1000 transactions, sub-microsecond processing per-transactions is needed.
+* '''Space''' cmpctblock messages are never optional in this protocol, and contain a short ID for each non-prefilled transaction in the block. Thus, the size of short IDs is directly proportional to the maximum bandwidth savings possible.
+* '''Collision resistance''' It should be hard for network participants to create transactions that cause collisions. If an attacker were able to cause such collisions, filling mempools (and, thus, blocks) with them would cause poor network propagation of new (or non-attacker, in the case of a miner) blocks.
 
-The 8-byte nonce in short transaction ID calculation is used to introduce additional entropy on a per-node level. While the use of 8 bytes is sufficient for an attacker to maliciously cause short transaction ID collisions in their own block relay, this would have less of an effect than if such an attacker were relaying headers/invs and not responding to requests for the full block.
+SipHash is secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables containing malicious data. 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 random collisions will 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. This does mean that every node in the network gets the ability to maliciously grind its chosen nonce to cause collisions, but on their own connections, they can already cause more problems by simply refusing to relay blocks. We're only trying to prevent network-wide misbehaviour here.
+
+====Random collision probabilty====
+
+Thanks to the block-header-based SipHash keys, we can assume that the only collisions on links between honest nodes are random ones.
+
+For each of the ''t'' block transactions, the receiver will compare its received short ID with that of a set of ''m'' mempool transactions. We assume that each of those ''t'' has a chance ''r'' to be included in that set of ''m''. If we use ''B'' bits short IDs, for each comparison between a received short ID and a mempool transaction, there is a chance of ''P = 1 - 1 / 2^B'' that a mismatch is detected as such.
+
+When comparing a given block transaction to the whole set of mempool transactions, there are 5 cases to distinguish:
+# The receiver has exactly one match, which is the correct one. This has chance ''r * P^(m - 1)''.
+# The receiver has no matches. This has chance ''(1 - r) * P^m''.
+# The receiver has at least two matches, one of which is correct. This has chance ''r * (1 - P^(m - 1))''.
+# The receiver has at least two matches, both of which are incorrect. This has chance ''(1 - r) * (1 - P^m - m * (1 - P) * P^(m - 1)''.
+# The receiver has exactly one match, but an incorrect one. This has chance ''(1 - r) * m * (1 - P) * P^(m - 1)''.
+
+(note that these 5 numbers always add up to 100%)
+
+In case 1, we're good. In cases 2, 3, or 4, we request the full transaction because we know we're uncertain. Only in case 5, we fail to reconstruct. The chance that case 5 does not occur in any of the ''t'' transactions in a block is ''(1 - (1 - r) * m * (1 - P) * P^(m - 1))^t''. This expression is well approximated by ''1 - m * t * r / 2^B''. Thus, if we want only one in F block transmissions between honest nodes to fail, we need ''log2(F * m * t)'' bits hash functions.
+
+This means that ''B = 48'' bits short IDs suffice blocks with up to ''t = 10000'' transactions, mempools up to ''m = 100000'' transactions, with failure to reconstruct up to once every ''F = 281474'' blocks. Since failure to reconstruct just means we fall back to normal inv/header based relay, it isn't necessary to avoid such failure completely. It just needs to be sufficiently rare they have a lower impact than random transmission failures (for example, network disconnection, node overloaded, ...).
 
 ==Backward compatibility==
 

From cfdd9574beebc28ae3ef7b8acfdd71b531dff714 Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Sat, 4 Jun 2016 14:08:56 +0200
Subject: [PATCH 0378/2326] Small fixes

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

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index e53d17c815..048344d89a 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -164,11 +164,11 @@ There have been many proposals to save wire bytes when relaying blocks. Many of
 ====Short transaction ID calculation====
 
 There are several design goals for the Short ID calculation:
-* '''Performance''' The sender needs to compute short IDs for all block transactions, and the receiver for all mempool transactions they are being compared to. As we're easily talking about several 1000 transactions, sub-microsecond processing per-transactions is needed.
+* '''Performance''' The sender needs to compute short IDs for all block transactions, and the receiver for all mempool transactions they are being compared to. As we're easily talking about several thousand transactions, sub-microsecond processing per-transactions is needed.
 * '''Space''' cmpctblock messages are never optional in this protocol, and contain a short ID for each non-prefilled transaction in the block. Thus, the size of short IDs is directly proportional to the maximum bandwidth savings possible.
 * '''Collision resistance''' It should be hard for network participants to create transactions that cause collisions. If an attacker were able to cause such collisions, filling mempools (and, thus, blocks) with them would cause poor network propagation of new (or non-attacker, in the case of a miner) blocks.
 
-SipHash is secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables containing malicious data. 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 random collisions will 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. This does mean that every node in the network gets the ability to maliciously grind its chosen nonce to cause collisions, but on their own connections, they can already cause more problems by simply refusing to relay blocks. We're only trying to prevent network-wide misbehaviour here.
+SipHash is secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables containing malicious data. 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 random collisions will 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. This does also mean that every node in the network gets the ability to maliciously grind its chosen nonce to cause collisions, but on their own connections 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====
 
@@ -185,9 +185,9 @@ When comparing a given block transaction to the whole set of mempool transaction
 
 (note that these 5 numbers always add up to 100%)
 
-In case 1, we're good. In cases 2, 3, or 4, we request the full transaction because we know we're uncertain. Only in case 5, we fail to reconstruct. The chance that case 5 does not occur in any of the ''t'' transactions in a block is ''(1 - (1 - r) * m * (1 - P) * P^(m - 1))^t''. This expression is well approximated by ''1 - m * t * r / 2^B''. Thus, if we want only one in F block transmissions between honest nodes to fail, we need ''log2(F * m * t)'' bits hash functions.
+In case 1, we're good. In cases 2, 3, or 4, we request the full transaction because we know we're uncertain. Only in case 5, we fail to reconstruct. The chance that case 5 does not occur in any of the ''t'' transactions in a block is ''(1 - (1 - r) * m * (1 - P) * P^(m - 1))^t''. This expression is well approximated by ''1 - (1 - r) * m * (1 - P) * t''. Thus, if we want only one in F block transmissions between honest nodes to fail under the conservative ''r = 0'' assumption, we need ''log2(F * m * t)'' bits hash functions.
 
-This means that ''B = 48'' bits short IDs suffice blocks with up to ''t = 10000'' transactions, mempools up to ''m = 100000'' transactions, with failure to reconstruct up to once every ''F = 281474'' blocks. Since failure to reconstruct just means we fall back to normal inv/header based relay, it isn't necessary to avoid such failure completely. It just needs to be sufficiently rare they have a lower impact than random transmission failures (for example, network disconnection, node overloaded, ...).
+This means that ''B = 48'' bits short IDs suffice for blocks with up to ''t = 10000'' transactions, mempools up to ''m = 100000'' transactions, with failure to reconstruct at most one in ''F = 281474'' blocks. Since failure to reconstruct just means we fall back to normal inv/header based relay, it isn't necessary to avoid such failure completely. It just needs to be sufficiently rare they have a lower impact than random transmission failures (for example, network disconnection, node overloaded, ...).
 
 ==Backward compatibility==
 

From d1b52cb198066d4e515e8a50fc3928c5397c3d9b Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Sat, 4 Jun 2016 20:58:39 +0800
Subject: [PATCH 0379/2326] BIP141: extend max witness program size to 40 bytes

The maximum witness program size is increased from 32 to 40 bytes. This provides extra space to specify script version (for originally 16 upgradable versions to up to 16 * 2 ^ 64)
---
 bip-0141.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index b8f686c27f..ed025ace81 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -79,7 +79,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 32 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 (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".
 
 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 d34877f48228d6007825ac3dd947b351a6c01fc0 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 7 Jun 2016 01:34:19 +0800
Subject: [PATCH 0380/2326] BIP141 script failure clarifications

Footnotes to clarify some special conditions which witness scripts will fail
---
 bip-0141.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index ed025ace81..6694a68be3 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -98,9 +98,9 @@ If the version byte is 0, and the witness program is 32 bytes:
 * The witnessScript is deserialized, and executed after normal script evaluation with the remaining witness stack (≤ 520 bytes for each stack item).
 * The script must not fail, and result in exactly a single TRUE on the stack.
 
-If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.
+If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.For example, a scriptPubKey with OP_0 followed by a 40-byte non-zero data push will fail due to incorrect program size. However, a scriptPubKey with OP_0 followed by a 41-byte non-zero data push will pass, since it is not considered to be a witness program
 
-If the version byte is 1 to 16, no further interpretation of the witness program or witness happens, and there is no size restriction for the witness. These versions are reserved for future extensions.
+If the version byte is 1 to 16, no further interpretation of the witness program or witness happens, and there is no size restriction for the witness. These versions are reserved for future extensions.For backward compatibility, for any version byte from 0 to 16, the script must fail if the witness program has a CastToBool value of zero. However, having a hash like this is a successful preimage attack against the hash function, and the risk is negligible.
 
 === Other consensus critical limits ===
 

From e26eadc3ca7563075bdd988067e82307142da0bc Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Tue, 7 Jun 2016 15:52:03 +0200
Subject: [PATCH 0381/2326] More small changes

---
 bip-0152.mediawiki | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 048344d89a..036ba310b5 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -168,7 +168,7 @@ There are several design goals for the Short ID calculation:
 * '''Space''' cmpctblock messages are never optional in this protocol, and contain a short ID for each non-prefilled transaction in the block. Thus, the size of short IDs is directly proportional to the maximum bandwidth savings possible.
 * '''Collision resistance''' It should be hard for network participants to create transactions that cause collisions. If an attacker were able to cause such collisions, filling mempools (and, thus, blocks) with them would cause poor network propagation of new (or non-attacker, in the case of a miner) blocks.
 
-SipHash is secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables containing malicious data. 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 random collisions will 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. This does also mean that every node in the network gets the ability to maliciously grind its chosen nonce to cause collisions, but on their own connections 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.
+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====
 
@@ -180,12 +180,12 @@ When comparing a given block transaction to the whole set of mempool transaction
 # The receiver has exactly one match, which is the correct one. This has chance ''r * P^(m - 1)''.
 # The receiver has no matches. This has chance ''(1 - r) * P^m''.
 # The receiver has at least two matches, one of which is correct. This has chance ''r * (1 - P^(m - 1))''.
-# The receiver has at least two matches, both of which are incorrect. This has chance ''(1 - r) * (1 - P^m - m * (1 - P) * P^(m - 1)''.
+# The receiver has at least two matches, both of which are incorrect. This has chance ''(1 - r) * (1 - P^m - m * (1 - P) * P^(m - 1))''.
 # The receiver has exactly one match, but an incorrect one. This has chance ''(1 - r) * m * (1 - P) * P^(m - 1)''.
 
 (note that these 5 numbers always add up to 100%)
 
-In case 1, we're good. In cases 2, 3, or 4, we request the full transaction because we know we're uncertain. Only in case 5, we fail to reconstruct. The chance that case 5 does not occur in any of the ''t'' transactions in a block is ''(1 - (1 - r) * m * (1 - P) * P^(m - 1))^t''. This expression is well approximated by ''1 - (1 - r) * m * (1 - P) * t''. Thus, if we want only one in F block transmissions between honest nodes to fail under the conservative ''r = 0'' assumption, we need ''log2(F * m * t)'' bits hash functions.
+In case 1, we're good. In cases 2, 3, or 4, we request the full transaction because we know we're uncertain. Only in case 5, we fail to reconstruct. The chance that case 5 does not occur in any of the ''t'' transactions in a block is ''(1 - (1 - r) * m * (1 - P) * P^(m - 1))^t''. This expression is well approximated by ''1 - (1 - r) * m * (1 - P) * t'' = ''1 - (1 - r) * m * t / 2^B''. Thus, if we want only one in F block transmissions between honest nodes to fail under the conservative ''r = 0'' assumption, we need ''log2(F * m * t)'' bits hash functions.
 
 This means that ''B = 48'' bits short IDs suffice for blocks with up to ''t = 10000'' transactions, mempools up to ''m = 100000'' transactions, with failure to reconstruct at most one in ''F = 281474'' blocks. Since failure to reconstruct just means we fall back to normal inv/header based relay, it isn't necessary to avoid such failure completely. It just needs to be sufficiently rare they have a lower impact than random transmission failures (for example, network disconnection, node overloaded, ...).
 

From 08c068ed0bd2b22da56006cd8483009c4855cc47 Mon Sep 17 00:00:00 2001
From: Matt Bell 
Date: Wed, 8 Jun 2016 01:41:53 -0700
Subject: [PATCH 0382/2326] Fixed CSV testnet state in BIP9 assignments list

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

diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki
index ee56e17ffc..4237502c99 100644
--- a/bip-0009/assignments.mediawiki
+++ b/bip-0009/assignments.mediawiki
@@ -18,11 +18,11 @@ State can be defined, active, failed. Dates are in UTC.
 | csv
 | 0
 | 2016-05-01 00:00:00
-| 2017-05-01 00:00:00 
+| 2017-05-01 00:00:00
 | defined
 | 2016-03-01 00:00:00
 | 2017-05-01 00:00:00
-| active since #770111
+| active since #770112
 | [[/bip-0068.mediawiki|68]], [[/bip-0112.mediawiki|112]], [[/bip-0113.mediawiki|113]]
 |-
 | segwit

From cb2952c05e6a06bb72642dd803f2ff0f94bbdaf6 Mon Sep 17 00:00:00 2001
From: Matt Bell 
Date: Wed, 8 Jun 2016 01:42:46 -0700
Subject: [PATCH 0383/2326] Updated segwit testnet state in BIP9 assignments
 list

---
 bip-0009/assignments.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki
index 4237502c99..6fcbcf0184 100644
--- a/bip-0009/assignments.mediawiki
+++ b/bip-0009/assignments.mediawiki
@@ -32,6 +32,6 @@ State can be defined, active, failed. Dates are in UTC.
 | -
 | 2016-05-01 00:00:00
 | 2017-05-01 00:00:00
-| defined
+| active since #834624
 | [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]]
 |}

From b8125c66840017b77346c9309fd6fb50f65ae56d Mon Sep 17 00:00:00 2001
From: jl2012 
Date: Thu, 9 Jun 2016 04:40:37 +0800
Subject: [PATCH 0384/2326] More examples for BIP143

---
 bip-0143.mediawiki | 180 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 179 insertions(+), 1 deletion(-)

diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index bf56594815..de1cb551a2 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -125,7 +125,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
 
 
 == Example ==
-
+=== Native P2WPKH ===
   
   The following is an unsigned transaction:
     0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000
@@ -188,6 +188,184 @@ Refer to the reference implementation, reproduced below, for the precise algorit
                02 47304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01 21025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357
     nLockTime: 11000000
 
+=== P2SH-P2WPKH ===
+  
+  
+  The following is an unsigned transaction: 0100000001db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a54770100000000feffffff02b8b4eb0b000000001976a914a457b684d7f0d539a46a45bbc043f35b59d0d96388ac0008af2f000000001976a914fd270b1ee6abcaea97fea7ad0402e8bd8ad6d77c88ac92040000
+  
+    nVersion:  01000000
+    txin:      01 db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a5477 01000000 00 feffffff
+    txout:     02 b8b4eb0b00000000 1976a914a457b684d7f0d539a46a45bbc043f35b59d0d96388ac
+                  0008af2f00000000 1976a914fd270b1ee6abcaea97fea7ad0402e8bd8ad6d77c88ac
+    nLockTime: 92040000
+  
+  The input comes from a P2SH-P2WPKH witness program:
+    scriptPubKey : a9144733f37cf4db86fbc2efed2500b4f4e49f31202387, value: 10
+    redeemScript : 001479091972186c449eb1ded22b78e40d009bdf0089
+    private key  : eb696a065ef48a2192da5b28b694f87544b30fae8327c4510137a922f32c6dcf
+    public key   : 03ad1d8e89212f0b92c74d23bb710c00662ad1470198ac48c43f7d6f93a2a26873
+  
+  To sign it with a nHashType of 1 (SIGHASH_ALL):
+  
+  hashPrevouts:
+    dSHA256(db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a547701000000)
+  = b0287b4a252ac05af83d2dcef00ba313af78a3e9c329afa216eb3aa2a7b4613a
+  
+  hashSequence:
+    dSHA256(feffffff)
+  = 18606b350cd8bf565266bc352f0caddcf01e8fa789dd8a15386327cf8cabe198
+  
+  hashOutputs:
+    dSHA256(b8b4eb0b000000001976a914a457b684d7f0d539a46a45bbc043f35b59d0d96388ac0008af2f000000001976a914fd270b1ee6abcaea97fea7ad0402e8bd8ad6d77c88ac)
+  = de984f44532e2173ca0d64314fcefe6d30da6f8cf27bafa706da61df8a226c83
+  
+  hash preimage: 01000000b0287b4a252ac05af83d2dcef00ba313af78a3e9c329afa216eb3aa2a7b4613a18606b350cd8bf565266bc352f0caddcf01e8fa789dd8a15386327cf8cabe198db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a5477010000001976a91479091972186c449eb1ded22b78e40d009bdf008988ac00ca9a3b00000000feffffffde984f44532e2173ca0d64314fcefe6d30da6f8cf27bafa706da61df8a226c839204000001000000
+  
+    nVersion:     01000000
+    hashPrevouts: b0287b4a252ac05af83d2dcef00ba313af78a3e9c329afa216eb3aa2a7b4613a
+    hashSequence: 18606b350cd8bf565266bc352f0caddcf01e8fa789dd8a15386327cf8cabe198
+    outpoint:     db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a547701000000
+    scriptCode:   1976a91479091972186c449eb1ded22b78e40d009bdf008988ac
+    amount:       00ca9a3b00000000
+    nSequence:    feffffff
+    hashOutputs:  de984f44532e2173ca0d64314fcefe6d30da6f8cf27bafa706da61df8a226c83
+    nLockTime:    92040000
+    nHashType:    01000000
+  
+  sigHash:      64f3b0f4dd2bb3aa1ce8566d220cc74dda9df97d8490cc81d89d735c92e59fb6
+  signature:    3044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f0220217f36a485cae903c713331d877c1f64677e3622ad4010726870540656fe9dcb01
+  
+  The serialized signed transaction is: 01000000000101db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a5477010000001716001479091972186c449eb1ded22b78e40d009bdf0089feffffff02b8b4eb0b000000001976a914a457b684d7f0d539a46a45bbc043f35b59d0d96388ac0008af2f000000001976a914fd270b1ee6abcaea97fea7ad0402e8bd8ad6d77c88ac02473044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f0220217f36a485cae903c713331d877c1f64677e3622ad4010726870540656fe9dcb012103ad1d8e89212f0b92c74d23bb710c00662ad1470198ac48c43f7d6f93a2a2687392040000
+    nVersion:  01000000
+    marker:    00
+    flag:      01
+    txin:      01 db6b1b20aa0fd7b23880be2ecbd4a98130974cf4748fb66092ac4d3ceb1a5477 01000000 1716001479091972186c449eb1ded22b78e40d009bdf0089 feffffff
+    txout:     02 b8b4eb0b00000000 1976a914a457b684d7f0d539a46a45bbc043f35b59d0d96388ac
+                  0008af2f00000000 1976a914fd270b1ee6abcaea97fea7ad0402e8bd8ad6d77c88ac
+    witness    02 473044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f0220217f36a485cae903c713331d877c1f64677e3622ad4010726870540656fe9dcb01 2103ad1d8e89212f0b92c74d23bb710c00662ad1470198ac48c43f7d6f93a2a26873
+    nLockTime: 92040000
+
+=== P2SH-P2WSH ===
+  
+  
+  The following is an unsigned transaction: 010000000136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000000ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac00000000
+  
+    nVersion:  01000000
+    txin:      01 36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e 01000000 00 ffffffff
+    txout:     02 00e9a43500000000 1976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688ac
+                  c0832f0500000000 1976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac
+    nLockTime: 00000000
+  
+  The input comes from a P2SH-P2WSH 6-of-6 multisig witness program:
+    scriptPubKey : a9149993a429037b5d912407a71c252019287b8d27a587, value: 9.87654321
+    redeemScript : 0020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54
+    witnessScript: 56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+  
+  hashPrevouts:
+    dSHA256(36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000)
+  = 74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0
+  
+  hashSequence:
+    dSHA256(ffffffff)
+  = 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044
+  
+  hashOutputs:
+    dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac)
+  = bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc
+  
+  hash preimage for ALL: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa03bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e7066504436641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000001000000
+    nVersion:     01000000
+    hashPrevouts: 74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0
+    hashSequence: 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc
+    nLockTime:    00000000
+    nHashType:    01000000
+  sigHash:      185c0be5263dce5b4bb50a047973c1b6272bfbd0103a89444597dc40b248ee7c
+  public key:   0307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba3
+  signature:    304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01
+  
+  hash preimage for NONE: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000002000000
+    nVersion:     01000000
+    hashPrevouts: 74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  0000000000000000000000000000000000000000000000000000000000000000
+    nLockTime:    00000000
+    nHashType:    02000000
+  sigHash:        e9733bc60ea13c95c6527066bb975a2ff29a925e80aa14c213f686cbae5d2f36
+  public key:     03b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b
+  signature:      3044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502
+  
+  hash preimage for SINGLE: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000003000000
+    nVersion:     01000000
+    hashPrevouts: 74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f708
+    nLockTime:    00000000
+    nHashType:    03000000
+  sigHash:        1e1f1c303dc025bd664acb72e583e933fae4cff9148bf78c157d1e8f78530aea
+  public key:     034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a
+  signature:      3044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403
+  
+  hash preimage for ALL|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000081000000
+    nVersion:     01000000
+    hashPrevouts: 0000000000000000000000000000000000000000000000000000000000000000
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc
+    nLockTime:    00000000
+    nHashType:    81000000
+  sigHash:        2a67f03e63a6a422125878b40b82da593be8d4efaafe88ee528af6e5a9955c6e
+  public key:     033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f4
+  signature:      3045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381
+  
+  hash preimage for NONE|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000082000000
+    nVersion:     01000000
+    hashPrevouts: 0000000000000000000000000000000000000000000000000000000000000000
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  0000000000000000000000000000000000000000000000000000000000000000
+    nLockTime:    00000000
+    nHashType:    82000000
+  sigHash:        781ba15f3779d5542ce8ecb5c18716733a5ee42a6f51488ec96154934e2c890a
+  public key:     03a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac16
+  signature:      3045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a0882
+  
+  hash preimage for SINGLE|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000083000000
+    nVersion:     01000000
+    hashPrevouts: 0000000000000000000000000000000000000000000000000000000000000000
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000
+    scriptCode:   cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae
+    amount:       b168de3a00000000
+    nSequence:    ffffffff
+    hashOutputs:  9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f708
+    nLockTime:    00000000
+    nHashType:    83000000
+  sigHash:        511e8e52ed574121fc1b654970395502128263f62662e076dc6baf05c2e6a99b
+  public key:     02d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b
+  signature:      30440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783
+  
+  The serialized signed transaction is: 0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac080047304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502473044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403483045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a08824730440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000
+
+
 The new serialization format is described in BIP144 [[bip-0144.mediawiki|BIP144: Segregated Witness (Peer Services)]]
 == Deployment ==
 

From 0f0a39cceed6301e03ec632581a3b4c418d53044 Mon Sep 17 00:00:00 2001
From: jl2012 
Date: Thu, 9 Jun 2016 16:54:20 +0800
Subject: [PATCH 0385/2326] BIP143: Corrections and examples for
 OP_CODESEPERATOR

---
 bip-0143.mediawiki | 171 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 165 insertions(+), 6 deletions(-)

diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index de1cb551a2..309dfabeb1 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -39,6 +39,7 @@ Semantics of the original sighash types remain unchanged, except the followings:
 # 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;
 # 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.
 
 The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. 
@@ -47,7 +48,7 @@ The item 5:
 *For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac.
 *For P2WSH witness program,
 **if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOuts.
-**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with all OP_CODESEPARATOR and everything up to the last OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts.
+**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with everything up to and including the last executed OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts.
 
 The item 6 is a 8-byte value of the amount of bitcoin spent in this input.
 
@@ -60,9 +61,9 @@ The item 6 is a 8-byte value of the amount of bitcoin spent in this input.
 *Otherwise, hashSequence is a uint256 of 0x0000......0000.
 
 hashOutputs:
-*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output value (8-byte little endian) with scriptPubKey (serialized as scripts inside CTxOuts);
-*If sighash type is SINGLE and the input index is not greater than the number of outputs, hashOutputs is the double SHA256 of the output value with scriptPubKey of the same index as the input;
-*Otherwise, hashOutputs is a uint256 of 0x0000......0000.In the original algorithm, a uint256 of 0x0000......0001 is commited if the input index for a SINGLE signature is greater than the number of outputs. In this BIP a 0x0000......0000 is commited, without changing the semantics.
+*If the sighash type is neither SINGLE nor NONE, hashOutputs is the double SHA256 of the serialization of all output amount (8-byte little endian) with scriptPubKey (serialized as scripts inside CTxOuts);
+*If sighash type is SINGLE and the input index is smaller than the number of outputs, hashOutputs is the double SHA256 of the output amount with scriptPubKey of the same index as the input;
+*Otherwise, hashOutputs is a uint256 of 0x0000......0000.In the original algorithm, a uint256 of 0x0000......0001 is commited if the input index for a SINGLE signature is greater than or equal to the number of outputs. In this BIP a 0x0000......0000 is commited, without changing the semantics.
 
 The hashPrevouts, hashSequence, and hashOutputs calculated in an earlier verification may be reused in other inputs of the same transaction, so that the time complexity of the whole hashing process reduces from O(n2) to O(n).
 
@@ -245,7 +246,154 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     witness    02 473044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f0220217f36a485cae903c713331d877c1f64677e3622ad4010726870540656fe9dcb01 2103ad1d8e89212f0b92c74d23bb710c00662ad1470198ac48c43f7d6f93a2a26873
     nLockTime: 92040000
 
+=== Native P2WSH ===
+
+This example shows how OP_CODESEPERATOR and out-of-range SIGHASH_SINGLE are processed:
+
+  
+  
+  The following is an unsigned transaction:
+    0100000002fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e0000000000ffffffff0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000000ffffffff0100f2052a010000001976a914a30741f8145e5acadf23f751864167f32e0963f788ac00000000
+  
+    nVersion:  01000000
+    txin:      02 fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e 00000000 00 ffffffff
+                  0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f8 00000000 00 ffffffff
+    txout:     01 00f2052a01000000 1976a914a30741f8145e5acadf23f751864167f32e0963f788ac
+    nLockTime: 00000000
+  
+  The first input comes from an ordinary P2PK:
+    scriptPubKey: 21036d5c20fa14fb2f635474c1dc4ef5909d4568e5569b79fc94d3448486e14685f8ac value: 1.5625
+    private key:  b8f28a772fccbf9b4f58a4f027e07dc2e35e7cd80529975e292ea34f84c4580c
+  
+  The second input comes from a native P2WSH witness program:
+    scriptPubKey : 00205d1b56b63d714eebe542309525f484b7e9d6f686b3781b6f61ef925d66d6f6a0, value: 49
+    witnessScript: 21026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac
+                   <026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880ae> CHECKSIGVERIFY CODESEPERATOR <0255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465> CHECKSIG
+  
+  To sign it with a nHashType of 3 (SIGHASH_SINGLE):
+  
+  hashPrevouts:
+    dSHA256(fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e000000000815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f800000000)
+  = ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d41
+  
+    nVersion:     01000000
+    hashPrevouts: ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d41
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f800000000
+    scriptCode:   (see below)
+    amount:       0011102401000000
+    nSequence:    ffffffff
+    hashOutputs:  0000000000000000000000000000000000000000000000000000000000000000 (this is the second input but there is only one output)
+    nLockTime:    00000000
+    nHashType:    03000000
+  
+  scriptCode:  4721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac
+                                                                                       ^^
+               (please note that the not-yet-exectued OP_CODESEPERATOR is not removed from the scriptCode)
+  preimage:    01000000ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d4100000000000000000000000000000000000000000000000000000000000000000815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f8000000004721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0011102401000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000003000000
+  sigHash:     82dde6e4f1e94d02c2b7ad03d2115d691f48d064e9d52f58194a6637e4194391
+  public key:  026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880ae
+  private key: 8e02b539b1500aa7c81cf3fed177448a546f19d2be416c0c61ff28e577d8d0cd
+  signature:   3044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e2703
+  
+  scriptCode:  23210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac
+               (everything up to the last executed OP_CODESEPERATOR, including that OP_CODESEPERATOR, are removed)
+  preimage:    01000000ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d4100000000000000000000000000000000000000000000000000000000000000000815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000023210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0011102401000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000003000000
+  sigHash:     fef7bd749cce710c5c052bd796df1af0d935e59cea63736268bcbe2d2134fc47
+  public key:  0255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465
+  private key: 86bf2ed75935a0cbef03b89d72034bb4c189d381037a5ac121a70016db8896ec
+  signature:   304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503
+  
+  The serialized signed transaction is: 01000000000102fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e000000004847304402200af4e47c9b9629dbecc21f73af989bdaa911f7e6f6c2e9394588a3aa68f81e9902204f3fcf6ade7e5abb1295b6774c8e0abd94ae62217367096bc02ee5e435b67da201ffffffff0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000000ffffffff0100f2052a010000001976a914a30741f8145e5acadf23f751864167f32e0963f788ac000347304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0000000047304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac00000000
+
+
+This example shows how unexecuted OP_CODESEPERATOR is processed, and SINGLE|ANYONECANPAY does not commit to the input index:
+
+  
+  
+  The following is an unsigned transaction:
+    0100000002e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc0010000000000ffffffff80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b0000000000ffffffff0280969800000000001976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac80969800000000001976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac00000000
+  
+    nVersion:  01000000
+    txin:      02 e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc001 00000000 00 ffffffff
+                  80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b 00000000 00 ffffffff
+    txout:     02 8096980000000000 1976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac
+                  8096980000000000 1976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac
+    nLockTime: 00000000
+  
+  The first input comes from a native P2WSH witness program:
+    scriptPubKey: 0020ba468eea561b26301e4cf69fa34bde4ad60c81e70f059f045ca9a79931004a4d value: 0.16777215
+    witnessScript:0063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+                  0 IF CODESEPERATOR ENDIF <0392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98> CHECKSIG
+  
+  The second input comes from a native P2WSH witness program:
+    scriptPubKey: 0020d9bbfbe56af7c4b7f960a70d7ea107156913d9e5a26b0a71429df5e097ca6537 value: 0.16777215
+    witnessScript:5163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+                  1 IF CODESEPERATOR ENDIF <0392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98> CHECKSIG
+  
+  To sign it with a nHashType of 0x83 (SINGLE|ANYONECANPAY):
+  
+    nVersion:     01000000
+    hashPrevouts: 0000000000000000000000000000000000000000000000000000000000000000
+    hashSequence: 0000000000000000000000000000000000000000000000000000000000000000
+    outpoint:     (see below)
+    scriptCode:   (see below)
+    amount:       ffffff0000000000
+    nSequence:    ffffffff
+    hashOutputs:  (see below)
+    nLockTime:    00000000
+    nHashType:    83000000
+  
+  outpoint:    e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc00100000000
+  scriptCode:  270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+               (since the OP_CODESEPERATOR is not executed, nothing is removed from the scriptCode)
+  hashOutputs: b258eaf08c39fbe9fbac97c15c7e7adeb8df142b0df6f83e017f349c2b6fe3d2
+  preimage:    0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc00100000000270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98acffffff0000000000ffffffffb258eaf08c39fbe9fbac97c15c7e7adeb8df142b0df6f83e017f349c2b6fe3d20000000083000000
+  sigHash:     e9071e75e25b8a1e298a72f0d2e9f4f95a0f5cdf86a533cda597eb402ed13b3a
+  public key:  0392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98
+  private key: f52b3484edd96598e02a9c89c4492e9c1e2031f471c49fd721fe68b3ce37780d
+  signature:   3045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683
+  
+  outpoint:    80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b00000000
+  scriptCode:  2468210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+               (everything up to the last executed OP_CODESEPERATOR, including that OP_CODESEPERATOR, are removed)
+  hashOutputs: 91ea93dd77f702b738ebdbf3048940a98310e869a7bb8fa2c6cb3312916947ca
+  preimage:    010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b000000002468210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98acffffff0000000000ffffffff91ea93dd77f702b738ebdbf3048940a98310e869a7bb8fa2c6cb3312916947ca0000000083000000
+  sigHash:     cd72f1f1a433ee9df816857fad88d8ebd97e09a75cd481583eb841c330275e54
+  public key:  0392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98
+  private key: f52b3484edd96598e02a9c89c4492e9c1e2031f471c49fd721fe68b3ce37780d
+  signature:   30440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83
+  
+  The serialized signed transaction is:
+  01000000000102e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc0010000000000ffffffff80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b0000000000ffffffff0280969800000000001976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac80969800000000001976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac02483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac024730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac00000000
+    nVersion:  01000000
+    marker:    00
+    flag:      01
+    txin:      02 e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc001 00000000 00 ffffffff
+                  80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b 00000000 00 ffffffff
+    txout:     02 8096980000000000 1976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac
+                  8096980000000000 1976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac
+    witness    02 483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683 270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+               02 4730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83 275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+    nLockTime: 00000000
+  
+  Since SINGLE|ANYONECANPAY does not commit to the input index, the signatures are still valid when the the input-output pairs are swapped:
+  0100000000010280e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b0000000000ffffffffe9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc0010000000000ffffffff0280969800000000001976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac80969800000000001976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac024730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac02483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac00000000
+    nVersion:  01000000
+    marker:    00
+    flag:      01
+    txin:      02 80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b 00000000 00 ffffffff
+                  e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc001 00000000 00 ffffffff
+    txout:     02 8096980000000000 1976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac
+                  8096980000000000 1976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac
+    witness    02 4730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83 275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+               02 483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683 270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac
+    nLockTime: 00000000
+
 === P2SH-P2WSH ===
+
+This example is a P2SH-P2WSH 6-of-6 multisig witness program signed with 6 different SIGHASH types.
+
   
   
   The following is an unsigned transaction: 010000000136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000000ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac00000000
@@ -269,10 +417,14 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     dSHA256(ffffffff)
   = 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044
   
-  hashOutputs:
-    dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac)
+  hashOutputs for ALL:
+  dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac)
   = bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc
   
+  hashOutputs for SINGLE:
+    dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688ac)
+  = 9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f708
+  
   hash preimage for ALL: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa03bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e7066504436641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000001000000
     nVersion:     01000000
     hashPrevouts: 74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0
@@ -286,6 +438,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    01000000
   sigHash:      185c0be5263dce5b4bb50a047973c1b6272bfbd0103a89444597dc40b248ee7c
   public key:   0307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba3
+  private key:  730fff80e1413068a05b57d6a58261f07551163369787f349438ea38ca80fac6
   signature:    304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01
   
   hash preimage for NONE: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000002000000
@@ -301,6 +454,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    02000000
   sigHash:        e9733bc60ea13c95c6527066bb975a2ff29a925e80aa14c213f686cbae5d2f36
   public key:     03b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b
+  private key:    11fa3d25a17cbc22b29c44a484ba552b5a53149d106d3d853e22fdd05a2d8bb3
   signature:      3044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502
   
   hash preimage for SINGLE: 0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000003000000
@@ -316,6 +470,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    03000000
   sigHash:        1e1f1c303dc025bd664acb72e583e933fae4cff9148bf78c157d1e8f78530aea
   public key:     034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a
+  private key:    77bf4141a87d55bdd7f3cd0bdccf6e9e642935fec45f2f30047be7b799120661
   signature:      3044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403
   
   hash preimage for ALL|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000081000000
@@ -331,6 +486,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    81000000
   sigHash:        2a67f03e63a6a422125878b40b82da593be8d4efaafe88ee528af6e5a9955c6e
   public key:     033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f4
+  private key:    14af36970f5025ea3e8b5542c0f8ebe7763e674838d08808896b63c3351ffe49
   signature:      3045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381
   
   hash preimage for NONE|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000082000000
@@ -346,6 +502,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    82000000
   sigHash:        781ba15f3779d5542ce8ecb5c18716733a5ee42a6f51488ec96154934e2c890a
   public key:     03a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac16
+  private key:    fe9a95c19eef81dde2b95c1284ef39be497d128e2aa46916fb02d552485e0323
   signature:      3045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a0882
   
   hash preimage for SINGLE|ANYONECANPAY: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000083000000
@@ -361,12 +518,14 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nHashType:    83000000
   sigHash:        511e8e52ed574121fc1b654970395502128263f62662e076dc6baf05c2e6a99b
   public key:     02d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b
+  private key:    428a7aee9f0c2af0cd19af3cf1c78149951ea528726989b2e83e4778d2c3f890
   signature:      30440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783
   
   The serialized signed transaction is: 0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac080047304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502473044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403483045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a08824730440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000
 
 
 The new serialization format is described in BIP144 [[bip-0144.mediawiki|BIP144: Segregated Witness (Peer Services)]]
+
 == Deployment ==
 
 This proposal is deployed with Segregated Witness softfork (BIP 141) 

From 7304edc475a93a4add0320907b2fe61c4f331720 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Fri, 10 Jun 2016 13:14:25 +0800
Subject: [PATCH 0386/2326] BIP141: clarify size restriction for witness stack

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

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 6694a68be3..f02acf97e2 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -100,7 +100,7 @@ If the version byte is 0, and the witness program is 32 bytes:
 
 If the version byte is 0, but the witness program is neither 20 nor 32 bytes, the script must fail.For example, a scriptPubKey with OP_0 followed by a 40-byte non-zero data push will fail due to incorrect program size. However, a scriptPubKey with OP_0 followed by a 41-byte non-zero data push will pass, since it is not considered to be a witness program
 
-If the version byte is 1 to 16, no further interpretation of the witness program or witness happens, and there is no size restriction for the witness. These versions are reserved for future extensions.For backward compatibility, for any version byte from 0 to 16, the script must fail if the witness program has a CastToBool value of zero. However, having a hash like this is a successful preimage attack against the hash function, and the risk is negligible.
+If the version byte is 1 to 16, no further interpretation of the witness program or witness stack happens, and there is no size restriction for the witness stack. These versions are reserved for future extensions.For backward compatibility, for any version byte from 0 to 16, the script must fail if the witness program has a CastToBool value of zero. However, having a hash like this is a successful preimage attack against the hash function, and the risk is negligible.
 
 === Other consensus critical limits ===
 

From fd249cb305cf89bee23ba1a76e01b56fa3e37a24 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Fri, 10 Jun 2016 09:47:06 -0700
Subject: [PATCH 0387/2326] Initial Commit of http-address-service BIP draft

---
 bip-http-address-service.mediawiki | 125 +++++++++++++++++++++++++++++
 1 file changed, 125 insertions(+)
 create mode 100644 bip-http-address-service.mediawiki

diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki
new file mode 100644
index 0000000000..045d75db01
--- /dev/null
+++ b/bip-http-address-service.mediawiki
@@ -0,0 +1,125 @@
+
+  BIP: XXX
+  Title: Endpoint Capability Discovering using HTTP Address Service
+  Author: Justin Newton 
+          Matt David 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-06-10
+
+ +==Abstract== + +The proposed TLS-protected HTTP Address Service BIP aims to define a common flow for interacting with a TLS-protected HTTP Address Service such that Address Services can be provided to the client. Address Services may provide any of the following: + +# Wallet address +# BitcoinURI +# PaymentRequest +# Store & Forward Services (supporting the Payment Protocol) + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and +"OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +==Motivation== + +As the use of bitcoin, as well as other blockchain-based currencies, digital assets, and payment networks continues to expand, the issue of address exchange becomes ever more important. With the introduction of safer, more secure, and user friendly address exchange processes such as [[bip-0075.mediawiki|BIP75]], there comes the issue of how to expose addresses. In order to negotiate for the most secure supported method of address exchange, we feel the best way is through a unique endpoint. This will serve HD wallet addresses and [[bip-0070.mediawiki|BIP70]] PaymentRequests as well as accept [[bip-0075.mediawiki|BIP75]] InvoiceRequests through a unique endpoint that can specifically expose supported methods via negotiation between the two parties. This specification proposes a standard HTTP flow for service discovery, wallet address retrieval (plaintext, BitcoinURI and PaymentRequest) as well as [[bip-0075.mediawiki|BIP75]] message passing. + +==Use Cases== + +===HD Wallet Address Exchange / BIP70 Endpoint=== + +A bitcoin wallet developer would like to dynamically retrieve a unique address for a remote wallet. The developer would prefer a PaymentRequest, but would accept a BitcoinURI ([[bip-0021.mediawiki|BIP21]]). The Address Service spec allows the developer to discover which address options are available, if any. The developer can then specify which type of data they would prefer (based on availability) and submit a request for that data. + +===BIP75 InvoiceRequest Submission Endpoint=== + +A bitcoin wallet developer would like to use [[bip-0075.mediawiki|BIP75]] to get a fully validated address. The Address Service specification allows the developer to discover if the receiving wallet (via the address endpoint) supports [[bip-0075.mediawiki|BIP75]]. Additionally, the Address Service specification provides the URI where a [[bip-0075.mediawiki|BIP75]] InvoiceRequest may be submitted if supported. + +==Details== + +===DANE / TLSA=== + +Address Servers SHOULD be DANE / TLSA (RFC 7671) enabled. + +===Available Services=== + +This flow will use a HTTP OPTIONS request to the address endpoint URL in order to determine service availability. The response will use the '''Allow''' (existing) and '''Accept''' (existing) HTTP headers to inform the client which services the address endpoint supports. + +====Allow Header Usage==== + +The '''Allow''' header is used, as defined in RFC 2616 (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. + +====Accept Header Usage==== + +The '''Accept''' header is defined in RFC 2616 (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. + +The '''Accept''' header MUST contain all acceptable MIME types for the endpoint. The following table defines MIME types for the appropriate return values: + +{| class="wikitable" +! MIME Type !! HTTP Method !! HTTP Response Content +|- +| text/plain || GET || Raw Wallet Address +|- +| application/bitcoin-uri || GET || Bitcoin URL ([[bip-0021.mediawiki|BIP21]] / [[bip-0072.mediawiki|BIP72]]) +|- +| application/bitcoin-paymentrequest || GET || [[bip-0070.mediawiki|BIP70]] PaymentRequest +|- +| application/bitcoin-paymentprotocol-message || POST || [[bip-0075.mediawiki|BIP75]] ProtocolMessage +|- +| application/bitcoin-encrypted-paymentprotocol-message || POST || [[bip-0075.mediawiki|BIP75]] EncryptedProtocolMessage +|- +|} + +Based on the '''Allow''' and '''Accept''' headers in the OPTIONS response, the client MAY make another TLS-protected HTTP call to the URL using the HTTP method for the data type and the '''Accept''' value that the client requests. + +====Optional Public Key Sharing==== + +In order to fully support [[bip-0075.mediawiki|BIP75]] Payment Protocol using EncryptedProtocolMessages, the Address Service MAY provide a '''receiver_public_key''' for the address endpoint by including the '''X-Identity''' HTTP header in the response. The contents of the '''X-Identity''' header MUST be a hex-encoded, DER-formatted EC Public Key. + +===Raw Wallet Addresses, BitcoinURIs and PaymentRequests=== + +====Request==== + +A HTTP GET request on a TLS-protected HTTP address endpoint MUST set the '''Accept''' header to the requested content type. This requested content type MUST have been listed in the '''Accept''' header of the previous OPTIONS response. + +====Response==== + +The Address Service MUST respond with the appropriate requested data type and a HTTP Status Code of 200 (OK). + +If the data type is temporarily unavailable and should be retried later, the Address Service MUST respond with a HTTP Status Code of 503 (Service Unavailable). The Address Service MAY include a '''Retry-After''' HTTP Header if it can determine when an appropriate response will be available. + +If the data type is permanently unavailable, for example if the address endpoint has been disabled, the Address Service MUST respond with a HTTP Status Code of 410 (Gone). + +===Handling BIP75 Messages=== + +====Request==== + +A HTTP POST request on a TLS-protected HTTP address endpoint MUST set the '''Accept''' header to the requested response MIME Type. The available response MIME Types for this request are: + +application/bitcoin-paymentprotocol-message +application/bitcoin-encrypted-paymentprotocol-message + +The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type header''' to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage. + +====Immediate Response (200)==== + +The Address Service MUST respond with a HTTP Status Code of 200 (OK) if the response type is a ProtocolMessage or EncryptedProtocolMessage. The Address Service MUST respond with a ProtocolMessage or EncryptedProtocolMessage based on the '''Accept''' header in the client request. + +====Delayed Response (202)==== + +The Address Service MUST respond with a HTTP Status Code of 202 (Accepted) and the '''Location''' header set to a location to later retrieve the resulting ProtocolMessage or EncryptedProtocolMessage + +'''NOTE''': [[bip-0075.mediawiki|BIP75]] messages SHOULD be transmitted using EncryptedProtocolMessage message types in order to provide additional application-layer security. + + +==Implementation== + +TBD + +==References== +* [[bip-0021.mediawiki|BIP21 - URI Scheme]] +* [[bip-0070.mediawiki|BIP70 - Payment Protocol]] +* [[bip-0072.mediawiki|BIP72 - bitcoin: URI Extensions for Payment Protocol]] +* [[bip-0075.mediawiki|BIP75 - Out of Band Address Exchange using Payment Protocol Encryption]] +* [https://tools.ietf.org/html/rfc2616 RFC2616 - Hypertext Transfer Protocol -- HTTP/1.1] +* [https://tools.ietf.org/html/rfc6698 RFC6698 - The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA] +* [https://tools.ietf.org/html/rfc7671 RFC7671 - The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance] \ No newline at end of file From 8905c7436d589671c122662670fe841ed489726b Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 10 Jun 2016 09:48:53 -0700 Subject: [PATCH 0388/2326] Cleanup Response titles and bold HTTP response codes --- bip-http-address-service.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki index 045d75db01..d45ae3b5c1 100644 --- a/bip-http-address-service.mediawiki +++ b/bip-http-address-service.mediawiki @@ -83,7 +83,7 @@ A HTTP GET request on a TLS-protected HTTP address endpoint MUST set the '''Acce ====Response==== -The Address Service MUST respond with the appropriate requested data type and a HTTP Status Code of 200 (OK). +The Address Service MUST respond with the appropriate requested data type and a HTTP Status Code of '''200 (OK)'''. If the data type is temporarily unavailable and should be retried later, the Address Service MUST respond with a HTTP Status Code of 503 (Service Unavailable). The Address Service MAY include a '''Retry-After''' HTTP Header if it can determine when an appropriate response will be available. @@ -100,13 +100,13 @@ application/bitcoin-encrypted-paymentprotocol-message The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type header''' to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage. -====Immediate Response (200)==== +====Immediate Response==== -The Address Service MUST respond with a HTTP Status Code of 200 (OK) if the response type is a ProtocolMessage or EncryptedProtocolMessage. The Address Service MUST respond with a ProtocolMessage or EncryptedProtocolMessage based on the '''Accept''' header in the client request. +The Address Service MUST respond with a HTTP Status Code of '''200 (OK)''' if the response type is a ProtocolMessage or EncryptedProtocolMessage. The Address Service MUST respond with a ProtocolMessage or EncryptedProtocolMessage based on the '''Accept''' header in the client request. -====Delayed Response (202)==== +====Delayed Response==== -The Address Service MUST respond with a HTTP Status Code of 202 (Accepted) and the '''Location''' header set to a location to later retrieve the resulting ProtocolMessage or EncryptedProtocolMessage +The Address Service MUST respond with a HTTP Status Code of '''202 (Accepted)''' and the '''Location''' header set to a location to later retrieve the resulting ProtocolMessage or EncryptedProtocolMessage '''NOTE''': [[bip-0075.mediawiki|BIP75]] messages SHOULD be transmitted using EncryptedProtocolMessage message types in order to provide additional application-layer security. From a62ba93990e3bd5f7fc1bd33e256ffc116ebf49d Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 10 Jun 2016 09:50:39 -0700 Subject: [PATCH 0389/2326] Add links for RFCs --- bip-http-address-service.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki index d45ae3b5c1..52df7ba865 100644 --- a/bip-http-address-service.mediawiki +++ b/bip-http-address-service.mediawiki @@ -38,7 +38,7 @@ A bitcoin wallet developer would like to use [[bip-0075.mediawiki|BIP75]] to get ===DANE / TLSA=== -Address Servers SHOULD be DANE / TLSA (RFC 7671) enabled. +Address Servers SHOULD be DANE / TLSA ([https://tools.ietf.org/html/rfc7671 RFC 7671]) enabled. ===Available Services=== @@ -46,11 +46,11 @@ This flow will use a HTTP OPTIONS request to the address endpoint URL in order t ====Allow Header Usage==== -The '''Allow''' header is used, as defined in RFC 2616 (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. +The '''Allow''' header is used, as defined in [https://tools.ietf.org/html/rfc2616 RFC2616 RFC 2616] (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. ====Accept Header Usage==== -The '''Accept''' header is defined in RFC 2616 (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. +The '''Accept''' header is defined in [[https://tools.ietf.org/html/rfc2616 RFC 2616] (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. The '''Accept''' header MUST contain all acceptable MIME types for the endpoint. The following table defines MIME types for the appropriate return values: From 61674ca008b6f6030967971f07abb75859536951 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 10 Jun 2016 09:51:29 -0700 Subject: [PATCH 0390/2326] Add links for RFCs --- bip-http-address-service.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki index 52df7ba865..ac00e08d44 100644 --- a/bip-http-address-service.mediawiki +++ b/bip-http-address-service.mediawiki @@ -46,11 +46,11 @@ This flow will use a HTTP OPTIONS request to the address endpoint URL in order t ====Allow Header Usage==== -The '''Allow''' header is used, as defined in [https://tools.ietf.org/html/rfc2616 RFC2616 RFC 2616] (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. +The '''Allow''' header is used, as defined in [https://tools.ietf.org/html/rfc2616 RFC 2616] (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. ====Accept Header Usage==== -The '''Accept''' header is defined in [[https://tools.ietf.org/html/rfc2616 RFC 2616] (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. +The '''Accept''' header is defined in [https://tools.ietf.org/html/rfc2616 RFC 2616] (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. The '''Accept''' header MUST contain all acceptable MIME types for the endpoint. The following table defines MIME types for the appropriate return values: From faec02cd9782994e7b512859b919b97acb8334e3 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 10 Jun 2016 12:49:03 -0700 Subject: [PATCH 0391/2326] Removing Justin and adding Frank as co-author --- bip-http-address-service.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki index ac00e08d44..2701dfd2f4 100644 --- a/bip-http-address-service.mediawiki +++ b/bip-http-address-service.mediawiki @@ -1,8 +1,8 @@
   BIP: XXX
   Title: Endpoint Capability Discovering using HTTP Address Service
-  Author: Justin Newton 
-          Matt David 
+  Author: Matt David 
+          Frank Contreras 
   Status: Draft
   Type: Standards Track
   Created: 2016-06-10

From 3e89e8b9473a1621710b314b77b4d5864cecc51f Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Fri, 10 Jun 2016 13:58:02 -0700
Subject: [PATCH 0392/2326] Remove whitespace causing empty grey boxes

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

diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki
index 2701dfd2f4..0c61a73efb 100644
--- a/bip-http-address-service.mediawiki
+++ b/bip-http-address-service.mediawiki
@@ -43,7 +43,7 @@ Address Servers SHOULD be DANE / TLSA ([https://tools.ietf.org/html/rfc7671 RFC
 ===Available Services===
 
 This flow will use a HTTP OPTIONS request to the address endpoint URL in order to determine service availability. The response will use the '''Allow''' (existing) and '''Accept''' (existing) HTTP headers to inform the client which services the address endpoint supports.
- 
+
 ====Allow Header Usage====
 
 The '''Allow''' header is used, as defined in [https://tools.ietf.org/html/rfc2616 RFC 2616] (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types.
@@ -103,7 +103,7 @@ The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "bi
 ====Immediate Response====
 
 The Address Service MUST respond with a HTTP Status Code of '''200 (OK)''' if the response type is a ProtocolMessage or EncryptedProtocolMessage. The Address Service MUST respond with a ProtocolMessage or EncryptedProtocolMessage based on the '''Accept''' header in the client request.
- 
+
 ====Delayed Response====
 
 The Address Service MUST respond with a HTTP Status Code of '''202 (Accepted)''' and the '''Location''' header set to a location to later retrieve the resulting ProtocolMessage or EncryptedProtocolMessage

From 73b2e134d1eb625db2102716e1ba6a6de2d62d2b Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Fri, 10 Jun 2016 15:08:19 -0700
Subject: [PATCH 0393/2326] - Fix bulleting for mimetypes

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

diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki
index 0c61a73efb..c6931e37c6 100644
--- a/bip-http-address-service.mediawiki
+++ b/bip-http-address-service.mediawiki
@@ -95,8 +95,8 @@ If the data type is permanently unavailable, for example if the address endpoint
 
 A HTTP POST request on a TLS-protected HTTP address endpoint MUST set the '''Accept''' header to the requested response MIME Type. The available response MIME Types for this request are:
 
-application/bitcoin-paymentprotocol-message
-application/bitcoin-encrypted-paymentprotocol-message
+* application/bitcoin-paymentprotocol-message
+* application/bitcoin-encrypted-paymentprotocol-message
 
 The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type header''' to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage.
 

From 66e2d91754a5d387154639ca00fe801fb6e39bf9 Mon Sep 17 00:00:00 2001
From: Matt David 
Date: Fri, 10 Jun 2016 15:09:31 -0700
Subject: [PATCH 0394/2326] - Removing bolding on next word "header"

---
 bip-http-address-service.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki
index c6931e37c6..bbb5921737 100644
--- a/bip-http-address-service.mediawiki
+++ b/bip-http-address-service.mediawiki
@@ -98,7 +98,7 @@ A HTTP POST request on a TLS-protected HTTP address endpoint MUST set the '''Acc
 * application/bitcoin-paymentprotocol-message
 * application/bitcoin-encrypted-paymentprotocol-message
 
-The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type header''' to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage.
+The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type''' header to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage.
 
 ====Immediate Response====
 

From a5f03bbccc7e004b07a97522945de893c5173172 Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Mon, 13 Jun 2016 20:53:08 +0800
Subject: [PATCH 0395/2326] BIP143: private key for example

---
 bip-0143.mediawiki | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 309dfabeb1..c88483ff53 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -139,7 +139,8 @@ Refer to the reference implementation, reproduced below, for the precise algorit
     nLockTime: 11000000
   
   The first input comes from an ordinary P2PK:
-    scriptPubKey: 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac value: 6.25
+    scriptPubKey : 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac value: 6.25
+    private key  : bbc27228ddcb9209d7fd6f36b02f7dfa6252af40bb2f1cbc7a557da8027ff866
     
   The second input comes from a P2WPKH witness program:
     scriptPubKey : 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, value: 6
@@ -418,7 +419,7 @@ This example is a P2SH-P2WSH 6-of-6 multisig witness program signed with 6 diffe
   = 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044
   
   hashOutputs for ALL:
-  dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac)
+    dSHA256(00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac)
   = bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc
   
   hashOutputs for SINGLE:

From b1e7db53760d8b4c4a976876f99f7fac1bebf4e9 Mon Sep 17 00:00:00 2001
From: Daniel Weigl 
Date: Tue, 14 Jun 2016 14:49:09 +0200
Subject: [PATCH 0396/2326] new bip proposal  "Derivation scheme for
 P2WPKH-nested-in-P2SH based accounts"

---
 bip-p2sh-accounts.mediawiki | 95 +++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 bip-p2sh-accounts.mediawiki

diff --git a/bip-p2sh-accounts.mediawiki b/bip-p2sh-accounts.mediawiki
new file mode 100644
index 0000000000..f7453c2ccf
--- /dev/null
+++ b/bip-p2sh-accounts.mediawiki
@@ -0,0 +1,95 @@
+
+  BIP: 
+  Title: Derivation scheme for P2WPKH-nested-in-P2SH based accounts
+  Author: Daniel Weigl 
+  Status: Draft
+  Type: Informational
+  Created: 2016-05-19
+
+ +==Abstract== + +This BIP defines the derivation scheme for HD wallets using the P2WPKH-nested-in-P2SH ([[bip-0141.mediawiki|BIP 141]]) serialization format for segregated witness transactions. + +==Motivation== + +With the usage of P2WPKH-nested-in-P2SH ([[bip-0141.mediawiki#p2wpkh-nested-in-bip16-p2sh|BIP 141]]) transactions it is necessary to have a common derivation scheme. +It allows the user to use different HD wallets with the same masterseed and/or a single account seamlessly. + +Thus the user needs to create a dedicated segregate witness accounts, which ensures that only wallets compatible with this BIP +will detect the account and handle them appropriately. + +===Considerations=== +Two generally different approaches are possible for current BIP44 capable wallets: + + 1) Allow the user to use the same account(s) that they already uses, but add segregated witness encoded addresses to it + 1.1) Use the same public keys as defined in BIP44, but in addition to the normal P2PKH address also derive the P2SH address from it. + 1.2) Use the same account root, but branch off and derive different external and internal chain roots to derive dedicated public keys for the segregated witness addresses. + + 2) Create dedicated accounts only used for segregated witness addresses. + +The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP-compatible wallet masterseed into/in a non-BIP-compatible wallet, the account might show up but also it might miss some UTXOs. +Thus this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets. + + +==Specifications== + +This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] +root account. + +===Public key derivation=== + +To derive a public key from the root account, this BIP uses the same account-structure as defined in +[[bip-0044.mediawiki|BIP 44]], but only uses a different purpose value to indicate the different transaction +serialization method. + +
+m / purpose' / coin_type' / account' / change / address_index
+
+ +For the `purpose`-path level it uses '. The rest of the levels are used as defined in BIP44 + + +===Address derivation=== + +To derive the P2SH address from the above calculated public key, we use the encapsulation defined in [[bip-0141.mediawiki#p2wpkh-nested-in-bip16-p2sh|BIP 141]]: + + witness: + scriptSig: <0 <20-byte-key-hash>> + (0x160014{20-byte-key-hash}) + scriptPubKey: HASH160 <20-byte-script-hash> EQUAL + (0xA914{20-byte-script-hash}87) + + +==Test vectors== + +(tbd. when we have the actual bip number) +
+  masterseedWords = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
+  masterseed = 
+
+  // Account 0, root = m/'/0'/0'
+  account0Xpriv = 
+
+  // Account 0, first receiving private key = m/'/0'/0'/0/0
+  account0recvPrivateKey = 
+  account0recvPublickKey = 
+
+  // Address derivation
+  keyhash = HASH160(account0recvPublickKey) = 
+  scriptSig = <0 > = 
+  addressBytes = HASH160(scriptSig) = 
+
+  // addressBytes base58check encoded for testnet
+  address = base58check(prefix | addressBytes) = 1xyz....
+
+ +... + +==Reference== + +* [[bip-0016.mediawiki|BIP16 - Pay to Script Hash]] +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] +* [[bip-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]] \ No newline at end of file From babd604cc4fc040ec22d58f120569556afeac3ce Mon Sep 17 00:00:00 2001 From: Daniel Weigl Date: Tue, 14 Jun 2016 14:54:41 +0200 Subject: [PATCH 0397/2326] minor cleanups --- bip-p2sh-accounts.mediawiki | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/bip-p2sh-accounts.mediawiki b/bip-p2sh-accounts.mediawiki index f7453c2ccf..cf030039bc 100644 --- a/bip-p2sh-accounts.mediawiki +++ b/bip-p2sh-accounts.mediawiki @@ -22,20 +22,22 @@ will detect the account and handle them appropriately. ===Considerations=== Two generally different approaches are possible for current BIP44 capable wallets: - 1) Allow the user to use the same account(s) that they already uses, but add segregated witness encoded addresses to it - 1.1) Use the same public keys as defined in BIP44, but in addition to the normal P2PKH address also derive the P2SH address from it. - 1.2) Use the same account root, but branch off and derive different external and internal chain roots to derive dedicated public keys for the segregated witness addresses. +1) Allow the user to use the same account(s) that they already uses, but add segregated witness encoded addresses to it - 2) Create dedicated accounts only used for segregated witness addresses. +1.1) Use the same public keys as defined in BIP44, but in addition to the normal P2PKH address also derive the P2SH address from it. -The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP-compatible wallet masterseed into/in a non-BIP-compatible wallet, the account might show up but also it might miss some UTXOs. -Thus this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets. +1.2) Use the same account root, but branch off and derive different external and internal chain roots to derive dedicated public keys for the segregated witness addresses. + +2) Create dedicated accounts only used for segregated witness addresses. + +The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP-compatible wallet masterseed into/in a non-BIP{ThisBipNumber}-compatible wallet, the account might show up but also it might miss some UTXOs. + +Therefore this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets. ==Specifications== -This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] -root account. +This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] root account. ===Public key derivation=== @@ -47,7 +49,7 @@ serialization method. m / purpose' / coin_type' / account' / change / address_index
-For the `purpose`-path level it uses '. The rest of the levels are used as defined in BIP44 +For the `purpose`-path level it uses {ThisBipNumber}'. The rest of the levels are used as defined in BIP44 ===Address derivation=== @@ -84,7 +86,6 @@ To derive the P2SH address from the above calculated public key, we use the enca address = base58check(prefix | addressBytes) = 1xyz....
-... ==Reference== From fbfcdd4ce38841ba1dad2712a4bceaf24f355396 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 14 Jun 2016 23:43:40 +0800 Subject: [PATCH 0398/2326] BIP143: typo fix --- bip-0143.mediawiki | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index c88483ff53..892c0278e8 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -47,8 +47,8 @@ The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. 0x1976a914{20-byte-pubkey-hash}88ac. *For P2WSH witness program, -**if the witnessScript does not contain any OP_CODESEPERATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOuts. -**if the witnessScript contains any OP_CODESEPERATOR, the scriptCode is the evaluated script, with everything up to and including the last executed OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts. +**if the witnessScript does not contain any OP_CODESEPARATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOuts. +**if the witnessScript contains any OP_CODESEPARATOR, the scriptCode is the evaluated script, with everything up to and including the last executed OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts. The item 6 is a 8-byte value of the amount of bitcoin spent in this input. @@ -249,7 +249,7 @@ Refer to the reference implementation, reproduced below, for the precise algorit === Native P2WSH === -This example shows how OP_CODESEPERATOR and out-of-range SIGHASH_SINGLE are processed: +This example shows how OP_CODESEPARATOR and out-of-range SIGHASH_SINGLE are processed: @@ -265,6 +265,7 @@ This example shows how OP_CODESEPERATOR and out-of-range SIGHASH_SINGLE are proc The first input comes from an ordinary P2PK: scriptPubKey: 21036d5c20fa14fb2f635474c1dc4ef5909d4568e5569b79fc94d3448486e14685f8ac value: 1.5625 private key: b8f28a772fccbf9b4f58a4f027e07dc2e35e7cd80529975e292ea34f84c4580c + signature: 304402200af4e47c9b9629dbecc21f73af989bdaa911f7e6f6c2e9394588a3aa68f81e9902204f3fcf6ade7e5abb1295b6774c8e0abd94ae62217367096bc02ee5e435b67da201 (SIGHASH_ALL) The second input comes from a native P2WSH witness program: scriptPubKey : 00205d1b56b63d714eebe542309525f484b7e9d6f686b3781b6f61ef925d66d6f6a0, value: 49 @@ -290,7 +291,7 @@ This example shows how OP_CODESEPERATOR and out-of-range SIGHASH_SINGLE are proc scriptCode: 4721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac ^^ - (please note that the not-yet-exectued OP_CODESEPERATOR is not removed from the scriptCode) + (please note that the not-yet-exectued OP_CODESEPARATOR is not removed from the scriptCode) preimage: 01000000ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d4100000000000000000000000000000000000000000000000000000000000000000815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f8000000004721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0011102401000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000003000000 sigHash: 82dde6e4f1e94d02c2b7ad03d2115d691f48d064e9d52f58194a6637e4194391 public key: 026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880ae @@ -298,17 +299,17 @@ This example shows how OP_CODESEPERATOR and out-of-range SIGHASH_SINGLE are proc signature: 3044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e2703 scriptCode: 23210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac - (everything up to the last executed OP_CODESEPERATOR, including that OP_CODESEPERATOR, are removed) + (everything up to the last executed OP_CODESEPARATOR, including that OP_CODESEPARATOR, are removed) preimage: 01000000ef546acf4a020de3898d1b8956176bb507e6211b5ed3619cd08b6ea7e2a09d4100000000000000000000000000000000000000000000000000000000000000000815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000023210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0011102401000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000003000000 sigHash: fef7bd749cce710c5c052bd796df1af0d935e59cea63736268bcbe2d2134fc47 public key: 0255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465 private key: 86bf2ed75935a0cbef03b89d72034bb4c189d381037a5ac121a70016db8896ec signature: 304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503 - The serialized signed transaction is: 01000000000102fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e000000004847304402200af4e47c9b9629dbecc21f73af989bdaa911f7e6f6c2e9394588a3aa68f81e9902204f3fcf6ade7e5abb1295b6774c8e0abd94ae62217367096bc02ee5e435b67da201ffffffff0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000000ffffffff0100f2052a010000001976a914a30741f8145e5acadf23f751864167f32e0963f788ac000347304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac0000000047304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac00000000 + The serialized signed transaction is: 01000000000102fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e000000004847304402200af4e47c9b9629dbecc21f73af989bdaa911f7e6f6c2e9394588a3aa68f81e9902204f3fcf6ade7e5abb1295b6774c8e0abd94ae62217367096bc02ee5e435b67da201ffffffff0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000000ffffffff0100f2052a010000001976a914a30741f8145e5acadf23f751864167f32e0963f788ac000347304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac00000000 -This example shows how unexecuted OP_CODESEPERATOR is processed, and SINGLE|ANYONECANPAY does not commit to the input index: +This example shows how unexecuted OP_CODESEPARATOR is processed, and SINGLE|ANYONECANPAY does not commit to the input index: @@ -347,7 +348,7 @@ This example shows how unexecuted OP_CODESEPERATOR is processed, and SINGLE|ANYO outpoint: e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc00100000000 scriptCode: 270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac - (since the OP_CODESEPERATOR is not executed, nothing is removed from the scriptCode) + (since the OP_CODESEPARATOR is not executed, nothing is removed from the scriptCode) hashOutputs: b258eaf08c39fbe9fbac97c15c7e7adeb8df142b0df6f83e017f349c2b6fe3d2 preimage: 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc00100000000270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98acffffff0000000000ffffffffb258eaf08c39fbe9fbac97c15c7e7adeb8df142b0df6f83e017f349c2b6fe3d20000000083000000 sigHash: e9071e75e25b8a1e298a72f0d2e9f4f95a0f5cdf86a533cda597eb402ed13b3a @@ -357,7 +358,7 @@ This example shows how unexecuted OP_CODESEPERATOR is processed, and SINGLE|ANYO outpoint: 80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b00000000 scriptCode: 2468210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac - (everything up to the last executed OP_CODESEPERATOR, including that OP_CODESEPERATOR, are removed) + (everything up to the last executed OP_CODESEPARATOR, including that OP_CODESEPARATOR, are removed) hashOutputs: 91ea93dd77f702b738ebdbf3048940a98310e869a7bb8fa2c6cb3312916947ca preimage: 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b000000002468210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98acffffff0000000000ffffffff91ea93dd77f702b738ebdbf3048940a98310e869a7bb8fa2c6cb3312916947ca0000000083000000 sigHash: cd72f1f1a433ee9df816857fad88d8ebd97e09a75cd481583eb841c330275e54 @@ -393,7 +394,7 @@ This example shows how unexecuted OP_CODESEPERATOR is processed, and SINGLE|ANYO === P2SH-P2WSH === -This example is a P2SH-P2WSH 6-of-6 multisig witness program signed with 6 different SIGHASH types. +This example is a P2SH-P2WSH 6-of-6 multisig witness program signed with 6 different SIGHASH types. From c32b2a7c704634d1019e63643434f6f1c3a8586a Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 16 Jun 2016 17:32:51 -0700 Subject: [PATCH 0399/2326] Allow block responses to MSG_CMPCT_BLOCK requests --- bip-0152.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 036ba310b5..0e993737ac 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -114,7 +114,8 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde ====MSG_CMPCT_BLOCK==== # getdata messages may now contain requests for MSG_CMPCT_BLOCK objects. -# Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object with the hash of a block which was recently announced and after having sent the requesting peer a sendcmpct message, nodes MUST respond with a cmpctblock message containing appropriate data representing the block being requested. +# Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object with the hash of a block which was recently announced and is close to the tip of the best chain of the receiver and after having sent the requesting peer a sendcmpct message, nodes MUST respond with a cmpctblock message containing appropriate data representing the block being requested. +# Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object for which a cmpctblock message is not sent in response, a block message containing the requested block in non-compact form MUST be sent. # MSG_CMPCT_BLOCK inv objects MUST NOT appear anywhere except for in getdata messages. ====cmpctblock==== @@ -150,7 +151,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde # Nodes MAY impose additional requirements on when they announce new blocks by sending cmpctblock messages. For example, nodes with limited outbound bandwidth MAY choose to announce new blocks using inv/header messages (as per BIP130) to conserve outbound bandwidth. -# Note that the MSG_CMPCT_BLOCK section does not require that nodes respond to MSG_CMPCT_BLOCK getdata requests for blocks which they did not recently announce. This allows nodes to calculate cmpctblock messages at announce-time instead of at request-time. Thus, nodes MUST NOT request blocks using MSG_CMPCT_BLOCK getdatas unless it is in response to an inv/headers block announcement (as per BIP130), and MUST NOT request blocks using MSG_CMPCT_BLOCK getdatas in response to headers messages which were, themselves, responses to getheaders requests. +# Note that the MSG_CMPCT_BLOCK section does not require that nodes respond to MSG_CMPCT_BLOCK getdata requests for blocks which they did not recently announce. This allows nodes to calculate cmpctblock messages at announce-time instead of at request-time. Blocks which are requested with a MSG_CMPCT_BLOCK getdata, but which are not responded to with a cmpctblock message MUST be responded to with a block message, allowing nodes to request all blocks using MSG_CMPCT_BLOCK getdatas and rely on their peer to pick an appropriate response. # While the current version sends transactions with the same encodings as is used in tx messages and elsewhere in the protocol, the version field in sendcmpct is intended to allow this to change in the future. For this reason, it is recommended that the code used to decode PrefilledTransaction and BlockTransactions messages be prepared to take a different transaction encoding, if and when the version field in sendcmpct changes in a future BIP. From c65874246a3ac5f55a9b10acc1aa22177c8d2050 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Fri, 29 Jan 2016 11:14:59 +1100 Subject: [PATCH 0400/2326] Add BIP21 Javascript library --- bip-0021.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index e7094e58e0..1e78ebfb0b 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -122,3 +122,5 @@ Characters must be URI encoded properly. === 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 From 5e6dc77d6bfd53b7a6c2d350c9f7d59d70f0d85a Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Mon, 20 Jun 2016 01:47:03 +0800 Subject: [PATCH 0401/2326] Clarify BIP9 threshold MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The threshold for should be ≥2016 for mainnet, ≥1512 for testnet. https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/versionbits.cpp#L69 https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/chainparams.cpp#L84 https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/chainparams.cpp#L177 --- bip-0009.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 2e4da43c9d..7270abd26f 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -109,7 +109,7 @@ referred to as MTP in the diagram above, and is treated as a monotonic clock def After a period in the STARTED state, if we're past the timeout, we switch to FAILED. If not, we tally the bits set, and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their -version numbers. The threshold is 1915 blocks (95% of 2016), or 1512 for testnet (75% of 2016). +version numbers. The threshold is ≥1916 blocks (95% of 2016), or ≥1512 for testnet (75% of 2016). The transition to FAILED takes precendence, as otherwise an ambiguity can arise. There could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN while the other one simultaneously transitions to STARTED, which would mean both would demand setting the bit. @@ -202,7 +202,7 @@ A client that does not understand a rule prefixed by '!' must not attempt to pro The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account. '''Modified thresholds''' -The 1915 threshold (based on in BIP 34's 95%) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore. +The 1916 threshold (based on in BIP 34's 95%) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore. '''Conflicting soft forks''' At some point, two mutually exclusive soft forks may be proposed. The naive way to deal with this is to never create software that implements both, but that is making a bet that at least one side is guaranteed to lose. Better would be to encode "soft fork X cannot be locked-in" as consensus rule for the conflicting soft fork - allowing software that supports both, but can never trigger conflicting changes. From c81272d9f3eb23dd23435340611bc3719b8d7381 Mon Sep 17 00:00:00 2001 From: NicolasDorier Date: Sun, 19 Jun 2016 23:29:42 +0200 Subject: [PATCH 0402/2326] header message can also get replied by getdata (CMPCT_BLOCK) --- bip-0152/protocol-flow.png | Bin 25231 -> 17398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bip-0152/protocol-flow.png b/bip-0152/protocol-flow.png index 207a78e9b04f59e9e707b8e7aa0847a8b5541606..0d2b07d3988c77a0155e22df5b2264f0f747d158 100644 GIT binary patch literal 17398 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
a{)J3P~Ebkun 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 X1MPO1lrM9Y0jcwJ^>bP0l+XkK3IW|u From 9ab38e9c1096e1e94bb28fe57620e56ad4045c96 Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Wed, 22 Jun 2016 18:43:56 -0500 Subject: [PATCH 0403/2326] BIP-126: Best Practices for Heterogeneous Input Script Transactions 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 the natural fragmentation of wallet balances over time. This standard 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. --- bip-0126.mediawiki | 98 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 bip-0126.mediawiki diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki new file mode 100644 index 0000000000..dffe247dac --- /dev/null +++ b/bip-0126.mediawiki @@ -0,0 +1,98 @@ +
+  BIP: 126
+  Title: Best Practices for Heterogeneous Input Script Transactions
+  Author: Kristov Atlas 
+  Status: Draft
+  Type: Informational
+  Created: 2016-02-10
+
+ +==Abstract== + +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 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. + +==Copyright== + +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''': An 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''': An 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". + +==Motivations== + +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. +# 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 this, two forms of HIT are proposed: Standard form and alternate form. + +==Standard form heterogenous input script transaction== + +===Rules=== + +An 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). +# 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. + +===Rationale=== + +The requirement for equal numbers of unique input/output scripts instead of equal number of inputs/outputs accommodates user-protecting UTXO selection behavior. Wallets may contain spendable outputs with identical scripts due to intentional or accidental address reuse, or due to dusting attacks. In order to minimise the adverse consequences of address reuse, any time a UTXO is included in a transaction as an input, all UTXOs with the same spending script should also be included in the transaction. + +The requirement that all output scripts are unique prevents address reuse. Restricting the number of outputs to the number of unique input scripts prevents this policy from growing the network’s UTXO set. A standard form HIT transaction will always have a number of inputs greater than or equal to the number of outputs. + +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== + +The formation of a standard form HIT is not possible in the following cases: + +# The HIT is unavoidable, and the user’s wallet contains an insufficient number or size of UTXOs to create a standard form HIT. +# The user wishes to reduce the number of utxos in their wallet, and does not have any sets of utxos with identical scripts. + +When one of the following cases exist, a compliant implementation may create an alternate form HIT by constructing a transaction as follows: + +===Procedure=== + +# Find the smallest combination of inputs whose value is at least the value of the desired spend. +## Add these inputs to the transaction. +## Add a spend output to the transaction. +## Add a change output to the transaction containing the difference between the current set of inputs and the desired spend. +# Repeat step 1 to create a second spend output and change output. +# (optional) Repeat step 2 until the desired number of inputs have been consumed and/or the desired number outputs have been created. +# Adjust the change outputs as necessary to pay the desired transaction fee. + +Clients which create intentional HITs must have the capability to form alternate form HITs, and must do so for a non-zero fraction of the transactions they create. + +===Rules=== + +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. +# 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 +## "Standard value" refers to the value of the standard outputs +## "Change outputs" refers to all outputs which are not standard outputs +# For a HIT containing n standard outputs, there must exist at least one possible way to organize the inputs and outputs into n sets, where all sets satisfy the following: +## The set contains one or more inputs, exactly one standard output, and exactly one change output +## An input or output that appears in one set must not appear in any other set +## 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== + +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. From 05e96d2500258724f4d2cb04b1d803aea045c6bf Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Thu, 23 Jun 2016 13:30:24 +1000 Subject: [PATCH 0404/2326] grammar fix --- bip-0126.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index dffe247dac..295b582bfb 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -9,7 +9,7 @@ ==Abstract== -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 the natural fragmentation of wallet balances over time. +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. From f51a8e1d0eb4870069cccde1f739964aeca93515 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Thu, 23 Jun 2016 13:42:03 +1000 Subject: [PATCH 0405/2326] further grammar, not An Hit --- bip-0126.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index 295b582bfb..42881e5ec9 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -20,8 +20,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''': An 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''': An HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII) +* '''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) 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". @@ -41,7 +41,7 @@ In order to achieve this, two forms of HIT are proposed: Standard form and alter ===Rules=== -An HIT is Standard form if it adheres to all of the following rules: +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). # All output scripts must be unique. From b33ca0c97b6aa78cc938b74400956ad05a11b7ee Mon Sep 17 00:00:00 2001 From: Justus Ranvier Date: Thu, 23 Jun 2016 09:52:16 -0500 Subject: [PATCH 0406/2326] revise wording of alternate HIT procedure --- bip-0126.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index dffe247dac..310083713c 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -71,7 +71,7 @@ When one of the following cases exist, a compliant implementation may create an ## Add these inputs to the transaction. ## Add a spend output to the transaction. ## Add a change output to the transaction containing the difference between the current set of inputs and the desired spend. -# Repeat step 1 to create a second spend output and change output. +# Repeat step 1 to create a second pair of outputs, where one output has the same value as the spend output of the previous step. # (optional) Repeat step 2 until the desired number of inputs have been consumed and/or the desired number outputs have been created. # Adjust the change outputs as necessary to pay the desired transaction fee. From 7478ee3260c0d3c0cef39233931b307691764edc Mon Sep 17 00:00:00 2001 From: jl2012 Date: Fri, 24 Jun 2016 01:59:25 +0800 Subject: [PATCH 0407/2326] BIP112/114 example fix --- bip-0112.mediawiki | 16 ++++++++-------- bip-0114.mediawiki | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 19f74b60c7..e19e0e929b 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -138,10 +138,10 @@ A simple output, paying to Alice might then look like: HASH160 EQUAL IF - + ELSE "24h" CHECKSEQUENCEVERIFY DROP - + ENDIF CHECKSIG @@ -153,10 +153,10 @@ With CHECKLOCKTIMEVERIFY, this would look like: HASH160 EQUAL IF - + ELSE "2015/12/15" CHECKLOCKTIMEVERIFY DROP - + ENDIF CHECKSIG @@ -181,13 +181,13 @@ Alice might look like the following in Alice's commitment transaction: IF "24h" CHECKSEQUENCEVERIFY 2DROP - + ELSE EQUAL NOTIF "2015/10/20 10:33" CHECKLOCKTIMEVERIFY DROP ENDIF - + ENDIF CHECKSIG @@ -196,12 +196,12 @@ and correspondingly in Bob's commitment transaction: HASH160 DUP EQUAL SWAP EQUAL ADD IF - + ELSE "2015/10/20 10:33" CHECKLOCKTIMEVERIFY "24h" CHECKSEQUENCEVERIFY 2DROP - + ENDIF CHECKSIG diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki index 2d16084255..aee8646be9 100644 --- a/bip-0114.mediawiki +++ b/bip-0114.mediawiki @@ -96,20 +96,20 @@ The following is the "Hashed TIme-Lock Contract" example in [[bip-0112.mediawiki IF "24h" CHECKSEQUENCEVERIFY 2DROP - + ELSE EQUAL NOTIF "Timestamp" CHECKLOCKTIMEVERIFY DROP ENDIF - + ENDIF CHECKSIG To create a MAST Root, it is flattened to 3 mutually exclusive branches: - HASH160 EQUALVERIFY "24h" CHECKSEQUENCEVERIFY DROP CHECKSIG - HASH160 EQUALVERIFY CHECKSIG - "Timestamp" CHECKLOCKTIMEVERIFY DROP CHECKSIG + HASH160 EQUALVERIFY "24h" CHECKSEQUENCEVERIFY DROP CHECKSIG + HASH160 EQUALVERIFY CHECKSIG + "Timestamp" CHECKLOCKTIMEVERIFY DROP CHECKSIG which significantly improves readability and reduces the witness size when it is redeemed. From ecfb7ebbca3488cd4c1e11210cbc5914a9228c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B8=BFtcDrak?= Date: Tue, 28 Jun 2016 22:42:20 +0100 Subject: [PATCH 0408/2326] Link to permanent PR of reference implementation --- bip-0152.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 0e993737ac..cfae0c0d1b 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -196,7 +196,7 @@ Older clients remain fully compatible and interoperable after this change. ==Implementation== -https://github.com/TheBlueMatt/bitcoin/tree/udp +https://github.com/bitcoin/bitcoin/pull/8068 ==Acknowledgements== From 95947c5d771007d5b638a08d06381edb933e2975 Mon Sep 17 00:00:00 2001 From: Matt Bell Date: Tue, 5 Jul 2016 09:43:34 -0700 Subject: [PATCH 0409/2326] Added CSV mainnet activation to BIP9 assignments list --- bip-0009/assignments.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki index 6fcbcf0184..e145ceb0c1 100644 --- a/bip-0009/assignments.mediawiki +++ b/bip-0009/assignments.mediawiki @@ -19,7 +19,7 @@ State can be defined, active, failed. Dates are in UTC. | 0 | 2016-05-01 00:00:00 | 2017-05-01 00:00:00 -| defined +| active since #419328 | 2016-03-01 00:00:00 | 2017-05-01 00:00:00 | active since #770112 From 8d40b6ef02d89565228e63d4a0e1194d523b783c Mon Sep 17 00:00:00 2001 From: jl2012 Date: Tue, 5 Jul 2016 17:28:14 +0800 Subject: [PATCH 0410/2326] BIP68/113 for generation transaction --- bip-0068.mediawiki | 2 ++ bip-0113.mediawiki | 2 ++ 2 files changed, 4 insertions(+) diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 0082db3874..0303924229 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -49,6 +49,8 @@ The block produced time is equal to the median-time-past of its previous block. When the relative lock-time is block-based, it is interpreted as a minimum block-height constraint over the input's age. A relative block-based lock-time of zero indicates an input which can be included in any block. More generally, a relative block lock-time n can be included n blocks after the mining date of the output it is spending, or any block thereafter. +The new rules are not applied to the nSequence field of the input of the coinbase transaction. + ==Implementation== A reference implementation is provided by the following pull request diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki index 7497f50b59..8290c1373b 100644 --- a/bip-0113.mediawiki +++ b/bip-0113.mediawiki @@ -64,6 +64,8 @@ This method takes the block time as one parameter. This BIP proposes that after activation calls to IsFinalTx() within consensus code use the return value of `GetMedianTimePast(pindexPrev)` instead. +The new rule applies to all transactions, including the coinbase transaction. + A reference implementation of this proposal is provided by the following pull request: From 9c7fde09aac630aee8abaa1fe1c1e6c244ae6b1a Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 12 Jul 2016 12:15:35 +1000 Subject: [PATCH 0411/2326] bip141: clarify that marker is 1 byte --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index ed025ace81..27a59f9ab6 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -48,7 +48,7 @@ A new wtxid is defined: the double SHA256 of the new serialization Format of nVersion, txins, txouts, and nLockTime are same as traditional serialization. -The marker MUST be 0x00. +The marker MUST be a 1-byte zero value: 0x00. The flag MUST be a 1-byte non-zero value. Currently, 0x01 MUST be used. From 529c7cddb7f313c4c4043d6b918fa69eb73761cf Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 13 Jul 2016 13:09:24 +0200 Subject: [PATCH 0412/2326] [BIP151] Switch from plain HMAC_SHA512 KDF to HKDF --- bip-0151.mediawiki | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index 18d390179a..cc79712150 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -36,17 +36,22 @@ Encryption initialization must happen before sending any other messages to the r === Symmetric Encryption Cipher Keys === -The symmetric encryption cipher keys will be calculated with ECDH by sharing the pubkeys of a ephemeral key. Once the ECDH secret is calculated on each side, the symmetric encryption cipher keys must be calculated with HMAC_SHA512(key=ecdh_secret|cipher-type,msg="encryption key"). +The symmetric encryption cipher keys will be calculated with ECDH/HKDF by sharing the pubkeys of a ephemeral key. Once the ECDH secret is calculated on each side, the symmetric encryption cipher keys must be derived with HKDF [2] after the following specification: -K_1 must be the left 32bytes of the HMAC_SHA512 hash. +1. HKDF extraction +PRK = HKDF_EXTRACT(hash=SHA256, salt="bitcoinechd", ikm=ecdh_secret|cipher-type). -K_2 must be the right 32bytes of the HMAC_SHA512 hash. +2. Derive Key1 +K_1 = HKDF_EXPAND(prk=PRK, hash=SHA256, info="BitcoinK1", L=32) -It is important to include the cipher-type into the symmetric cipher key to avoid weak-cipher-attacks. +3. Derive Key2 +K_2 = HKDF_EXPAND(prk=PRK, hash=SHA256, info="BitcoinK2", L=32) + +It is important to include the cipher-type into the symmetric cipher key derivation to avoid weak-cipher-attacks. === Session ID === -Both sides must also calculate the 256bit session-id using HMAC_SHA256(key=ecdh_secret,msg="session id"). The session-id can be used for linking the encryption-session to an identity check. +Both sides must also calculate the 256bit session-id using SID = HKDF_EXPAND(prk=PRK, hash=SHA256, info="BitcoinSessionID", L=32). The session-id can be used for linking the encryption-session to an identity check. === The encinit message type === @@ -69,19 +74,19 @@ Possible symmetric key ciphers types === ChaCha20-Poly1305 Cipher Suite === -ChaCha20 is a stream cipher designed by Daniel Bernstein [2]. It operates by permuting 128 fixed bits, 128 or 256 bits of key, +ChaCha20 is a stream cipher designed by Daniel Bernstein [3]. It operates by permuting 128 fixed bits, 128 or 256 bits of key, a 64 bit nonce and a 64 bit counter into 64 bytes of output. This output is used as a keystream, with any unused bytes simply discarded. -Poly1305, also by Daniel Bernstein [3], is a one-time Carter-Wegman MAC that computes a 128 bit integrity tag given a message and a single-use +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 [4] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [5], 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 encyption 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. K_2 must be used in conjunction with poly1305 to build an AEAD. -Optimized implementations of ChaCha20-Poly1305 are very fast in general, therefore it is very likely that encrypted messages require less CPU cycles per bytes then the current unencrypted p2p message format. A quick analysis by Pieter Wuille of the current ''standard implementations'' has shown that SHA256 requires more CPU cycles per byte then ChaCha20 & Poly1304 [5]. +Optimized implementations of ChaCha20-Poly1305 are very fast in general, therefore it is very likely that encrypted messages require less CPU cycles per bytes then the current unencrypted p2p message format. A quick analysis by Pieter Wuille of the current ''standard implementations'' has shown that SHA256 requires more CPU cycles per byte then ChaCha20 & Poly1304. === The encack message type === @@ -164,10 +169,11 @@ This proposal is backward compatible. Non-supporting peers will ignore the Date: Fri, 15 Jul 2016 14:53:44 +0000 Subject: [PATCH 0413/2326] Update README for BIP 126 --- README.mediawiki | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.mediawiki b/README.mediawiki index ee7b0d8b91..b745f51db0 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -446,6 +446,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0126.mediawiki|126]] +| Best Practices for Heterogeneous Input Script Transactions +| Kristov Atlas +| Informational +| Draft +|- | [[bip-0130.mediawiki|130]] | sendheaders message | Suhas Daftuar From e00a157306878c732a93bb2f2ea456701886858d Mon Sep 17 00:00:00 2001 From: Sandro Machado Date: Mon, 18 Jul 2016 00:37:10 +0100 Subject: [PATCH 0414/2326] Add Swift Library --- bip-0021.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index a3c2d4ef0a..513b8bb844 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -124,4 +124,5 @@ Characters must be URI encoded properly. === Libraries === * Javascript - https://github.com/bitcoinjs/bip21 -* [[BitcoinPaymentURI|https://github.com/SandroMachado/BitcoinPaymentURI]] Java library to process and generate Bitcoin payment URI's. +* Java - https://github.com/SandroMachado/BitcoinPaymentURI +* Swift - https://github.com/SandroMachado/BitcoinPaymentURISwift From 83596de8ca76a3873ea993fc806ede761b07d874 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 18 Jul 2016 08:13:15 +0200 Subject: [PATCH 0415/2326] bip141: Change 'block cost' to 'block weight' The term 'block cost' led to confusion about the unit that it is expressed in, in that it expressed monetary cost. Change it to a more general term 'block weight'. This was discussed in the [2016-07-14 Bitcoin Core developer meeting](http://www.erisian.com.au/meetbot/bitcoin-core-dev/2016/bitcoin-core-dev.2016-07-14-19.00.html). --- bip-0141.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 8fdc795f22..497cf7e140 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -108,13 +108,13 @@ If the version byte is 1 to 16, no further interpretation of the witness program Blocks are currently limited to 1,000,000 bytes (1MB) total size. We change this restriction as follows: -''Block cost'' is defined as ''Base size'' * 3 + ''Total size''. (rationaleRationale of using a single composite constraint, instead of two separate limits such as 1MB base data and 3MB witness data: Using two separate limits would make mining and fee estimation nearly impossible. Miners would need to solve a complex non-linear optimization problem to find the set of transactions that maximize fees given both constraints, and wallets would not be able to know what to pay as it depends on which of the two conditions is most constrained by the time miners try to produce blocks with their transactions in. Another problem with such an approach is freeloading. Once a set of transactions hit the base data 1MB constraint, up to 3MB extra data could be added to the witness by just minimally increasing the fee. The marginal cost for extra witness space effectively becomes zero in that case.) +''Block weight'' is defined as ''Base size'' * 3 + ''Total size''. (rationaleRationale of using a single composite constraint, instead of two separate limits such as 1MB base data and 3MB witness data: Using two separate limits would make mining and fee estimation nearly impossible. Miners would need to solve a complex non-linear optimization problem to find the set of transactions that maximize fees given both constraints, and wallets would not be able to know what to pay as it depends on which of the two conditions is most constrained by the time miners try to produce blocks with their transactions in. Another problem with such an approach is freeloading. Once a set of transactions hit the base data 1MB constraint, up to 3MB extra data could be added to the witness by just minimally increasing the fee. The marginal cost for extra witness space effectively becomes zero in that case.) ''Base size'' is the block size in bytes with the original transaction serialization without any witness-related data, as seen by a non-upgraded node. ''Total size'' is the block size in bytes with transactions serialized as described in [[bip-0144.mediawiki|BIP144]], including base data and witness data. -The new rule is ''block cost'' ≤ 4,000,000. +The new rule is ''block weight'' ≤ 4,000,000. ==== Sigops ==== From 55c3d8068adbddd1cb9f97e4bc5e78500ce363bd Mon Sep 17 00:00:00 2001 From: jl2012 Date: Tue, 19 Jul 2016 00:11:30 +0800 Subject: [PATCH 0416/2326] BIP141 terms fix --- bip-0141.mediawiki | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 8fdc795f22..1934e594c0 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -123,14 +123,13 @@ Sigops per block is currently limited to 20,000. We change this restriction as f Sigops in the current pubkey script, signature script, and P2SH check script are counted at 4 times their previous value. The sigop limit is likewise quadrupled to ≤ 80,000. -In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script. -That is, CHECKSIG in a witness program is counted as only 1 sigop, and CHECKMULTISIG in a witness program is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program. +Each P2WPKH input is counted as 1 sigop. In addition, opcodes within a P2WSH witnessScript are counted identically as previously within the P2SH redeemScript. That is, CHECKSIG is counted as only 1 sigop, and CHECKMULTISIG is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program. == Examples == -=== P2WPKH witness program === +=== P2WPKH === -The following example is a version 0 pay-to-witness-public-key-hash (P2WPKH) witness program: +The following example is a version 0 pay-to-witness-public-key-hash (P2WPKH): witness: scriptSig: (empty) @@ -147,7 +146,7 @@ Comparing with a traditional P2PKH output, the P2WPKH equivalent occupies 3 less === P2WPKH nested in BIP16 P2SH === -The following example is the same P2WPKH witness program, but nested in a BIP16 P2SH output. +The following example is the same P2WPKH, but nested in a BIP16 P2SH output. witness: scriptSig: <0 <20-byte-key-hash>> @@ -159,13 +158,13 @@ The only item in scriptSig is hashed with HASH160, compared against the 20-byte- 0 <20-byte-key-hash> -The P2WPKH witness program is then executed as described in the previous example. +The public key and signature are then verified as described in the previous example. Comparing with the previous example, the scriptPubKey is 1 byte bigger and the scriptSig is 23 bytes bigger. Although a nested witness program is less efficient, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0. -=== P2WSH witness program === +=== P2WSH === -The following example is an 1-of-2 multi-signature version 0 pay-to-witness-script-hash (P2WSH) witness program. +The following example is an 1-of-2 multi-signature version 0 pay-to-witness-script-hash (P2WSH). witness: 0 <1 2 CHECKMULTISIG> scriptSig: (empty) @@ -180,13 +179,13 @@ The script is executed with the remaining data from witness: 0 1 2 CHECKMULTISIG -A P2WSH witness program allows arbitrarily large script as the 520-byte push limit is bypassed. +P2WSH allows maximum script size of 10,000 bytes, as the 520-byte push limit is bypassed. The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of BIP16 P2SH. The increased size improves security against possible collision attacks, as 280 work is not infeasible anymore (By the end of 2015, 284 hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent BIP16 P2SH output but is moved to witness. === P2WSH nested in BIP16 P2SH === -The following example is the same 1-of-2 multi-signature P2WSH witness program, but nested in a BIP16 P2SH output. +The following example is the same 1-of-2 multi-signature P2WSH script, but nested in a BIP16 P2SH output. witness: 0 <1 2 CHECKMULTISIG> scriptSig: <0 <32-byte-hash>> @@ -198,7 +197,7 @@ The only item in scriptSig is hashed with HASH160, compared against the 20-byte- 0 <32-byte-hash> -The P2WSH witness program is then executed as described in the previous example. +The P2WSH witnessScript is then executed as described in the previous example. Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig. @@ -249,8 +248,6 @@ Since a version byte is pushed before a witness program, and programs with unkno 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. -The 32-byte limitation for witness program could be easily extended through a soft fork in case a stronger hash function is needed in the future. The version byte is also expandable through a softfork. - === Per-input lock-time and relative-lock-time === Currently there is only one nLockTime field in a transaction and all inputs must share the same value. [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP68] enables per-input relative-lock-time using the nSequence field, however, with a limited lock-time period and resolution. From 34be169fe360c1f6109022bbf350440dc0fc1612 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 18 Jul 2016 20:43:23 +0200 Subject: [PATCH 0417/2326] BIP 39: remove "public beta" from blockchain.info link This is now in the default wallet. --- bip-0039.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index ad78ed62ef..0d05d8196b 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -145,4 +145,4 @@ Haskell: JavaScript: * https://github.com/bitpay/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 public beta]]) +* 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]]) From c98859fe20617df141da0dd08d399921c7097be9 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 23:37:42 +0000 Subject: [PATCH 0418/2326] Promote Draft->Final BIPs: 68, 112, and 113 Softforks are deployed by miners and enforced on the network --- README.mediawiki | 12 ++++++------ bip-0068.mediawiki | 2 +- bip-0112.mediawiki | 2 +- bip-0113.mediawiki | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index b745f51db0..239294f0a3 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -271,12 +271,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries | Standard | Draft -|- +|- style="background-color: #cfffcf" | [[bip-0068.mediawiki|68]] | Relative lock-time using consensus-enforced sequence numbers | Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona | Standard -| Draft +| Final |- | [[bip-0069.mediawiki|69]] | Lexicographical Indexing of Transaction Inputs and Outputs @@ -391,18 +391,18 @@ Those proposing changes should consider that ultimately consent may rest with th | Matt Corallo, Peter Todd | Standard | Draft -|- +|- style="background-color: #cfffcf" | [[bip-0112.mediawiki|112]] | CHECKSEQUENCEVERIFY | BtcDrak, Mark Friedenbach, Eric Lombrozo | Standard -| Draft -|- +| Final +|- style="background-color: #cfffcf" | [[bip-0113.mediawiki|113]] | Median time-past as endpoint for lock-time calculations | Thomas Kerin, Mark Friedenbach | Standard -| Draft +| Final |- | [[bip-0114.mediawiki|114]] | Merkelized Abstract Syntax Tree diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index 0303924229..923441ecc1 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -5,7 +5,7 @@ BtcDrak Nicolas Dorier kinoshitajona - Status: Draft + Status: Final Type: Standards Track Created: 2015-05-28
diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index e19e0e929b..0397332a37 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -4,7 +4,7 @@ Author: BtcDrak Mark Friedenbach Eric Lombrozo - Status: Draft + Status: Final Type: Standards Track Created: 2015-08-10
diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki index 8290c1373b..1c402aa0cf 100644 --- a/bip-0113.mediawiki +++ b/bip-0113.mediawiki @@ -3,7 +3,7 @@ Title: Median time-past as endpoint for lock-time calculations Author: Thomas Kerin Mark Friedenbach - Status: Draft + Status: Final Type: Standards Track Created: 2015-08-10
From 6fb5aaf1366099c7107de58b55159986cdc2549e Mon Sep 17 00:00:00 2001 From: Elias Rodrigues Date: Fri, 22 Jul 2016 14:52:15 -0300 Subject: [PATCH 0419/2326] Minor link fix --- bip-0021.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index a3c2d4ef0a..daf4cf813c 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -124,4 +124,4 @@ Characters must be URI encoded properly. === Libraries === * Javascript - https://github.com/bitcoinjs/bip21 -* [[BitcoinPaymentURI|https://github.com/SandroMachado/BitcoinPaymentURI]] Java library to process and generate Bitcoin payment URI's. +* https://github.com/SandroMachado/BitcoinPaymentURI Java library to process and generate Bitcoin payment URI's. From d8928eb85a641b3ad5efa956a512adb88a02d10b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 23 Jul 2016 20:35:56 +0000 Subject: [PATCH 0420/2326] BIP 145: Update s/cost/weight/ --- bip-0145.mediawiki | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index b04c9e6edf..cac838df11 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -22,7 +22,7 @@ The template Object is revised to include a new key: |- ! Key !! Required !! Type !! Description |- -| costlimit || No || Number || total cost allowed in blocks +| weightlimit || No || Number || total weight allowed in blocks |} The '!' rule prefix MUST be enabled on the "segwit" rule for templates including transactions with witness data. @@ -40,7 +40,7 @@ The Objects listed in the response's "transactions" key is revised to include th |- | txid || String || transaction id encoded in hexadecimal; required for transactions with witness data |- -| cost || Number || numeric cost of the transaction, as counted for purposes of the block's costlimit; if key is not present, cost is unknown and clients MUST NOT assume it is zero, although they MAY choose to calculate it themselves +| weight || Number || numeric weight of the transaction, as counted for purposes of the block's weightlimit; if key is not present, weight is unknown and clients MUST NOT assume it is zero, although they MAY choose to calculate it themselves |- | hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal |} @@ -66,12 +66,12 @@ It additionally also adds a new way of counting resource limits, and so GBT must ==Rationale== -Why doesn't "costlimit" simply redefine the existing "sizelimit"? +Why doesn't "weightlimit" simply redefine the existing "sizelimit"? * "sizelimit" is already enforced by clients by counting the sum of bytes in transactions' "data" keys. -* Servers may wish to limit the overall size of a block, independently from the "cost" of the block. +* Servers may wish to limit the overall size of a block, independently from the "weight" of the block. -Why is "sigoplimit" redefined instead of a new "sigopcostlimit" being added? -* The old limit was already arbitrarily defined, and could not be counted by clients on their own anyway. The concept of "sigop cost" is merely a change in the arbitrary formula used. +Why is "sigoplimit" redefined instead of a new "sigopweightlimit" being added? +* The old limit was already arbitrarily defined, and could not be counted by clients on their own anyway. The concept of "sigop weight" is merely a change in the arbitrary formula used. Why is "sigoplimit" divided by 4? * To resemble the previous values. (FIXME: is this a good reason? maybe we shouldn't divide it?) From d49512e612039193b2085353133073992e47d2a0 Mon Sep 17 00:00:00 2001 From: Janus Troelsen Date: Mon, 25 Jul 2016 10:05:55 +0200 Subject: [PATCH 0421/2326] Link to permanent PR of reference implementation analogue to https://github.com/bitcoin/bips/commit/ecfb7ebbca3488cd4c1e11210cbc5914a9228c67 --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 4b4a0aa53f..ccf18b6232 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -287,7 +287,7 @@ Special thanks to Gregory Maxwell for originating many of the ideas in this BIP == Reference Implementation == -https://github.com/bitcoin/bitcoin/pull/7910 +https://github.com/bitcoin/bitcoin/pull/8149 == References == From f388fef2f621c648f0e06aa5bdf06db3efd27b04 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 26 Jul 2016 23:26:46 -0700 Subject: [PATCH 0422/2326] BIP151: Clarifications on AAD and sequence numbers. --- bip-0151.mediawiki | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index cc79712150..f565a4e22e 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -123,12 +123,14 @@ After a successful encinit/encack interaction from bot Encrypted messages do not have the 4byte network magic. +The ciphertext payload length must be included in the AEAD MAC as AAD. + The maximum message length needs to be chosen carefully. The 4 byte length field can lead to a required message buffer of 4 GiB. Processing the message before the authentication succeeds must not be done. The 4byte sha256 checksum is no longer required because the AEAD. -Both peers need to track the message number (int64) of sent messages to the remote peer for building a symmetric cipher IV. Padding might be required (96bit IVs). +Both peers need to track the message sequence number (uint32) of sent messages to the remote peer for building a 64 bit symmetric cipher IV. Sequence numbers are allowed to overflow to zero after 4294967295 (2^32-1). The encrypted payload will result decrypted in one or many unencrypted messages: @@ -156,7 +158,7 @@ The Re-Keying must be done after every 1GB of data sent or received (recommended === Risks === -The encryption does not include an identity authentication scheme. This BIP does not cover a proposal to avoid MITM attacks during the encryption initialization. +The encryption does not include an identity authentication scheme. This BIP does not cover a proposal to avoid MITM attacks during the encryption initialization. Identity authentication will be covered in another BIP and will presume communication encryption after this BIP. From 0607a34fcfd139f02a9232449f88cdd3501d9a18 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 27 Jul 2016 00:26:34 -0700 Subject: [PATCH 0423/2326] bip151: remove aad change. --- bip-0151.mediawiki | 2 -- 1 file changed, 2 deletions(-) diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index f565a4e22e..a4c8b8eca6 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -123,8 +123,6 @@ After a successful encinit/encack interaction from bot Encrypted messages do not have the 4byte network magic. -The ciphertext payload length must be included in the AEAD MAC as AAD. - The maximum message length needs to be chosen carefully. The 4 byte length field can lead to a required message buffer of 4 GiB. Processing the message before the authentication succeeds must not be done. From 1402ca99cba8c7b370248e5b7e09603d80c5c491 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Wed, 27 Jul 2016 17:11:09 +0800 Subject: [PATCH 0424/2326] BIP112: fix example --- bip-0112.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index 0397332a37..40378ee76f 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -59,10 +59,10 @@ established in the following way. Alice, Bob and Escrow create a 2-of-3 address with the following redeemscript. IF - 2 3 CHECKMULTISIGVERIFY + 2 3 CHECKMULTISIG ELSE "30d" CHECKSEQUENCEVERIFY DROP - CHECKSIGVERIFY + CHECKSIG ENDIF At any time funds can be spent using signatures from any two of Alice, From f7e08aa1a7979cc97d4d45f9ca5d98fd6467291e Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 28 Jul 2016 09:26:36 -0700 Subject: [PATCH 0425/2326] - Add UNKNOWN_TYPE to ProtocolMessageType enum in paymentrequest.proto and BIP75 text (based on suggestions from http://androiddevblog.com/protocol-buffers-pitfall-adding-enum-values/) - Update BIP75 Motivation and use cases to provide more color around reasoning and use of BIP75 NOTE: The BIP75 language no longer contains a description of the KYC compliance use case, as it is a single, very specific use-case that does not have any bearing on the technical specifications herein. BIP75 extends the original BIP70 Payment Protocol to become a two-way, encrypted messaging process, which can be used for a variety of reasons one of which is regulatory compliance. --- bip-0075.mediawiki | 24 ++++++++++++------------ bip-0075/paymentrequest.proto | 9 +++++---- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 9ce90f6d82..45ae282e73 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -30,7 +30,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Motivation== -The motivation for defining this extension to the [[bip-0070.mediawiki|BIP70]] Payment Protocol is to allow 2 parties to exchange payment information in a permissioned and encrypted way such that wallet address communication can become a more automated process. Additionally, this extension allows for the requester of a PaymentRequest to supply a certificate and signature in order to facilitate identification for address release. This also allows for automated creation of off blockchain transaction logs that are human readable, containing who you transacted with, in addition to the information that it contains today. +The motivation for defining this extension to the [[bip-0070.mediawiki|BIP70]] Payment Protocol is to allow two parties to exchange payment information in a permissioned and encrypted way, such that wallet address communication can become a more automated process. This extension also expands the types of PKI (public-key infrastructure) data that is supported, and allows it to be shared by both parties (with [[bip-0070.mediawiki|BIP70]], only the receiver could provide PKI information). This allows for automated creation of off-blockchain transaction logs that are human readable, now including information about the sender and not just the recipient. The motivation for this extension to [[bip-0070.mediawiki|BIP70]] is threefold: @@ -38,12 +38,11 @@ The motivation for this extension to [[bip-0070.mediawiki|BIP70]] is threefold: # Enhance the Payment Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests. -# Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: +# Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to: -#* Make Bitcoin logs more human readable -#* Give the user the ability to decide who to release payment details to -#* Allow an entity such as a political campaign to ensure donors match regulatory and legal requirements -#* Allow for an open standards based way for regulated financial entities to meet regulatory requirements +#* Make Bitcoin logs (wallet transaction history) more human readable +#* Give the user the ability to decide whether or not they share their Bitcoin address and other payment details when requested +#* Allow for an open standards based way for businesses to keep verifiable records of their financial transactions, to better meet the needs of accounting practices or other reporting and statutory requirements #* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience In short we wanted to make Bitcoin more human, while at the same time improving transaction privacy. @@ -58,9 +57,9 @@ With this BIP, Bitcoin wallets could maintain an "address book" that only needs 2. Individual Permissioned Address Release -A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, [[bip-0070.mediawiki|BIP70]] specifies that the Merchant Server respond to a "pay now" style request with a PaymentRequest, releasing address and X.509 certificate identity information of the potential receiving party. +A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, [[bip-0070.mediawiki|BIP70]] shares the receiver’s payment address and identity information with anyone who requests it. -With this BIP, Bitcoin wallets could prompt a wallet user to release payment information while displaying identity information about the potential sending party via an included certificate. This gives the receiving party more control over who receives their payment and identity information, and could be helpful for businesses that need to follow KYC policies or wallets that want to focus on privacy. +With this BIP, Bitcoin wallets could use the sender’s identifying information to make a determination of whether or not to share their own information. This gives the receiving party more control over who receives their payment and identity information. Additionally, this could be used to automatically provide new payment addresses to whitelisted senders, or to protect users’ privacy from unsolicited payment requests. 3. Using Store & Forward Servers @@ -110,10 +109,11 @@ message InvoiceRequest { This enum is used in the newly defined [[#ProtocolMessage|ProtocolMessage]] and [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages to define the serialized message type. The '''ProtocolMessageType''' enum is defined in an extensible way to allow for new message type additions to the Payment Protocol.
 enum ProtocolMessageType {
-    INVOICE_REQUEST = 0;
-    PAYMENT_REQUEST = 1;
-    PAYMENT = 2;
-    PAYMENT_ACK =  3;
+    UNKNOWN_TYPE = 0;
+    INVOICE_REQUEST = 1;
+    PAYMENT_REQUEST = 2;
+    PAYMENT = 3;
+    PAYMENT_ACK = 4;
 }
 
diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 3c1ef40608..caab02a9e3 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -57,10 +57,11 @@ message InvoiceRequest { } enum ProtocolMessageType { - INVOICE_REQUEST = 0; - PAYMENT_REQUEST = 1; - PAYMENT = 2; - PAYMENT_ACK = 3; + UNKNOWN_TYPE = 0; + INVOICE_REQUEST = 1; + PAYMENT_REQUEST = 2; + PAYMENT = 3; + PAYMENT_ACK = 4; } message ProtocolMessage { From 9da1f65e390ca18c1d63abea8c4a112a6c95049d Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 29 Jul 2016 00:59:06 +0800 Subject: [PATCH 0426/2326] BIP114: MAST proposal v2 --- bip-0114.mediawiki | 344 ++++++++++++++++++++++++++++----------- bip-0114/mastexample.png | Bin 0 -> 26798 bytes 2 files changed, 245 insertions(+), 99 deletions(-) create mode 100644 bip-0114/mastexample.png diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki index aee8646be9..cb9aea7c35 100644 --- a/bip-0114.mediawiki +++ b/bip-0114.mediawiki @@ -24,71 +24,172 @@ The [[bip-0016.mediawiki|BIP16]] (Pay-to-script-hash, "P2SH") fixes the first 3 The [[bip-0141.mediawiki|BIP141]] defines 2 new types of scripts that support segregated witness. The pay-to-witness-script-hash (P2WSH) is similar to P2SH is many ways. By supplying the script in witness, P2WSH restores the original 10,000 byte script limit. However, it still requires publishing of unexecuted branches. ===Merkelized Abstract Syntax Tree=== -The idea of Merkelized Abstract Syntax Tree (MAST) is to use a Merkle tree to encode mutually exclusive branches in a script. When spending, the redeemer may provide only the branch they are executing, and hashes that connect the branch to the fixed size Merkel root. This reduces the size of redemption stack from O(n) to O(log n) (n as the number of mutually exclusive branches). This enables complicated redemption conditions that is currently not possible due to the script size and op code limit, improves privacy by hiding unexecuted branches, and allows inclusion of non-consensus enforced data with very low or no additional cost. +The idea of Merkelized Abstract Syntax Tree (MAST) is to use a Merkle tree to encode branches in a script. When spending, users may provide only the branches they are executing, and hashes that connect the branches to the fixed size Merkel root. This reduces the size of redemption stack from O(n) to O(log n) (n as the number of branches). This enables complicated redemption conditions that is currently not possible due to the script size and opcode limit, improves privacy by hiding unexecuted branches, and allows inclusion of non-consensus enforced data with very low or no additional cost. ==Specification== -In [[bip-0141.mediawiki|BIP141]], witness programs with a version byte of 1 or larger are considered to be anyone-can-spend scripts. The following new validation rules are applied if the witness program version byte is 1 and the program size is 32 bytes. The witness program is the MAST Root. +In [[bip-0141.mediawiki|BIP141]], witness programs with a version byte of 1 or larger are considered to be anyone-can-spend scripts. The following new validation rules are applied if the witness program version byte is 1 and the program size is 32 bytes.If the version byte is 1, but the witness program is not 32 bytes, no further interpretation of the witness program or witness stack happens. This is reserved for future extensions. The witness program is the MAST Root. -To redeem an output of this kind, the witness must consist of an input stack to feed to the script, followed by a Postion value, a serialized Merkle path (Path), and a serialized script (MAST Script). +To redeem an output of this kind, the witness must consist of the following items: -The Position, Path, and MAST Script are popped off the initial witness stack. -The double-SHA256 of the MAST Script (≤ TBD bytes) must be correctly connected to the MAST Root with the ComputeMerkleRootFromBranch function, with the specified Path and Position. + Script_stack_1 + Script_stack_2 + . + . + Script_stack_X (X ≥ 0) + Subscript_1 + Subscript_2 + . + . + Subscript_Y (1 ≤ Y ≤ 255) + Position + Path + Metadata (Y|MAST Version) -Path is the serialized Merkle path for the MAST Script. Size of Path must be a multiple of 32 bytes, and not more than 1024 bytes (which allows 32 levels). Each 32 byte word is a double-SHA256 merkle node in the merkle branch connecting to the MAST Root. If the size of Path is zero, the double-SHA256 of the MAST Script must match the MAST Root. -Position indicates the location of the MAST Script in the Merkle tree, with zero indicating the leftmost position. It is an unsigned little-endian integer with not more than 4 bytes. It must be encoded in the most parsimonious way possible, with no leading zero and not larger than the maximum number of items allowed by the depth of the tree (as implied by the size of Path). +Metadata is the last witness item. It is a vector of 1 to 5 bytes. The first byte is an unsigned integer between 1 to 255 denoting the number of Subscript (defined hereinafter). The following 0 to 4 byte(s) is an unsigned little-endian integer denoting the MAST version. MAST Version must be minimally encoded (the most significant byte must not be 0). -The MAST Script is then deserialized, and executed after normal script evaluation with the remaining witness stack (≤ TBD bytes for each stack item). The script must not fail, and result in exactly a single TRUE on the stack. +Path is the second last witness item. It is a serialized Merkle path of the Script Hash (defined hereinafter). Size of Path must be a multiple of 32 bytes, and not more than 1024 bytes. Each 32 byte word is a double-SHA256 merkle node in the merkle branch connecting to the Script Root (defined hereinafter). Depth of the tree (0 to 32) is the size of Path divided by 32. -Sigops in MAST program are counted to the block sigop limit in the same way as the version 0 witness program (see BIP141). +Position is the third last witness item. It indicates the location of the Script Hash in the Merkle tree, with zero indicating the leftmost position. It is an unsigned little-endian integer with not more than 4 bytes. It must be minimally encoded: the value must not be larger than the maximum number of items allowed by the Depth of the tree, and the most significant byte must not be 0. For example, if Depth is 4, the valid range of Position is 0 to 15 (24-1). -If the version byte is 1, but the witness program is not 32 bytes, the script must fail. +Depends on the first byte of Metadata, there should be 1 to 255 Subscript witness item(s) before Position. + +Script Hash is defined as: + + Script Hash = H(Y|H(Subscript_1)|H(Subscript_2)|...|H(Subscript_Y)) + H() = SHA256(SHA256()) + +where Y is a 1-byte value denoting number of Subscript, followed by the hash of each Subscript + +Script Root is the Merkle root calculated by the ComputeMerkleRootFromBranch function, using Script Hash, Path and Position. + +MAST Root is H(MAST Version|Script Root). The pre-image has a fixed size of 36 bytes: 4 bytes for MAST Version (unsigned little-endian integer) and 32 bytes for Script Root. + +The script evaluation fails if MAST Root does not match the witness program. + +If the MAST Root matches the witness program and MAST Version is greater than 0, the script returns a success without further evaluation. SigOpsCost is counted as 0. This is reserved for future script upgrades. + +If the MAST Version is 0, the Subscript(s) are serialized to form the final MAST Script, beginning with
Subscript_1. The unused witness item(s) before the Subscript_1 are used as Input Stack to feed to the MASTScript. (Similar to P2WSH in BIP141) + +The script fails with one of the following conditions: +* MAST Script is malformed (i.e. not enough data provided for the last push operation). Individual Subscript might be malformed, as long as they are serialized into a valid MAST Script +* Size of MAST Script is larger than 10,000 bytes +* Size of any one of the Input Stack item is larger than 520 bytes +* Number of non-push operations (nOpCount) is more than 201. nOpCount is the sum of the number of non-push operations in MAST Script (counted in the same way as P2WSH witnessScript), number of Subscript (Y), and Depth of the Merkle tree. + +The MAST Script is then evaluated with the Input Stack (with some new or redefined opcodes described in BIPXXX). The evaluation must not fail, and result in an exactly empty stack. + +Counting of SigOpsCost is based on the MAST Script, described in BIPYYY. + +== Rationale == +=== MAST Structure === +This proposal is a restricted case of more general MAST. In a general MAST design, users may freely assign one or more script branches for execution. In this proposal, only one branch is allowed for execution, and users are required to transform a complicated condition into several mutually exclusive branches. For example, if the desired redeem condition is: + + (A or B) and (C or D or E) and (F or G) + +In a general MAST design, the 7 branches (A to G) will form a 3-level Merkle tree, plus an "overall condition" describing the relationship of different branches. In redemption, the "overall condition", executed branches (e.g. B, D, F), and Merkle path data will be provided for validation. + +In the current proposal, the user has to transform the redeem condition into 12 mutually exclusive branches and form a 4-level Merkle tree, and present only one branch in redemption: + + + A and C and F + B and C and F + A and D and F + . + . + B and E and G + +One way to implement the general MAST design is using a combination of OP_EVAL, OP_CAT, and OP_HASH256. However, that will suffer from the problems of OP_EVAL, including risks of indefinite program loop and inability to do static program analysis. A complicated implementation is required to fix these problems and is difficult to review. + +The advantages of the current proposal are: +* Subscript are located at a fixed position in the witness stack. This allows static program analysis, such as static SigOpsCost counting and early termination of scripts with disabled opcodes. +* If different parties in a contract do not want to expose their scripts to each other, they may provide only H(Subscript) and keep the Subscript private until redemption. +* If they are willing to share the actual scripts, they may combine them into one Subscript for each branch, saving some nOpCount and a few bytes of witness space. + +The are some disadvantages, but only when the redemption condition is very complicated: +* It may require more branches than a general MAST design (as shown in the previous example) and take more witness space in redemption +* Creation and storage of the MAST structure may take more time and space. However, such additional costs affect only the related parties in the contract but not any other Bitcoin users. + +=== MAST Version === +This proposal allows users to indicate the version of scripting language in the witness, which is cheaper than doing that in scriptPubKey or scriptSig. Undefined versions remain anyone-can-spend and are reserved for future expansions. A new version could be used for relaxing constraints (e.g. the 10,000 bytes size limit of MAST Script), adding or redefining opcodes, or even introducing a completely novel scripting system. + +=== nOpCount limit === +In version 0 MAST, the extra hashing operations in calculating the MAST Root are counted towards the 201 nOpCount limit to prevent abusive use. This limitation is not applied to undefined MAST Version for flexibility, but it is constrained by the 255 Subscript and 32 Depth limits. + +=== Script evaluation === +This proposal requires script evaluation resulting in an empty stack, instead of a single TRUE value as in P2WSH. This allows each party in a contract to provide its own Subscript, and demonstrate the required Input Stack to clean up its own Subscript. In this case, order of the Subscript is not important since the overall objective is to clean up the stack after evaluation. == Examples == === Calculation of MAST Root === -To calculate the MAST Root for 4 branches, the double-SHA256 of each branch is first calculated: - <1> EQUAL (0x5187), HASH256=3b647cb856a965fa6feffb4621eb2a4f4c2453693b2f64e021383ccbd80a1abb - <2> EQUAL (0x5287), HASH256=37772654bdce9b3d59e1169ea16ddbaa8a2ae8ee265db64863d0b76f02c882fa - <3> EQUAL (0x5387), HASH256=2e972642436151cd96e4b0868077b6362ffb5eb30b420a6f1c5e1c6fff02bc33 - <4> EQUAL (0x5487), HASH256=4c954fc1e635ce8417341465f85b59d700806f6e57bb96b2a25bec5ca3f9f154 -Serialize the hashes of the first pair and calculate the hash. Same for the other pair: - HASH256(HASH256(5187)|HASH256(5287)) = 64fbdfc0a82ecc3b33434bfea63440e9a5275fa5e533200d2eaf18281e8b28b6 - HASH256(HASH256(5387)|HASH256(5487)) = aeadea837d5e640a1444208f7aca3be63bc8ab3c6b28a19878a00cc9c631ac31 + + + + Subscript: + SA = 1 EQUALVERIFY (0x5188) + SB = 2 EQUALVERIFY (0x5288) + SC = 3 EQUALVERIFY (0x5388) + SD = 4 EQUALVERIFY (0x5488) + SE = 5 EQUALVERIFY (0x5588) + SF = 6 EQUALVERIFY (0x5688) + SG = 7 EQUALVERIFY (0x5788) + SH = 8 EQUALVERIFY (0x5888) + M = RETURN "Hello" (0x6a0548656c6c6f) + Hash: + HA = H(0x01|H(SA)) = H(0x015acb54166e0db370cd1b05a29120373568dacea2abc3748459ec3da2106e4b4e) = 0xd385d7268ad7e1ec51660f833d54787d2d8d79b6b1809d9c1d06c9e71f7be204 + HB = H(0x02|H(SB)|H(SC)) = 0x7cbfa08e44ea9f4f996873be95d9bffd97d4b91a5af32cc5f64efb8461727cdd + HF = H(0x03|H(SD)|H(SE)|H(SF)) = 0x4611414355945a7c2fcc62a53a0004821b87e68f93048ffba7a55a3cb1e9783b + HG = H(0x01|H(SG)) = 0xaa5fbdf58264650eadec33691ba1e7606d0a62f570eea348a465c55bc86ffc10 + HC = H(0x01|H(M)) = 0x70426d480d5b28d93c5be54803681f99abf4e8df4eab4dc87aaa543f0d138159 + HD = H(0x0x|H(SH)) = 0x8482f6c9c3fe90dd4d533b4efedb6a241b95ec9267d1bd5aaaee36d2ce2dd6da + HE = H(HA|HB) = 0x049b9f2f94f0a9bdea624e39cd7d6b27a365c6a0545bf0e9d88d86eff4894210 + HH = H(HC|HD) = 0xc709fdc632f370f3367da45378d1cf430c5fda6805e731ad5761c213cf2d276e + HI = H(HE|HF) = 0xead5e1a1e7e41b77b794f091df9be3f0e9f41d47304eb43dece90688f69843b7 + HJ = H(HG|HH) = 0xd00fc690c4700d0f983f9700740066531ea826b21a4cbc62f80317261723d477 + Script Root = H(HI|HJ) = 0x26d5235d20daf1440a15a248f5b5b4f201392128072c55afa64a26ccc6f56bd9 + MAST Root = H(MAST Version|Script Root) = H(0x0000000026d5235d20daf1440a15a248f5b5b4f201392128072c55afa64a26ccc6f56bd9) = 0xb4b706e0c02eab9aba58419eb7ea2a286fb1c01d7406105fc12742bf8a3f97c9 -Serialize the 2 hashes from the previous step and calculate the hash, which is the MAST Root: - MAST Root = 6746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e The scriptPubKey with native witness program is: - <1> <0x6746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e> - (0x51206746003b5c9d342b2c210d406802c351e7eb5943412dcfc4718be625a8a59c0e) -To redeem with the <4> EQUAL branch, the witness is - 04 (Stack for evaluation) - 03 (Position) - 2e972642436151cd96e4b0868077b6362ffb5eb30b420a6f1c5e1c6fff02bc3364fbdfc0a82ecc3b33434bfea63440e9a5275fa5e533200d2eaf18281e8b28b6 (Path) - 5487 (MAST Script) + 1 <0xb4b706e0c02eab9aba58419eb7ea2a286fb1c01d7406105fc12742bf8a3f97c9> + (0x5120b4b706e0c02eab9aba58419eb7ea2a286fb1c01d7406105fc12742bf8a3f97c9) + + +To redeem with the SD|SE|SF branch, the witness is + + Script_stack_1: 0x06 + Script_stack_2: 0x05 + Script_stack_3: 0x04 + Subscript_1: 0x5488 + Subscript_2: 0x5588 + Subscript_3: 0x5688 + Position: 0x01 (HF is the second hash in its level) + Path (HE|HJ): 0x049b9f2f94f0a9bdea624e39cd7d6b27a365c6a0545bf0e9d88d86eff4894210d00fc690c4700d0f983f9700740066531ea826b21a4cbc62f80317261723d477 + Metadata: 0x03 (3 Subscript) + + === Imbalance MAST === -When constructing a MAST, if the user believes that some of the branches are more likely to be executed, they may put them closer to the MAST Root. It will save some witness space when the preferred branches are actually executed. +When constructing a MAST, if the user believes that some of the branches are more likely to be executed, they may put them closer to the Script Root. It will save some witness space when the preferred branches are actually executed. === Escrow with Timeout === The following is the "Escrow with Timeout" example in [[bip-0112.mediawiki|BIP112]]: IF - 2 3 CHECKMULTISIGVERIFY + 2 3 CHECKMULTISIG ELSE "30d" CHECKSEQUENCEVERIFY DROP - CHECKSIGVERIFY + CHECKSIG ENDIF Using compressed public key, the size of this script is 150 bytes. -With MAST, this script could be broken down into 2 mutually exclusive branches: +With MAST, this script could be broken down into 2 mutually exclusive branches:In BIPXXX, it is proposed that CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY will pop the top stack item 2 3 CHECKMULTISIGVERIFY (105 bytes) - "30d" CHECKSEQUENCEVERIFY DROP CHECKSIGVERIFY (42 bytes) + "30d" CHECKSEQUENCEVERIFY CHECKSIGVERIFY (42 bytes) -With 2 branches, the Path will be 32 bytes (as the hash of the unexecuted branch), and the Position will be 1 byte as either 0 or 1. Since only one branch will be published, it is more difficult for a blockchain analyst to determine the details of the escrow. +Since only one branch will be published, it is more difficult for a blockchain analyst to determine the details of the escrow. === Hashed Time-Lock Contract === The following is the "Hashed TIme-Lock Contract" example in [[bip-0112.mediawiki|BIP112]]: @@ -107,16 +208,16 @@ The following is the "Hashed TIme-Lock Contract" example in [[bip-0112.mediawiki CHECKSIG To create a MAST Root, it is flattened to 3 mutually exclusive branches: - HASH160 EQUALVERIFY "24h" CHECKSEQUENCEVERIFY DROP CHECKSIG - HASH160 EQUALVERIFY CHECKSIG - "Timestamp" CHECKLOCKTIMEVERIFY DROP CHECKSIG + HASH160 EQUALVERIFY "24h" CHECKSEQUENCEVERIFY CHECKSIGVERIFY + HASH160 EQUALVERIFY CHECKSIGVERIFY + "Timestamp" CHECKLOCKTIMEVERIFY CHECKSIGVERIFY which significantly improves readability and reduces the witness size when it is redeemed. === Large multi-signature constructs === -The current CHECKMULTISIG supports up to 20 public keys. Although it is possible to extend it beyond 20 keys by using multiple CHECKSIGs and IF/ELSE conditions, the construction could be very complicated and soon use up the 10,000 bytes and 201 op codes limit. +The current CHECKMULTISIG supports up to 20 public keys. Although it is possible to extend it beyond 20 keys by using multiple CHECKSIGs and IF/ELSE conditions, the construction could be very complicated and soon use up the 10,000 bytes and 201 nOpCount limit. -With MAST, large and complex multi-signature constructs could be flattened to many simple CHECKMULTISIG conditions. For example, a 3-of-2000 multi-signature scheme could be expressed as 1,331,334,000 3-of-3 CHECKMULTISIGs, which forms a 31-level MAST. The scriptPubKey still maintains a fixed size of 34 bytes, and the redemption witness will be very compact, with less than 1,500 bytes. +With MAST, large and complex multi-signature constructs could be flattened to many simple CHECKMULTISIGVERIFY conditions. For example, a 3-of-2000 multi-signature scheme could be expressed as 1,331,334,000 3-of-3 CHECKMULTISIGVERIFY, which forms a 31-level MAST. The scriptPubKey still maintains a fixed size of 34 bytes, and the redemption witness will be very compact, with less than 1,500 bytes. === Commitment of non-consensus enforced data === Currently, committing non-consensus enforced data in the scriptPubKey requires the use of OP_RETURN which occupies additional block space. With MAST, users may commit such data as a branch. Depends on the number of executable branches, inclusion of such a commitment may incur no extra witness space, or 32 bytes at most. @@ -133,76 +234,121 @@ This BIP depends on [[bip-0141.mediawiki|BIP141]] and will be deployed by versio The idea of MAST originates from Russell O’Connor, Pieter Wuille, and [https://bitcointalk.org/index.php?topic=255145.msg2757327#msg2757327 Peter Todd]. == Reference Implementation == -https://github.com/jl2012/bitcoin/tree/segwit_mast +https://github.com/jl2012/bitcoin/tree/bip114v2 (WIP) //New rules apply if version byte is 1 and witness program size is 32 bytes -if (witversion == 1) { - if (program.size() == 32) { - - //Witness stack must have at least 3 items - if (witness.stack.size() < 3) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - - //Script is the last witness stack item - scriptPubKey = CScript(witness.stack.back().begin(), witness.stack.back().end()); - uint256 hashScriptPubKey; - CHash256().Write(&scriptPubKey[0], scriptPubKey.size()).Finalize(hashScriptPubKey.begin()); - - //Path is the second last witness stack item - std::vector pathdata = witness.stack.at(witness.stack.size() - 2); - - // Size of Path must be a multiple of 32 bytes (0 byte is allowed) - if (pathdata.size() & 0x1F) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - - // Depth of the tree is size of Path divided by 32 - unsigned int depth = pathdata.size() >> 5; - - // Maximum allowed depth is 32 - if (depth > 32) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - std::vector path; - path.resize(depth); - for (unsigned int i = 0; i < depth; i++) - memcpy(path[i].begin(), &pathdata[32 * i], 32); - - //Position is the third last witness stack item - std::vector positiondata = witness.stack.at(witness.stack.size() - 3); - - //Position may have 4 bytes at most - if (positiondata.size() > 4) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - - uint32_t position = 0; - - //Position is an unsigned little-endian integer with no leading zero byte - if (positiondata.size() > 0) { - if (positiondata.back() == 0x00) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - for (size_t i = 0; i != positiondata.size(); ++i) - position |= static_cast(positiondata[i]) << 8 * i; - } +if (witversion == 1 && program.size() == 32 && (flags & SCRIPT_VERIFY_MAST)) { + CHashWriter sRoot(SER_GETHASH, 0); + CHashWriter sScriptHash(SER_GETHASH, 0); + uint32_t nMASTVersion = 0; + size_t stacksize = witness.stack.size(); + if (stacksize < 4) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + std::vector metadata = witness.stack.back(); // The last witness stack item is metadata + if (metadata.size() < 1 || metadata.size() > 5) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + + // The first byte of metadata is the number of subscripts (1 to 255) + uint32_t nSubscript = static_cast(metadata[0]); + if (nSubscript == 0 || stacksize < nSubscript + 3) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + int nOpCount = nSubscript; // Each condition consumes a nOpCount + sScriptHash << metadata[0]; + + // The rest of metadata is MAST version in minimally-coded unsigned little endian int + if (metadata.back() == 0) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + if (metadata.size() > 1) { + for (size_t i = 1; i != metadata.size(); ++i) + nMASTVersion |= static_cast(metadata[i]) << 8 * (i - 1); + } - //Position must not be larger than the maximum number of items allowed by the depth of tree - if (depth < 32) { - if (position >= (1U << depth)) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); - } + // Unknown MAST version is non-standard + if (nMASTVersion > 0 && flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM) + return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM); + + sRoot << nMASTVersion; + + // The second last witness stack item is the pathdata + // Size of pathdata must be divisible by 32 (0 is allowed) + // Depth of the Merkle tree is implied by the size of pathdata, and must not be greater than 32 + std::vector pathdata = witness.stack.at(stacksize - 2); + if (pathdata.size() & 0x1F) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + unsigned int depth = pathdata.size() >> 5; + if (depth > 32) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + + // Each level of Merkle tree consumes a nOpCount + // Evaluation of version 0 MAST terminates early if there are too many nOpCount + // Not enforced in unknown MAST version for upgrade flexibility + nOpCount = nOpCount + depth; + if (nMASTVersion == 0 && nOpCount > MAX_OPS_PER_SCRIPT) + return set_error(serror, SCRIPT_ERR_OP_COUNT); + + // path is a vector of 32-byte hashes + std::vector path; + path.resize(depth); + for (unsigned int j = 0; j < depth; j++) + memcpy(path[j].begin(), &pathdata[32 * j], 32); + + // The third last witness stack item is the positiondata + // Position is in minimally-coded unsigned little endian int + std::vector positiondata = witness.stack.at(stacksize - 3); + if (positiondata.size() > 4) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + uint32_t position = 0; + if (positiondata.size() > 0) { + if (positiondata.back() == 0) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + for (size_t k = 0; k != positiondata.size(); ++k) + position |= static_cast(positiondata[k]) << 8 * k; + } - //Calculate the Merkle Root and compare with the witness program - uint256 root = ComputeMerkleRootFromBranch(hashScriptPubKey, path, position); - if (memcmp(root.begin(), &program[0], 32)) - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + // Position value must not exceed the number of leaves at the depth + if (depth < 32) { + if (position >= (1U << depth)) + return set_error(serror, SCRIPT_ERR_INVALID_MAST_STACK); + } - //Remaining stack items used for evaluation - stack = std::vector >(witness.stack.begin(), witness.stack.end() - 3); + // Sub-scripts are located before positiondata + for (size_t i = stacksize - nSubscript - 3; i <= stacksize - 4; i++) { + CScript subscript(witness.stack.at(i).begin(), witness.stack.at(i).end()); + + // Evaluation of version 0 MAST terminates early if script is oversize + // Not enforced in unknown MAST version for upgrade flexibility + if (nMASTVersion == 0 && (scriptPubKey.size() + subscript.size()) > MAX_SCRIPT_SIZE) + return set_error(serror, SCRIPT_ERR_SCRIPT_SIZE); + uint256 hashSubScript; + CHash256().Write(&subscript[0], subscript.size()).Finalize(hashSubScript.begin()); + sScriptHash << hashSubScript; + scriptPubKey = scriptPubKey + subscript; // Final scriptPubKey is a serialization of subscripts } + uint256 hashScript = sScriptHash.GetHash(); + + // Calculate MAST Root and compare against witness program + uint256 rootScript = ComputeMerkleRootFromBranch(hashScript, path, position); + sRoot << rootScript; + uint256 rootMAST = sRoot.GetHash(); + if (memcmp(rootMAST.begin(), &program[0], 32)) + return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); + + if (nMASTVersion == 0) { + stack = std::vector >(witness.stack.begin(), witness.stack.end() - 3 - nSubscript); + for (unsigned int i = 0; i < stack.size(); i++) { + if (stack.at(i).size() > MAX_SCRIPT_ELEMENT_SIZE) + return set_error(serror, SCRIPT_ERR_PUSH_SIZE); + } - else { - //Invalid if version byte is 1 but witness program size is not 32 bytes - return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH); + // Script evaluation must not fail, and return an empty stack + if (!EvalScript(stack, scriptPubKey, flags, checker, SIGVERSION_WITNESS_V1, nOpCount, serror)) + return false; + if (stack.size() != 0) + return set_error(serror, SCRIPT_ERR_EVAL_FALSE); } + + return set_success(serror); } diff --git a/bip-0114/mastexample.png b/bip-0114/mastexample.png new file mode 100644 index 0000000000000000000000000000000000000000..9bff7b9939d7b8b98f0b01a987e8e397c2f5a7ed GIT binary patch literal 26798 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 S=$MCteW)pGD^)32z5hSC17(*0 literal 0 HcmV?d00001 From 6559767e03dca8394fd28f1fb7b823d294e17d3b Mon Sep 17 00:00:00 2001 From: Matt David Date: Thu, 28 Jul 2016 15:13:32 -0700 Subject: [PATCH 0427/2326] - Replace UNKNOWN_TYPE with UNKNOWN_MESSAGE_TYPE --- bip-0075.mediawiki | 2 +- bip-0075/paymentrequest.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 45ae282e73..77616ba90c 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -109,7 +109,7 @@ message InvoiceRequest { This enum is used in the newly defined [[#ProtocolMessage|ProtocolMessage]] and [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] messages to define the serialized message type. The '''ProtocolMessageType''' enum is defined in an extensible way to allow for new message type additions to the Payment Protocol.
 enum ProtocolMessageType {
-    UNKNOWN_TYPE = 0;
+    UNKNOWN_MESSAGE_TYPE = 0;
     INVOICE_REQUEST = 1;
     PAYMENT_REQUEST = 2;
     PAYMENT = 3;
diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto
index caab02a9e3..9f170fe143 100644
--- a/bip-0075/paymentrequest.proto
+++ b/bip-0075/paymentrequest.proto
@@ -57,7 +57,7 @@ message InvoiceRequest {
 }
 
 enum ProtocolMessageType {
-    UNKNOWN_TYPE = 0;
+    UNKNOWN_MESSAGE_TYPE = 0;
     INVOICE_REQUEST = 1;
     PAYMENT_REQUEST = 2;
     PAYMENT = 3;

From f64f3c3d9c9b6d36a90b270d7b971cec071ec10a Mon Sep 17 00:00:00 2001
From: Justus Ranvier 
Date: Mon, 11 Jul 2016 14:01:08 -0500
Subject: [PATCH 0428/2326] BIP126: Clarify interaction with BIP69

---
 bip-0126.mediawiki | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki
index eed0c3ea25..43722d0d46 100644
--- a/bip-0126.mediawiki
+++ b/bip-0126.mediawiki
@@ -37,6 +37,10 @@ In order to achieve these goals, this specification proposes a set of best pract
 
 In order to achieve this, two forms of HIT are proposed: Standard form and alternate form.
 
+==Interaction with Other Procedures==
+
+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==
 
 ===Rules===
@@ -96,3 +100,7 @@ An HIT formed via the preceding procedure will adhere to the following condition
 ==Non-compliant heterogenous 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.
+
+==Reference==
+
+* [[bip-0069.mediawiki|BIP69 - Lexicographical Indexing of Transaction Inputs and Outputs]]

From 0c8256f764b895ffe2029e95a7e0166e6b544b32 Mon Sep 17 00:00:00 2001
From: Jonas Schnelli 
Date: Sun, 7 Aug 2016 22:21:06 +0200
Subject: [PATCH 0429/2326] [bip151] fix typo in HKDF key

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

diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki
index a4c8b8eca6..11f9614dc6 100644
--- a/bip-0151.mediawiki
+++ b/bip-0151.mediawiki
@@ -39,7 +39,7 @@ Encryption initialization must happen before sending any other messages to the r
 The symmetric encryption cipher keys will be calculated with ECDH/HKDF by sharing the pubkeys of a ephemeral key. Once the ECDH secret is calculated on each side, the symmetric encryption cipher keys must be derived with HKDF [2] after the following specification:
 
 1. HKDF extraction
-PRK = HKDF_EXTRACT(hash=SHA256, salt="bitcoinechd", ikm=ecdh_secret|cipher-type).
+PRK = HKDF_EXTRACT(hash=SHA256, salt="bitcoinecdh", ikm=ecdh_secret|cipher-type).
 
 2. Derive Key1
 K_1 = HKDF_EXPAND(prk=PRK, hash=SHA256, info="BitcoinK1", L=32)

From 55163e45460d8aab14950724fe7e1b4260dbbada Mon Sep 17 00:00:00 2001
From: Jonas Schnelli 
Date: Sun, 7 Aug 2016 22:24:37 +0200
Subject: [PATCH 0430/2326] [bip151] slightly increase robustness of the
 re-keying

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

diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki
index 11f9614dc6..cf221f2479 100644
--- a/bip-0151.mediawiki
+++ b/bip-0151.mediawiki
@@ -148,7 +148,7 @@ If more data is present, another message must be deserialized. There is no expli
 
 A responding peer can inform the requesting peer over a re-keying with a encack message containing 33byte of zeros to indicate that all encrypted message following after this encack message will be encrypted with ''the next symmetric cipher key''.
 
-The new symmetric cipher key will be calculated by SHA256(SHA256(old_symetric_cipher_key)).
+The new symmetric cipher key will be calculated by SHA256(SHA256(session_id || old_symmetric_cipher_key)).
 
 Re-Keying interval is a peer policy with a minimum timespan of 10 seconds.
 

From 93ef85891196b31c12d5772d8741d1f672aade46 Mon Sep 17 00:00:00 2001
From: Sreekanth G S 
Date: Wed, 10 Aug 2016 22:08:22 +0530
Subject: [PATCH 0431/2326] Adding ruby implementation to Other implementation

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

diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index 0d05d8196b..6fd8bd0250 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -146,3 +146,6 @@ Haskell:
 JavaScript:
 * https://github.com/bitpay/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]])
+
+Ruby:
+* https://github.com/sreekanthgs/bip_mnemonic

From b004187f14ef3fadd0851e1f3296e8ebac6109bd Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Tue, 16 Aug 2016 17:26:08 +0800
Subject: [PATCH 0432/2326] Add new BIP: Low S values signatures

---
 bip-lows.mediawiki | 60 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 bip-lows.mediawiki

diff --git a/bip-lows.mediawiki b/bip-lows.mediawiki
new file mode 100644
index 0000000000..1b5a950ef1
--- /dev/null
+++ b/bip-lows.mediawiki
@@ -0,0 +1,60 @@
+
+  BIP: ?
+  Title: Low S values signatures
+  Author: Pieter Wuille 
+          Johnson Lau 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-08-16
+
+ +==Abstract== + +This document specifies proposed changes to the Bitcoin transaction validity rules to restrict signatures to using low S values. + + +==Motivation== + +ECDSA signatures are inherently malleable as taking the negative of the number S inside (modulo the curve order) does not invalidate it. This is a nuisance malleability vector as any relay node on the network may transform the signature, with no access to the relevant private keys required. For non-segregated witness transactions, this malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]). + +To fix this malleability, we require that the S value inside ECDSA signatures is at most the curve order divided by 2 (essentially restricting this value to its lower half range). The value S in signatures must be between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive). If S is too high, simply replace it by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S. + + +==Specification== + +Every signature passed to OP_CHECKSIGIncluding pay-to-witness-public-key-hash (P2WPKH) described in BIP141, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, or OP_CHECKMULTISIGVERIFY, to which ECDSA verification is applied, MUST use a S value between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive) with strict DER encoding (see [https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]). + +These operators all perform ECDSA verifications on pubkey/signature pairs, iterating from the top of the stack backwards. For each such verification, if the signature does not pass the Low S value check, the entire script evaluates to false immediately. If the signature is valid DER with low S value, but does not pass ECDSA verification, opcode execution continues as it used to, causing opcode execution to stop and push false on the stack (but not immediately fail the script) in some cases, which potentially skips further signatures (and thus does not subject them to Low S value check). + + +==Deployment== + +This BIP will be deployed by "version bits" [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9] using the same parameters for BIP141 and BIP143, with the name "segwit" and using bit 1. + +For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). + +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). + + +==Compatibility== + +The reference client has produced compatible signatures since v0.9.0, and the requirement to have low S value signatures has been enforced as a relay policy by the reference client since v0.11.1. As of August 2016, very few transactions violating the requirement are being added to the chain. In addition, every non-compliant signature can trivially be converted into a compliant one, so there is no loss of functionality by this requirement. This proposal has the added benefit of reducing transaction malleability. + + +==Implementation== + +An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8514 + + +==Footnotes== + + + +==Acknowledgements== + +This document is extracted from the previous [https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki BIP62] proposal which had input from various people. + + +==Copyright== + +This document is placed in the public domain. \ No newline at end of file From 55ea8052120c3e06993dd75b9f38d71d36565764 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 16 Aug 2016 19:43:53 +0000 Subject: [PATCH 0433/2326] Assign BIP 146: Low S values signatures --- README.mediawiki | 6 ++++++ bip-lows.mediawiki => bip-0146.mediawiki | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) rename bip-lows.mediawiki => bip-0146.mediawiki (98%) diff --git a/README.mediawiki b/README.mediawiki index 239294f0a3..e01d878c81 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -512,6 +512,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0146.mediawiki|146]] +| Low S values signatures +| Pieter Wuille, Johnson Lau +| Standard +| Draft +|- | [[bip-0151.mediawiki|151]] | Peer-to-Peer Communication Encryption | Jonas Schnelli diff --git a/bip-lows.mediawiki b/bip-0146.mediawiki similarity index 98% rename from bip-lows.mediawiki rename to bip-0146.mediawiki index 1b5a950ef1..f57aa214aa 100644 --- a/bip-lows.mediawiki +++ b/bip-0146.mediawiki @@ -1,5 +1,5 @@
-  BIP: ?
+  BIP: 146
   Title: Low S values signatures
   Author: Pieter Wuille 
           Johnson Lau 
@@ -57,4 +57,4 @@ This document is extracted from the previous [https://github.com/bitcoin/bips/bl
 
 ==Copyright==
 
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.

From 5e49486769ec7dddb4689bdf270e587a91d74c0c Mon Sep 17 00:00:00 2001
From: Jonas Schnelli 
Date: Wed, 18 May 2016 09:19:24 +0200
Subject: [PATCH 0434/2326] Add BIP150 (Peer Authentication)

---
 README.mediawiki   |   6 ++
 bip-0150.mediawiki | 173 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 179 insertions(+)
 create mode 100644 bip-0150.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index e01d878c81..26c65f0450 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -518,6 +518,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0150.mediawiki|150]]
+| Peer Authentication
+| Jonas Schnelli
+| Standard
+| Draft
+|-
 | [[bip-0151.mediawiki|151]]
 | Peer-to-Peer Communication Encryption
 | Jonas Schnelli
diff --git a/bip-0150.mediawiki b/bip-0150.mediawiki
new file mode 100644
index 0000000000..1383ee9db4
--- /dev/null
+++ b/bip-0150.mediawiki
@@ -0,0 +1,173 @@
+
+  BIP: 150
+  Title: Peer Authentication
+  Author: Jonas Schnelli 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-03-23
+
+ +== Abstract == + +This BIP describes a way how peers can authenticate – without opening fingerprinting possibilities – to other peers to guarantee ownership and/or allowing to access additional or limited services. + +== Motivation == + +We assume peer operators want to limit the access of different services or increase datastream priorities to a selective subset of peers. Also we assume peers want to connect to specific peers to broadcast or filter transactions (or similar action that reveals sensitive informations) and therefore they want to authenticate the remote peer and make sure that they have not connected to a MITM. + +Benefits with peer authentication: +* Peers could detect MITM attacks when connecting to known peers +* Peers could allow resource hungry transaction filtering only to specific peers +* Peers could allow access to sensitive information that can lead to node fingerprinting (fee estimation) +* Peers could allow custom message types (private extensions) to authenticated peers + +A simple authentication scheme based on elliptic cryptography will allow peers to identify each other and selective allow access to restricted services or reject the connection if the identity could not be verified. + +== Specification == + +The authentication scheme proposed in this BIP uses ECDSA, '''secrets will never be transmitted'''. + +'''Authentication initialization must only happen if encrypted channels have been established (according to BIP-151 [1]).''' + +The '''encryption-session-ID''' is available once channels are encrypted (according to BIP-151 [1]). + +The identity-public-keys used for the authentication must be pre-shared over a different channel (Mail/PGP, physical paper exchange, etc.). This BIP does not cover a "trust on first use" (TOFU) concept. + +The authentication state must be kept until the encryption/connection terminates. + +Only one authentication process is allowed per connection. Re-authenticate require re-establishing the connection. + +=== Known-peers and authorized-peers database === +Each peer that supports p2p authentication must provide two users editable "databases" + +# '''known-peers''' contains known identity-public-keys together with a network identifier (IP & port), similar to the "known-host" file supported by openssh. +# '''authorized-peers''' contains authorized identity-public-keys + +=== Local identity key management === +Each peer can configure multiple identity-keys (ECC, 32 bytes). Peers should make sure, each network interface (IPv4, IPv6, tor) has its own identity-key (otherwise it would be possible to link a tor address to a IPvX address). +The identity-public-key(s) can be shared over a different channel with other node-operators (or non-validating clients) to grant authorized access. + +=== Authentication procedure === +Authentication after this BIP will require both sides to authenticate. Signatures/public-keys will only be revealed if the remote peer could prove that they already know the remote identity-public-key. + +# -> Requesting peer sends AUTHCHALLENGE (hash) +# <- Responding peer sends AUTHREPLY (signature) +# -> Requesting peer sends AUTHPROPOSE (hash) +# <- Responding peer sends AUTHCHALLENGE (hash) +# -> Requesting peer sends AUTHREPLY (signature) + +For privacy reasons, dropping the connection or aborting during the authentication process must not be possible. + +=== AUTHCHALLENGE message === +A peer can send an authentication challenge to see if the responding peer can produce a valid signature with the expected responding peers identity-public-key by sending an AUTHCHALLENGE-message to the remote peer. + +The responding peer needs to check if the hash matches the hash calculated with his own local identity-public-key. Fingerprinting the requesting peer is not possible. + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 32bytes || challenge-hash || hash || hash(encryption-session-ID || challenge_type || remote-peers-expected-identity-public-key) +|} + + +challenge_type is a single character. i if the AUTHCHALLENGE-message is the first, requesting challenge or r if it's the second, remote peers challenge message. + +=== AUTHREPLY message === +A peer must reply an AUTHCHALLENGE-message with an AUTHREPLY-message. + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 64bytes || signature || normalized comp.-signature || A signature of the encryption-session-ID done with the identity-key +|} + +If the challenge-hash from the AUTHCHALLENGE-message did not match the local authentication public-key, the signature must contain 64bytes of zeros. + +The requesting peer can check the responding peers identity by checking the validity of the sent signature against with the pre-shared remote peers identity-public-key. + +If the signature was invalid, the requesting peer must still proceed with the authentication by sending an AUTHPROPOSE-message with 32 random bytes. + +=== AUTHPROPOSE message === +A peer can propose authentication of the channel by sending an AUTHPROPOSE-message to the remote peer. + +If the signature sent in AUTHREPLY was invalid, the peer must still send an AUTHPROPOSE-message containing 32 random bytes. + +The AUTHPROPOSE message must be answered with an AUTHCHALLENGE-message – even if the proposed requesting-peers identity-public-key has not been found in the authorized_peers database. In case of no match, the responding AUTHCHALLENGE-message must contains 32 bytes of zeros. + +{|class="wikitable" +! Field Size !! Description !! Data type !! Comments +|- +| 32bytes || auth-propose-hash || hash || hash(encryption-session-ID || "p" || identity-public-key) +|} + +== Post-Authentication Re-Keying == + +After the second AUTHREPLY message (requesting peers signature -> responding peer), both clients must re-key the symmetric encryption according to BIP151 while using '''a slightly different re-key key derivation hash'''. + +They both re-key with hash(encryption-session-ID || old_symmetric_cipher_key || requesting-peer-identity-public-key || responding-peer-identity-public-key) + +== Identity-Addresses == +The peers should display/log the identity-public-key as an identity-address to the users, which is a base58-check encoded ripemd160(sha256) hash. The purpose of this is for better visual comparison (logs, accept-dialogs). +The base58check identity byte is 0x0F followed by an identity-address version number (=0xFF01). + +An identity address would look like TfG4ScDgysrSpodWD4Re5UtXmcLbY5CiUHA and can be interpreted as a remote peers fingerprint. + +== Compatibility == + +This proposal is backward compatible. Non-supporting peers will ignore the new AUTH* messages. + +== Example of an auth interaction == + +Before authentication (once during peer setup or upgrade) +# Requesting peer and responding peer create each an identity-keypair (standard ECC priv/pubkey) +# Requesting and responding peer share the identity-public-key over a different channel (PGP mail, physical exchange, etc.) +# Responding peer stores requesting peers identity-public-key in its authorized-peers database (A) +# Requesting peer stores responding peers identity-public-key in its known-peers database together with its IP and port (B) + +Encryption +# Encrypted channels must be established (according to BIP-151 [1]) + +Authentication +# Requesting peer sends an AUTHCHALLENGE message + AUTHCHALLENGE: + [32 bytes, hash(encryption-session-ID || "i" || )] + +# Responding peer does create the same hash (encryption-session-ID || "i" || ) with its local identity-public-key +# If the hash does not match, response with an AUTHREPLY message containing 64bytes of zeros. +# In case of a match, response with an AUTHREPLY message + AUTHREPLY: + [64 bytes normalized compact ECDSA signature (H)] (sig of the encryption-session-ID done with the identity-key) + +# Requesting peer does verify the signature with the remote-peers-identity-public-key +# If the signature is invalid, requesting peer answers with an AUTHREPLY message containing 32 random bytes +# In case of a valid signature, requesting peer sends an AUTHPROPOSE message + AUTHPROPOSE: + [32 bytes, hash(encryption-session-ID || "p" || )] + +# Responding peer iterates over authorized-peers database (A), hashes the identical data and looks for a match. +# If the hash does not match, responding peer answer with an AUTHCHALLENGE message containing 32 bytes of zeros. +# In case of a match, responding peer sends an AUTHCHALLENGE message with the hashed client public-key + AUTHCHALLENGE: + [32 bytes, hash(encryption-session-ID || "r" || )] +# Requesting peer sends an AUTHREPLY message containing 64 bytes of zeros if server failed to authenticate +# Otherwise, response with signature in the AUTHREPLY message + AUTHREPLY: + [64 bytes normalized compact ECDSA signature (H)] (sig of the encryption-session-ID done with the identity-key) +# Responding peer must verify the signature and can grant access to restricted services. +# Both peers re-key the encryption after BIP151 including the requesting-peer-identity-public-key and responding-peer-identity-public-key + +== Disadvantages == + +The protocol may be slow if a peer has a large authorized-peers database due to the requirement of iterating and hashing over all available authorized peers identity-public-keys. + +== Reference implementation == + +== References == + +* [1] [[bip-0151.mediawiki|BIP 151: Peer-to-Peer Communication Encryption]] + +== Acknowledgements == +* Gregory Maxwell and Pieter Wuille for most of the ideas in this BIP. + +== Copyright == +This work is placed in the public domain. From ffa155e452080b0820a6354081d0ef895c498000 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Tue, 16 Aug 2016 11:56:22 -0500 Subject: [PATCH 0435/2326] peer authentication bip draft editing --- bip-0150.mediawiki | 47 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/bip-0150.mediawiki b/bip-0150.mediawiki index 1383ee9db4..b1d46c1bcf 100644 --- a/bip-0150.mediawiki +++ b/bip-0150.mediawiki @@ -9,19 +9,19 @@ == Abstract == -This BIP describes a way how peers can authenticate – without opening fingerprinting possibilities – to other peers to guarantee ownership and/or allowing to access additional or limited services. +This BIP describes a way for peers to authenticate to other peers to guarantee node ownership and/or allow peers to access additional or limited node services, without the possibility of fingerprinting. == Motivation == -We assume peer operators want to limit the access of different services or increase datastream priorities to a selective subset of peers. Also we assume peers want to connect to specific peers to broadcast or filter transactions (or similar action that reveals sensitive informations) and therefore they want to authenticate the remote peer and make sure that they have not connected to a MITM. +We assume peer operators want to limit the access of different node services or increase datastream priorities to a selective subset of peers. Also we assume that peers want to connect to specific peers to broadcast or filter transactions (or similar actions that reveal sensitive informations) and therefore operators want to authenticate the remote peer and ensure that they have not connected to a MITM (man-in-the-middle) attacker. -Benefits with peer authentication: -* Peers could detect MITM attacks when connecting to known peers -* Peers could allow resource hungry transaction filtering only to specific peers -* Peers could allow access to sensitive information that can lead to node fingerprinting (fee estimation) -* Peers could allow custom message types (private extensions) to authenticated peers +Benefits of peer authentication: +* Peers can detect MITM attacks when connecting to known peers +* Peers can allow resource hungry transaction filtering only to specific peers +* Peers can allow access to sensitive information that can lead to node fingerprinting (fee estimation) +* Peers can allow custom message types (private extensions) to authenticated peers -A simple authentication scheme based on elliptic cryptography will allow peers to identify each other and selective allow access to restricted services or reject the connection if the identity could not be verified. +A simple authentication scheme based on elliptic cryptography will allow peers to identify each other and selectively allow access to restricted services or reject the connection if the peer identity cannot be verified. == Specification == @@ -31,24 +31,24 @@ The authentication scheme proposed in this BIP uses ECDSA, '''secrets will never The '''encryption-session-ID''' is available once channels are encrypted (according to BIP-151 [1]). -The identity-public-keys used for the authentication must be pre-shared over a different channel (Mail/PGP, physical paper exchange, etc.). This BIP does not cover a "trust on first use" (TOFU) concept. +The identity-public-keys used for the authentication must be pre-shared over a different channel (mail/PGP, physical paper exchange, etc.). This BIP does not cover a "trust on first use" (TOFU) concept. The authentication state must be kept until the encryption/connection terminates. -Only one authentication process is allowed per connection. Re-authenticate require re-establishing the connection. +Only one authentication process is allowed per connection. Re-authentication require re-establishing the connection. === Known-peers and authorized-peers database === -Each peer that supports p2p authentication must provide two users editable "databases" +Each peer that supports p2p authentication must provide two user-editable "databases". # '''known-peers''' contains known identity-public-keys together with a network identifier (IP & port), similar to the "known-host" file supported by openssh. # '''authorized-peers''' contains authorized identity-public-keys === Local identity key management === -Each peer can configure multiple identity-keys (ECC, 32 bytes). Peers should make sure, each network interface (IPv4, IPv6, tor) has its own identity-key (otherwise it would be possible to link a tor address to a IPvX address). +Each peer can configure multiple identity-keys (ECC, 32 bytes). Peers should make sure that each network interface (IPv4, IPv6, tor) has its own identity-key (otherwise it would be possible to link a tor address to a IPvX address). The identity-public-key(s) can be shared over a different channel with other node-operators (or non-validating clients) to grant authorized access. === Authentication procedure === -Authentication after this BIP will require both sides to authenticate. Signatures/public-keys will only be revealed if the remote peer could prove that they already know the remote identity-public-key. +Authentication based on this BIP will require both sides to authenticate. Signatures/public-keys will only be revealed if the remote peer can prove that they already know the remote identity-public-key. # -> Requesting peer sends AUTHCHALLENGE (hash) # <- Responding peer sends AUTHREPLY (signature) @@ -56,10 +56,10 @@ Authentication after this BIP will require both sides to authenticate. Signature # <- Responding peer sends AUTHCHALLENGE (hash) # -> Requesting peer sends AUTHREPLY (signature) -For privacy reasons, dropping the connection or aborting during the authentication process must not be possible. +For privacy reasons, dropping the connection or aborting during the authentication process must not be allowed. === AUTHCHALLENGE message === -A peer can send an authentication challenge to see if the responding peer can produce a valid signature with the expected responding peers identity-public-key by sending an AUTHCHALLENGE-message to the remote peer. +A peer can send an authentication challenge to see if the responding peer can produce a valid signature with the expected responding peer's identity-public-key by sending an AUTHCHALLENGE-message to the remote peer. The responding peer needs to check if the hash matches the hash calculated with his own local identity-public-key. Fingerprinting the requesting peer is not possible. @@ -81,9 +81,9 @@ A peer must reply an AUTHCHALLENGE-message with an AUTHREPLY< | 64bytes || signature || normalized comp.-signature || A signature of the encryption-session-ID done with the identity-key |} -If the challenge-hash from the AUTHCHALLENGE-message did not match the local authentication public-key, the signature must contain 64bytes of zeros. +If the challenge-hash from the AUTHCHALLENGE-message did not match the local authentication public-key, the signature must contain 64 bytes of zeros. -The requesting peer can check the responding peers identity by checking the validity of the sent signature against with the pre-shared remote peers identity-public-key. +The requesting peer can check the responding peer's identity by checking the validity of the sent signature against with the pre-shared remote peers identity-public-key. If the signature was invalid, the requesting peer must still proceed with the authentication by sending an AUTHPROPOSE-message with 32 random bytes. @@ -92,7 +92,7 @@ A peer can propose authentication of the channel by sending an AUTHPROPOSE If the signature sent in AUTHREPLY was invalid, the peer must still send an AUTHPROPOSE-message containing 32 random bytes. -The AUTHPROPOSE message must be answered with an AUTHCHALLENGE-message – even if the proposed requesting-peers identity-public-key has not been found in the authorized_peers database. In case of no match, the responding AUTHCHALLENGE-message must contains 32 bytes of zeros. +The AUTHPROPOSE message must be answered with an AUTHCHALLENGE-message - even if the proposed requesting-peers identity-public-key has not been found in the authorized-peers database. In case of no match, the responding AUTHCHALLENGE-message must contains 32 bytes of zeros. {|class="wikitable" ! Field Size !! Description !! Data type !! Comments @@ -102,15 +102,15 @@ The AUTHPROPOSE message must be answered with an AUTHCHALLENG == Post-Authentication Re-Keying == -After the second AUTHREPLY message (requesting peers signature -> responding peer), both clients must re-key the symmetric encryption according to BIP151 while using '''a slightly different re-key key derivation hash'''. +After the second AUTHREPLY message (requesting peer's signature -> responding peer), both clients must re-key the symmetric encryption according to BIP151 while using '''a slightly different re-key key derivation hash'''. -They both re-key with hash(encryption-session-ID || old_symmetric_cipher_key || requesting-peer-identity-public-key || responding-peer-identity-public-key) +Both peers re-key with hash(encryption-session-ID || old_symmetric_cipher_key || requesting-peer-identity-public-key || responding-peer-identity-public-key) == Identity-Addresses == The peers should display/log the identity-public-key as an identity-address to the users, which is a base58-check encoded ripemd160(sha256) hash. The purpose of this is for better visual comparison (logs, accept-dialogs). The base58check identity byte is 0x0F followed by an identity-address version number (=0xFF01). -An identity address would look like TfG4ScDgysrSpodWD4Re5UtXmcLbY5CiUHA and can be interpreted as a remote peers fingerprint. +An identity address would look like TfG4ScDgysrSpodWD4Re5UtXmcLbY5CiUHA and can be interpreted as a remote peer's fingerprint. == Compatibility == @@ -120,7 +120,7 @@ This proposal is backward compatible. Non-supporting peers will ignore the new < Before authentication (once during peer setup or upgrade) # Requesting peer and responding peer create each an identity-keypair (standard ECC priv/pubkey) -# Requesting and responding peer share the identity-public-key over a different channel (PGP mail, physical exchange, etc.) +# Requesting and responding peer share the identity-public-key over a different channel (mail/PGP, physical paper exchange, etc.) # Responding peer stores requesting peers identity-public-key in its authorized-peers database (A) # Requesting peer stores responding peers identity-public-key in its known-peers database together with its IP and port (B) @@ -158,7 +158,7 @@ Authentication == Disadvantages == -The protocol may be slow if a peer has a large authorized-peers database due to the requirement of iterating and hashing over all available authorized peers identity-public-keys. +The protocol may be slow if a peer has a large authorized-peers database due to the requirement of iterating and hashing over all available authorized peer identity-public-keys. == Reference implementation == @@ -168,6 +168,7 @@ The protocol may be slow if a peer has a large authorized-peers database due to == Acknowledgements == * Gregory Maxwell and Pieter Wuille for most of the ideas in this BIP. +* Bryan Bishop for editing. == Copyright == This work is placed in the public domain. From 003cf078ff126a6fbb30a4575f8c2c28848c69ff Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Wed, 17 Aug 2016 19:57:01 +0800 Subject: [PATCH 0436/2326] BIP146: change title and add NULLDUMMY rules --- README.mediawiki | 2 +- bip-0146.mediawiki | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 26c65f0450..070c9dc9eb 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -513,7 +513,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Draft |- | [[bip-0146.mediawiki|146]] -| Low S values signatures +| Dealing with signature malleability | Pieter Wuille, Johnson Lau | Standard | Draft diff --git a/bip-0146.mediawiki b/bip-0146.mediawiki index f57aa214aa..c92c54ef56 100644 --- a/bip-0146.mediawiki +++ b/bip-0146.mediawiki @@ -1,6 +1,6 @@
   BIP: 146
-  Title: Low S values signatures
+  Title: Dealing with signature malleability
   Author: Pieter Wuille 
           Johnson Lau 
   Status: Draft
@@ -10,22 +10,40 @@
 
 ==Abstract==
 
-This document specifies proposed changes to the Bitcoin transaction validity rules to restrict signatures to using low S values.
+This document specifies proposed changes to the Bitcoin transaction validity rules to fix signature malleability for common transaction types.
 
 
 ==Motivation==
 
-ECDSA signatures are inherently malleable as taking the negative of the number S inside (modulo the curve order) does not invalidate it. This is a nuisance malleability vector as any relay node on the network may transform the signature, with no access to the relevant private keys required. For non-segregated witness transactions, this malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]).
+Signature malleability refers to the ability of any relay node on the network to transform the signature in transactions, with no access to the relevant private keys required. For non-segregated witness transactions, signature malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]).
 
-To fix this malleability, we require that the S value inside ECDSA signatures is at most the curve order divided by 2 (essentially restricting this value to its lower half range). The value S in signatures must be between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive). If S is too high, simply replace it by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.
+Since the enforcement of Strict DER signatures ([https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]), there are 2 remaining known sources of malleability in the signature passed to ECDSA verification opcodes:
+
+# '''Inherent ECDSA signature malleability''': ECDSA signatures are inherently malleable as taking the negative of the number S inside (modulo the curve order) does not invalidate it.
+
+# '''Inputs ignored by scripts''': The (unnecessary) extra stack element consumed by OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY is not inspected in any manner, and could be replaced with any value.
+
+This document specifies new rules to fix the aforesaid signature malleability.
 
 
 ==Specification==
 
-Every signature passed to OP_CHECKSIGIncluding pay-to-witness-public-key-hash (P2WPKH) described in BIP141, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, or OP_CHECKMULTISIGVERIFY, to which ECDSA verification is applied, MUST use a S value between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive) with strict DER encoding (see [https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]).
+To fix signature malleability, the following new rules are applied:
+
+
+===LOW_S===
+
+We require that the S value inside ECDSA signatures is at most the curve order divided by 2 (essentially restricting this value to its lower half range). Every signature passed to OP_CHECKSIGIncluding pay-to-witness-public-key-hash (P2WPKH) described in BIP141, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, or OP_CHECKMULTISIGVERIFY, to which ECDSA verification is applied, MUST use a S value between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive) with strict DER encoding (see [https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]).
 
 These operators all perform ECDSA verifications on pubkey/signature pairs, iterating from the top of the stack backwards. For each such verification, if the signature does not pass the Low S value check, the entire script evaluates to false immediately. If the signature is valid DER with low S value, but does not pass ECDSA verification, opcode execution continues as it used to, causing opcode execution to stop and push false on the stack (but not immediately fail the script) in some cases, which potentially skips further signatures (and thus does not subject them to Low S value check).
 
+A high S value in signature could be trivially replaced by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.
+
+
+===NULLDUMMY===
+
+The extra stack element consumed by OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY MUST be the empty byte array (the result of OP_0). Anything else makes the script evaluate to false immediately.
+
 
 ==Deployment==
 
@@ -38,15 +56,16 @@ For Bitcoin testnet, the BIP9 starttime will be midnight 1 May 2016 UTC (Epoch t
 
 ==Compatibility==
 
-The reference client has produced compatible signatures since v0.9.0, and the requirement to have low S value signatures has been enforced as a relay policy by the reference client since v0.11.1. As of August 2016, very few transactions violating the requirement are being added to the chain. In addition, every non-compliant signature can trivially be converted into a compliant one, so there is no loss of functionality by this requirement. This proposal has the added benefit of reducing transaction malleability.
+The reference client has produced compatible signatures since v0.9.0, and NULLDUMMY and LOW_S have been enforced as relay policy by the reference client since v0.10.0 and v0.11.1 respectively. As of August 2016, very few transactions violating the requirement are being added to the chain. In addition, every non-compliant signature can trivially be converted into a compliant one, so there is no loss of functionality by this requirement.
 
 
 ==Implementation==
 
-An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8514
+An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8533
 
 
 ==Footnotes==
+
 
 
 

From d35a3d33da628fb3da543bb8652a2153d65562c5 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 20 Aug 2016 23:50:14 +0000
Subject: [PATCH 0437/2326] Promote BIP 9 Draft->Final

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

diff --git a/README.mediawiki b/README.mediawiki
index 070c9dc9eb..8700b22ac9 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -24,12 +24,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Luke Dashjr
 | Process
 | Deferred
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0009.mediawiki|9]]
 | Version bits with timeout and delay
 | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
 | Informational
-| Draft
+| Final
 |- style="background-color: #ffcfcf"
 | [[bip-0010.mediawiki|10]]
 | Multi-Sig Transaction Distribution
diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki
index 7270abd26f..536ef1f063 100644
--- a/bip-0009.mediawiki
+++ b/bip-0009.mediawiki
@@ -5,7 +5,7 @@
           Peter Todd 
           Greg Maxwell 
           Rusty Russell 
-  Status: Draft
+  Status: Final
   Type: Informational
   Created: 2015-10-04
 
From 387fc6011bd804609fd751786e50439d5c11a097 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 23 Aug 2016 19:47:29 +0000 Subject: [PATCH 0438/2326] Promote BIPs 18, 39, 44, 67, 80, 81, 111, 125, 130, and 132 Draft->Accepted; change BIP 43 to Informational --- README.mediawiki | 38 +++++++++++++++++++------------------- bip-0018.mediawiki | 2 +- bip-0039.mediawiki | 2 +- bip-0043.mediawiki | 2 +- bip-0044.mediawiki | 2 +- bip-0067.mediawiki | 2 +- bip-0080.mediawiki | 2 +- bip-0081.mediawiki | 2 +- bip-0111.mediawiki | 2 +- bip-0125.mediawiki | 2 +- bip-0130.mediawiki | 2 +- bip-0132.mediawiki | 2 +- 12 files changed, 30 insertions(+), 30 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 8700b22ac9..6f9d785012 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -78,12 +78,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Luke Dashjr | Standard | Withdrawn -|- +|- style="background-color: #ffffcf" | [[bip-0018.mediawiki|18]] | hashScriptCheck | Luke Dashjr | Standard -| Draft +| Accepted |- | [[bip-0019.mediawiki|19]] | M-of-N Standard Transactions (Low SigOp) @@ -168,12 +168,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Mike Caldwell, Aaron Voisine | Standard | Draft -|- +|- style="background-color: #ffffcf" | [[bip-0039.mediawiki|39]] | Mnemonic code for generating deterministic keys | Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe | Standard -| Draft +| Accepted |- | 40 | Stratum wire protocol @@ -196,14 +196,14 @@ Those proposing changes should consider that ultimately consent may rest with th | [[bip-0043.mediawiki|43]] | Purpose Field for Deterministic Wallets | Marek Palatinus, Pavol Rusnak -| Standard +| Informational | Draft -|- +|- style="background-color: #ffffcf" | [[bip-0044.mediawiki|44]] | Multi-Account Hierarchy for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Standard -| Draft +| Accepted |- | [[bip-0045.mediawiki|45]] | Structure for Deterministic P2SH Multisignature Wallets @@ -265,12 +265,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Pieter Wuille | Standard | Final -|- +|- style="background-color: #ffffcf" | [[bip-0067.mediawiki|67]] | Deterministic Pay-to-script-hash multi-signature addresses through public key sorting | Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries | Standard -| Draft +| Accepted |- style="background-color: #cfffcf" | [[bip-0068.mediawiki|68]] | Relative lock-time using consensus-enforced sequence numbers @@ -324,13 +324,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational -| Draft +| Deferred |- | [[bip-0081.mediawiki|81]] | Hierarchy for Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational -| Draft +| Deferred |- | [[bip-0083.mediawiki|83]] | Dynamic Hierarchical Deterministic Key Trees @@ -385,12 +385,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Gavin Andresen | Standard | Draft -|- +|- style="background-color: #ffffcf" | [[bip-0111.mediawiki|111]] | NODE_BLOOM service bit | Matt Corallo, Peter Todd | Standard -| Draft +| Accepted |- style="background-color: #cfffcf" | [[bip-0112.mediawiki|112]] | CHECKSEQUENCEVERIFY @@ -439,36 +439,36 @@ Those proposing changes should consider that ultimately consent may rest with th | Eric Lombrozo, William Swanson | Informational | Draft -|- +|- style="background-color: #ffffcf" | [[bip-0125.mediawiki|125]] | Opt-in Full Replace-by-Fee Signaling | David A. Harding, Peter Todd | Standard -| Draft +| Accepted |- | [[bip-0126.mediawiki|126]] | Best Practices for Heterogeneous Input Script Transactions | Kristov Atlas | Informational | Draft -|- +|- style="background-color: #ffffcf" | [[bip-0130.mediawiki|130]] | sendheaders message | Suhas Daftuar | Standard -| Draft +| Accepted |- | [[bip-0131.mediawiki|131]] | "Coalescing Transaction" Specification (wildcard inputs) | Chris Priest | Standard | Draft -|- +|- style="background-color: #ffcfcf" | [[bip-0132.mediawiki|132]] | Committee-based BIP Acceptance Process | Andy Chase | Process -| Draft +| Withdrawn |- | [[bip-0133.mediawiki|133]] | feefilter message diff --git a/bip-0018.mediawiki b/bip-0018.mediawiki index 023b2bfbc5..fce42004e4 100644 --- a/bip-0018.mediawiki +++ b/bip-0018.mediawiki @@ -2,7 +2,7 @@ BIP: 18 Title: hashScriptCheck Author: Luke Dashjr - Status: Draft + Status: Accepted Type: Standards Track Created: 2012-01-27
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index 6fd8bd0250..3c95d4d135 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -5,7 +5,7 @@ Pavol Rusnak Aaron Voisine Sean Bowe - Status: Draft + Status: Accepted Type: Standards Track Created: 2013-09-10
diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki index 4c57935e4d..686221aa4b 100644 --- a/bip-0043.mediawiki +++ b/bip-0043.mediawiki @@ -4,7 +4,7 @@ Author: Marek Palatinus Pavol Rusnak Status: Draft - Type: Standards Track + Type: Informational Created: 2014-04-24
diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 883677a66f..e17c73d1a7 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -3,7 +3,7 @@ Title: Multi-Account Hierarchy for Deterministic Wallets Author: Marek Palatinus Pavol Rusnak - Status: Draft + Status: Accepted Type: Standards Track Created: 2014-04-24
diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki index 3864c63cd6..13e2ed9945 100644 --- a/bip-0067.mediawiki +++ b/bip-0067.mediawiki @@ -4,7 +4,7 @@ Author: Thomas Kerin Jean-Pierre Rupp Ruben de Vries - Status: Draft + Status: Accepted Type: Standards Track Created: 2015-02-08
diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki index 13d8597df8..05322e08f2 100644 --- a/bip-0080.mediawiki +++ b/bip-0080.mediawiki @@ -3,7 +3,7 @@ Title: Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets Author: Justus Ranvier Jimmy Song - Status: Draft + Status: Deferred Type: Informational Created: 2014-08-11
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki index b306075198..713cb5725c 100644 --- a/bip-0081.mediawiki +++ b/bip-0081.mediawiki @@ -3,7 +3,7 @@ Title: Hierarchy for Colored Voting Pool Deterministic Multisig Wallets Author: Justus Ranvier Jimmy Song - Status: Draft + Status: Deferred Type: Informational Created: 2014-08-11
diff --git a/bip-0125.mediawiki b/bip-0125.mediawiki index 7d884690af..52dfe40439 100644 --- a/bip-0125.mediawiki +++ b/bip-0125.mediawiki @@ -3,7 +3,7 @@ Title: Opt-in Full Replace-by-Fee Signaling Author: David A. Harding Peter Todd - Status: Draft + Status: Accepted Type: Standards Track Created: 2015-12-04
diff --git a/bip-0130.mediawiki b/bip-0130.mediawiki index 56184e3138..ae1e602af1 100644 --- a/bip-0130.mediawiki +++ b/bip-0130.mediawiki @@ -2,7 +2,7 @@ BIP: 130 Title: sendheaders message Author: Suhas Daftuar - Status: Draft + Status: Accepted Type: Standards Track Created: 2015-05-08
diff --git a/bip-0132.mediawiki b/bip-0132.mediawiki index 90c09b1b72..03cc83498a 100644 --- a/bip-0132.mediawiki +++ b/bip-0132.mediawiki @@ -2,7 +2,7 @@ BIP: 132 Title: Committee-based BIP Acceptance Process Author: Andy Chase - Status: Draft + Status: Withdrawn Type: Process Created: 2015-08-31
From 04e1a86f513f9662c63656d220301aaca77eeaa9 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 25 Aug 2016 21:10:19 +0000 Subject: [PATCH 0439/2326] Promote BIP 45 Draft->Accepted --- README.mediawiki | 4 ++-- bip-0045.mediawiki | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 6f9d785012..35387e1864 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -204,12 +204,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Marek Palatinus, Pavol Rusnak | Standard | Accepted -|- +|- style="background-color: #ffffcf" | [[bip-0045.mediawiki|45]] | Structure for Deterministic P2SH Multisignature Wallets | Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia | Standard -| Draft +| Accepted |- | [[bip-0047.mediawiki|47]] | Reusable Payment Codes for Hierarchical Deterministic Wallets diff --git a/bip-0045.mediawiki b/bip-0045.mediawiki index 1550467d16..757fc7fe9f 100644 --- a/bip-0045.mediawiki +++ b/bip-0045.mediawiki @@ -4,7 +4,7 @@ Author: Manuel Araoz Ryan X. Charles Matias Alejo Garcia - Status: Draft + Status: Accepted Type: Standards Track Created: 2014-04-25
From 1501dd99bd12f9e6835f5169d21fd29fb41071db Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 27 Aug 2016 20:21:26 +0000 Subject: [PATCH 0440/2326] Promote BIP 69 Draft->Accepted --- README.mediawiki | 4 ++-- bip-0069.mediawiki | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 35387e1864..8b48af156f 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -277,12 +277,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona | Standard | Final -|- +|- style="background-color: #ffffcf" | [[bip-0069.mediawiki|69]] | Lexicographical Indexing of Transaction Inputs and Outputs | Kristov Atlas | Informational -| Draft +| Accepted |- style="background-color: #cfffcf" | [[bip-0070.mediawiki|70]] | Payment Protocol diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki index 4094126268..832438c48a 100644 --- a/bip-0069.mediawiki +++ b/bip-0069.mediawiki @@ -3,7 +3,7 @@ Title: Lexicographical Indexing of Transaction Inputs and Outputs Author: Kristov Atlas Editor: Daniel Cousens - Status: Draft + Status: Accepted Type: Informational Created: 2015-06-12
From c7fdd9d4289052a3fee8a82e9b8696ce3d11e8e4 Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 8 Aug 2016 22:04:33 -0700 Subject: [PATCH 0441/2326] Added additional pki_type values --- bip-0075.mediawiki | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 77616ba90c..89ed5bf470 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -67,6 +67,21 @@ A Bitcoin wallet developer would like to use a public Store & Forward service fo With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address or payment information, only delete encrypted messages. +==Modifying BIP70 pki_type== +This BIP adds additional possible values for the pki_type variable in the PaymentRequest message. The complete list is now as follows: + +{| class="wikitable" +! pki_type !! Description +|- +| x509+sha256 || A x.509 certificate, as described in BIP70 +|- +| pgp+sha256 || An [[https://en.wikipedia.org/wiki/Pretty_Good_Privacy#OpenPGP|OpenPGP]] certificate +|- +| ecdsa+sha256 || A [[https://en.bitcoin.it/wiki/Secp256k1|secp256k1]] [[https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] public key +|} + +'''NOTE''': Although SHA1 was supported in BIP70, it has been deprecated and BIP75 only supports SHA256. The hashing algorithm is still specified in the values listed above for forward and backwards compatibility. + ==New Messages== Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as the messages newly defined in this BIP. @@ -94,7 +109,7 @@ message InvoiceRequest { |- | amount || amount is integer-number-of-satoshis (default: 0) |- -| pki_type || none / x509+sha256 (default: "none") +| pki_type || none / x509+sha256 / pgp+sha256 / ecdsa+sha256 (default: "none") |- | pki_data || Depends on pki_type |- @@ -343,8 +358,9 @@ If a Store & Forward server wishes to protect themselves from spam or abuse, the Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a Payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== -* All EC public keys ('''sender_public_key''', '''receiver_public_key''') included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* All EC public keys ('''sender_public_key''', '''receiver_public_key''') or x.509 certificates included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. * All ECC signatures included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. +* All OpenPGP certificates must follow [[https://tools.ietf.org/html/rfc4880|RFC4880]], sections 5.5 and 12.1. ==Implementation== A reference implementation for a Store & Forward server supporting this proposal can be found here: From ac8a5f4df6d2f41b09379cffbb8897ccae16096f Mon Sep 17 00:00:00 2001 From: jmacwhyte Date: Mon, 29 Aug 2016 17:29:02 -0700 Subject: [PATCH 0442/2326] Added versioning, canceling --- bip-0075.mediawiki | 66 ++++++++++++++++++++++------------- bip-0075/paymentrequest.proto | 42 +++++++++++----------- 2 files changed, 64 insertions(+), 44 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 89ed5bf470..11fa43bbee 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -136,46 +136,59 @@ enum ProtocolMessageType { The '''ProtocolMessage''' message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, non-encrypted communication of Payment Protocol messages. The message also includes a status code and a status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
 message ProtocolMessage {
-    required ProtocolMessageType message_type = 1;
-    required bytes serialized_message = 2;
-    optional uint64 status_code = 3;
-    optional string status_message = 4;
-    optional bytes identifier = 5;
+    required uint64 version = 1
+    required uint64 status_code = 2;
+    required ProtocolMessageType message_type = 3;
+    required bytes serialized_message = 4;
+    optional string status_message = 5;
+    optional bytes identifier = 6;
 }
 
{| class="wikitable" ! Field Name !! Description |- +|version || Protocol version number (Currently 1) +|- +|status_code || Payment Protocol Status Code +|- |message_type || Message Type of serialized_message |- |serialized_message || Serialized Payment Protocol Message |- -|status_code || Payment Protocol Status Code -|- |status_message || Human-readable Payment Protocol status message |- |identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default |} +===Versioning=== +This BIP introduces version 1 of this protocol. All messages sent using these base requirements MUST use a value of 1 for the version number. Any future BIPs that modify this protocol (encryption schemes, etc) MUST each increment the version number by 1. + +When initiating communication, the version field of the first message SHOULD be set to the highest verison number the sender understands. All clients MUST be able to understand all version numbers less than the highest number they support. If a client receives a message with a version number higher than they understand, they MUST send the message back to the sender with a status code of 101 ("version too high") and the version field set to the highest version number the recipient understands. The sender must then resend the original message using the same version number returned by the recipient or abort. + ===EncryptedProtocolMessage=== The '''EncryptedProtocolMessage''' message is an encapsualting wrapper for any Payment Protocol message. It allows two-way, authenticated and encrypted communication of Payment Protocol messages in order to keep their contents secret. The message also includes a status code and status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
 message EncryptedProtocolMessage {
-    required ProtocolMessageType message_type = 1;
-    required bytes encrypted_message = 2;
-    required bytes receiver_public_key = 3;
-    required bytes sender_public_key = 4;
-    required uint64 nonce = 5;
-    optional bytes signature = 6;
-    optional bytes identifier = 7;
-    optional uint64 status_code = 8;
+    required uint64 version = 1 [default = 1];
+    required uint64 status_code = 2 [default = 1];
+    required ProtocolMessageType message_type = 3;
+    required bytes encrypted_message = 4;
+    required bytes receiver_public_key = 5;
+    required bytes sender_public_key = 6;
+    required uint64 nonce = 7;
+    optional bytes identifier = 8;
     optional string status_message = 9;
+    optional bytes signature = 10;
 }
 
{| class="wikitable" ! Field Name !! Description |- +| version || Protocol version number +|- +| status_code || Payment Protocol Status Code +|- | message_type || Message Type of Decrypted encrypted_message |- | encrypted_message || AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message @@ -186,13 +199,11 @@ message EncryptedProtocolMessage { |- | nonce || Microseconds since epoch |- -| signature || DER-encoded Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively -|- | identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default |- -| status_code || Payment Protocol Status Code -|- | status_message || Human-readable Payment Protocol status message +|- +| signature || DER-encoded Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively |} ==Payment Protocol Process with InvoiceRequests== @@ -236,9 +247,9 @@ When communicated via '''HTTP''', the listed messages MUST be transmitted via TL ===Payment Protocol Status Communication=== -In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST be returned by the party generating the error status_code. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately. +Every [[#ProtocolMessage|ProtocolMessage]] or [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] MUST include a status code which conveys information about the last message received, if any (for the first message sent, use a status of 1 "OK" even though there was no previous message). In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a ProtocolMessage or EncryptedProtocolMessage SHOULD be returned by the party generating the error. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately.

-The status_message value SHOULD be set with a human readable explanation of the status code. For example, if in an [[#EncryptedProtocolMessage|EncryptedProtocolMessage]], the AES-256-GCM decryption fails to authenticate, an Authentication Failed (102) '''status_code''' MUST be returned to prevent oracle attacks. +The status_message value SHOULD be set with a human readable explanation of the status code. ====Payment Protocol Status Codes==== {| class="wikitable" @@ -246,11 +257,15 @@ The status_message value SHOULD be set with a human readable explanation of the |- | 1 || OK |- +| 2 || Cancel +|- | 100 || General / Unknown Error |- +| 101 || Version Too High +|- | 102 || Authentication Failed |- -| 102 || Encrypted Message Required +| 103 || Encrypted Message Required |- | 200 || Amount Too High |- @@ -272,8 +287,10 @@ The status_message value SHOULD be set with a human readable explanation of the |- |} -===Transport Layer Communication Errors=== ++==Canceling A Message==+ +If a participant to a transaction would like to inform the other party that a previous message should be canceled, they can send the same message with a status code of 2 ("Cancel") and, where applicable, an updated nonce. How recipients make use of the "Cancel" message is up to developers. For example, wallet developers may want to offer users the ability to cancel payment requests they have sent to other users, and have that change reflected in the recipient's UI. Developers using the non-encrypted ProtocolMessage may want to ignore "Cancel" messages, as it may be difficult to authenticate that the message originated from the same user. +===Transport Layer Communication Errors=== Communication errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging faciltiies. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]). ==Extended Payment Protocol Process Details== @@ -306,6 +323,7 @@ For the following we assume the Sender already knows the Receiver's public key, * Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] * Create [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message * Set '''encrypted_message''' to be the encrypted value of the Payment Protocol message +* '''version''' SHOULD be set to the highest version number the client understands (currently 1) * '''sender_public_key''' MUST be set to the public key of the Sender's EC keypair * '''receiver_public_key''' MUST be set to the public key of the Receiver's EC keypair * '''nonce''' MUST be set to the nonce used in the AES-256-CBC encryption operation @@ -327,7 +345,7 @@ For the following we assume the Sender already knows the Receiver's public key, * Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_Diffie–Hellman ECDH] using the local entity's private key and the remote entity's public key as inputs * Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG] ** Use '''SHA512(secret point's X value in Big-Endian bytes)''' for Entropy -** Use the given message's '''nonce''' field for Nonce +** Use the given message's '''nonce''' field for Nonce, converted to byte string (Big Endian) * Initialize AES-256 in GCM Mode ** Initialize HMAC_DRBG with Security Strength of 256 bits diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 9f170fe143..5a08192075 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -48,12 +48,12 @@ message PaymentACK { // BIP-IR Extensions message InvoiceRequest { required bytes sender_public_key = 1; // Sender's DER-Encoded EC Public Key - optional uint64 amount = 3 [default = 0]; // amount is integer-number-of-satoshis - optional string pki_type = 4 [default = "none"]; // none / x509+sha256 - optional bytes pki_data = 5; // Depends on pki_type - optional string memo = 6; // Human-readable description of invoice request for the receiver - optional string notification_url = 7; // URL to notify on EncryptedPaymentRequest ready - optional bytes signature = 8; // PKI-dependent signature + optional uint64 amount = 2 [default = 0]; // amount is integer-number-of-satoshis + optional string pki_type = 3 [default = "none"]; // none / x509+sha256 + optional bytes pki_data = 4; // Depends on pki_type + optional string memo = 5; // Human-readable description of invoice request for the receiver + optional string notification_url = 6; // URL to notify on EncryptedPaymentRequest ready + optional bytes signature = 7; // PKI-dependent signature } enum ProtocolMessageType { @@ -65,21 +65,23 @@ enum ProtocolMessageType { } message ProtocolMessage { - required ProtocolMessageType message_type = 1; // Message Type of serialized_message - required bytes serialized_message = 2; // Serialized Payment Protocol Message - optional uint64 status_code = 3; // Payment Protocol Status Code - optional string status_message = 4; // Human-readable Payment Protocol status message - optional bytes identifier = 5; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + required uint64 version = 1 [default = 1]; // Protocol version number + required uint64 status_code = 2 [default = 1]; // Payment Protocol Status Code (Default: 1 "OK") + required ProtocolMessageType message_type = 3; // Message Type of serialized_message + required bytes serialized_message = 4; // Serialized Payment Protocol Message + optional string status_message = 5; // Human-readable Payment Protocol status message + optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default } message EncryptedProtocolMessage { - required ProtocolMessageType message_type = 1; // Message Type of Decrypted encrypted_message - required bytes encrypted_message = 2; // AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message - required bytes receiver_public_key = 3; // Receiver's DER-encoded EC Public Key - required bytes sender_public_key = 4; // Sender's DER-encoded EC Public Key - required uint64 nonce = 5; // Microseconds since epoch - optional bytes signature = 6; // Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively - optional bytes identifier = 7; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default - optional uint64 status_code = 8; // Payment Protocol Status Code - optional string status_message = 9; // Human-readable Payment Protocol status message + required uint64 version = 1 [default = 1]; // Protocol version number + required uint64 status_code = 2 [default = 1]; // Payment Protocol Status Code (Default: 1 "OK") + required ProtocolMessageType message_type = 3; // Message Type of Decrypted encrypted_message + required bytes encrypted_message = 4; // AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message + required bytes receiver_public_key = 5; // Receiver's DER-encoded EC Public Key + required bytes sender_public_key = 6; // Sender's DER-encoded EC Public Key + required uint64 nonce = 7; // Microseconds since epoch + optional bytes identifier = 8; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + optional string status_message = 9; // Human-readable Payment Protocol status message + optional bytes signature = 10; // Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively } \ No newline at end of file From 7ba8e5813a87a96ca3114a788e4913c2226404f3 Mon Sep 17 00:00:00 2001 From: Matt David Date: Tue, 30 Aug 2016 14:11:25 -0700 Subject: [PATCH 0443/2326] - Remove working copy of http address service bip --- bip-http-address-service.mediawiki | 125 ----------------------------- 1 file changed, 125 deletions(-) delete mode 100644 bip-http-address-service.mediawiki diff --git a/bip-http-address-service.mediawiki b/bip-http-address-service.mediawiki deleted file mode 100644 index bbb5921737..0000000000 --- a/bip-http-address-service.mediawiki +++ /dev/null @@ -1,125 +0,0 @@ -
-  BIP: XXX
-  Title: Endpoint Capability Discovering using HTTP Address Service
-  Author: Matt David 
-          Frank Contreras 
-  Status: Draft
-  Type: Standards Track
-  Created: 2016-06-10
-
- -==Abstract== - -The proposed TLS-protected HTTP Address Service BIP aims to define a common flow for interacting with a TLS-protected HTTP Address Service such that Address Services can be provided to the client. Address Services may provide any of the following: - -# Wallet address -# BitcoinURI -# PaymentRequest -# Store & Forward Services (supporting the Payment Protocol) - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and -"OPTIONAL" in this document are to be interpreted as described in RFC 2119. - -==Motivation== - -As the use of bitcoin, as well as other blockchain-based currencies, digital assets, and payment networks continues to expand, the issue of address exchange becomes ever more important. With the introduction of safer, more secure, and user friendly address exchange processes such as [[bip-0075.mediawiki|BIP75]], there comes the issue of how to expose addresses. In order to negotiate for the most secure supported method of address exchange, we feel the best way is through a unique endpoint. This will serve HD wallet addresses and [[bip-0070.mediawiki|BIP70]] PaymentRequests as well as accept [[bip-0075.mediawiki|BIP75]] InvoiceRequests through a unique endpoint that can specifically expose supported methods via negotiation between the two parties. This specification proposes a standard HTTP flow for service discovery, wallet address retrieval (plaintext, BitcoinURI and PaymentRequest) as well as [[bip-0075.mediawiki|BIP75]] message passing. - -==Use Cases== - -===HD Wallet Address Exchange / BIP70 Endpoint=== - -A bitcoin wallet developer would like to dynamically retrieve a unique address for a remote wallet. The developer would prefer a PaymentRequest, but would accept a BitcoinURI ([[bip-0021.mediawiki|BIP21]]). The Address Service spec allows the developer to discover which address options are available, if any. The developer can then specify which type of data they would prefer (based on availability) and submit a request for that data. - -===BIP75 InvoiceRequest Submission Endpoint=== - -A bitcoin wallet developer would like to use [[bip-0075.mediawiki|BIP75]] to get a fully validated address. The Address Service specification allows the developer to discover if the receiving wallet (via the address endpoint) supports [[bip-0075.mediawiki|BIP75]]. Additionally, the Address Service specification provides the URI where a [[bip-0075.mediawiki|BIP75]] InvoiceRequest may be submitted if supported. - -==Details== - -===DANE / TLSA=== - -Address Servers SHOULD be DANE / TLSA ([https://tools.ietf.org/html/rfc7671 RFC 7671]) enabled. - -===Available Services=== - -This flow will use a HTTP OPTIONS request to the address endpoint URL in order to determine service availability. The response will use the '''Allow''' (existing) and '''Accept''' (existing) HTTP headers to inform the client which services the address endpoint supports. - -====Allow Header Usage==== - -The '''Allow''' header is used, as defined in [https://tools.ietf.org/html/rfc2616 RFC 2616] (14.7), to supply the client with supported HTTP methods for use with the address endpoint URL. The '''Allow''' header must return supported HTTP methods for the available return MIME types. See the table below for HTTP methods that relate to supported return MIME types. - -====Accept Header Usage==== - -The '''Accept''' header is defined in [https://tools.ietf.org/html/rfc2616 RFC 2616] (14.1) and is used in the OPTIONS response. This header is generally used in the client request, but this specification uses it in the Address Service OPTIONS response. - -The '''Accept''' header MUST contain all acceptable MIME types for the endpoint. The following table defines MIME types for the appropriate return values: - -{| class="wikitable" -! MIME Type !! HTTP Method !! HTTP Response Content -|- -| text/plain || GET || Raw Wallet Address -|- -| application/bitcoin-uri || GET || Bitcoin URL ([[bip-0021.mediawiki|BIP21]] / [[bip-0072.mediawiki|BIP72]]) -|- -| application/bitcoin-paymentrequest || GET || [[bip-0070.mediawiki|BIP70]] PaymentRequest -|- -| application/bitcoin-paymentprotocol-message || POST || [[bip-0075.mediawiki|BIP75]] ProtocolMessage -|- -| application/bitcoin-encrypted-paymentprotocol-message || POST || [[bip-0075.mediawiki|BIP75]] EncryptedProtocolMessage -|- -|} - -Based on the '''Allow''' and '''Accept''' headers in the OPTIONS response, the client MAY make another TLS-protected HTTP call to the URL using the HTTP method for the data type and the '''Accept''' value that the client requests. - -====Optional Public Key Sharing==== - -In order to fully support [[bip-0075.mediawiki|BIP75]] Payment Protocol using EncryptedProtocolMessages, the Address Service MAY provide a '''receiver_public_key''' for the address endpoint by including the '''X-Identity''' HTTP header in the response. The contents of the '''X-Identity''' header MUST be a hex-encoded, DER-formatted EC Public Key. - -===Raw Wallet Addresses, BitcoinURIs and PaymentRequests=== - -====Request==== - -A HTTP GET request on a TLS-protected HTTP address endpoint MUST set the '''Accept''' header to the requested content type. This requested content type MUST have been listed in the '''Accept''' header of the previous OPTIONS response. - -====Response==== - -The Address Service MUST respond with the appropriate requested data type and a HTTP Status Code of '''200 (OK)'''. - -If the data type is temporarily unavailable and should be retried later, the Address Service MUST respond with a HTTP Status Code of 503 (Service Unavailable). The Address Service MAY include a '''Retry-After''' HTTP Header if it can determine when an appropriate response will be available. - -If the data type is permanently unavailable, for example if the address endpoint has been disabled, the Address Service MUST respond with a HTTP Status Code of 410 (Gone). - -===Handling BIP75 Messages=== - -====Request==== - -A HTTP POST request on a TLS-protected HTTP address endpoint MUST set the '''Accept''' header to the requested response MIME Type. The available response MIME Types for this request are: - -* application/bitcoin-paymentprotocol-message -* application/bitcoin-encrypted-paymentprotocol-message - -The HTTP POST request MUST set the '''Content-Transfer-Encoding''' header to "binary" and the '''Content-Type''' header to either of the aforementioned MIME Types. The content of the POST message MUST be the binary representation of a serialized ProtocolMessage or EncryptedProtocolMessage. - -====Immediate Response==== - -The Address Service MUST respond with a HTTP Status Code of '''200 (OK)''' if the response type is a ProtocolMessage or EncryptedProtocolMessage. The Address Service MUST respond with a ProtocolMessage or EncryptedProtocolMessage based on the '''Accept''' header in the client request. - -====Delayed Response==== - -The Address Service MUST respond with a HTTP Status Code of '''202 (Accepted)''' and the '''Location''' header set to a location to later retrieve the resulting ProtocolMessage or EncryptedProtocolMessage - -'''NOTE''': [[bip-0075.mediawiki|BIP75]] messages SHOULD be transmitted using EncryptedProtocolMessage message types in order to provide additional application-layer security. - - -==Implementation== - -TBD - -==References== -* [[bip-0021.mediawiki|BIP21 - URI Scheme]] -* [[bip-0070.mediawiki|BIP70 - Payment Protocol]] -* [[bip-0072.mediawiki|BIP72 - bitcoin: URI Extensions for Payment Protocol]] -* [[bip-0075.mediawiki|BIP75 - Out of Band Address Exchange using Payment Protocol Encryption]] -* [https://tools.ietf.org/html/rfc2616 RFC2616 - Hypertext Transfer Protocol -- HTTP/1.1] -* [https://tools.ietf.org/html/rfc6698 RFC6698 - The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA] -* [https://tools.ietf.org/html/rfc7671 RFC7671 - The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance] \ No newline at end of file From 89a9829ec4703f7d7d69db60d6cd99e66eb2a3de Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 2 Sep 2016 12:28:34 +0800 Subject: [PATCH 0444/2326] Add NULLDUMMY softfork BIP --- bip-nulldummy.mediawiki | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 bip-nulldummy.mediawiki diff --git a/bip-nulldummy.mediawiki b/bip-nulldummy.mediawiki new file mode 100644 index 0000000000..802fb21d5b --- /dev/null +++ b/bip-nulldummy.mediawiki @@ -0,0 +1,55 @@ +
+  BIP: ?
+  Title: Dealing with dummy stack element malleability
+  Author: Johnson Lau 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-09-02
+
+ +==Abstract== + +This document specifies proposed changes to the Bitcoin transaction validity rules to fix the malleability of extra stack element for OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. + + +==Motivation== + +Signature malleability refers to the ability of any relay node on the network to transform the signature in transactions, with no access to the relevant private keys required. For non-segregated witness transactions, signature malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]). + +A design flaw in OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY makes them consuming an extra stack element ("dummy element") after signature validation. The dummy element is not inspected in any manner, and could be replaced by any value without invalidating the script. This document specifies a new rule to fix this signature malleability. + + +==Specification== + +To fix the dummy element malleability, a new consensus rule ("NULLDUMMY") is deployed to require that the dummy element MUST be the empty byte array. Anything else makes the script evaluate to false immediately. The NULLDUMMY rule applies to OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY in pre-segregated scripts, and also pay-to-witness-script-hash scripts described in BIP141. + + +==Deployment== + +This BIP will be deployed by "version bits" [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9] using the same parameters for BIP141 and BIP143, with the name "segwit" and using bit 1. + +For Bitcoin mainnet, the BIP9 starttime is midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout is midnight TBD UTC (Epoch timestamp TBD). + +For Bitcoin testnet, the BIP9 starttime is midnight 1 May 2016 UTC (Epoch timestamp 1462060800) and BIP9 timeout is midnight 1 May 2017 UTC (Epoch timestamp 1493596800). + + +==Compatibility== + +The reference client has produced compatible signatures from the beginning, and the NULLDUMMY rule has been enforced as relay policy by the reference client since v0.10.0. There has been no transactions violating the requirement being added to the chain since at least August 2015. + +For all scriptPubKey types in actual use, non-compliant signatures can trivially be converted into compliant ones, so there is no loss of functionality by this requirement. Users MUST pay extra attention to this new rule when designing exotic scripts. + + +==Implementation== + +An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8636 + + +==Acknowledgements== + +Peter Todd is the original author of NULLDUMMY. This document is extracted from the previous [https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki BIP62] proposal, which was composed by Pieter Wuille and had input from various people. + + +==Copyright== + +This document is placed in the public domain. From 40ba92af28fe7f60c3fd438994a018cf0f588eb3 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Fri, 2 Sep 2016 15:15:48 +0800 Subject: [PATCH 0445/2326] BIP146: title and content changed --- README.mediawiki | 4 +-- bip-0146.mediawiki | 84 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 8b48af156f..d2d6521a9b 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -513,8 +513,8 @@ Those proposing changes should consider that ultimately consent may rest with th | Draft |- | [[bip-0146.mediawiki|146]] -| Dealing with signature malleability -| Pieter Wuille, Johnson Lau +| Dealing with signature encoding malleability +| Johnson Lau, Pieter Wuille | Standard | Draft |- diff --git a/bip-0146.mediawiki b/bip-0146.mediawiki index c92c54ef56..5358411a65 100644 --- a/bip-0146.mediawiki +++ b/bip-0146.mediawiki @@ -1,8 +1,8 @@
   BIP: 146
-  Title: Dealing with signature malleability
-  Author: Pieter Wuille 
-          Johnson Lau 
+  Title: Dealing with signature encoding malleability
+  Author: Johnson Lau 
+          Pieter Wuille 
   Status: Draft
   Type: Standards Track
   Created: 2016-08-16
@@ -10,58 +10,114 @@
 
 ==Abstract==
 
-This document specifies proposed changes to the Bitcoin transaction validity rules to fix signature malleability for common transaction types.
+This document specifies proposed changes to the Bitcoin transaction validity rules to fix signature malleability related to ECDSA signature encoding.
 
 
 ==Motivation==
 
 Signature malleability refers to the ability of any relay node on the network to transform the signature in transactions, with no access to the relevant private keys required. For non-segregated witness transactions, signature malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]).
 
-Since the enforcement of Strict DER signatures ([https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]), there are 2 remaining known sources of malleability in the signature passed to ECDSA verification opcodes:
+Since the enforcement of Strict DER signatures ([https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]), there are 2 remaining known sources of malleability in ECDSA signatures:
 
 # '''Inherent ECDSA signature malleability''': ECDSA signatures are inherently malleable as taking the negative of the number S inside (modulo the curve order) does not invalidate it.
 
-# '''Inputs ignored by scripts''': The (unnecessary) extra stack element consumed by OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY is not inspected in any manner, and could be replaced with any value.
+# '''Malleability of failing signature''': If a signature failed to validate in OP_CHECKSIG or OP_CHECKMULTISIG, a FALSE would be returned to the stack and the script evaluation would continue. The failing signature may take any value, as long as it follows all the rules described in BIP66.
 
 This document specifies new rules to fix the aforesaid signature malleability.
 
 
 ==Specification==
 
-To fix signature malleability, the following new rules are applied:
+To fix signature encoding malleability, the following new rules are applied to pre-segregated witness and segregated witness scripts:
 
 
 ===LOW_S===
 
 We require that the S value inside ECDSA signatures is at most the curve order divided by 2 (essentially restricting this value to its lower half range). Every signature passed to OP_CHECKSIGIncluding pay-to-witness-public-key-hash (P2WPKH) described in BIP141, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, or OP_CHECKMULTISIGVERIFY, to which ECDSA verification is applied, MUST use a S value between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive) with strict DER encoding (see [https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]).
 
-These operators all perform ECDSA verifications on pubkey/signature pairs, iterating from the top of the stack backwards. For each such verification, if the signature does not pass the Low S value check, the entire script evaluates to false immediately. If the signature is valid DER with low S value, but does not pass ECDSA verification, opcode execution continues as it used to, causing opcode execution to stop and push false on the stack (but not immediately fail the script) in some cases, which potentially skips further signatures (and thus does not subject them to Low S value check).
+If a signature passing to ECDSA verification does not pass the Low S value check and is not an empty byte array, the entire script evaluates to false immediately.
 
 A high S value in signature could be trivially replaced by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.
 
 
-===NULLDUMMY===
+===NULLFAIL===
 
-The extra stack element consumed by OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY MUST be the empty byte array (the result of OP_0). Anything else makes the script evaluate to false immediately.
+If an OP_CHECKSIG is trying to return a FALSE value to the stack, we require that the relevant signature must be an empty byte array.
+
+If an OP_CHECKMULTISIG is trying to return a FALSE value to the stack, we require that all signatures passing to this OP_CHECKMULTISIG must be empty byte arrays, even the processing of some signatures might have been skipped due to early termination of the signature verification.
+
+Otherwise, the entire script evaluates to false immediately.
+
+
+==Examples==
+
+The following examples are the combined results of the LOW_S and NULLFAIL rules.Please note that due to implementation details in reference client v0.13.1, some signatures with S value higher than the half curve order might pass the LOW_S test. However, such signatures are certainly invalid, and will fail later due to NULLFAIL test.
+
+Notation:
+
+  CO       : curve order = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
+  HCO      : half curve order = CO / 2 = 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0
+  P1, P2   : valid, serialized, public keys
+  S1L, S2L : valid low S value signatures using respective keys P1 and P2 (1 ≤ S ≤ HCO)
+  S1H, S2H : signatures with high S value (otherwise valid) using respective keys P1 and P2 (HCO < S < CO)
+  F        : any BIP66-compliant non-empty byte array but not a valid signature
+
+These scripts will return a TRUE to the stack as before:
+
+  S1L P1 CHECKSIG
+  0 S1L S2L 2 P1 P2 2 CHECKMULTISIG
+
+These scripts will return a FALSE to the stack as before:
+
+  0 P1 CHECKSIG
+  0 0 0 2 P1 P2 2 CHECKMULTISIG
+
+These previously TRUE scripts will fail immediately under the new rules:
+
+  S1H P1 CHECKSIG
+  0 S1H S2L 2 P1 P2 2 CHECKMULTISIG
+  0 S1L S2H 2 P1 P2 2 CHECKMULTISIG
+  0 S1H S2H 2 P1 P2 2 CHECKMULTISIG
+
+These previously FALSE scripts will fail immediately under the new rules:
+
+  F P1 CHECKSIG
+  0 S2L S1L 2 P1 P2 2 CHECKMULTISIG
+  0 S1L F   2 P1 P2 2 CHECKMULTISIG
+  0 F   S2L 2 P1 P2 2 CHECKMULTISIG
+  0 S1L 0   2 P1 P2 2 CHECKMULTISIG
+  0 0   S2L 2 P1 P2 2 CHECKMULTISIG
+  0 F   0   2 P1 P2 2 CHECKMULTISIG
+  0 0   F   2 P1 P2 2 CHECKMULTISIG
 
 
 ==Deployment==
 
-This BIP will be deployed by "version bits" [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9] using the same parameters for BIP141 and BIP143, with the name "segwit" and using bit 1.
+This BIP will be deployed by "version bits" [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9]. Details TBD.
 
 For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD).
 
-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).
+For Bitcoin testnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD).
 
 
 ==Compatibility==
 
-The reference client has produced compatible signatures since v0.9.0, and NULLDUMMY and LOW_S have been enforced as relay policy by the reference client since v0.10.0 and v0.11.1 respectively. As of August 2016, very few transactions violating the requirement are being added to the chain. In addition, every non-compliant signature can trivially be converted into a compliant one, so there is no loss of functionality by this requirement.
+The reference client has produced LOW_S compatible signatures since v0.9.0, and the LOW_S rule has been enforced as relay policy by the reference client since v0.11.1. As of August 2016, very few transactions violating the requirement are being added to the chain. For all scriptPubKey types in actual use, non-compliant signatures can trivially be converted into compliant ones, so there is no loss of functionality by these requirements.
+
+Scripts with failing OP_CHECKSIG or OP_CHECKMULTISIG rarely happen on the chain. The NULLFAIL rule has been enforced as relay policy by the reference client since v0.13.1.
+
+Users MUST pay extra attention to these new rules when designing exotic scripts.
 
 
 ==Implementation==
 
-An implementation for the reference client is available at https://github.com/bitcoin/bitcoin/pull/8533
+Implementations for the reference client is available at:
+
+https://github.com/bitcoin/bitcoin/blob/35fe0393f216aa6020fc929272118eade5628636/src/script/interpreter.cpp#L185
+
+and
+
+https://github.com/bitcoin/bitcoin/pull/8634
 
 
 ==Footnotes==

From 36496946860d71d4460437572e6c4c780b125cad Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 2 Sep 2016 22:09:46 +0000
Subject: [PATCH 0446/2326] Assign BIP 147: Dealing with dummy stack element
 malleability

---
 README.mediawiki                              | 6 ++++++
 bip-nulldummy.mediawiki => bip-0147.mediawiki | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
 rename bip-nulldummy.mediawiki => bip-0147.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index 8b48af156f..813d6b3b59 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -518,6 +518,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Standard
 | Draft
 |-
+| [[bip-0147.mediawiki|147]]
+| Dealing with dummy stack element malleability
+| Johnson Lau
+| Standard
+| Draft
+|-
 | [[bip-0150.mediawiki|150]]
 | Peer Authentication
 | Jonas Schnelli
diff --git a/bip-nulldummy.mediawiki b/bip-0147.mediawiki
similarity index 99%
rename from bip-nulldummy.mediawiki
rename to bip-0147.mediawiki
index 802fb21d5b..8b6fe1ab37 100644
--- a/bip-nulldummy.mediawiki
+++ b/bip-0147.mediawiki
@@ -1,5 +1,5 @@
 
-  BIP: ?
+  BIP: 147
   Title: Dealing with dummy stack element malleability
   Author: Johnson Lau 
   Status: Draft

From 316d4f32a0fa5630de027893e8e7ef2c74bd4c3d Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Thu, 21 Jul 2016 18:40:38 +0200
Subject: [PATCH 0447/2326] Version 2 sendcmpct for integration of segwit with
 CB

---
 bip-0152.mediawiki | 36 ++++++++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 6 deletions(-)

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index cfae0c0d1b..8d84ee98fa 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -21,7 +21,7 @@ Thus, decreasing the bandwidth used during block relay is very useful for many i
 
 While the goal of this work is explicitly not to reduce block transfer latency, it does, as a side effect reduce block transfer latencies in some rather significant ways. Additionally, this work forms a foundation for future work explicitly targeting low-latency block transfer.
 
-==Specification==
+==Specification for version 1==
 
 ===Intended Protocol Flow===
 
@@ -45,7 +45,7 @@ A PrefilledTransaction structure is used in HeaderAndShortIDs to provide a list
 |-
 |index||CompactSize||1, 3 bytes||Compact Size, differentially encoded since the last PrefilledTransaction in a list||The index into the block at which this transaction is
 |-
-|tx||Transaction||variable||As encoded in "tx" messages||The transaction which is in the block at index index.
+|tx||Transaction||variable||As encoded in "tx" messages sent in response to getdata MSG_TX||The transaction which is in the block at index index.
 |}
 
 ====HeaderAndShortIDs====
@@ -90,7 +90,7 @@ A BlockTransactions structure is used to provide some of the transactions in a b
 |-
 |transactions_length||CompactSize||1 or 3 bytes||As used to encode array lengths elsewhere||||The number of transactions provided
 |-
-|transactions||List of Transactions||variable||As encoded in "tx" messages||The transactions provided
+|transactions||List of Transactions||variable||As encoded in "tx" messages in response to getdata MSG_TX||The transactions provided
 |}
 
 ====Short transaction IDs====
@@ -111,6 +111,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 # Upon receipt of a "sendcmpct" message with the second integer set to something other than 1, nodes MUST treat the peer as if they had not received the message (as it indicates the peer will provide an unexpected encoding in cmpctblock, and/or other, messages). This allows future versions to send duplicate sendcmpct messages with different versions as a part of a version handshake for future versions.
 # Nodes SHOULD check for a protocol version of >= 70014 before sending sendcmpct messages.
 # Nodes MUST NOT send a request for a MSG_CMPCT_BLOCK object to a peer before having received a sendcmpct message from that peer.
+# Nodes MUST NOT request a MSG_CMPCT_BLOCK object before having sent a sendcmpct message to that peer, as the peer cannot know what version protocol to use in the response.
 
 ====MSG_CMPCT_BLOCK====
 # getdata messages may now contain requests for MSG_CMPCT_BLOCK objects.
@@ -136,7 +137,17 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 ## For each short transaction ID from the original cmpctblock, in order, find the corresponding transaction either from the blocktxn message or from other sources and place it in the first available position in the block.
 # Once the block has been reconstructed, it shall be processed as normal, keeping in mind that short transaction IDs are expected to occasionally collide, and that nodes MUST NOT be penalized for such collisions, wherever they appear.
 
-===Implementation Notes===
+==Specification for version 2==
+Compact blocks version 2 is almost identical to version 1, but supports segregated witness transactions (BIP 141 and BIP 144). The changes are:
+
+# The version number inside sendcmpct is 2 instead of 1.
+# Transactions inside cmpctblock messages (both those used as direct announcement and those in response to getdata) and in blocktxn should include witness data, using the same format as responses to getdata MSG_WITNESS_TX, specified in BIP144.
+# Short transaction IDs sent to us in cmpctblock messages, and sent by us in getblocktxn messages, are computed using the same process as in version 1, but using the wtxid as defined in BIP 141 instead of the txid.
+
+Nodes that support segwit MAY choose to support both version 1 and 2 compact blocks. To do so, two sendcmpct messages SHOULD be sent at startup: the first one for version 1 and a second one for version 2.
+When receiving multiple sendcmpct messages, the last received one that is compatible with the receiver's software MUST be used.
+
+==Implementation Notes==
 # For nodes which have sufficient inbound bandwidth, sending a sendcmpct message with the first integer set to 1 to up to 3 peers is RECOMMENDED. If possible, it is RECOMMENDED that those peers be selected based on their past performance in providing blocks quickly (eg the three peers which provided the highest number of the recent N blocks the quickest), allowing nodes to receive blocks which come from those peers in only 0.5*RTT.
 
 # Nodes MUST NOT send such sendcmpct messages to more than three peers, as it encourages wasting outbound bandwidth across the network.
@@ -153,7 +164,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 
 # Note that the MSG_CMPCT_BLOCK section does not require that nodes respond to MSG_CMPCT_BLOCK getdata requests for blocks which they did not recently announce. This allows nodes to calculate cmpctblock messages at announce-time instead of at request-time. Blocks which are requested with a MSG_CMPCT_BLOCK getdata, but which are not responded to with a cmpctblock message MUST be responded to with a block message, allowing nodes to request all blocks using MSG_CMPCT_BLOCK getdatas and rely on their peer to pick an appropriate response.
 
-# While the current version sends transactions with the same encodings as is used in tx messages and elsewhere in the protocol, the version field in sendcmpct is intended to allow this to change in the future. For this reason, it is recommended that the code used to decode PrefilledTransaction and BlockTransactions messages be prepared to take a different transaction encoding, if and when the version field in sendcmpct changes in a future BIP.
+# While the current version sends transactions with the same encodings as are used in tx messages and elsewhere in the protocol, the version field in sendcmpct is intended to allow this to change in the future. For this reason, it is recommended that the code used to decode PrefilledTransaction and BlockTransactions messages be prepared to take a different transaction encoding, if and when the version field in sendcmpct changes in a future BIP.
 
 # Any undefined behavior in this spec may cause failure to transfer block to, peer disconnection by, or self-destruction by the receiving node. A node receiving non-minimally-encoded CompactSize encodings should make a best-effort to eat the sender's cat.
 
@@ -190,13 +201,26 @@ In case 1, we're good. In cases 2, 3, or 4, we request the full transaction beca
 
 This means that ''B = 48'' bits short IDs suffice for blocks with up to ''t = 10000'' transactions, mempools up to ''m = 100000'' transactions, with failure to reconstruct at most one in ''F = 281474'' blocks. Since failure to reconstruct just means we fall back to normal inv/header based relay, it isn't necessary to avoid such failure completely. It just needs to be sufficiently rare they have a lower impact than random transmission failures (for example, network disconnection, node overloaded, ...).
 
+====Separate version for segregated witness====
+
+The changes to transaction and block relay in BIP 144 introduce separate MSG_FILTERED_ versions of messages in getdata,
+allowing a receiver to choose individually where witness data is wanted.
+
+This method is not useful for compact blocks because `cmpctblock` blocks can be sent unsolicitedly in high-bandwidth
+mode, so we need to negotiate at least whether those should include witness data up front. There is little use for a
+validating node that only sometimes processes witness data, so we may as well use that negotiation for everything and
+turn it into a separate protocol version. We also need a means to distinguish different versions of the same transaction
+with different witnesses for correct reconstruction, so this also forces us to use wtxids instead of txids for short IDs
+everywhere in that case.
+
 ==Backward compatibility==
 
 Older clients remain fully compatible and interoperable after this change.
 
 ==Implementation==
 
-https://github.com/bitcoin/bitcoin/pull/8068
+https://github.com/bitcoin/bitcoin/pull/8068 for version 1.
+https://github.com/bitcoin/bitcoin/pull/8393 for version 2.
 
 ==Acknowledgements==
 

From 367eade6e8e639c31e9c44d13f882a8273012656 Mon Sep 17 00:00:00 2001
From: Matt Corallo 
Date: Mon, 5 Sep 2016 17:11:00 -0400
Subject: [PATCH 0448/2326] Add version negotiation details

---
 bip-0152.mediawiki | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 8d84ee98fa..9a011650fa 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -108,10 +108,10 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 # The second integer SHALL be interpreted as a little-endian version number. Nodes sending a sendcmpct message MUST currently set this value to 1.
 # Upon receipt of a "sendcmpct" message with the first and second integers set to 1, the node SHOULD announce new blocks by sending a cmpctblock message.
 # Upon receipt of a "sendcmpct" message with the first integer set to 0, the node SHOULD NOT announce new blocks by sending a cmpctblock message, but SHOULD announce new blocks by sending invs or headers, as defined by BIP130.
-# Upon receipt of a "sendcmpct" message with the second integer set to something other than 1, nodes MUST treat the peer as if they had not received the message (as it indicates the peer will provide an unexpected encoding in cmpctblock, and/or other, messages). This allows future versions to send duplicate sendcmpct messages with different versions as a part of a version handshake for future versions.
+# Upon receipt of a "sendcmpct" message with the second integer set to something other than 1, nodes MUST treat the peer as if they had not received the message (as it indicates the peer will provide an unexpected encoding in cmpctblock, and/or other, messages). This allows future versions to send duplicate sendcmpct messages with different versions as a part of a version handshake for future versions. See Protocol Versioning section, below, for more info on the specifics of the version-negotiation mechanics.
 # Nodes SHOULD check for a protocol version of >= 70014 before sending sendcmpct messages.
 # Nodes MUST NOT send a request for a MSG_CMPCT_BLOCK object to a peer before having received a sendcmpct message from that peer.
-# Nodes MUST NOT request a MSG_CMPCT_BLOCK object before having sent a sendcmpct message to that peer, as the peer cannot know what version protocol to use in the response.
+# Nodes MUST NOT request a MSG_CMPCT_BLOCK object before having sent all sendcmpct messages to that peer which they intend to send, as the peer cannot know what version protocol to use in the response.
 
 ====MSG_CMPCT_BLOCK====
 # getdata messages may now contain requests for MSG_CMPCT_BLOCK objects.
@@ -137,16 +137,22 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 ## For each short transaction ID from the original cmpctblock, in order, find the corresponding transaction either from the blocktxn message or from other sources and place it in the first available position in the block.
 # Once the block has been reconstructed, it shall be processed as normal, keeping in mind that short transaction IDs are expected to occasionally collide, and that nodes MUST NOT be penalized for such collisions, wherever they appear.
 
+==Protocol Versioning==
+# The protocol version negotiation allows two nodes to agree on the version of compact blocks which they will exchange. As it is only in a single field, it does not allow a node to support a specific version in only one direction (sending or receiving).
+# Upon connection establishment, a node SHOULD send a burst of sendcmpct messages containing every version of compact block encodings for which they are willing to support sending cmpctblock and blocktxn messages, and receiving getblocktxn messages. These messages SHOULD be ordered in the order of the priority which the node wishes to receive cmpctblock/blocktxn messages, with the highest-priority version sendcmpct message sent last.
+# The encoding version used to send a cmpctblock or blocktxn message or to receive a getblocktxn message MUST be the second integer (version number) in the most recent sendcmpct message received for which a sendcmpct message with the same version number was sent.
+# Nodes MUST NOT send a sendcmpct message which contains a version number other than the version number which has been negotiated for receiving cmpctblock/blocktxn messages after sending a request for a MSG_CMPCT_BLOCK object, sending a cmpctblock, getblocktxn, blocktxn, or pong message.
+# Nodes MUST NOT set the first integer (boolean) value in sendcmpct messages to 1 in any sendcmpct message prior to the last sendcmpct message which contains a novel second integer (version number).
+# As a node must send all sendcmpct messages which contain a novel version announcement before any other compact block-related messages, it is possible to determine which version of compact blocks will be used for each object received. It is, however, not possible to know which version will be used to encode the response to a request for a compact block object before any MSG_CMPCT_BLOCK-containing inv, cmpctblock, getblocktxn, blocktxn, or ping messages have been exchanged.
+# Thus, if a node wishes to determine exactly which version of compact blocks will be used before requesting a compact block object, it must send all of its sendcmpct version announcements, followed by a ping, and wait for the pong response to ensure it has received all sendcmpctblock version announcement messages from the remote peer. Nodes can, obviously, however, determine that the version used will be at least a certain version (in their priority order) after having received a sendcmpct message from the remote peer containing that version as the second integer.
+
 ==Specification for version 2==
 Compact blocks version 2 is almost identical to version 1, but supports segregated witness transactions (BIP 141 and BIP 144). The changes are:
 
-# The version number inside sendcmpct is 2 instead of 1.
+# The second integer (version number) inside sendcmpct is 2 instead of 1 (see Protocol Versioning section, above).
 # Transactions inside cmpctblock messages (both those used as direct announcement and those in response to getdata) and in blocktxn should include witness data, using the same format as responses to getdata MSG_WITNESS_TX, specified in BIP144.
 # Short transaction IDs sent to us in cmpctblock messages, and sent by us in getblocktxn messages, are computed using the same process as in version 1, but using the wtxid as defined in BIP 141 instead of the txid.
 
-Nodes that support segwit MAY choose to support both version 1 and 2 compact blocks. To do so, two sendcmpct messages SHOULD be sent at startup: the first one for version 1 and a second one for version 2.
-When receiving multiple sendcmpct messages, the last received one that is compatible with the receiver's software MUST be used.
-
 ==Implementation Notes==
 # For nodes which have sufficient inbound bandwidth, sending a sendcmpct message with the first integer set to 1 to up to 3 peers is RECOMMENDED. If possible, it is RECOMMENDED that those peers be selected based on their past performance in providing blocks quickly (eg the three peers which provided the highest number of the recent N blocks the quickest), allowing nodes to receive blocks which come from those peers in only 0.5*RTT.
 

From 2692800cab4680c3310fc900e2a3e6f479056e70 Mon Sep 17 00:00:00 2001
From: Thomas Kerin 
Date: Wed, 7 Sep 2016 16:25:59 +0100
Subject: [PATCH 0449/2326] Fix url for BIP44

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

diff --git a/bip-p2sh-accounts.mediawiki b/bip-p2sh-accounts.mediawiki
index cf030039bc..251f7682d9 100644
--- a/bip-p2sh-accounts.mediawiki
+++ b/bip-p2sh-accounts.mediawiki
@@ -92,5 +92,5 @@ To derive the P2SH address from the above calculated public key, we use the enca
 * [[bip-0016.mediawiki|BIP16 - Pay to Script Hash]]
 * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
 * [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]]
-* [[bip-0043.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]
-* [[bip-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]]
\ No newline at end of file
+* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]
+* [[bip-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]]

From c2213ed1fdabc671c8b3c46b3f7dcfedacf7dafb Mon Sep 17 00:00:00 2001
From: jonnynewbs 
Date: Thu, 15 Sep 2016 16:39:10 -0400
Subject: [PATCH 0450/2326] Update BIP 141 to include definition of Virtual
 transaction size and Transaction weight

---
 bip-0141.mediawiki | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index ccf18b6232..2b2360b7ce 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -125,6 +125,20 @@ The sigop limit is likewise quadrupled to ≤ 80,000.
 
 Each P2WPKH input is counted as 1 sigop. In addition, opcodes within a P2WSH witnessScript are counted identically as previously within the P2SH redeemScript. That is, CHECKSIG is counted as only 1 sigop, and CHECKMULTISIG is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program.
 
+=== Additional definitions ===
+
+The following definitions are not used for consensus limits, but are suggested to provide language consistent with the terminology introduced above.
+
+==== Transaction size calculations ====
+
+''Transaction weight'' is defined as ''Base transaction size'' * 3 + ''Total transaction size'' (ie. the same method as calculating ''Block weight'' from ''Base size'' and ''Total size'').
+
+''Virtual transaction size'' is defined as ''Transaction weight'' / 4 (rounded up to nearest integer).
+
+''Base transaction size'' is the transaction size in bytes with the original transaction serialization without any witness-related data.
+
+''Total transaction size'' is the transaction size in bytes serialized as described in [[bip-0144.mediawiki|BIP144]], including base data and witness data.
+
 == Examples ==
 
 === P2WPKH ===

From a380daff168cccac72b716294cc6cd947d9e0df6 Mon Sep 17 00:00:00 2001
From: Matt Corallo 
Date: Thu, 8 Sep 2016 10:43:22 -0400
Subject: [PATCH 0451/2326] Switch priority order to highest-first and add
 sample negotiation

---
 bip-0152.mediawiki | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 9a011650fa..5635ed3f65 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -139,13 +139,20 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 
 ==Protocol Versioning==
 # The protocol version negotiation allows two nodes to agree on the version of compact blocks which they will exchange. As it is only in a single field, it does not allow a node to support a specific version in only one direction (sending or receiving).
-# Upon connection establishment, a node SHOULD send a burst of sendcmpct messages containing every version of compact block encodings for which they are willing to support sending cmpctblock and blocktxn messages, and receiving getblocktxn messages. These messages SHOULD be ordered in the order of the priority which the node wishes to receive cmpctblock/blocktxn messages, with the highest-priority version sendcmpct message sent last.
-# The encoding version used to send a cmpctblock or blocktxn message or to receive a getblocktxn message MUST be the second integer (version number) in the most recent sendcmpct message received for which a sendcmpct message with the same version number was sent.
+# Upon connection establishment, a node SHOULD send a burst of sendcmpct messages containing every version of compact block encodings for which they are willing to support sending cmpctblock and blocktxn messages, and receiving getblocktxn messages. These messages SHOULD be ordered in the order of the priority which the node wishes to receive cmpctblock/blocktxn messages, with the highest-priority version sendcmpct message sent first.
+# The encoding version used to send a cmpctblock or blocktxn message or to receive a getblocktxn message MUST be the second integer (version number) in the first sendcmpct message received for which a sendcmpct message with the same version number was sent.
 # Nodes MUST NOT send a sendcmpct message which contains a version number other than the version number which has been negotiated for receiving cmpctblock/blocktxn messages after sending a request for a MSG_CMPCT_BLOCK object, sending a cmpctblock, getblocktxn, blocktxn, or pong message.
-# Nodes MUST NOT set the first integer (boolean) value in sendcmpct messages to 1 in any sendcmpct message prior to the last sendcmpct message which contains a novel second integer (version number).
-# As a node must send all sendcmpct messages which contain a novel version announcement before any other compact block-related messages, it is possible to determine which version of compact blocks will be used for each object received. It is, however, not possible to know which version will be used to encode the response to a request for a compact block object before any MSG_CMPCT_BLOCK-containing inv, cmpctblock, getblocktxn, blocktxn, or ping messages have been exchanged.
+# As a node must send all sendcmpct messages which contain a novel version announcement before any other compact block-related messages, it is possible to determine which version of compact blocks will be used for each object received. It is, however, not possible to know which version will be used to encode the response to a request for a compact block object before any MSG_CMPCT_BLOCK-containing inv, cmpctblock, getblocktxn, blocktxn, or ping/pong messages have been exchanged.
 # Thus, if a node wishes to determine exactly which version of compact blocks will be used before requesting a compact block object, it must send all of its sendcmpct version announcements, followed by a ping, and wait for the pong response to ensure it has received all sendcmpctblock version announcement messages from the remote peer. Nodes can, obviously, however, determine that the version used will be at least a certain version (in their priority order) after having received a sendcmpct message from the remote peer containing that version as the second integer.
 
+===Sample Version Implementation===
+# By way of example, an implementation of the above protocol might look like the following.
+# Upon exchanging version/verack messages, a node immediately sends its list of sendcmpct announcements to the other side, with the version which it wants to receive sent first.
+# Upon receiving the first sendcmpct announcement with a protocol version which is understood from the remote peer, a node will "lock in" the compact block encoding version which will be used to encode compact blocks to that peer.
+# Upon receiving a sendcmpct announcement with a protocol version which is understood from the remote peer, a node will check if that protocol version is higher-receive-priority than the current receive-protocol-version in use on the connection, and switch to that version for decoding new compact block messages received.
+# A node might wish to keep a flag for each peer which indicates compact block version negotiation is complete, which can be set upon receiving any compact block-related, or pong message.
+# The above implementation requires only a compile-time list of supported versions in some static priority order, two version fields per peer, and an optional negotiation-complete boolean per-peer.
+
 ==Specification for version 2==
 Compact blocks version 2 is almost identical to version 1, but supports segregated witness transactions (BIP 141 and BIP 144). The changes are:
 

From bca0dfb3b981ac2bd35aee566dd33e14886a43f8 Mon Sep 17 00:00:00 2001
From: Matt Corallo 
Date: Thu, 8 Sep 2016 10:56:24 -0400
Subject: [PATCH 0452/2326] Fix message type

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

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 5635ed3f65..38c402cbfd 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -142,7 +142,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde
 # Upon connection establishment, a node SHOULD send a burst of sendcmpct messages containing every version of compact block encodings for which they are willing to support sending cmpctblock and blocktxn messages, and receiving getblocktxn messages. These messages SHOULD be ordered in the order of the priority which the node wishes to receive cmpctblock/blocktxn messages, with the highest-priority version sendcmpct message sent first.
 # The encoding version used to send a cmpctblock or blocktxn message or to receive a getblocktxn message MUST be the second integer (version number) in the first sendcmpct message received for which a sendcmpct message with the same version number was sent.
 # Nodes MUST NOT send a sendcmpct message which contains a version number other than the version number which has been negotiated for receiving cmpctblock/blocktxn messages after sending a request for a MSG_CMPCT_BLOCK object, sending a cmpctblock, getblocktxn, blocktxn, or pong message.
-# As a node must send all sendcmpct messages which contain a novel version announcement before any other compact block-related messages, it is possible to determine which version of compact blocks will be used for each object received. It is, however, not possible to know which version will be used to encode the response to a request for a compact block object before any MSG_CMPCT_BLOCK-containing inv, cmpctblock, getblocktxn, blocktxn, or ping/pong messages have been exchanged.
+# As a node must send all sendcmpct messages which contain a novel version announcement before any other compact block-related messages, it is possible to determine which version of compact blocks will be used for each object received. It is, however, not possible to know which version will be used to encode the response to a request for a compact block object before any MSG_CMPCT_BLOCK-containing getdata, cmpctblock, getblocktxn, blocktxn, or ping/pong messages have been exchanged.
 # Thus, if a node wishes to determine exactly which version of compact blocks will be used before requesting a compact block object, it must send all of its sendcmpct version announcements, followed by a ping, and wait for the pong response to ensure it has received all sendcmpctblock version announcement messages from the remote peer. Nodes can, obviously, however, determine that the version used will be at least a certain version (in their priority order) after having received a sendcmpct message from the remote peer containing that version as the second integer.
 
 ===Sample Version Implementation===

From 430bf9f2355203c755cb205c6ad5671ffae5e888 Mon Sep 17 00:00:00 2001
From: Matt Corallo 
Date: Fri, 9 Sep 2016 09:46:09 -0400
Subject: [PATCH 0453/2326] Specify which block encoding to use in the fallback
 block message

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

diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 38c402cbfd..1b74306176 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -159,6 +159,7 @@ Compact blocks version 2 is almost identical to version 1, but supports segregat
 # The second integer (version number) inside sendcmpct is 2 instead of 1 (see Protocol Versioning section, above).
 # Transactions inside cmpctblock messages (both those used as direct announcement and those in response to getdata) and in blocktxn should include witness data, using the same format as responses to getdata MSG_WITNESS_TX, specified in BIP144.
 # Short transaction IDs sent to us in cmpctblock messages, and sent by us in getblocktxn messages, are computed using the same process as in version 1, but using the wtxid as defined in BIP 141 instead of the txid.
+# Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object for which a cmpctblock message is not sent in response, the block message containing the requested block in non-compact form MUST be encoded with witnesses (as is sent in reply to a MSG_WITNESS_BLOCK getdata) if the protocol version used to encode the cmpctblock message would have been 2, and encoded without witnesses (as is sent in response to a MSG_BLOCK getdata) if the protocol version used to encode the cmpctblock message would have been 1.
 
 ==Implementation Notes==
 # For nodes which have sufficient inbound bandwidth, sending a sendcmpct message with the first integer set to 1 to up to 3 peers is RECOMMENDED. If possible, it is RECOMMENDED that those peers be selected based on their past performance in providing blocks quickly (eg the three peers which provided the highest number of the recent N blocks the quickest), allowing nodes to receive blocks which come from those peers in only 0.5*RTT.

From 605cb29934666c1acae15032f3f6abcf2bfcc6b3 Mon Sep 17 00:00:00 2001
From: TomZ 
Date: Mon, 19 Sep 2016 18:13:33 +0200
Subject: [PATCH 0454/2326] Adding Flexible Transactions proposal.

---
 bip-flexibleTransactions.mediawiki | 244 +++++++++++++++++++++++++++++
 1 file changed, 244 insertions(+)
 create mode 100644 bip-flexibleTransactions.mediawiki

diff --git a/bip-flexibleTransactions.mediawiki b/bip-flexibleTransactions.mediawiki
new file mode 100644
index 0000000000..9b428ec8a6
--- /dev/null
+++ b/bip-flexibleTransactions.mediawiki
@@ -0,0 +1,244 @@
+
+  BIP: ??
+  Title: Flexible Transactions
+  Author: Tom Zander 
+  Status: Draft
+  Type: Standards Track
+  Created: 2016-07-27
+
+ +==Abstract== + +This BIP describes the next step in making Bitcoin's most basic element, +the transaction, more flexible and easier to extend. At the same time this +fixes all known cases of malleability and resolves significant amounts of +technical debt. + +==Summary== + +Flexible Transactions uses the fact that the first 4 bytes in a transaction +determine the version and that the majority of the clients use a +non-consensus rule (a policy) to not accept transaction version numbers +other than those specifically defined by Bitcoin. +This BIP chooses a new version number, 4, and defines that the data +following the bytes for the version is in a format called Compact Message +Format (CMF). CMF is a flexible, token based format where each token is a +combination of a name, a format and a value. Because the name is added we +can skip unused tokens and we can freely add new tokens in a simple manner +in future. Soft fork upgrades will become much easier and cleaner this +way. + +This protocol upgrade cleans up past soft fork changes like BIP68 which +reuse existing fields and do them in a much better to maintain and easier +to parse system. It creates the building blocks to allow new features to be +added much cleaner in the future. + +It also shows to be possible to remove signatures from transactions with +minimal upgrades of software and still maintain a coherent transaction +history. Tests show that this can reduce space usage to about 75%. + +==Motivation== + +Token based file-formats are not new, systems like XML and HTMl use a +similar system to allow future growth and they have been quite successful +for decades in part because of this property. + +Bitcoin needs a similar way of making the transaction future-proof because +re-purposing not used fields for new features is not good for creating +maintainable code. + +Next to that this protocol upgrade will re-order the data-fields which +allows us to cleanly fix the malleability issue which means that future +technologies like Lightning Network will depend on this BIP being deployed. + +At the same time, due to this re-ordering of data fields, it becomes very +easy to remove signatures from a transaction without breaking its tx-id, +which is great for future pruning features. + + +=== Tokens === + +In the compact message format we define tokens and in this specification we +define how these tokens are named, where they can be placed and which are +optional. To refer to XML, this specification would be the schema of +a transaction. + +CMF tokens are triplets of name, format (like PositiveInteger) and value. +Names in this scope are defined much like an enumeration where the actual +integer value (id, below) is equally important to the written name. +If any token found that is not covered in the next table will make the +transaction that contains it invalid. + +{| class="wikitable" +|- +! Name !! id !! Format !! Default Value !! Description +|- +|TxEnd || 0 ||BoolTrue || Required ||A marker that is end of the transaction. +|- +|TxInPrevHash || 1 ||ByteArray|| Required ||TxId we are spending +|- +|TxPrevIndex || 2 ||Integer || 0 ||Index in prev tx we are spending (applied to previous TxInPrevHash) +|- +|TxInScript || 3 ||ByteArray|| Required ||The 'input' part of the script +|- +|TxOutValue || 4 ||Integer || Required ||Amount of satoshi to transfer +|- +|TxOutScript || 5 ||ByteArray|| Required ||The 'output' part of the script +|- +|LockByBlock || 6 ||Integer || Optional ||BIP68 replacement +|- +|LockByTime || 7 ||Integer || Optional ||BIP68 replacement +|- +|ScriptVersion || 8 ||Integer || 2 ||Defines script version for outputs following +|- +|NOP_1x || 1x || . || Optional ||Values that will be ignored by anyone parsing the transaction +|} + + +=== Scripting changes === + +In the current version of Bitcoin-script, version 1, there are various +opcodes that are used to validate the cryptographic proofs that users have +to provide in order to spend outputs. + +The OP_CHECKSIG is the most well known and, as its name implies, it +validates a signature. +In the new version of 'script' (version 2) the data that is signed is +changed to be equivalent to the transaction-id. This is a massive +simplification and also the only change between version 1 and version 2 of +script. + +=== Serialization order=== + +The tokens defined above shall be serialized in a certain order for the +transaction to be valid. Not serializing transactions in the +order specified would allow multiple interpretations of the data which +can't be allowed. +There is still some flexibility and for that reason it is important for +implementors to remember that the actual serialized data is used for the +calculation of the transaction-id. Reading and writing it may give you a +different output and when the txid changes, the signatures will break. + +At a macro-level the transaction has these segments. The order of the +segments can not be changed, but you can skip segments. + +{| class="wikitable" +!Segment !! Description +|- +| Inputs || Details about inputs. +|- +| Outputs || Details and scripts for outputs +|- +| Additional || For future expansion +|- +| Signatures || The scripts for the inputs +|- +| TxEnd || End of the transaction +|} + +The TxId is calculated by taking the serialized transaction without the +Signatures and the TxEnd and hashing that. + + +{| class="wikitable" +!Segment !! Tags !! Description +|- +|Inputs||TxInPrevHash and TxInPrevIndex||Index can be skipped, but in any input the PrevHash always has to come first +|- +|Outputs||TxOutScript, TxOutValue||Order is not relevant +|- +|Additional||LockByBlock LockByTime NOP_1x +|- +|Signatures||TxInScript||Exactly the same amount as there are inputs +|- +|TxEnd||TxEnd +|} + +TxEnd is there to allow a parser to know when one transaction in a stream +has ended, allowing the next to be parsed. + +Notice that the token ScriptVersion is currently not allowed because we +don't have any valid value to give it. But if we introduce a new script +version it would be placed in the outputs segment. + +=== Script v2 === + +The default value of ScriptVersion is number 2, as opposed to the version 1 +of script that the is in use today. The version 2 is mostly identical +to version one, including upgrades made to it over the years and in the +future. The only exception is that the OP_CHECKSIG is made dramatically +simpler. The input-type for OP_CHECKSIG is now no longer configurable, it is +always '1' and the content that will be signed is the txid. + +TODO: does check-multisig need its own mention? + + +=== Block-malleability === + +The effect of leaving the signatures out of the calculation of the +transaction-id implies that the signatures are also not used for the +calculation of the merkle tree. This means that changes in signatures +would not be detectable. Except naturally by the fact that missing or +broken signatures breaks full validation. But it is important to detect +modifications to such signatures outside of validating all transactions. + +For this reason the merkle tree is extended to include (append) the hash of +the v4 transactions. The markle tree will continue to have all the +transactions' tx-ids but appended to that are the v4 hahes that include the +signatures as well. Specifically the hash is taken over a data-blob that +is build up from: + +1. the tx-id +2. the CMF-tokens 'TxInScript' + + +=== Future extensibility === + +The NOP_1x wildcard used in the table explaining tokens is actually a list +of 10 values that currently are specified as NOP (no-operation) tags. + +Any implementation that supports the v4 transaction format should ignore +this field in a transaction. Interpreting and using the transaction as if +that field was not present at all. + +Future software may use these fields to decorate a transaction with +additional data or features. Transaction generating software should not +trivially use these tokens for their own usage without cooperation and +communication with the rest of the Bitcoin ecosystem as miners certainly +have the option to reject transactions that use unknown-to-them tokens. + +==Backwards compatibility == + +Fully validating older clients are not compatible with this change. + +SPV (simple payment validation) wallets need to be updated to receive or +create the new transaction type. + +This BIP introduces a new transaction format without changing or +deprecating the existing one or any of its practices. Therefor it is +backwards compatible for any existing data or parsing-code. + +==Reference Implementation== + +Bitcoin Classic includes this in its beta releases and a reference +implementation can be found at; + +https://github.com/bitcoinclassic/bitcoinclassic/pull/186 + + +==Deployment== + +To be determined + +==References== + +[https://github.com/bitcoinclassic/documentation/blob/master/spec/compactmessageformat.md] CMF + +==Copyright== + +Copyright (c) 2016 Tom Zander + +This document is licensed under the Open Publication License v1.0 + +Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. +Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder. From b3654088ccc7d78f5ce45b1b3e68a4dd9e06658c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 23 Sep 2016 10:03:34 +0000 Subject: [PATCH 0455/2326] Assign BIP 134: Flexible Transactions --- README.mediawiki | 6 ++++++ bip-flexibleTransactions.mediawiki => bip-0134.mediawiki | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) rename bip-flexibleTransactions.mediawiki => bip-0134.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index 0f0f9e1b55..1b293212f9 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -476,6 +476,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0134.mediawiki|134]] +| Flexible Transactions +| Tom Zander +| Standard +| Draft +|- | [[bip-0140.mediawiki|140]] | Normalized TXID | Christian Decker diff --git a/bip-flexibleTransactions.mediawiki b/bip-0134.mediawiki similarity index 99% rename from bip-flexibleTransactions.mediawiki rename to bip-0134.mediawiki index 9b428ec8a6..280103f12b 100644 --- a/bip-flexibleTransactions.mediawiki +++ b/bip-0134.mediawiki @@ -1,5 +1,5 @@
-  BIP: ??
+  BIP: 134
   Title: Flexible Transactions
   Author: Tom Zander 
   Status: Draft

From 3b4421b7886662e4c97fe6f2bd5d2ac0db362529 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 24 Sep 2016 00:36:32 +0000
Subject: [PATCH 0456/2326] bip-0002: Prohibit the OPL in new BIPs

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

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index 9d59405ff2..c5274c0009 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -172,7 +172,10 @@ For a later version (eg, GPL 3.0), you would increase the version number (and re
     License-Code: GPL-3.0   # This refers to GPL v3.0 *only*, no later license versions are acceptable.
     License-Code: GPL-3.0+  # This refers to GPL v3.0 *or later*.
 
-In the event that the text or code is not available under common license terms, the list should instead be replaced with the single term "Complex", and full details provided in the Copyright section of the BIP.
+In the event that the licensing for the text or code is too complicated to express with a simple list of alternatives, the list should instead be replaced with the single term "Complex". In all cases, details of the licensing terms must be provided in the Copyright section of the BIP.
+
+BIPs are not required to be *exclusively* licensed under approved terms, and may also be licensed under unacceptable licenses *in addition to* at least one acceptable license.
+In this case, only the acceptable license(s) should be listed in the License and License-Code headers.
 
 ====Recommended licenses====
 
@@ -194,10 +197,14 @@ In addition, it is recommended that literal code included in the BIP be dual-lic
 * FDL-1.3: [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License, version 1.3]
 * GPL-2.0+: [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer]
 * LGPL-2.1+: [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer]
-* OPL: [http://opencontent.org/openpub/ Open Publication License, version 1.0]
 
-Additionally, PD is used to express that the work is placed in the public domain.
-This may not be used for new BIPs, and is only defined for use by BIPs predating acceptance of this BIP.
+====Not acceptable licenses====
+
+All licenses not explicitly included in the above lists are not acceptable terms for a Bitcoin Improvement Proposal unless a later BIP extends this one to add them.
+However, BIPs predating the acceptance of this BIP were allowed under other terms, and should use these abbreviation when no other license is granted:
+
+* OPL: [http://opencontent.org/openpub/ Open Publication License, version 1.0]
+* PD: Released into the public domain
 
 ===Rationale===
 

From 9f0ef24770f9286f6753c881edc3f6609398dc33 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 24 Sep 2016 02:48:30 +0000
Subject: [PATCH 0457/2326] bip-0002: Move BIP Comments to GitHub bitcoin/bips
 wiki

---
 bip-0002.mediawiki | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index c5274c0009..5704405031 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -102,18 +102,25 @@ What if a BIP is proposed that only makes sense for a single specific project?
 
 ===Specification===
 
-Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page.
-Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format].
+Each BIP should, in its preamble, link to a public wiki page with a summary tone of the comments on that page.
+Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page.
 The comments page should generally only be used to post final comments for a completed BIP.
 If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review.
 
 Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still post their review on the comments page, provided they first post it to the mailing list and plan to later remove or revise it as applicable based on the completed version. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month).
 
-Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 .
+Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "Comments" namespace.
+For example, the link for BIP 1 will be https://github.com/bitcoin/bips/wiki/Comments:BIP-0001 .
 
-In order to avoid possible abuse of Bitcoin Wiki moderation, BIPs may choose to list a second forum for BIP comments, in addition to the Bitcoin Wiki. In this case, the second forum's URI should be listed below the Bitcoin Wiki's URI.
+Comments posted to this wiki should use the following format:
 
-Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances:
+     --, 
+
+BIPs may also choose to list a second forum for BIP comments, in addition to the BIPs wiki.
+In this case, the second forum's URI should be listed below the primary wiki's URI.
+
+After some time, the BIP itself may be updated with a summary tone of the comments.
+Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances and other summaries may be used as needed:
 
 * No comments yet.
 * Unanimously Recommended for implementation
@@ -124,7 +131,7 @@ Summary tones may be chosen from the following, but this BIP does not intend to
 For example, the preamble to BIP 1 might be updated to include the line:
 
     Comments-Summary: No comments yet.
-    Comments-URI: https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001
+    Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0001
                   https://some-other-wiki.org/BIP_1_Comments
 
 These fields must follow the "Discussions-To" header defined in BIP 1 (if that header is not present, it should follow the position where it would be present; generally this is immediately above the Status header).
@@ -139,8 +146,7 @@ What is the purpose of BIP comments?
 
 Will BIP comments be censored or limited to particular participants/"experts"?
 
-* The Bitcoin Wiki moderators have control over that venue and may make reasonable moderation attempts. Admitted non-experts should refrain from commenting outside of their area of knowledge. However, comments should not be censored, and participation should be open to the public.
-* If the Bitcoin Wiki were to abuse its position, the venue for comments can always be changed.
+* Participants should freely refrain from commenting outside of their area of knowledge or expertise. However, comments should not be censored, and participation should be open to the public.
 
 ==BIP licensing==
 

From 5a066ea8fa3053bc4c72cf55b49b2e428e1ef416 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 24 Sep 2016 03:15:36 +0000
Subject: [PATCH 0458/2326] Copypaste BIP 1 into BIP 2 and aim for replacement

---
 README.mediawiki   |   2 +-
 bip-0002.mediawiki | 168 ++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 168 insertions(+), 2 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index 1b293212f9..6f3ee08d94 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -20,7 +20,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Active
 |-
 | [[bip-0002.mediawiki|2]]
-| BIP Status and Comments
+| BIP process, revised
 | Luke Dashjr
 | Process
 | Deferred
diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index 5704405031..7297bc0ff9 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -1,20 +1,182 @@
 
   BIP: 2
-  Title: BIP Status and Comments
+  Title: BIP process, revised
   Author: Luke Dashjr 
   Status: Deferred
   Type: Process
   Created: 2016-02-03
+  Replaces: 1
 
==Abstract== +BIP stands for Bitcoin Improvement Proposal. A BIP is a design document providing information to the Bitcoin community, or describing a new feature for Bitcoin or its processes or environment. The BIP should provide a concise technical specification of the feature and a rationale for the feature. + +We intend BIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Bitcoin. The BIP author is responsible for building consensus within the community and documenting dissenting opinions. + +Because the BIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. + This BIP describes objective criteria that can be used to determine when a BIP Status should be changed, to ensure it is a reliable metric documenting actual usage of the proposal. It also adds a way for final comment on completed BIPs, by adding to them a reference to a wiki page and summary of the tone thereof. Finally, it extends the list of allowable BIP licenses to include many more popular options. ==Copyright== This BIP is dual-licensed under the Open Publication License and BSD 2-clause license. +==BIP workflow== + +The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this. + +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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need standardisation between multiple projects; these don't need a BIP and should be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker. + +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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. + +BIP authors are responsible for collecting community feedback on both the initial idea and the BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here. + +It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. If in doubt, split your BIP into several well-focused ones. + +The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. + +Authors MUST NOT self assign BIP numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject. + +If the BIP editor approves, he will assign the BIP a number, label it as Standards Track, Informational, or Process, give it status "Draft", and add it to the BIPs git repository. The BIP editor will not unreasonably deny a BIP. Reasons for denying BIP status include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy. For a BIP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. + +The BIP author may update the Draft as necessary in the git repository. Updates to drafts may also be submitted by the author as pull requests. + +Standards Track BIPs consist of two parts, a design document and a reference implementation. The BIP should be reviewed and accepted before a reference implementation is begun, unless a reference implementation will aid people in studying the BIP. Standards Track BIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. + +Once a BIP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the community, the status will be changed to "Final". + +A BIP can also be assigned status "Deferred". The BIP author or editor can assign the BIP this status when no progress is being made on the BIP. Once a BIP is deferred, the BIP editor can re-assign it to draft status. + +A BIP can also be "Rejected". Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. + +BIPs can also be superseded by a different BIP, rendering the original obsolete. This is intended for Informational BIPs, where version 2 of an API can replace version 1. + +The possible paths of the status of BIPs are as follows: + + + +Some Informational and Process BIPs may also have a status of "Active" if they are never meant to be completed. E.g. BIP 1 (this BIP). + +===Transferring BIP Ownership=== + +It occasionally becomes necessary to transfer ownership of BIPs to a new champion. In general, we'd like to retain the original author as a co-author of the transferred BIP, but that's really up to the original author. A good reason to transfer ownership is because the original author no longer has the time or interest in updating it or following through with the BIP process, or has fallen off the face of the 'net (i.e. is unreachable or not responding to email). A bad reason to transfer ownership is because you don't agree with the direction of the BIP. We try to build consensus around a BIP, but if that's not possible, you can always submit a competing BIP. + +If you are interested in assuming ownership of a BIP, send a message asking to take over, addressed to both the original author and the BIP editor. If the original author doesn't respond to email in a timely manner, the BIP editor will make a unilateral decision (it's not like such decisions can't be reversed :). + +===BIP Editors=== + +The current BIP editor is Luke Dashjr who can be contacted at [[mailto:luke_bipeditor@dashjr.org|luke_bipeditor@dashjr.org]]. + +===BIP Editor Responsibilities & Workflow=== + +The BIP editor subscribes to the Bitcoin development mailing list. All BIP-related correspondence should be sent (or CC'd) to luke_bipeditor@dashjr.org. + +For each new BIP that comes in an editor does the following: + +* Read the BIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted. +* The title should accurately describe the content. +* Edit the BIP for language (spelling, grammar, sentence structure, etc.), markup (for reST BIPs), code style (examples should match BIP 8 & 7). + +If the BIP isn't ready, the editor will send it back to the author for revision, with specific instructions. + +Once the BIP is ready for the repository it should be submitted as a "pull request" to the [https://github.com/bitcoin/bips bitcoin/bips] repository on GitHub where it may get further feedback. + +The BIP editor will: + +* Assign a BIP number (almost always just the next available number, but sometimes it's a special/joke number, like 666 or 3141) in the pull request comments. + +* Merge the pull request when the author is ready (allowing some time for further peer review). + +* List the BIP in [[README.mediawiki]] + +* Send email back to the BIP author with next steps (post to bitcoin-dev mailing list). + +The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. + +==BIP format and structure== + +===Specification=== + +BIPs should be written in mediawiki or markdown format. + +Each BIP should have the following parts: + +* Preamble -- RFC 822 style headers containing meta-data about the BIP, including the BIP number, a short descriptive title (limited to a maximum of 44 characters), the names, and optionally the contact info for each author, etc. + +* Abstract -- a short (~200 word) description of the technical issue being addressed. + +* Copyright/public domain -- Each BIP must either be explicitly labelled as placed in the public domain (see this BIP as an example) or licensed under the Open Publication License. + +* Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Bitcoin platforms (Satoshi, BitcoinJ, bitcoin-js, libbitcoin). + +* Motivation -- The motivation is critical for BIPs that want to change the Bitcoin protocol. It should clearly explain why the existing protocol specification is inadequate to address the problem that the BIP solves. BIP submissions without sufficient motivation may be rejected outright. + +* Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. + +* The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion. + +* Backwards Compatibility -- All BIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The BIP must explain how the author proposes to deal with these incompatibilities. BIP submissions without a sufficient backwards compatibility treatise may be rejected outright. + +* Reference Implementation -- The reference implementation must be completed before any BIP is given status "Final", but it need not be completed before the BIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. + +* The final implementation must include test code and documentation appropriate for the Bitcoin protocol. + +====BIP header preamble==== + +Each BIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required. + +
+  BIP: 
+  Title: 
+  Author: 
+* Discussions-To: 
+  Status: 
+  Type: 
+  Created: 
+* Post-History: 
+* Replaces: 
+* Superseded-By: 
+* Resolution: 
+
+ +The Author header lists the names, and optionally the email addresses of all the authors/owners of the BIP. The format of the Author header value must be + + Random J. User + +if the email address is included, and just + + Random J. User + +if the address is not given. + +If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions. + +Note: The Resolution header is required for Standards Track BIPs only. It contains a URL that should point to an email message or other web resource where the pronouncement about the BIP is made. + +While a BIP is in private discussions (usually during the initial Draft phase), a Discussions-To header will indicate the mailing list or URL where the BIP is being discussed. No Discussions-To header is necessary if the BIP is being discussed privately with the author, or on the bitcoin email mailing lists. + +The Type header specifies the type of BIP: Standards Track, Informational, or Process. + +The Created header records the date that the BIP was assigned a number, while Post-History is used to record the dates of when new versions of the BIP are posted to bitcoin mailing lists. Both headers should be in yyyy-mm-dd format, e.g. 2001-08-14. + +BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on. + +BIPs may also have a Superseded-By header indicating that a BIP has been rendered obsolete by a later document; the value is the number of the BIP that replaces the current document. The newer BIP must have a Replaces header containing the number of the BIP that it rendered obsolete. + +====Auxiliary Files==== + +BIPs may include auxiliary files such as diagrams. Image files should be included in a subdirectory for that BIP. Auxiliary files must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). + +==BIP types== + +There are three kinds of BIP: + +* A Standards Track BIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin. +* An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementors are free to ignore Informational BIPs or follow their advice. +* A Process BIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process BIPs are like Standards Track BIPs but apply to areas other than the Bitcoin protocol itself. They may propose an implementation, but not to Bitcoin's codebase; they often require community consensus; unlike Informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Bitcoin development. Any meta-BIP is also considered a Process BIP. + ==BIP status field== ===Specification=== @@ -229,6 +391,10 @@ Why is Public Domain no longer acceptable for new BIPs? * In some jurisdictions, public domain is not recognised as a legitimate legal action, leaving the BIP simply copyrighted with no redistribution or modification allowed at all. +==History== + +This document was derived heavily from Python's PEP-0001. In many places text was simply copied and modified. Although the PEP-0001 text was written by Barry Warsaw, Jeremy Hylton, and David Goodger, they are not responsible for its use in the Bitcoin Improvement Process, and should not be bothered with technical questions specific to Bitcoin or the BIP process. Please direct all comments to the BIP editors or the Bitcoin development mailing list. + ==See Also== * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] From f1ed5afd1fa4e4ea12c81883947c45bb18aaeab2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:23:08 +0000 Subject: [PATCH 0459/2326] bip-0002: Revise for BIP 1 replacement --- bip-0002.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 7297bc0ff9..3252d77d20 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -10,13 +10,13 @@ ==Abstract== -BIP stands for Bitcoin Improvement Proposal. A BIP is a design document providing information to the Bitcoin community, or describing a new feature for Bitcoin or its processes or environment. The BIP should provide a concise technical specification of the feature and a rationale for the feature. +A Bitcoin Improvement Proposal (BIP) is a design document providing information to the Bitcoin community, or describing a new feature for Bitcoin or its processes or environment. The BIP should provide a concise technical specification of the feature and a rationale for the feature. We intend BIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Bitcoin. The BIP author is responsible for building consensus within the community and documenting dissenting opinions. Because the BIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. -This BIP describes objective criteria that can be used to determine when a BIP Status should be changed, to ensure it is a reliable metric documenting actual usage of the proposal. It also adds a way for final comment on completed BIPs, by adding to them a reference to a wiki page and summary of the tone thereof. Finally, it extends the list of allowable BIP licenses to include many more popular options. +This particular BIP replaces BIP 1 with a more well-defined and clear process. ==Copyright== From deb036798acc61023636bae1886718e3386d4efb Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:24:28 +0000 Subject: [PATCH 0460/2326] bip-0002: Drop BitcoinTalk recommendation --- bip-0002.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 3252d77d20..59b6af044c 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -24,7 +24,8 @@ This BIP is dual-licensed under the Open Publication License and BSD 2-clause li ==BIP workflow== -The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (and maybe the [https://bitcointalk.org/index.php?board=6.0 Development & Technical Discussion] forum) is the best way to go about this. +The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. +Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list is the best way to go about this. 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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need standardisation between multiple projects; these don't need a BIP and should be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker. From f0999cdcc1461c44c4f45f33d5c7b768aa80a906 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:44:24 +0000 Subject: [PATCH 0461/2326] bip-0002: Language improvements for BIP workflow --- bip-0002.mediawiki | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 59b6af044c..dc53d01a69 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -25,25 +25,37 @@ This BIP is dual-licensed under the Open Publication License and BSD 2-clause li ==BIP workflow== The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able. -Posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list is the best way to go about this. +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]. -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. Many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons. 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. Small enhancements or patches often don't need standardisation between multiple projects; these don't need a BIP and should be injected into the relevant Bitcoin development work flow with a patch submission to the applicable Bitcoin issue tracker. +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-dev] 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 sent to the bitcoin-dev list and the BIP editor with the draft BIP. This draft must be written in BIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. +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]. +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 the editor has assigned it a BIP number (authors MUST NOT self-assign BIP numbers). BIP authors are responsible for collecting community feedback on both the initial idea and the BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here. It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. If in doubt, split your BIP into several well-focused ones. -The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad. +When the BIP draft is complete, the BIP editor will assign the BIP a number, label it as Standards Track, Informational, or Process, and merge the pull request to the BIPs git repository. +The BIP editor will not unreasonably reject a BIP. +Reasons for rejecting BIPs include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy. +For a BIP to be accepted it must meet certain minimum criteria. +It must be a clear and complete description of the proposed enhancement. +The enhancement must represent a net improvement. +The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. -Authors MUST NOT self assign BIP numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject. +The BIP author may update the Draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests. -If the BIP editor approves, he will assign the BIP a number, label it as Standards Track, Informational, or Process, give it status "Draft", and add it to the BIPs git repository. The BIP editor will not unreasonably deny a BIP. Reasons for denying BIP status include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy. For a BIP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. - -The BIP author may update the Draft as necessary in the git repository. Updates to drafts may also be submitted by the author as pull requests. - -Standards Track BIPs consist of two parts, a design document and a reference implementation. The BIP should be reviewed and accepted before a reference implementation is begun, unless a reference implementation will aid people in studying the BIP. Standards Track BIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. +Standards Track BIPs consist of two parts, a design document and a reference implementation. +The reference implementation is not required to be begun until the BIP is accepted, unless having such an implementation will aid people in studying the BIP. +Standards Track BIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. Once a BIP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the community, the status will be changed to "Final". @@ -55,9 +67,9 @@ BIPs can also be superseded by a different BIP, rendering the original obsolete. The possible paths of the status of BIPs are as follows: - + -Some Informational and Process BIPs may also have a status of "Active" if they are never meant to be completed. E.g. BIP 1 (this BIP). +Some Informational and Process BIPs may also have a status of "Active" if they are never meant to be completed. E.g. BIP 2 (this BIP). ===Transferring BIP Ownership=== From efbbe30cce96a5fd0d6f30d6cb9bbbaef5bf521b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:51:50 +0000 Subject: [PATCH 0462/2326] bip-0002: Clarify and update BIP editor role --- bip-0002.mediawiki | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index dc53d01a69..783ecc553e 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -83,29 +83,30 @@ The current BIP editor is Luke Dashjr who can be contacted at [[mailto:luke_bipe ===BIP Editor Responsibilities & Workflow=== -The BIP editor subscribes to the Bitcoin development mailing list. All BIP-related correspondence should be sent (or CC'd) to luke_bipeditor@dashjr.org. +The BIP editor subscribes to the Bitcoin development mailing list. +Off-list BIP-related correspondence should be sent (or CC'd) to luke_bipeditor@dashjr.org. For each new BIP that comes in an editor does the following: * Read the BIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted. * The title should accurately describe the content. -* Edit the BIP for language (spelling, grammar, sentence structure, etc.), markup (for reST BIPs), code style (examples should match BIP 8 & 7). +* The BIP draft must have been sent to the Bitcoin development mailing list for discussion. +* Motivation and backward compatibility (when applicable) must be addressed. +* Licensing terms must be acceptable for BIPs. If the BIP isn't ready, the editor will send it back to the author for revision, with specific instructions. -Once the BIP is ready for the repository it should be submitted as a "pull request" to the [https://github.com/bitcoin/bips bitcoin/bips] repository on GitHub where it may get further feedback. +Once the BIP is ready for the repository it should be submitted as a "pull request" to the [https://github.com/bitcoin/bips BIPs git repository] where it may get further feedback. The BIP editor will: -* Assign a BIP number (almost always just the next available number, but sometimes it's a special/joke number, like 666 or 3141) in the pull request comments. +* Assign a BIP number in the pull request. -* Merge the pull request when the author is ready (allowing some time for further peer review). +* Merge the pull request when it is ready. * List the BIP in [[README.mediawiki]] -* Send email back to the BIP author with next steps (post to bitcoin-dev mailing list). - -The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. +The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and update BIP headers as appropriate. ==BIP format and structure== From c864f641fa4e7a7f1f048d8b7546647b327c3b89 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:52:23 +0000 Subject: [PATCH 0463/2326] bip-0002: Disallow markdown format --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 783ecc553e..2fecad40e7 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -112,7 +112,7 @@ The BIP editors are intended to fulfill administrative and editorial responsibil ===Specification=== -BIPs should be written in mediawiki or markdown format. +BIPs should be written in mediawiki format. Each BIP should have the following parts: From db70f458c81946064f580061bb2c9dd0af13a425 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 03:59:16 +0000 Subject: [PATCH 0464/2326] bip-0002: Reduce unnecessary duplication in summary of BIP parts --- bip-0002.mediawiki | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 2fecad40e7..4fed03993d 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -116,25 +116,21 @@ BIPs should be written in mediawiki format. Each BIP should have the following parts: -* Preamble -- RFC 822 style headers containing meta-data about the BIP, including the BIP number, a short descriptive title (limited to a maximum of 44 characters), the names, and optionally the contact info for each author, etc. +* Preamble -- Headers containing metadata about the BIP ([[#Preamble|see below]]). -* Abstract -- a short (~200 word) description of the technical issue being addressed. +* Abstract -- A short (~200 word) description of the technical issue being addressed. -* Copyright/public domain -- Each BIP must either be explicitly labelled as placed in the public domain (see this BIP as an example) or licensed under the Open Publication License. +* Copyright -- The BIP must be explicitly licensed under acceptable copyright terms ([[#TODO|see below]]). -* Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Bitcoin platforms (Satoshi, BitcoinJ, bitcoin-js, libbitcoin). +* Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Bitcoin platforms. -* Motivation -- The motivation is critical for BIPs that want to change the Bitcoin protocol. It should clearly explain why the existing protocol specification is inadequate to address the problem that the BIP solves. BIP submissions without sufficient motivation may be rejected outright. +* Motivation -- The motivation is critical for BIPs that want to change the Bitcoin protocol. It should clearly explain why the existing protocol is inadequate to address the problem that the BIP solves. -* Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. +* Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work. The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion. -* The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion. +* Backwards compatibility -- All BIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The BIP must explain how the author proposes to deal with these incompatibilities. -* Backwards Compatibility -- All BIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The BIP must explain how the author proposes to deal with these incompatibilities. BIP submissions without a sufficient backwards compatibility treatise may be rejected outright. - -* Reference Implementation -- The reference implementation must be completed before any BIP is given status "Final", but it need not be completed before the BIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. - -* The final implementation must include test code and documentation appropriate for the Bitcoin protocol. +* Reference implementation -- The reference implementation must be completed before any BIP is given status "Final", but it need not be completed before the BIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. The final implementation must include test code and documentation appropriate for the Bitcoin protocol. ====BIP header preamble==== From 7027de2882c4788439ea7871c55cb6b11c4b416c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 04:02:54 +0000 Subject: [PATCH 0465/2326] bip-0002: Expand on preamble headers for BIP/Title --- bip-0002.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 4fed03993d..632a112f5f 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -116,7 +116,7 @@ BIPs should be written in mediawiki format. Each BIP should have the following parts: -* Preamble -- Headers containing metadata about the BIP ([[#Preamble|see below]]). +* Preamble -- Headers containing metadata about the BIP ([[#BIP header preamble|see below]]). * Abstract -- A short (~200 word) description of the technical issue being addressed. @@ -137,8 +137,8 @@ Each BIP should have the following parts: Each BIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required.
-  BIP: 
-  Title: 
+  BIP: 
+  Title: 
   Author: 
 * Discussions-To: 
   Status: 
Date: Sat, 24 Sep 2016 04:06:49 +0000
Subject: [PATCH 0466/2326] bip-0002: Add new preamble headers for
 comments/license

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

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index 632a112f5f..14877a72c6 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -141,10 +141,14 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
   Title: 
   Author: 
 * Discussions-To: 
+* Comments-Summary: 
+  Comments-URI: 
   Status: 
   Type: 
   Created: 
+  License: 
+* License-Code: 
 * Post-History: 
 * Replaces: 
 * Superseded-By: 

From 9b040c5042a21a5bee06df4974d32cf10545c1c6 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 24 Sep 2016 04:07:56 +0000
Subject: [PATCH 0467/2326] bip-0002: Require email addresses for authors

---
 bip-0002.mediawiki | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index 14877a72c6..9a05fed47b 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -139,7 +139,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
 
   BIP: 
   Title: 
-  Author: 
+  Author: 
 * Discussions-To: 
 * Comments-Summary: 
   Comments-URI: 
@@ -155,16 +155,11 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
 * Resolution: 
 
-The Author header lists the names, and optionally the email addresses of all the authors/owners of the BIP. The format of the Author header value must be +The Author header lists the names and email addresses of all the authors/owners of the BIP. +The format of the Author header value must be Random J. User -if the email address is included, and just - - Random J. User - -if the address is not given. - If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions. Note: The Resolution header is required for Standards Track BIPs only. It contains a URL that should point to an email message or other web resource where the pronouncement about the BIP is made. From 7ca7445c80016fb7569903569338abb802ae742c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 04:08:58 +0000 Subject: [PATCH 0468/2326] bip-0002: Drop unused and inapplicable Resolution header from preamble --- bip-0002.mediawiki | 3 --- 1 file changed, 3 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 9a05fed47b..83b027cb60 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -152,7 +152,6 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe * Post-History: * Replaces: * Superseded-By: -* Resolution:
The Author header lists the names and email addresses of all the authors/owners of the BIP. @@ -162,8 +161,6 @@ The format of the Author header value must be If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions. -Note: The Resolution header is required for Standards Track BIPs only. It contains a URL that should point to an email message or other web resource where the pronouncement about the BIP is made. - While a BIP is in private discussions (usually during the initial Draft phase), a Discussions-To header will indicate the mailing list or URL where the BIP is being discussed. No Discussions-To header is necessary if the BIP is being discussed privately with the author, or on the bitcoin email mailing lists. The Type header specifies the type of BIP: Standards Track, Informational, or Process. From 44f85187fe06444d83d9a7250eedb66ebdb6bde2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 04:11:10 +0000 Subject: [PATCH 0469/2326] bip-0002: Allow Post-History header to be a link as with BIPs 99, 122, and 124 --- bip-0002.mediawiki | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 83b027cb60..54554195ee 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -149,7 +149,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe Created: License: * License-Code: -* Post-History: +* Post-History: * Replaces: * Superseded-By:
@@ -165,7 +165,9 @@ While a BIP is in private discussions (usually during the initial Draft phase), The Type header specifies the type of BIP: Standards Track, Informational, or Process. -The Created header records the date that the BIP was assigned a number, while Post-History is used to record the dates of when new versions of the BIP are posted to bitcoin mailing lists. Both headers should be in yyyy-mm-dd format, e.g. 2001-08-14. +The Created header records the date that the BIP was assigned a number, while Post-History is used to record when new versions of the BIP are posted to bitcoin mailing lists. +Dates should be in yyyy-mm-dd format, e.g. 2001-08-14. +Post-History is permitted to be a link to a specific thread in a mailing list archive. BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on. From 0c203dcfb6399ae98a3e7619ead1ec899ee5f736 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 04:48:06 +0000 Subject: [PATCH 0470/2326] bip-0002: Allow non-images in bip-XXXX subdirectory --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 54554195ee..0cab460d3c 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -175,7 +175,7 @@ BIPs may also have a Superseded-By header indicating that a BIP has been rendere ====Auxiliary Files==== -BIPs may include auxiliary files such as diagrams. Image files should be included in a subdirectory for that BIP. Auxiliary files must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). +BIPs may include auxiliary files such as diagrams. Auxiliary files should be included in a subdirectory for that BIP, or must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). ==BIP types== From c59cfdb894f3ed1f7d068b5a53eac860674bb1df Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:05:54 +0000 Subject: [PATCH 0471/2326] bip-0002: Remove/merge old BIP 1 Status stuff --- bip-0002.mediawiki | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 0cab460d3c..593037e33c 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -51,25 +51,7 @@ It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. -The BIP author may update the Draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests. - -Standards Track BIPs consist of two parts, a design document and a reference implementation. -The reference implementation is not required to be begun until the BIP is accepted, unless having such an implementation will aid people in studying the BIP. -Standards Track BIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. - -Once a BIP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the community, the status will be changed to "Final". - -A BIP can also be assigned status "Deferred". The BIP author or editor can assign the BIP this status when no progress is being made on the BIP. Once a BIP is deferred, the BIP editor can re-assign it to draft status. - -A BIP can also be "Rejected". Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. - -BIPs can also be superseded by a different BIP, rendering the original obsolete. This is intended for Informational BIPs, where version 2 of an API can replace version 1. - -The possible paths of the status of BIPs are as follows: - - - -Some Informational and Process BIPs may also have a status of "Active" if they are never meant to be completed. E.g. BIP 2 (this BIP). +The BIP author may update the draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests. ===Transferring BIP Ownership=== @@ -181,7 +163,7 @@ BIPs may include auxiliary files such as diagrams. Auxiliary files should be inc There are three kinds of BIP: -* A Standards Track BIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin. +* A Standards Track BIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin. Standards Track BIPs consist of two parts, a design document and a reference implementation. * An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementors are free to ignore Informational BIPs or follow their advice. * A Process BIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process BIPs are like Standards Track BIPs but apply to areas other than the Bitcoin protocol itself. They may propose an implementation, but not to Bitcoin's codebase; they often require community consensus; unlike Informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Bitcoin development. Any meta-BIP is also considered a Process BIP. @@ -189,7 +171,12 @@ There are three kinds of BIP: ===Specification=== +The possible paths of the status of BIPs are as follows: + + + Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. +The BIP editor may also change the status to Deferred when no progress is being made on the BIP. A BIP may only change status from Draft (or Rejected) to Accepted, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status. From f2e6bbd2190060e2e9c769d8e2d5d7d2c4e30eb1 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:09:20 +0000 Subject: [PATCH 0472/2326] bip-0002: Remove useless History section --- bip-0002.mediawiki | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 593037e33c..a98be7b9ea 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -386,10 +386,6 @@ Why is Public Domain no longer acceptable for new BIPs? * In some jurisdictions, public domain is not recognised as a legitimate legal action, leaving the BIP simply copyrighted with no redistribution or modification allowed at all. -==History== - -This document was derived heavily from Python's PEP-0001. In many places text was simply copied and modified. Although the PEP-0001 text was written by Barry Warsaw, Jeremy Hylton, and David Goodger, they are not responsible for its use in the Bitcoin Improvement Process, and should not be bothered with technical questions specific to Bitcoin or the BIP process. Please direct all comments to the BIP editors or the Bitcoin development mailing list. - ==See Also== * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] From 70747425d885a8b4a00f31dd64e682ecf751aaae Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:10:57 +0000 Subject: [PATCH 0473/2326] bip-0002: Mention OPL problems --- bip-0002.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index a98be7b9ea..c9e817dcc2 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -375,6 +375,7 @@ BIP 1 allowed the Open Publication License or releasing into the public domain; * The OPL is generally regarded as obsolete, and not a license suitable for new publications. * Many are unfamiliar with the OPL terms, and may just prefer to use the public domain rather than license under uncertain terms. +* The OPL license terms allowed for the author to prevent publication and derived works, which was widely considered inappropriate for Bitcoin standards. * Public domain is not universally recognised as a legitimate action, thus it is inadvisable. Why are there software licenses included? From ad4f559976b653f1ed3702e9df8876c49d9e0cc6 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:19:34 +0000 Subject: [PATCH 0474/2326] bip-0002: Add summary of changes vs BIP 1 --- bip-0002.mediawiki | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index c9e817dcc2..b73f2d459a 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -387,6 +387,18 @@ Why is Public Domain no longer acceptable for new BIPs? * In some jurisdictions, public domain is not recognised as a legitimate legal action, leaving the BIP simply copyrighted with no redistribution or modification allowed at all. +==Changes from BIP 1== + +* Acceptable licenses are redefined entirely, allowing a wide variety of open licenses, while prohibiting the problematic older choices. +* An implementation is now required (when applicable) before BIPs can proceed to Accepted Status. +* The License preamble headers have been added. +* BIP Comments are newly introduced. +* Non-image auxiliary files are permitted in the bip-XXXX subdirectory. +* The Post-History header may be provided as a link instead of a simple date. +* The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions. +* Email addresses are now required for authors. +* Markdown format is no longer permitted for BIPs. + ==See Also== * [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]] From 3f4750f0b9c7464a47429e9ed18387eddfd78256 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:20:14 +0000 Subject: [PATCH 0475/2326] bip-0002: Link Copyright "see below" --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index b73f2d459a..899bc72a1f 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -102,7 +102,7 @@ Each BIP should have the following parts: * Abstract -- A short (~200 word) description of the technical issue being addressed. -* Copyright -- The BIP must be explicitly licensed under acceptable copyright terms ([[#TODO|see below]]). +* Copyright -- The BIP must be explicitly licensed under acceptable copyright terms ([[#BIP licensing|see below]]). * Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Bitcoin platforms. From e528af13b7eb1f728b6abef6839ea92a6bbdf16b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 05:57:31 +0000 Subject: [PATCH 0476/2326] bip-0002: Replace Status chart with SVG --- bip-0002.mediawiki | 2 +- bip-0002/process.png | Bin 0 -> 15586 bytes bip-0002/process.svg | 52 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 bip-0002/process.png create mode 100644 bip-0002/process.svg diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 899bc72a1f..7c0c557e32 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -173,7 +173,7 @@ There are three kinds of BIP: The possible paths of the status of BIPs are as follows: - + Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. The BIP editor may also change the status to Deferred when no progress is being made on the BIP. diff --git a/bip-0002/process.png b/bip-0002/process.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1925ec88fa768c0afa1816bab8230da51832cf GIT binary patch literal 15586 zcmcJ$2{e`c-#23pvH|D3hnXRY&|^_;WT+gf)!?rZOTUBBV`{Y<|g!$bQvZRFWV5X2_k{ZwOu zSjB{Ye_X#7f1AD!euNi#S4~}$_4wnx-kOG=H#qG#b0r9-YVtq27zrj`f)FHhsTwAp zal>sMp6t!@>qbZZo;|#O_3a4t_1CvG5slPG!jsEvbj5N{f}JRaV_uP&)+wX@E*jdD zXrW`$8~6B68nOvKJSujTMKDZV^PpqN$O!XAoo@$UZ`}4^d`ab#%1hgiaT9-)K9=57 zbX_Yb^uPa;d?x*UI-5zik)au<{Qw~uy5QIMW+_oTPjkjEv(}!SorNWdfsxUBy36n$ z7eD{4=g(z1i1<{i9G1T;G2AnL_}k2RVWo$49sSz1nrXX!+!DXq*=c$G#tkzi#*pr1 zi_6X{zn3lUaTKj&>hEF4jfj7`tH45`ME>}nzwj&5nOxpw^@h>>g_FkIQ`5|@zP>dU z78ap=imV9<3Bq4J&YTevIe7m%jkaDvNvXSIWqHr3%Y8Adf5OERK7Tg!p8jE*el(l^ zj`T^p0jK&$S68nS5)>pH%a;mMwI1&5w^*6yI+UPd);rH-;Y|rx$NZ*b8s1+U5N?j!A4-e3Prk^f$v`{eif+cz!&-`Rht zkErwfdoJ?f|A!TI`0^^nGfn;ZRy)>H+mLRwb?9e7CUyQ%uuWfm%=%56YI1GfMclo6 zZonyFzrDTW;?h!%*VG{EdB0Bydv*NySe6>zMu}2*c!Gz9hBRYKOI1`nM~R0IAHHxO zJ|0x-Iy-urZ?9K=^@7+zj=#aHiSIvtoc{eWUdN{BV%zJ?>{r2xuD_D(nltY1uzIs= zc$cy=@0IDH%KYHGrO0s~KEb)Og3iA61;z2z z+~d@$`FFXwxlUu<+SazVCzRMTs)HX$n`eL9DkZh)>({TTT!w3m|6vP!?dj=hxiCHK z`M3Bt3m;#oQHoAwTiX`GY53=E1qFp9oiHA9tZr>lz8Sf7UoxJP@PGgQ0H2}@{kLZ) z1M>2A-IqIm?M)c3R+g_@rHGOePf$=03+4Ow?}Fmu8%<43UtIdb>ANtzhp50*7#7$a zY05alpsK2RXO5D7fML@nZ5^GpujYR7=AUa=_0K>5Xp1n-{B5i1stSyZi15efrW{T? zWccKOh5MD|#mjLjms!PQHl8eT*B<^^aBz^e{$spyV4m$K%`DRttw1I$m;|GE++TG~ z&BKdrFP|3_)GRM8P_}FddwlRgvd_Y_UPokP2(bjfS zmmgnqBQ%t8c79%H*Dkgbh4xqVQZ>^K#T(|G{h--We0f6TP`uKO>S`)hfEAgY`t+2;nr-IU^! z#$Rn_+1|J0*IO6a`0S)Ig)-1lUY_1;SM0M;s9T1+(VrS@)=o7Jii(ONA~2ZmmKJ7W zl+4V`c3x~%pc6cjVM56=mEZ}}c{M*Mky3cEd+t)nC3GewvjfyloqGXn5G>_4N$~D*;`myx>k|$r9h+XLk+f)7R+fkvdTggv7V`a6~uHbn7@vOy}@|E2` zRd?+=tP{>Jh2OQdwe=PMPB{E=^+@^3E2FlrSts-ZnYJXfaY+grITwR5C?ldOqP_#VW*3}sf`pvX?tWxKc zJchdM@wYWHO4MK@F*n;2E-Wmptw*UuXpw=%2{<0Y20q^7KVA}%hj z_ltoV2PHB_;wawo>w#nFVA~64Eqe!t)P3Rnx8vd@*9K_FJGM(=E+W5K_?>*h#mD#5 zKKt7rVJWGD%kmZp~~{-OGzu}t6atjxGuP(VpZ33fvL z%}u=2>~H#ddcjzY`<_01x((y-MA`M%ft=jj+n4@)72DuwYI=uJK-HY6!;?q9Jiu3f zwN{u(NC=Ci``53>-qSNPToMuzW-pu`8kK!XGkEvZEHCu-%~hx!jcEn~eG@3qYy8PJ zp)++?A$lY=e|p8CrEmj*0)$o-9nEf(+1!|CYmnlVvM-zys~Gilr+A{G>thtQ{rL7r zj~>zD*JymO!QkW)>T=(mXXE4z@RTfOQZWU zzBxr=^}T!dx_|!`y>;u>?U)#0A#G8nHE%x$b4Y~NZ(1ARHqfZev*+T|{Jm$Y*XI-# z-pM?g&C@J3yAl+nRr7NtG4)zCS(`-O#VNW{AN5z$`S-girA)gIegB6*RiTQVDEBS% zUYhzQ;*+T6cZ%q_UM?iU6mvGTO5n$jA6+PoB7In2^7F09+6-jbtVp?%wdZ21x}BZ) z&Ye3AvySiHCMp`MSIWs5T7RWjetqg>o0g{LXIyQw7?PPOq2%#56s52Wl`-8ki^qST z)%u@>4w<2!#AI#i*%`TI37)XEwx1HTO-(uHXGR=NYU}GawiG%XE^I6DkRg%|K9JwP zf4^)-3tFT7kK8p}(&p+YcG2UwHQun)=XrTr*{8~$Tfb!`+r-tYSG9d>uPq-hu(N5j z=y?;CgSA;*TbqKiNTboz-`$bw`t#?4Nj4@=yU;@O#Y*g9tJ+(;#jY&R{T3)`8||tJ zQ{@U}czI>!nX$Ze9Sh-4BWw45U0n_GiFfUyOM0EiD}J(DP>2>5wtI6$H;@%}Yt%f7 zab=)@FO96~sm7HxHEXan_8&U*OK_i;$oRy>*q`ij5>%Whx_G3%th6*DF)W|L0YF* z!e{5^#4d##{%nzHnic$%O+bLz!@~pJh=V6KDvAxYEMz!vJ>jO*X3?&bW%_`Tv9O?E z4bj`%yWPgCj9)`T<5+#u5uDk~e`z8%PMM$_w> z9&V|56P1|AOhIvH-k6p0?T-L2TSL@myMnXB6Dy0q)pDG=G)t#{UhrHPE^0s@O*awm z{r&qvfzRcmT_XNoao2v7JU(!5{QJue?}<&5UVE|3ui~~Ol&{ma`!!ScW<^A>w%+cyqo%t0Zqvf}JDHrz z6K4tarTMAI*w{d9_U}J`@}R!+$ji%rJ}0Ns!sUMCpRnEy%LQrq`l_lf&sse_ zQN)y8I==B|k>kpDhucw6r)_O*$77p-O@J#LzA{E1$uwOvdQN_Cvf3_g#_unjw=R#Y zEN6e7Lf6nbbcm_Yp=B+>Eq9JZ`cx?mqsY^|F!{w`Y-y$=MK4C2#1(Pz@i}K|He%c) zE}^xLeN-OVp4Z3G`tD?|b&&3XtvaFVDLP@H(w|mU%yjrU%H1<_cbAuU_(_i^Ys$6| zP;XdROgBo|I4pzbktv&G#a>G_KS+LOa!Lw?gTuyT=ABHr(E*%!?m2cQ@8>{Ekqma+ z7}}JOswzK#$1IS^j?3fLZbRR5>hz!ZnUwqbkcjq2uFVV2F(FnqHcZe=zD1-st*&l= z>&r`-b=9Z)KR+b+PsR}bGwoNHF?==ObF6Y4TIAzYeRxL7X81KVHAkmg9JR1%zkcPc ztgKYI#D;6rX%O9Hq})}?npp^mctIom=_@_7Dw0q;>d5^aI;glEX1>L=GqqtSQ6)v{ExEijue5_dLXo}7z0O8JB0l#W=$B5|Y z>rbCbmQFV6uV-YeMx7oVs}<;Ze{a|KJX_|Q%mTOKl|8!KJUWg%b6V^XSn)3_+q;&D zkG6?dzH{hD-sb_gV>xHm)N)2@D=I0G1qQ{l3bZ2R%FN#`e2V9A!8Z_y^}M{ic^@}% zm=$~TvH5vDs(bTB2WVOdn>q@tA<6;FA{Dhsq;GC+F8Rwq_1CYa=QFWJU3%*%_f&me z0;0VA^oc7nS)i7kLV^=)zSJ~%CgUi3bp;o`g$|~srM<&&g-ws)!neOZ zJO~@)P`NdS)l~Pu@s$_=6+sIK2mlCc+O~|o9uyW9)_AtEbQ80HYP56Do1lV%0@kBn z9v`#;T@dM5`20{yhwTZT=PkHZD&7!BWVl6_^pw|q`Osr&Wo2c&M@i{8Q5S3B`y^Ue zR8+s*cPYB(rC#c7jexap(SK6WI(IsCs;6Gm_U6me{HyTk_^DF~=C8cXy1ToB_f~NI zMs;x+Y!WN>U3z)jKKhc1)19`Z4olhnfIQXJ)$An(XKiiuO-!O2p5DHpYhVz|z$MLY zmM!Rf3~iUDa(_}%Ts-5ukK*p#N3fKHckI}4`@w??`O*Me(&jIc-oH8?4fr2)>(-tA z{&Ok!B=uL%tmKxg#BvM_47h-!6nl&$q-tIMr4U|q7z|7kWjY}v3=KBtlr5Rd_C$^DpfcjXf2$-zBg73*SCAK4gi!F=o1kviDAAX6DWh z(v%|?OS{Qy&szQG<;qZ2@aU)${knCrI+7-D{$>62AwB<%^#_|zD7PJ++%j42ciiri z)rvt!`QOdeMhOFwTL`o0kBxN4?vj5+q=t9cT>Z!z&-s4-tk_UT?h+d%=BSD<=T$2{ zwDvmt1OEqJOz$xHr-w3ld2?h`h)+nw1Z}LTzM6hcgN}~wWkrR$eys*4%l{&J{3EUp z(Sl>EtSpOC{Kv-A5o_?|TO}pmH=bsRQT)#^{@+9MUnBHCcW3E;#51YMMM5 z3tnxsIWjIT6k3OQiTfr%ySk4bbpW~0Cf3Iv3dCNs!oD$Rng-h^)r6*|CR@I#5pWx< zg7D_dqp|xJNHGAsTJMpA&`trib;&z_#e1}C96QGS`t@sa6i~~1u=JdqohyN(0E#DL zTjG>Gq#GL>KVyZl(q<#CZ4*^iE~%au6nfW_wK3VHqPBM3Na+L3eYc1niX$=T@uG`ioKnZxd9=K| zly31UUIYG3#;)yeFH=Te_up4!_RON3iFn~PCC;=(iJps#OYUOp_w65d*?#=DeA*TC zw-&ob7M((~rEK0D6c@(_Ouc5eUDNCZHEv4GiShCqOGiI0zbi>fN)i;40^(sOa&d{~ zxBu|4uh|ya(QU=9`_^va*+x8aAO2~ac4!NoAgW#r_HJr>>E#J}f589kHW>DuKJ#vL zg5-GO^7X{Px9r46k00|)`Jl>d+6GhJ;ZRj`I6?l(Ut^@N5oj;C>0Oej~xI$=k(8__022PC$Ciy>BmU8}3J0JliXpqmmHo6E$ngA~d=Wshfs z;i368rq9g9h+ZsVA!E00Lqo@!U=E!=@Z6Vf143cEdrY4xg>vuEgj5hC&oD%?Y+2`| zM(cqdk9##cm^dEPH_}DBYCNw9vI4gQw2m>lS5UAUY&sO=N5Tf%hmIg&=Y|a%bO86W z!&jDP$`yb%AFdXvs;Y_vA;9XnXa8q-cvC>7|K2Opoy|urYCv?ly1TD&o${o)7x;mF!Dsq!8v}8!IU`2b0=M^u6rThH!j&!!LKs*jb)ryib4mjM;h6=&~CWfdan!nbGIg)w*U9y`}<_q!WG;lhP{pclx5>M0HEKhFZk(-D{ik(T3TW*V8z z;z3$vUQ

^OvyRQ{++ec3hdZ@2jU8d3$?D+`k_T-g2fVKPTsETAC;@?!liVty^TF z+R&p4x>yc2J*oTjsdl{YT}&<}Yc+94((H`MQL3!hn^RM5( zds1UhX@ciPXKo<5n46nia&mI$Ahd(n8@|j!8J?1R#S3z03=GoVzwe2FzHsW)DdW7e z2LVMnBKH{xGx8}IqFgLaB(6lWi5}X2?ATqPR#T#`yCx)NnBfZF1gVS>JMEgbE4uYZ z@F}|=5PP8DoNO#3A)(JBZ@-Puvnv zliuUl9t}+tP%#z_5_@{QVV}U;fiGz`fYLj`sObdNmS+UAWO z8tVHv#V`G-=Ad-o*>6Z)9JPs`aDsdepu<$YJTKAi^+yV~unrXEre5l`@^Uq7)*C3t z+Z{YFUnWI$?piz2%dFi=Kk2Qw>;jq4N z$4l}#Ia{LJw{PE{_61m{*2?DWSs{6O&cA>Erk^T%`F0-t#(T11-+q04)bxOcm!M2o z6R+Fb`2p(03ll*^A*(T?C2HSF#8p*jD_uiFj50DZDRlRN5NRPH0qC19At|z6WvA}F z{)ujDcWI#G$R;MHn}^aEbo$B$S^mqw$#>(krt9kJTF<~B;kNRdV_ovbBrryuksGsH zDU}bk0y}^GI(u7=2>(Uf&Mi5oaPi_rCs$XA!dodRR*^DaT%4TLqeKq!w}k7Yh)tI9 zn7mxIdbJThtF71cwSWK$C#Pw@64R}18A-3Jsu~I|9F?{d6?z@sr&R^GVfASC2%+I0XUL{5+h6^#kwV4zOGw&E^#8g0+N3Ef=x;e*tKj0w3Z!G5oUgdLY$i$@R=3Q@c?$gZiS6&VwA zV`#`8mPZe^{r6Ws%5QFM33+z1gs1G#t4FY1*aMjbq{n;{OifJ4>!o;BXT#ZwtQl@A z;W9NXPrOZ~2V8jrwPoz<3CAwbkQ__5$$jMQrN2k#`!mKF%f98Q0+k+J_%&(d zpw@ueCYj}(74e}{cX8RtB%m4!+V}AC#IJMTp2Zuz_Y3_4g8af~K^}~-;g!#V=AXX4 zzOMd;6!J?+ymj`&{d*j)mu&}T?j4<84x%NP{A)1e`!3CIAl|-vC*kG;k-PfG4>QKK z0mg+FzDbWwPO=vqmpXV~jUJ*w^e~I$JmK$g%kO`JpYa?%A_P(WRGW)F$A!XoOu(O=+N|q@)lLxLdum zXCE8aTFTZf&P~+({CONaCKc2$x#8R+NQt*2A}pIuX=+}>u0CWU9@CV0)Ig3W3^m0> z#2`VEc)xNrG2&1f+p%*_FH#NSV#@r4l0|LCs=H9!$&Y|gsb}WqmJb0)4@26E@fQ*r zAMMgYfeTkqRMbUPGxmUkKw`ir7Ui!X=p2HE(TBUK51Iwi)N4}{WrEs8*5>mK$u}TQ zO7!7lWA5+1pr@|xZ|n|Q*Kkg5r{}2U<|pr8e3Wo5y(GNw|ogKQcf>7KE%0bwDTl5XmKg++J-x$p%^?Bopu zuoDuwv#To`=7f~kjmr%ZRq>QqOEu~7y}i~zNINfll}xqA1Hl|xp0iDP2^2#ib~<-c zQ-?kURh3@xIyN7UW4gAYVt55Ta{rjjVKySI1S`Sa&>rcPZM-u=WVR?>$RT@q58QkA`ay5qX?qLG7dkq+Qa1a}h z6AyJm8d|?>rWzm=d~?owa;;@oxb}KYg5%S}EDv6o86j&QDTTjGHcAq_w>`KnrQ|Ew zoP$G`P~7PV;m4?g_wymZEX##yH1Bxsv(QqSk|_%gmOx{shl#WLUH{=^2T2Rnr>hD+ugkis0oV8-Fym| zsDbJn{pHJ->tg}|vZ7u%*xM(WX2PN0)Hx%uY0Xjo`rJ8Q9h#Z{RuzEUxM^ z-wDG@+uWSbf8Ws!HyJlygK)73VNhoZN|6x;hI!QjxL zwFEi{Z;Yt0@M+K)BB}M4Cx99F5gwk5?}&#@{#1S!Y>HqF|}L_RQO{kcd&T( zk$bY(sp}fagm~o6{Yxw#>~R#oBzoYkAe?u&6EdLXr0i4&Y(zSpkTQEQu&6_7N1Rb> zNaHHwh=ij1&|Q?LeT6{T=pv2fetvXdFN;QL)I=6aI9 zKXKC1GAXr3kYPPD^S)!pj>(FTWHtv}yLJuc`Nu|Q_5sWHll z6B3vx8V3$AqL&@K9nuX}bNhA#ehI17hELPz5*sUP(zicGxJ99Lrv|6I&{MRiox{T? zt@m~|d=UY0x(O%gZBK%*n1TYgQv9>eONmGMXu%YarCjgMN4MD!#(<2iAE;5|8HUR*hZI+Vad{U`{*XG%(~zJb4fx+VC=IpKTp+{kWml}Q1`If6&_rYrdP=hkpouf#Q&S;fY=upA zH2c(UvmyX$cnYh5TXvdpv9ex6go2EfAishvjZXFy*0wZO+|8O0E?$S&$jGa}EEs0B zBdw=TpH^`F_5N^y29;wS_@HrPsy-L-IN%n)il;xU(^Z7~-`4ZFCs8rM%;`HD-d%8ZfDb~T>D=C%U9X6rxyXz23cH>|9z z#9k`}cus&i%!HP=tv5$pO|!hrH$UT{Zb zu%J;z=ORs_3z@Nx^a%*aJK0Z90E!S17;OqAC_J2t$hE9oMWFyMN`9}6CjAH@A(w$h zVLCyG1~H`i0uGB(%RrEE2^H_z&)W-8G4;^j9{~q<_w@-QK4O}EN(x^|La5YsWCChB zIxH|+;$*;t82@3L7(}bXK-GNuM1nuLbDz~oCj@UK^BVAEgoJip8Z^l%D2PGUCiMfF zT!>CeBp#8cX0nP|Z9ifx!fI+3$Ztszz35Wpj03Kpxo|;(uwI-UyPcT0(zN2U3}UxI zK_Q}!K3gH0DJnoY)+MKZJ@NF=m;cL zREZ?Nm1Q8SHvrV3zN>+@$hI_qjOLA~t8SRTtiM?n_m26!6R zQWaanE>dq|=LmI0ty?$RpSuF#_;c2YJur_^#J~2tYg=1Ca(U3L3*~fOhu_LxRBSpG zFTK~ugCR7f7Z0zD8~gg$OE)pZRtN$;=~$W9?n$pQ-3PHU7B?Zqm_9vr6-=iJgcunK zvM_@=FhPS%y$GLm3_5^S$15L<7qXWAB!m9KkIf9$T7`63L|hyr0ghJ#^wdz~Xp!>D z)zx(jiIs}VN;=%3=bx-1OGn3WY<$(`5i0f9>2AYZ6Z871e|Dm28zcpO?@ zUb=u%b2tCVw?8`^e#)gt&|wg3(Mceh>sy~a+l{w@m6M7>#DfP6m<%kL$~SM;LbQ4f zc~4M?g>wDo%`;dbxD{}>bp(*aY6t>{pH;JS@3f{h%wTnUtaoiKN<$3xWQ?N zWLUUKq*piviQW91i$6WFN%vdPZ6I55Po4xlCMJq7k|bMmE| zhNk8!V5VoGj@v(%csLT_(rx>w)QYOA)lfkUniG+*(Y>dax^v!xg1m;^Lpbx9tNe8} zoqvDaf+*N(gq&(fZ*(0qf9HR2YYjZqut9WQE{IC#6k6xbZNI!J*JV;I-(W0iJu^EX;aQ_~KC)E@iA9CArRUq}gkLRiY3<{FupTD&~ajeaF-IE?Q_P6$Xyi^w5UR2LJbH-?p zFdRX*dToWJta_^PLkKiFeISwjZ6$k}?D&&u^*qZKy4G}SiX=AjMtm>3;sG6!Txn1= z&K4BGr$Bc~!n;OCM=JnxSBzBv+P)WD;DRwP>(*~5=h)7tA1hr0&jM=KX;WU{z*lqk>1k7bEh$;c3W88iRP|YI^bkxAerPEa zU;k4r#_^N)ue#gOckYOQ50D8gJ$LtMwt|O9&54NUJTosALN7LGx>;!%as4`du}fbt zn5U`{uMM5;t!?6b0=3&R1R-M}G!>F&rI@A|KqftP-4vWzqaQtYh=#tc>0wYMRvWHiMhB_W*q`=C43&k60>Gjp#f5pp95XThXCl@5=mzZYhrP$=Ka{mRD`Wn`GwG4WL> zkCX-=HQg0upn8?2;=BO7TM2~N`S1hI|jeXeD!5#Bw$_rO_L;E)1wYy>YQU94<{DTL)B&s!W2W@BM zm1hL`x{lw$TUwzyICi|+LOchDg7~=b#7bC5=-tK*8#MkaG!9oX2|ANO(;?JVgdF@4 zeo1k;a^=dS)Kra>29*$}cV#>8DX_n3Y2hWY5!?<^x+xv6mvDmXkwNMwWZ6UJgNjti zXK>ealkoPQDX4Iy3JPS3N{*623l1ik3#1Zyf`tMjnh7%7jpJE5kP*6uhaH;s!9Tv( zUK#`^mIV56cBvqL4FF;!Ac6y|4$mXU_7gufXm8DvTgSCwz47|n4Z3JyK$G}_7w*WXNJvqM1^t8G)OfB(K3AOxAS zu%87N&}sSWcg)sBZl#5XuOmo@9z=u`tpMnlWAw;CH_|dyD7a8^P-N9HC`qQg7B9;E zR#Ztu4{pyB?+5?o7RWm6h==5@<>ZKUS-f!}f%qdiB)vn@(rhFDlrK%6pc6zJK3WeU zsTUSLDZG;I&VL-~wvr+oAyB7MNislZnM+CwROEi#Lp4b^KSLBe+sQaVAu zg_aH~6;6c?sa;>5_^>BtIxjaD%nx2q_u!y7g8Gmq*>dvoqM!u6Mf5A|m4%MZO%mP{ z`=PK^fBbmpc%i)*8I~bj0H|#zv>s^uYhNEouFq%+UokiXTbz1LP1ViE?B0!xs5MvV)QBb}9&8+WGRGa+s&EQ8n?yKFiXA^ASy;ll}2xxdwzGN~P zeyNG7P=q+PyQ)%yjFW^H4Gy%QWNpmqvG1*ZRg`~eGNfjm56EK{Q%KiN^>ev@I79qVMkP6jWOr4KOeFJ&AXa!Y)2^a-_oo>aI4G zOgY0wmEq^-cNuBlo4SM+xPh2kUKr8tH8RdeA{Oo&yo7YQn2_p+Xv#Yg5vE*@<|86- zWQ4c*ZGAl%);j+==_;9MqEZhfs*<#6d~xCv?iWS{JZc7FZYb~5f%!SBZl}3%n}1^s zyZ_BEqpglZm=31ZLGytE&%I?~q_ub}dCCB|vai*M^GJF%zy~caFAtiFA(aa2R2wq( z^V3xa2GQw{5_NE`qjSX$Kc?xV?8qQfgX@VoeEY$l$lUppGEwoMVT1zS{ki|T%=o$5 z#&dGHumDrW;m)1n+ptM7^7tTclswOFyX&A`C@Y&Cc6rY_nPi%Ncq9b@n>1!SPnCL72w59*uNZ9lmys@J~!k{8xzuI}!pUpe@`WSbXXLt_*V;9!9GoQyFvXqv(5k;Or;MJy9iO&uQ}$8Xjm zX0>{DsWcZ2LnwSHTzOB-kv?f>l6w-!`+iMV0jEYU5O;e}yH|6o5Tsa7cq?z$|5!x| z?|GS-7amS6n@g`ea6JQPu6>B#`1vlb#R&jNkxP?aK07-6Y3VLxS40YnN{>;LH7m#0 zk}*)sz0frz1Z;nn2L`Ug{oX{#80CSUY{)PvVkF+Isa-B=_hLZQQX)T0O>}3Uc5%rO zGE)QWdf>j?27;75iST8+BIHGIkVFbGl>>+7{eJcI1YjwmjNHwC2m#y5YNGnn2xqG_ zf{(k;FN6=ThMq6u-;u4dXk>3c#5QF>HK91*P!=TRy0>qy(zvCtkoG~+J`|@w*V*8# zAT9mT+Vm|H;%?{|RCDuIwi+_mN}d_RVtS3cCrLU47L2B6LPW&qcPqckhcB`Qg2JIl zttKymKtg7(|IIE~V#5jR-?{sKd-1sjA*4JwAg4(c4&!7O-G5>b7iGC+QFlnc7j)i$ zy{M!_8Rtf>qTJpciX+qffI&IP`x5FfA3FQ{X{6NP6ARPe47#yFlN!ZHn;pav%a%)t z>to0A^qy3v(S8*eoX<%u-s@egOzpKb4AF{LGfcBKRxGMDo${Ttftk>aIDQ3i{tj$0 zn|Pc>0L?M$&sjm@L8o>(_>GXk5v;3v8hJ=;ePkRu0bl6nri$OfGTv5bK2y_sq9#2ok5U>{FeS$xQzGe{wQ)x#F;}J*1^e+ zlqM<9jBacsk(`ywO%7KP2qOckWG$4x*t#8$9svPoKb9pK8ml*F6ADkzT`QPfHhmv@ zoH_877y>oXQ1?ckY!nhdXfypJ7?wZ0!EsC;`^#6IIs4Vr)DX~u6Sx&)#fBim9FFbv z0;-LpWYKVl2E}!I%Vx&4PY$Qug3E;+zi%6MFOF{DG)NDbkX_?{?8FJumJ9nDuj+H0 zJPL&LYc5u|qTg~Uc#w|D-o4~GCy}Xlw_RowM3&_?1cGOiDVi!MgydI=Vw5&)w+$TGrCOKvnd%NEEXVM;rmbw}CbFT2_Aus!W8gbSvWLczhe z#}KCU71t_bLP?)A%C#EmO6bScYr>s4FL|#3`oc9u#`?w^xH4D;YKn?;8_InKwjT|u z`T`v&20%e~|9;PI`Nl6_`d;5)5Wc;EhjFbgB6sQO+ij9FlA$&lk_Y6Xs*~k*I16Sp z)i;lIn2U*tL7+@M6J80(>4MNAPG=x#8JG5VBAajFU2ylUmA=1Eg1gTZ{L~b%S(Jc= zAI4weeFp@Xly^-}{wL0vPsNFnjHloNA>QK8pjNFuo_}ua{rsXt?ech1Dylbp{T>S5><40b3w@>0M;<0Xsv(hAWYzK(CTC!KHJPxX0*Rgh`UAskXBbhQsrpJ`fN`@aC4H(j0p literal 0 HcmV?d00001 diff --git a/bip-0002/process.svg b/bip-0002/process.svg new file mode 100644 index 0000000000..bb61e8e606 --- /dev/null +++ b/bip-0002/process.svg @@ -0,0 +1,52 @@ + + + + + + + + + + Draft + + + Accepted + + + Final + + + Replaced + + + + Rejected + + + + + Withdrawn + + + + Deferred + + + + Active + From 0ee015209f0615bc8074de81ebfae4cbd054f4ac Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 06:18:33 +0000 Subject: [PATCH 0477/2326] bip-0002: graph only shows typical paths, not all possible --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 7c0c557e32..8dd8bf21a0 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -171,7 +171,7 @@ There are three kinds of BIP: ===Specification=== -The possible paths of the status of BIPs are as follows: +The typical paths of the status of BIPs are as follows: From be3260ecd58228a6c1a4ddb80f8f5eaece20cc69 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 06:19:36 +0000 Subject: [PATCH 0478/2326] bip-0002: Graph: Collapse Active into Final box --- bip-0002/process.png | Bin 15586 -> 15691 bytes bip-0002/process.svg | 5 +---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/bip-0002/process.png b/bip-0002/process.png index 6b1925ec88fa768c0afa1816bab8230da51832cf..2f86230216442879c13f8aa3ab5a12b0d35856fd 100644 GIT binary patch literal 15691 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 Uryu%wI-1ZptfTt$(3xxh4I(UI)Bpeg literal 15586 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 diff --git a/bip-0002/process.svg b/bip-0002/process.svg index bb61e8e606..b8c8a4c7da 100644 --- a/bip-0002/process.svg +++ b/bip-0002/process.svg @@ -28,7 +28,7 @@ Accepted - Final + Final/Active Replaced @@ -46,7 +46,4 @@ Deferred - - - Active From 95c8f65b11cb782df299ea99fd56a1b3735ec5a0 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 06:22:33 +0000 Subject: [PATCH 0479/2326] bip-0002: Rename Accepted Status to Proposed --- bip-0002.mediawiki | 13 +++++++------ bip-0002/process.png | Bin 15691 -> 15714 bytes bip-0002/process.svg | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 8dd8bf21a0..897ba05c5c 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -125,7 +125,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe * Discussions-To: * Comments-Summary:

Comments-URI: - Status: Type: Created: @@ -178,11 +178,11 @@ The typical paths of the status of BIPs are as follows: Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn. The BIP editor may also change the status to Deferred when no progress is being made on the BIP. -A BIP may only change status from Draft (or Rejected) to Accepted, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status. +A BIP may only change status from Draft (or Rejected) to Proposed, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status. -BIPs should be changed from Draft or Accepted status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a BIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Accepted status if it meets the criteria required as described in the previous paragraph. +BIPs should be changed from Draft or Proposed status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a BIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Proposed status if it meets the criteria required as described in the previous paragraph. -An Accepted BIP may progress to Final only when specific criteria reflecting real-world adoption has occurred. This is different for each BIP depending on the nature of its proposed changes, which will be expanded on below. Evaluation of this status change should be objectively verifiable, and/or be discussed on the development mailing list. +An Proposed BIP may progress to Final only when specific criteria reflecting real-world adoption has occurred. This is different for each BIP depending on the nature of its proposed changes, which will be expanded on below. Evaluation of this status change should be objectively verifiable, and/or be discussed on the development mailing list. When a Final BIP is no longer relevant, its status may be changed to Replaced or Obsolete (which is equivalent to Replaced). This change must also be objectively verifiable and/or discussed. @@ -208,7 +208,7 @@ These criteria are considered objective ways to observe the de facto adoption of Why is this necessary at all? -* BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. As a result, many BIPs with significant real-world use have been left as Draft or Accepted status longer than appropriate. By giving objective criteria to judge the progression of BIPs, this proposal aims to help keep the Status accurate and up-to-date. +* BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. As a result, many BIPs with significant real-world use have been left as Draft or Proposed status longer than appropriate. By giving objective criteria to judge the progression of BIPs, this proposal aims to help keep the Status accurate and up-to-date. How is the entire Bitcoin economy defined by people selling goods/services and holders? @@ -390,7 +390,7 @@ Why is Public Domain no longer acceptable for new BIPs? ==Changes from BIP 1== * Acceptable licenses are redefined entirely, allowing a wide variety of open licenses, while prohibiting the problematic older choices. -* An implementation is now required (when applicable) before BIPs can proceed to Accepted Status. +* An implementation is now required (when applicable) before BIPs can proceed to Proposed Status. * The License preamble headers have been added. * BIP Comments are newly introduced. * Non-image auxiliary files are permitted in the bip-XXXX subdirectory. @@ -398,6 +398,7 @@ Why is Public Domain no longer acceptable for new BIPs? * The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions. * Email addresses are now required for authors. * Markdown format is no longer permitted for BIPs. +* Accepted Status has been renamed to Proposed. ==See Also== diff --git a/bip-0002/process.png b/bip-0002/process.png index 2f86230216442879c13f8aa3ab5a12b0d35856fd..a834947f36aea765ff9bcd0f4efb77695fedcece 100644 GIT binary patch literal 15714 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 J^TX!X{|6&CbLs#9 literal 15691 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 Uryu%wI-1ZptfTt$(3xxh4I(UI)Bpeg diff --git a/bip-0002/process.svg b/bip-0002/process.svg index b8c8a4c7da..efaa02b041 100644 --- a/bip-0002/process.svg +++ b/bip-0002/process.svg @@ -25,7 +25,7 @@ Draft - Accepted + Proposed Final/Active From 894b6ea66cb87601e244c6c4667b60c61aa51ae4 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 06:22:48 +0000 Subject: [PATCH 0480/2326] bip-0002: Sort changes vs BIP 1 by relevance --- bip-0002.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 897ba05c5c..c8c9de4640 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -389,16 +389,16 @@ Why is Public Domain no longer acceptable for new BIPs? ==Changes from BIP 1== -* Acceptable licenses are redefined entirely, allowing a wide variety of open licenses, while prohibiting the problematic older choices. +* Acceptable licenses are entirely rechosen, allowing a wide variety of open licenses, while prohibiting the problematic older choices. +* Accepted Status has been renamed to Proposed. * An implementation is now required (when applicable) before BIPs can proceed to Proposed Status. -* The License preamble headers have been added. * BIP Comments are newly introduced. +* The License preamble headers have been added. * Non-image auxiliary files are permitted in the bip-XXXX subdirectory. -* The Post-History header may be provided as a link instead of a simple date. -* The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions. * 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. -* Accepted Status has been renamed to Proposed. +* 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 e89b98facd4b52e0d248ca7dfc6f60a030d4cc59 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 24 Sep 2016 06:27:51 +0000 Subject: [PATCH 0481/2326] bip0002: Status Deferred->Draft --- README.mediawiki | 2 +- bip-0002.mediawiki | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 6f3ee08d94..c80d3ea805 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -23,7 +23,7 @@ Those proposing changes should consider that ultimately consent may rest with th | BIP process, revised | Luke Dashjr | Process -| Deferred +| Draft |- style="background-color: #cfffcf" | [[bip-0009.mediawiki|9]] | Version bits with timeout and delay diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index c8c9de4640..64eaf367cc 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -2,7 +2,7 @@ BIP: 2 Title: BIP process, revised Author: Luke Dashjr - Status: Deferred + Status: Draft Type: Process Created: 2016-02-03 Replaces: 1 From 67b267948a2f75932645e8955417e70bd8c40674 Mon Sep 17 00:00:00 2001 From: Jonathan Cross Date: Sun, 25 Sep 2016 01:36:00 +0200 Subject: [PATCH 0482/2326] Improving wording of "makes them consuming"... --- bip-0147.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0147.mediawiki b/bip-0147.mediawiki index 8b6fe1ab37..352f48d456 100644 --- a/bip-0147.mediawiki +++ b/bip-0147.mediawiki @@ -9,14 +9,14 @@ ==Abstract== -This document specifies proposed changes to the Bitcoin transaction validity rules to fix the malleability of extra stack element for OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. +This document specifies proposed changes to the Bitcoin transaction validity rules to fix a malleability vector in the extra stack element consumed by OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY. ==Motivation== Signature malleability refers to the ability of any relay node on the network to transform the signature in transactions, with no access to the relevant private keys required. For non-segregated witness transactions, signature malleability will change the txid and invalidate any unconfirmed child transactions. Although the txid of segregated witness ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) transactions is not third party malleable, this malleability vector will change the wtxid and may reduce the efficiency of compact block relay ([https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki BIP152]). -A design flaw in OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY makes them consuming an extra stack element ("dummy element") after signature validation. The dummy element is not inspected in any manner, and could be replaced by any value without invalidating the script. This document specifies a new rule to fix this signature malleability. +A design flaw in OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY causes them to consume an extra stack element ("dummy element") after signature validation. The dummy element is not inspected in any manner, and could be replaced by any value without invalidating the script. This document specifies a new rule to fix this signature malleability. ==Specification== From 5c256744bffeee209b42018d79ac00db6881d8b1 Mon Sep 17 00:00:00 2001 From: isidoro ghezzi Date: Sun, 25 Sep 2016 21:11:11 +0200 Subject: [PATCH 0483/2326] minor: fix link to BIP 22 --- bip-0023.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0023.mediawiki b/bip-0023.mediawiki index 874e60a120..03909587f6 100644 --- a/bip-0023.mediawiki +++ b/bip-0023.mediawiki @@ -13,7 +13,7 @@ This BIP describes extensions to the getblocktemplate JSON-RPC call to enhance p ==Specification== -Note that all sections of this specification are optional extensions on top of [[BIP 0022|BIP 22]]. +Note that all sections of this specification are optional extensions on top of [[bip-0022.mediawiki|BIP 22]]. ===Summary Support Levels=== From 5b66911109c63c4091ad8a8c8b6adb0431f5c6ce Mon Sep 17 00:00:00 2001 From: TomZ Date: Mon, 26 Sep 2016 18:09:34 +0200 Subject: [PATCH 0484/2326] Fixes to 0134 --- bip-0134.mediawiki | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bip-0134.mediawiki b/bip-0134.mediawiki index 280103f12b..afb5143a88 100644 --- a/bip-0134.mediawiki +++ b/bip-0134.mediawiki @@ -66,7 +66,7 @@ a transaction. CMF tokens are triplets of name, format (like PositiveInteger) and value. Names in this scope are defined much like an enumeration where the actual integer value (id, below) is equally important to the written name. -If any token found that is not covered in the next table will make the +If any token found that is not covered in the next table it will make the transaction that contains it invalid. {| class="wikitable" @@ -81,7 +81,7 @@ transaction that contains it invalid. |- |TxInScript || 3 ||ByteArray|| Required ||The 'input' part of the script |- -|TxOutValue || 4 ||Integer || Required ||Amount of satoshi to transfer +|TxOutValue || 4 ||Integer || Required ||Amount of Satoshis to transfer |- |TxOutScript || 5 ||ByteArray|| Required ||The 'output' part of the script |- @@ -164,7 +164,7 @@ version it would be placed in the outputs segment. === Script v2 === The default value of ScriptVersion is number 2, as opposed to the version 1 -of script that the is in use today. The version 2 is mostly identical +of script that is in use today. The version 2 is mostly identical to version one, including upgrades made to it over the years and in the future. The only exception is that the OP_CHECKSIG is made dramatically simpler. The input-type for OP_CHECKSIG is now no longer configurable, it is @@ -184,9 +184,9 @@ modifications to such signatures outside of validating all transactions. For this reason the merkle tree is extended to include (append) the hash of the v4 transactions. The markle tree will continue to have all the -transactions' tx-ids but appended to that are the v4 hahes that include the +transactions' tx-ids but appended to that are the v4 hashes that include the signatures as well. Specifically the hash is taken over a data-blob that -is build up from: +is built up from: 1. the tx-id 2. the CMF-tokens 'TxInScript' @@ -215,7 +215,7 @@ SPV (simple payment validation) wallets need to be updated to receive or create the new transaction type. This BIP introduces a new transaction format without changing or -deprecating the existing one or any of its practices. Therefor it is +deprecating the existing one or any of its practices. Therefore it is backwards compatible for any existing data or parsing-code. ==Reference Implementation== @@ -238,7 +238,8 @@ To be determined Copyright (c) 2016 Tom Zander -This document is licensed under the Open Publication License v1.0 +This document is dual-licensed under the Creative-Commons BY-SA license v4.0 +and the Open Publication License v1.0 with the following licence-options: Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder. From 78cbaca9408ea03470379479b93592b75f9ddc0f Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 28 Sep 2016 04:52:50 +0200 Subject: [PATCH 0485/2326] Fix a few nits suggested by @instagibbs --- bip-0152.mediawiki | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 1b74306176..cdb55b9e62 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -138,7 +138,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde # Once the block has been reconstructed, it shall be processed as normal, keeping in mind that short transaction IDs are expected to occasionally collide, and that nodes MUST NOT be penalized for such collisions, wherever they appear. ==Protocol Versioning== -# The protocol version negotiation allows two nodes to agree on the version of compact blocks which they will exchange. As it is only in a single field, it does not allow a node to support a specific version in only one direction (sending or receiving). +# The protocol version negotiation allows two nodes to agree on the versions of compact blocks which they will exchange. As it is only in a single field, it does not allow a node to support a specific version in only one direction (sending or receiving). # Upon connection establishment, a node SHOULD send a burst of sendcmpct messages containing every version of compact block encodings for which they are willing to support sending cmpctblock and blocktxn messages, and receiving getblocktxn messages. These messages SHOULD be ordered in the order of the priority which the node wishes to receive cmpctblock/blocktxn messages, with the highest-priority version sendcmpct message sent first. # The encoding version used to send a cmpctblock or blocktxn message or to receive a getblocktxn message MUST be the second integer (version number) in the first sendcmpct message received for which a sendcmpct message with the same version number was sent. # Nodes MUST NOT send a sendcmpct message which contains a version number other than the version number which has been negotiated for receiving cmpctblock/blocktxn messages after sending a request for a MSG_CMPCT_BLOCK object, sending a cmpctblock, getblocktxn, blocktxn, or pong message. @@ -149,7 +149,8 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde # By way of example, an implementation of the above protocol might look like the following. # Upon exchanging version/verack messages, a node immediately sends its list of sendcmpct announcements to the other side, with the version which it wants to receive sent first. # Upon receiving the first sendcmpct announcement with a protocol version which is understood from the remote peer, a node will "lock in" the compact block encoding version which will be used to encode compact blocks to that peer. -# Upon receiving a sendcmpct announcement with a protocol version which is understood from the remote peer, a node will check if that protocol version is higher-receive-priority than the current receive-protocol-version in use on the connection, and switch to that version for decoding new compact block messages received. +# The node then sets the current receive-protocol-version in use on the connection as that version, and uses it to decode new compact block messages. +# Upon receiving subsequent sendcmpct announcements with a protocol version which is understood from the remote peer, a node will check if that protocol version is higher-receive-priority than the current receive-protocol-version in use on the connection, and switch to that version for decoding new compact block messages received. # A node might wish to keep a flag for each peer which indicates compact block version negotiation is complete, which can be set upon receiving any compact block-related, or pong message. # The above implementation requires only a compile-time list of supported versions in some static priority order, two version fields per peer, and an optional negotiation-complete boolean per-peer. From f562566d9187e578de2c735dc70a8f55e77ec05e Mon Sep 17 00:00:00 2001 From: Dan Gershony Date: Wed, 28 Sep 2016 21:19:39 +0100 Subject: [PATCH 0486/2326] Adding the source code for CoinVault The C# implementation is now open source --- bip-0044.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index e17c73d1a7..c289887ab3 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -267,7 +267,7 @@ is required and a pull request to the above file should be created. * [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]]) * [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]]) * [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]]) -* [[https://www.coinvault.io/|CoinVault]] +* [[https://www.coinvault.io/|CoinVault]] ([[https://github.com/CoinVault/dotblock|source]]) ==Reference== * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] From 9ea3afd7d6c9e2a90a71820efcfa4ab56d109217 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 1 Oct 2016 15:43:51 +0200 Subject: [PATCH 0487/2326] BIP2: fix typo --- bip-0002.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 64eaf367cc..fe7761ea06 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -309,7 +309,7 @@ Will BIP comments be censored or limited to particular participants/"experts"? ===Specification=== -New BIPs may be accepted with the following licenses. Each new BIP must identify at least one acceptable license in its preamble. The License header in the preamble must be placed after the Created header. Each license must be referenced by their respecitve abbreviation given below. +New BIPs may be accepted with the following licenses. Each new BIP must identify at least one acceptable license in its preamble. The License header in the preamble must be placed after the Created header. Each license must be referenced by their respective abbreviation given below. For example, a preamble might include the following License header: From 6d086e11d09acc29fee5c3204a488496d395370f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 5 Oct 2016 05:50:12 +0000 Subject: [PATCH 0488/2326] Bugfix: scripts/buildtable: Tolerate Discussions-To, Replaces, Superseded-By, and Resolution headers --- scripts/buildtable.pl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index 568b8eb0f4..f0e43d263a 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -24,7 +24,11 @@ Editor => undef, ); my %MiscField = ( + 'Discussions-To' => undef, 'Post-History' => undef, + 'Replaces' => undef, + 'Superseded-By' => undef, + 'Resolution' => undef, ); my %ValidLayer = ( From 544941d09600d14dc7daf0828d60b29248d337bc Mon Sep 17 00:00:00 2001 From: Daniel Weigl Date: Wed, 5 Oct 2016 13:22:18 +0200 Subject: [PATCH 0489/2326] added backwards compatibility and copyright --- bip-p2sh-accounts.mediawiki | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bip-p2sh-accounts.mediawiki b/bip-p2sh-accounts.mediawiki index 251f7682d9..6011927052 100644 --- a/bip-p2sh-accounts.mediawiki +++ b/bip-p2sh-accounts.mediawiki @@ -62,6 +62,10 @@ To derive the P2SH address from the above calculated public key, we use the enca scriptPubKey: HASH160 <20-byte-script-hash> EQUAL (0xA914{20-byte-script-hash}87) +==Backwards Compatibility== + +This BIP is not backwards compatible by design as described under [#considerations]. A not compatible wallet will not discover accounts at all and the user will notice that something is wrong. + ==Test vectors== @@ -94,3 +98,7 @@ To derive the P2SH address from the above calculated public key, we use the enca * [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] * [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] * [[bip-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]] + +== Copyright == + +This document is placed in the public domain. \ No newline at end of file From 0f0dad6b89925d8cc5d8bd4ebf06da0fea9c8081 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 5 Oct 2016 11:35:37 +0000 Subject: [PATCH 0490/2326] Assign BIP 49: Derivation scheme for P2WPKH-nested-in-P2SH based accounts --- README.mediawiki | 6 ++++++ bip-p2sh-accounts.mediawiki => bip-0049.mediawiki | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) rename bip-p2sh-accounts.mediawiki => bip-0049.mediawiki (91%) diff --git a/README.mediawiki b/README.mediawiki index 974870e0fb..1ac6b19878 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -216,6 +216,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Justus Ranvier | Informational | Draft +|- +| [[bip-0049.mediawiki|49]] +| Derivation scheme for P2WPKH-nested-in-P2SH based accounts +| Daniel Weigl +| Informational +| Draft |- style="background-color: #cfffcf" | [[bip-0050.mediawiki|50]] | March 2013 Chain Fork Post-Mortem diff --git a/bip-p2sh-accounts.mediawiki b/bip-0049.mediawiki similarity index 91% rename from bip-p2sh-accounts.mediawiki rename to bip-0049.mediawiki index 6011927052..5ec371fa00 100644 --- a/bip-p2sh-accounts.mediawiki +++ b/bip-0049.mediawiki @@ -1,5 +1,5 @@
-  BIP: 
+  BIP: 49
   Title: Derivation scheme for P2WPKH-nested-in-P2SH based accounts
   Author: Daniel Weigl 
   Status: Draft
@@ -30,7 +30,7 @@ Two generally different approaches are possible for current BIP44 capable wallet
 
 2) Create dedicated accounts only used for segregated witness addresses.
 
-The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP-compatible wallet masterseed into/in a non-BIP{ThisBipNumber}-compatible wallet, the account might show up but also it might miss some UTXOs.
+The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP49-compatible wallet masterseed into/in a non-BIP{ThisBipNumber}-compatible wallet, the account might show up but also it might miss some UTXOs.
 
 Therefore this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets.
 
@@ -74,10 +74,10 @@ This BIP is not backwards compatible by design as described under [#consideratio
   masterseedWords = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
   masterseed = 
 
-  // Account 0, root = m/'/0'/0'
+  // Account 0, root = m/49'/0'/0'
   account0Xpriv = 
 
-  // Account 0, first receiving private key = m/'/0'/0'/0/0
+  // Account 0, first receiving private key = m/49'/0'/0'/0/0
   account0recvPrivateKey = 
   account0recvPublickKey = 
 
@@ -101,4 +101,4 @@ This BIP is not backwards compatible by design as described under [#consideratio
 
 == Copyright ==
 
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.

From 9fc3cf52c6d0dcb58b806c7a1f727083b7e49607 Mon Sep 17 00:00:00 2001
From: "Wladimir J. van der Laan" 
Date: Wed, 5 Oct 2016 13:39:49 +0200
Subject: [PATCH 0491/2326] bip-0144: Add enum values for
 MSG_WITNESS_{BLOCK,TX}, MSG_FILTERED_WITNESS_BLOCK

Found these missing while working on
https://github.com/bitcoin/bitcoin/pull/8880 .
---
 bip-0144.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index f2c8857f5a..456da18dc6 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -103,9 +103,9 @@ and therefore, they have witness hash equal to normal hash.)
 
 
 === Relay ===
-New inv types MSG_WITNESS_TX and MSG_WITNESS_BLOCK are added, only
+New inv types MSG_WITNESS_TX (0x40000001, or (1<<30)+MSG_TX) and MSG_WITNESS_BLOCK (0x40000002, or (1<<30)+MSG_BLOCK) are added, only
 for use in getdata. Inventory messages themselves still use just MSG_TX and MSG_BLOCK,
-similar to MSG_FILTERED_BLOCK.
+similar to MSG_FILTERED_BLOCK. A further inv type MSG_FILTERED_WITNESS_BLOCK (0x40000003, or (1<<30)+MSG_FILTERED_BLOCK) is reserved for future use.
 
 * '''Rationale for not advertizing witnessness in invs''': we don't always use invs anymore (with 'sendheaders' BIP 130), plus it's not useful: implicitly, every transaction and block have a witness, old ones just have empty ones.
 

From 4ce983bee9efb184f8c126d9f099dc2cae99500a Mon Sep 17 00:00:00 2001
From: MarcoFalke 
Date: Wed, 5 Oct 2016 14:56:44 +0200
Subject: [PATCH 0492/2326] BIP2: Remove Superseded from choices for Status

The section about the BIP status field only defines
"Replaced or Obsolete (which is equivalent to Replaced)",
so remove "Superseded" for clarity.
---
 bip-0002.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index 64eaf367cc..8c745c8767 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -126,7 +126,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
 * Comments-Summary: 
   Comments-URI: 
   Status: 
+           Withdrawn | Final | Replaced>
   Type: 
   Created: 
   License: 

From 3f59ccdddc84f309dd8268706ac8240e3e42dc2b Mon Sep 17 00:00:00 2001
From: Johnson Lau 
Date: Wed, 5 Oct 2016 17:33:02 +0800
Subject: [PATCH 0493/2326] Add policy descriptions to BIP141 and 143 and
 address some nits.

---
 bip-0141.mediawiki | 16 ++++++++++++++--
 bip-0143.mediawiki |  7 ++++++-
 bip-0144.mediawiki |  2 +-
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 2b2360b7ce..6df2624d07 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -133,12 +133,24 @@ The following definitions are not used for consensus limits, but are suggested t
 
 ''Transaction weight'' is defined as ''Base transaction size'' * 3 + ''Total transaction size'' (ie. the same method as calculating ''Block weight'' from ''Base size'' and ''Total size'').
 
-''Virtual transaction size'' is defined as ''Transaction weight'' / 4 (rounded up to nearest integer).
+''Virtual transaction size'' is defined as ''Transaction weight'' / 4 (rounded up to the next integer).
 
-''Base transaction size'' is the transaction size in bytes with the original transaction serialization without any witness-related data.
+''Base transaction size'' is the size of the transaction serialised with the witness data stripped.
 
 ''Total transaction size'' is the transaction size in bytes serialized as described in [[bip-0144.mediawiki|BIP144]], including base data and witness data.
 
+=== New script semantics ===
+
+Despite that the script language for P2WPKH and P2WSH looks very similar to pre-segregated witness script, there are several notable differences. Users MUST NOT assume that a script spendable in pre-segregated witness system would also be spendable as a P2WPKH or P2WSH script. Before large-scale deployment in the production network, developers should test the scripts on testnet with the default relay policy turned on, and with a small amount of money after BIP141 is activated on mainnet.
+
+A major difference at consensus level is described in [https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP143], as a new transaction digest algorithm for signature verification in version 0 witness program.
+
+Three relay and mining policies are also included in the first release of segregated witness at reference implementation version 0.13.1. Softforks based on these policies are likely to be proposed in the near future. To avoid indefinite delay in transaction confirmation and permanent fund loss in a potential softfork, users MUST observe the new semantics carefully:
+
+# Only compressed public keys are accepted in P2WPKH and P2WSH (See [https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki#Restrictions_on_public_key_type BIP143])
+# The argument of OP_IF/NOTIF in P2WSH must be minimalhttps://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-August/013014.html
+# Signature(s) must be null vector(s) if an OP_CHECKSIG or OP_CHECKMULTISIG is failed (for both pre-segregated witness script and P2WSH. See [https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki BIP146])
+
 == Examples ==
 
 === P2WPKH ===
diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 892c0278e8..a0b0ccebbf 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -125,6 +125,11 @@ Refer to the reference implementation, reproduced below, for the precise algorit
   return ss.GetHash();
 
 
+== Restrictions on public key type ==
+As a default policy, only compressed public keys are accepted in P2WPKH and P2WSH. Each public key passed to a sigop inside version 0 witness program must be a compressed key: the first byte MUST be either 0x02 or 0x03, and the size MUST be 33 bytes. Transactions that break this rule will not be relayed or mined by default.
+
+Since this policy is preparation for a future softfork proposal, to avoid potential future funds loss, users MUST NOT use uncompressed keys in version 0 witness programs.
+
 == Example ==
 === Native P2WPKH ===
   
@@ -538,7 +543,7 @@ As a soft fork, older software will continue to operate without modification. No
 
 == Reference Implementation ==
 
-https://github.com/bitcoin/bitcoin/pull/7910
+https://github.com/bitcoin/bitcoin/pull/8149
 
 == References ==
 
diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index 456da18dc6..f10fe0cdb5 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -117,7 +117,7 @@ MSG_WITNESS_BLOCK requests will return a block message with transactions that ha
 Special thanks to Gregory Maxwell for originating many of the ideas in this BIP and Luke-Jr for figuring out how to deploy this as a soft fork.
 
 == Reference Implementation ==
-https://github.com/sipa/bitcoin/commits/segwit
+https://github.com/bitcoin/bitcoin/pull/8149
 
 == Copyright ==
 This document is placed in the public domain.

From 7662d7124a324ce394aad3c3912ed60fdbfb8320 Mon Sep 17 00:00:00 2001
From: Daniel Weigl 
Date: Wed, 5 Oct 2016 15:55:35 +0200
Subject: [PATCH 0494/2326] replace BIP-number-placeholders and calculate test
 vectors

---
 bip-0049.mediawiki | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki
index 5ec371fa00..d4f58d7fc4 100644
--- a/bip-0049.mediawiki
+++ b/bip-0049.mediawiki
@@ -30,7 +30,7 @@ Two generally different approaches are possible for current BIP44 capable wallet
 
 2) Create dedicated accounts only used for segregated witness addresses.
 
-The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP49-compatible wallet masterseed into/in a non-BIP{ThisBipNumber}-compatible wallet, the account might show up but also it might miss some UTXOs.
+The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP49-compatible wallet masterseed into/in a non-BIP49-compatible wallet, the account might show up but also it might miss some UTXOs.
 
 Therefore this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets.
 
@@ -49,7 +49,7 @@ serialization method.
 m / purpose' / coin_type' / account' / change / address_index
 
-For the `purpose`-path level it uses {ThisBipNumber}'. The rest of the levels are used as defined in BIP44 +For the `purpose`-path level it uses `49'`. The rest of the levels are used as defined in BIP44 ===Address derivation=== @@ -69,25 +69,25 @@ This BIP is not backwards compatible by design as described under [#consideratio ==Test vectors== -(tbd. when we have the actual bip number)
   masterseedWords = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
-  masterseed = 
+  masterseed = tprv8ZgxMBicQKsPe5YMU9gHen4Ez3ApihUfykaqUorj9t6FDqy3nP6eoXiAo2ssvpAjoLroQxHqr3R5nE3a5dU3DHTjTgJDd7zrbniJr6nrCzd (testnet)
 
   // Account 0, root = m/49'/0'/0'
-  account0Xpriv = 
+  account0Xpriv = tprv8fnNnm525ViePCEx7Z9cZb6QNUtsUc8XKaePnZtPnKZWHw1rnAC9r6MdMdsmrkGW7Vy3eVtwtRqrfkxfWjnitBTNEZjTb6pbui7BUmnBBd3 (testnet)
 
   // Account 0, first receiving private key = m/49'/0'/0'/0/0
-  account0recvPrivateKey = 
-  account0recvPublickKey = 
+  account0recvPrivateKey = cQHH4LLDxjDqTM2rRpEi29f9a3EAQ8A7yWxiNdR8nC8WrkKU7Dms
+  account0recvPrivateKeyHex = 0x508c73a06f6b6c817238ba61be232f5080ea4616c54f94771156934666d38ee3
+  account0recvPublickKeyHex = 0x039b3b694b8fc5b5e07fb069c783cac754f5d38c3e08bed1960e31fdb1dda35c24
 
   // Address derivation
-  keyhash = HASH160(account0recvPublickKey) = 
-  scriptSig = <0 > = 
-  addressBytes = HASH160(scriptSig) = 
+  keyhash = HASH160(account0recvPublickKeyHex) = 0xf990679acafe25c27615373b40bf22446d24ff44
+  scriptSig = <0 > = 0x0014f990679acafe25c27615373b40bf22446d24ff44
+  addressBytes = HASH160(scriptSig) = 0x3fb6e95812e57bb4691f9a4a628862a61a4f769b
 
   // addressBytes base58check encoded for testnet
-  address = base58check(prefix | addressBytes) = 1xyz....
+  address = base58check(prefix | addressBytes) = 2My47gHNc8nhX5kBWqXHU4f8uuQvQKEgwMd (testnet)
 
@@ -101,4 +101,4 @@ This BIP is not backwards compatible by design as described under [#consideratio == Copyright == -This document is placed in the public domain. +This document is placed in the public domain. \ No newline at end of file From 6a8b845f63049960322fa747239f6f9c20647cf8 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 5 Oct 2016 20:08:08 +0000 Subject: [PATCH 0495/2326] bip-0002: Add missing Obsolete status and Requires to preamble overview --- bip-0002.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 8c745c8767..97c22fe231 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -126,12 +126,13 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe * Comments-Summary: Comments-URI: Status: + Withdrawn | Final | Replaced | Obsolete> Type: Created: License: * License-Code: * Post-History: +* Requires: * Replaces: * Superseded-By:
From 10fcf4ed0db168ee60662fd1bddd4370ec71e6fe Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 14 Oct 2016 10:09:03 -0400 Subject: [PATCH 0496/2326] Fix a few nits and expand on coinbase short ID calc in ver 2 --- bip-0152.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index cdb55b9e62..53ccce6c5e 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -149,8 +149,8 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde # By way of example, an implementation of the above protocol might look like the following. # Upon exchanging version/verack messages, a node immediately sends its list of sendcmpct announcements to the other side, with the version which it wants to receive sent first. # Upon receiving the first sendcmpct announcement with a protocol version which is understood from the remote peer, a node will "lock in" the compact block encoding version which will be used to encode compact blocks to that peer. -# The node then sets the current receive-protocol-version in use on the connection as that version, and uses it to decode new compact block messages. -# Upon receiving subsequent sendcmpct announcements with a protocol version which is understood from the remote peer, a node will check if that protocol version is higher-receive-priority than the current receive-protocol-version in use on the connection, and switch to that version for decoding new compact block messages received. +# The node then sets the current receive-protocol-version in use on the connection to that version, and uses it to decode new compact block messages. +# Upon receiving subsequent sendcmpct announcements with a protocol version which is understood from the remote peer (ie a version which has been announced using a sendcmpct in the other direction), a node will check if that protocol version is higher-receive-priority than the current receive-protocol-version in use on the connection, and switch to that version for decoding new compact block messages received. # A node might wish to keep a flag for each peer which indicates compact block version negotiation is complete, which can be set upon receiving any compact block-related, or pong message. # The above implementation requires only a compile-time list of supported versions in some static priority order, two version fields per peer, and an optional negotiation-complete boolean per-peer. @@ -159,7 +159,7 @@ Compact blocks version 2 is almost identical to version 1, but supports segregat # The second integer (version number) inside sendcmpct is 2 instead of 1 (see Protocol Versioning section, above). # Transactions inside cmpctblock messages (both those used as direct announcement and those in response to getdata) and in blocktxn should include witness data, using the same format as responses to getdata MSG_WITNESS_TX, specified in BIP144. -# Short transaction IDs sent to us in cmpctblock messages, and sent by us in getblocktxn messages, are computed using the same process as in version 1, but using the wtxid as defined in BIP 141 instead of the txid. +# Short transaction IDs sent to us in cmpctblock messages, and sent by us in getblocktxn messages, are computed using the same process as in version 1, but using the wtxid as defined in BIP 141 instead of the txid. Note that, though a node normally SHOULD, if a node does not include (ie must then include the short ID for) the coinbase transaction, it must be computed by encoding the transaction in witness format as defined by BIP 141. # Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK object for which a cmpctblock message is not sent in response, the block message containing the requested block in non-compact form MUST be encoded with witnesses (as is sent in reply to a MSG_WITNESS_BLOCK getdata) if the protocol version used to encode the cmpctblock message would have been 2, and encoded without witnesses (as is sent in response to a MSG_BLOCK getdata) if the protocol version used to encode the cmpctblock message would have been 1. ==Implementation Notes== From bb3734349fec522dbb1a639234ee9b2152399b21 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Sun, 16 Oct 2016 02:33:04 +0800 Subject: [PATCH 0497/2326] Add examples to show FindAndDelete is not used in BIP143 --- bip-0143.mediawiki | 95 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index a0b0ccebbf..1c1e352746 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -12,7 +12,7 @@ This proposal defines a new transaction digest algorithm for signature verification in version 0 witness program, in order to minimize redundant data hashing in verification, and to cover the input value by the signature. == Motivation == -There are 4 ECDSA signature verification codes in the original Bitcoin script system: CHECKSIG, CHECKSIGVERIFY, CHECKMULTISIG, CHECKMULTISIGVERIFY (“sigops”). According to the sighash type (ALL, NONE, SINGLE, ANYONECANPAY), a transaction digest is generated with a double SHA256 of a serialized subset of the transaction, and the signature is verified against this digest with a given public key. The detailed procedure is described in a Bitcoin Wiki article. [https://en.bitcoin.it/wiki/OP_CHECKSIG] +There are 4 ECDSA signature verification codes in the original Bitcoin script system: CHECKSIG, CHECKSIGVERIFY, CHECKMULTISIG, CHECKMULTISIGVERIFY (“sigops”). According to the sighash type (ALL, NONE, SINGLE, ANYONECANPAY), a transaction digest is generated with a double SHA256 of a serialized subset of the transaction, and the signature is verified against this digest with a given public key. The detailed procedure is described in a Bitcoin Wiki article. [https://en.bitcoin.it/wiki/OP_CHECKSIG] Unfortunately, there are at least 2 weaknesses in the original SignatureHash transaction digest algorithm: @@ -39,16 +39,16 @@ Semantics of the original sighash types remain unchanged, except the followings: # 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; +# 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. The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. The item 5: -*For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac. -*For P2WSH witness program, -**if the witnessScript does not contain any OP_CODESEPARATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOuts. -**if the witnessScript contains any OP_CODESEPARATOR, the scriptCode is the evaluated script, with everything up to and including the last executed OP_CODESEPARATOR before the signature checking opcode being executed removed, serialized as scripts inside CTxOuts. +*For P2WPKH witness program, the scriptCode is 0x1976a914{20-byte-pubkey-hash}88ac. +*For P2WSH witness program, +**if the witnessScript does not contain any OP_CODESEPARATOR, the scriptCode is the witnessScript serialized as scripts inside CTxOut. +**if the witnessScript contains any OP_CODESEPARATOR, the scriptCode is the witnessScript but removing everything up to and including the last executed OP_CODESEPARATOR before the signature checking opcode being executed, serialized as scripts inside CTxOut. (The exact semantics is demonstrated in the examples below) The item 6 is a 8-byte value of the amount of bitcoin spent in this input. @@ -126,11 +126,14 @@ Refer to the reference implementation, reproduced below, for the precise algorit == Restrictions on public key type == -As a default policy, only compressed public keys are accepted in P2WPKH and P2WSH. Each public key passed to a sigop inside version 0 witness program must be a compressed key: the first byte MUST be either 0x02 or 0x03, and the size MUST be 33 bytes. Transactions that break this rule will not be relayed or mined by default. +As a default policy, only compressed public keys are accepted in P2WPKH and P2WSH. Each public key passed to a sigop inside version 0 witness program must be a compressed key: the first byte MUST be either 0x02 or 0x03, and the size MUST be 33 bytes. Transactions that break this rule will not be relayed or mined by default. Since this policy is preparation for a future softfork proposal, to avoid potential future funds loss, users MUST NOT use uncompressed keys in version 0 witness programs. == Example == + +To ensure consistency in consensus-critical behaviour, developers should test their implementations against all the tests below. More tests related to this proposal could be found under https://github.com/bitcoin/bitcoin/tree/master/src/test/data . + === Native P2WPKH === The following is an unsigned transaction: @@ -531,6 +534,82 @@ This example is a P2SH-P2WSH 6-of-6 multisig witness program signed with 6 diffe The serialized signed transaction is: 0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac080047304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502473044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403483045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a08824730440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000 +=== No FindAndDelete === + +These examples show that FindAndDelete for the signature is not applied. The transactions are generated in an unconventional way. Instead of signing using a private key, the signatures are pre-determined as part of witnessScript. The public keys are generated with key recovery, using the fixed signatures and the sighash defined in this proposal. Therefore, the private keys are unknown. + + + The following is an unsigned transaction: 010000000169c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d000000ffffffff0101000000000000000000000000 + + nVersion: 01000000 + txin: 01 69c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f1 4c1d0000 00 ffffffff + txout: 01 0100000000000000 00 + nLockTime: 00000000 + + The input comes from a P2WSH witness program: + scriptPubKey : 00209e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19, value: 200000 + redeemScript : OP_CHECKSIGVERIFY <0x30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01> + ad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 + + To sign it with a nHashType of 1 (SIGHASH_ALL): + + hashPrevouts: + dSHA256(69c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d0000) + = b67c76d200c6ce72962d919dc107884b9d5d0e26f2aea7474b46a1904c53359f + + hashSequence: + dSHA256(ffffffff) + = 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044 + + hashOutputs: + dSHA256(010000000000000000) + = e5d196bfb21caca9dbd654cafb3b4dc0c4882c8927d2eb300d9539dd0b934228 + + hash preimage: 01000000b67c76d200c6ce72962d919dc107884b9d5d0e26f2aea7474b46a1904c53359f3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e7066504469c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d00004aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01400d030000000000ffffffffe5d196bfb21caca9dbd654cafb3b4dc0c4882c8927d2eb300d9539dd0b9342280000000001000000 + + nVersion: 01000000 + hashPrevouts: b67c76d200c6ce72962d919dc107884b9d5d0e26f2aea7474b46a1904c53359f + hashSequence: 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044 + outpoint: 69c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d0000 + scriptCode: 4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 + amount: 400d030000000000 + nSequence: ffffffff + hashOutputs: e5d196bfb21caca9dbd654cafb3b4dc0c4882c8927d2eb300d9539dd0b934228 + nLockTime: 00000000 + nHashType: 01000000 + + sigHash: 71c9cd9b2869b9c70b01b1f0360c148f42dee72297db312638df136f43311f23 + signature: 30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e 01 + pubkey: 02a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c + + The serialized signed transaction is: 034830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e012102a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0100000000 + + nVersion: 01000000 + marker: 00 + flag: 01 + txin: 01 69c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f1 4c1d0000 00 ffffffff + txout: 01 0100000000000000 00 + witness: 03 4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 + 2102a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c + 4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 + nLockTime: 00000000 + + + + The following transaction is a OP_CHECKMULTISIGVERIFY version of the FindAndDelete examples: 010000000001019275cb8d4a485ce95741c013f7c0d28722160008021bb469a11982d47a6628964c1d000000ffffffff0101000000000000000007004830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960101022102966f109c54e85d3aee8321301136cedeb9fc710fdef58a9de8a73942f8e567c021034ffc99dd9a79dd3cb31e2ab3e0b09e0e67db41ac068c625cd1f491576016c84e9552af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c039596017500000000 + + redeemScript: OP_2 OP_CHECKMULTISIGVERIFY <30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01> <304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c03959601> + hash preimage: 0100000039283953eb1e26994dde57b7f9362a79a8c523e2f8deba943c27e826a005f1e63bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e706650449275cb8d4a485ce95741c013f7c0d28722160008021bb469a11982d47a6628964c1d00009552af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960175400d030000000000ffffffffe5d196bfb21caca9dbd654cafb3b4dc0c4882c8927d2eb300d9539dd0b9342280000000001000000 + sighash: c1628a1e7c67f14ca0c27c06e4fdeec2e6d1a73c7a91d7c046ff83e835aebb72 + witness: 07 00 + 4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01 + 48304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c03959601 + 0102 + 2102966f109c54e85d3aee8321301136cedeb9fc710fdef58a9de8a73942f8e567c0 + 21034ffc99dd9a79dd3cb31e2ab3e0b09e0e67db41ac068c625cd1f491576016c84e + 9552af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960175 + + The new serialization format is described in BIP144 [[bip-0144.mediawiki|BIP144: Segregated Witness (Peer Services)]] == Deployment == @@ -547,7 +626,7 @@ https://github.com/bitcoin/bitcoin/pull/8149 == References == - + == Copyright == From 61e766b9dd78e5d7cd738e34cf5a86e23289c5bd Mon Sep 17 00:00:00 2001 From: Daniel Weigl Date: Sun, 16 Oct 2016 17:25:14 +0200 Subject: [PATCH 0498/2326] fix wrong cointype for test vectors - use m/49'/1'/0' for testnet --- bip-0049.mediawiki | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki index d4f58d7fc4..4460ba7683 100644 --- a/bip-0049.mediawiki +++ b/bip-0049.mediawiki @@ -73,21 +73,21 @@ This BIP is not backwards compatible by design as described under [#consideratio masterseedWords = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about masterseed = tprv8ZgxMBicQKsPe5YMU9gHen4Ez3ApihUfykaqUorj9t6FDqy3nP6eoXiAo2ssvpAjoLroQxHqr3R5nE3a5dU3DHTjTgJDd7zrbniJr6nrCzd (testnet) - // Account 0, root = m/49'/0'/0' - account0Xpriv = tprv8fnNnm525ViePCEx7Z9cZb6QNUtsUc8XKaePnZtPnKZWHw1rnAC9r6MdMdsmrkGW7Vy3eVtwtRqrfkxfWjnitBTNEZjTb6pbui7BUmnBBd3 (testnet) + // Account 0, root = m/49'/1'/0' + account0Xpriv = tprv8gRrNu65W2Msef2BdBSUgFdRTGzC8EwVXnV7UGS3faeXtuMVtGfEdidVeGbThs4ELEoayCAzZQ4uUji9DUiAs7erdVskqju7hrBcDvDsdbY (testnet) - // Account 0, first receiving private key = m/49'/0'/0'/0/0 - account0recvPrivateKey = cQHH4LLDxjDqTM2rRpEi29f9a3EAQ8A7yWxiNdR8nC8WrkKU7Dms - account0recvPrivateKeyHex = 0x508c73a06f6b6c817238ba61be232f5080ea4616c54f94771156934666d38ee3 - account0recvPublickKeyHex = 0x039b3b694b8fc5b5e07fb069c783cac754f5d38c3e08bed1960e31fdb1dda35c24 + // Account 0, first receiving private key = m/49'/1'/0'/0/0 + account0recvPrivateKey = cULrpoZGXiuC19Uhvykx7NugygA3k86b3hmdCeyvHYQZSxojGyXJ + account0recvPrivateKeyHex = 0xc9bdb49cfbaedca21c4b1f3a7803c34636b1d7dc55a717132443fc3f4c5867e8 + account0recvPublickKeyHex = 0x03a1af804ac108a8a51782198c2d034b28bf90c8803f5a53f76276fa69a4eae77f // Address derivation - keyhash = HASH160(account0recvPublickKeyHex) = 0xf990679acafe25c27615373b40bf22446d24ff44 - scriptSig = <0 > = 0x0014f990679acafe25c27615373b40bf22446d24ff44 - addressBytes = HASH160(scriptSig) = 0x3fb6e95812e57bb4691f9a4a628862a61a4f769b + keyhash = HASH160(account0recvPublickKeyHex) = 0x38971f73930f6c141d977ac4fd4a727c854935b3 + scriptSig = <0 > = 0x001438971f73930f6c141d977ac4fd4a727c854935b3 + addressBytes = HASH160(scriptSig) = 0x336caa13e08b96080a32b5d818d59b4ab3b36742 // addressBytes base58check encoded for testnet - address = base58check(prefix | addressBytes) = 2My47gHNc8nhX5kBWqXHU4f8uuQvQKEgwMd (testnet) + address = base58check(prefix | addressBytes) = 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2 (testnet)
From 5c2da7e07d924c34af4edf7098981c9a376263d2 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 17 Oct 2016 13:16:10 +0200 Subject: [PATCH 0499/2326] BIP 141 start and end time --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 6df2624d07..352256f782 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -299,7 +299,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 TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD). +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 20673078748a4a3f225c91edff353f707190d9c8 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Mon, 17 Oct 2016 20:18:35 +0800 Subject: [PATCH 0500/2326] Add start day for BIP147 --- bip-0147.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0147.mediawiki b/bip-0147.mediawiki index 352f48d456..001abc6519 100644 --- a/bip-0147.mediawiki +++ b/bip-0147.mediawiki @@ -28,7 +28,7 @@ To fix the dummy element malleability, a new consensus rule ("NULLDUMMY Date: Mon, 17 Oct 2016 15:33:17 +0100 Subject: [PATCH 0501/2326] Update segwit deployment details --- bip-0009/assignments.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0009/assignments.mediawiki b/bip-0009/assignments.mediawiki index e145ceb0c1..6a12e791dc 100644 --- a/bip-0009/assignments.mediawiki +++ b/bip-0009/assignments.mediawiki @@ -27,11 +27,11 @@ State can be defined, active, failed. Dates are in UTC. |- | segwit | 1 -| TBD -| TBD +| 2016-11-15 00:00:00 +| 2017-11-15 00:00:00 | - | 2016-05-01 00:00:00 | 2017-05-01 00:00:00 | active since #834624 -| [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]] +| [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]], [[/bip-0147.mediawiki|147]] |} From d75418ee38544c88aff746f6c98405d0924d099c Mon Sep 17 00:00:00 2001 From: Richard Kiss Date: Tue, 1 Nov 2016 20:16:30 -0700 Subject: [PATCH 0502/2326] BIP143 - Fix hex of first FindAndDelete example (was just witness data). --- bip-0143.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index 1c1e352746..766fd9f294 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -582,8 +582,8 @@ These examples show that FindAndDelete for the signature is not app signature: 30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e 01 pubkey: 02a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c - The serialized signed transaction is: 034830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e012102a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0100000000 - + The serialized signed transaction is: 0100000000010169c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d000000ffffffff01010000000000000000034830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e012102a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0100000000 + nVersion: 01000000 marker: 00 flag: 01 From 5b1c59da6d4905610de0c779579cd2db890a7c4c Mon Sep 17 00:00:00 2001 From: Thomas Kerin Date: Thu, 3 Nov 2016 10:14:41 +0100 Subject: [PATCH 0503/2326] BIP39: 'recommended size' -> 'allowed size' --- bip-0039.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index 3c95d4d135..f0f5909982 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -33,7 +33,7 @@ sentences (also known as brainwallets) into a wallet seed. The mnemonic must encode entropy in a multiple of 32 bits. With more entropy security is improved but the sentence length increases. We refer to the -initial entropy length as ENT. The recommended size of ENT is 128-256 bits. +initial entropy length as ENT. The allowed size of ENT is 128-256 bits. First, an initial entropy of ENT bits is generated. A checksum is generated by taking the first
ENT / 32
bits of its SHA256 hash. This checksum is From 78c3b0a244a46f489de723318bbca6f8a9f6497a Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 3 Nov 2016 08:12:16 -0400 Subject: [PATCH 0504/2326] [BIP 152] Fix invalid link --- bip-0152.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 53ccce6c5e..737779613d 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -26,7 +26,7 @@ While the goal of this work is explicitly not to reduce block transfer latency, ===Intended Protocol Flow=== -The protocol is intended to be used in two ways, depending on the peers and bandwidth available, as discussed [[#Implementation_Details|later]]. The "high-bandwidth" mode, which nodes may only enable for a few of their peers, is enabled by setting the first boolean to 1 in a sendcmpct message. In this mode, peers send new block announcements with the short transaction IDs already (via a cmpctblock message), possibly even before fully validating the block (as indicated by the grey box in the image above). In some cases no further round-trip is needed, and the receiver can reconstruct the block and process it as usual immediately. When some transactions were not available from local sources (ie mempool), a getblocktxn/blocktxn roundtrip is necessary, bringing the best-case latency to the same 1.5*RTT minimum time that nodes take today, though with significantly less bandwidth usage. +The protocol is intended to be used in two ways, depending on the peers and bandwidth available, as discussed [[#Implementation_Notes|later]]. The "high-bandwidth" mode, which nodes may only enable for a few of their peers, is enabled by setting the first boolean to 1 in a sendcmpct message. In this mode, peers send new block announcements with the short transaction IDs already (via a cmpctblock message), possibly even before fully validating the block (as indicated by the grey box in the image above). In some cases no further round-trip is needed, and the receiver can reconstruct the block and process it as usual immediately. When some transactions were not available from local sources (ie mempool), a getblocktxn/blocktxn roundtrip is necessary, bringing the best-case latency to the same 1.5*RTT minimum time that nodes take today, though with significantly less bandwidth usage. The "low-bandwidth" mode is enabled by setting the first boolean to 0 in a sendcmpct message. In this mode, peers send new block announcements with the usual inv/headers announcements (as per BIP130, and after fully validating the block). The receiving peer may then request the block using a MSG_CMPCT_BLOCK getdata request, which will receive a response of the header and short transaction IDs. In some cases no further round-trip is needed, and the receiver can reconstruct the block and process it as usual, taking the same 1.5*RTT minimum time that nodes take today, though with significantly less bandwidth usage. When some transactions were not available from local sources (ie mempool), a getblocktxn/blocktxn roundtrip is necessary, bringing the latency to at least 2.5*RTT in this case, again with significantly less bandwidth usage than today. Because TCP often exhibits worse transfer latency for larger data sizes (as a multiple of RTT), total latency is expected to be reduced even when the full 2.5*RTT transfer mechanism is used. From 30620da93cb7841e7c7f4d8797ebbaeaf02b8e64 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 3 Nov 2016 08:29:18 -0400 Subject: [PATCH 0505/2326] [BIP 152] Bump p2p protocol for proper banning behavior --- bip-0152.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 737779613d..b1cc468c87 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -183,6 +183,8 @@ Compact blocks version 2 is almost identical to version 1, but supports segregat # Any undefined behavior in this spec may cause failure to transfer block to, peer disconnection by, or self-destruction by the receiving node. A node receiving non-minimally-encoded CompactSize encodings should make a best-effort to eat the sender's cat. +# As high-bandwidth mode permits relaying of CMPCTBLOCK messages prior to full validation (requiring only that the block header is valid before relay), nodes SHOULD NOT ban a peer for announcing a new block with a CMPCTBLOCK message that is invalid, but has a valid header. For avoidance of doubt, nodes SHOULD bump their peer-to-peer protocol version to 70015 or higher to signal that they will not ban or punish a peer for announcing compact blocks prior to full validation, and nodes SHOULD NOT announce a CMPCTBLOCK to a peer with a version number below 70015 before fully validating the block. + ==Justification== ====Protocol design==== From 21985daefb0db972c942b8241e880ce7d4f3d635 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Mon, 14 Nov 2016 10:56:49 -0500 Subject: [PATCH 0506/2326] BIP152: Fix missing space between words. --- bip-0152.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 53ccce6c5e..2621ea9cd1 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -128,7 +128,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde ====getblocktxn==== # The getblocktxn message is defined as as a message containing a serialized BlockTransactionsRequest message and pchCommand == "getblocktxn". -# Upon receipt of a properly-formatted getblocktxnmessage, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with an appropriate blocktxn message. Such a blocktxn message MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. +# Upon receipt of a properly-formatted getblocktxn message, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with an appropriate blocktxn message. Such a blocktxn message MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. ====blocktxn==== # The blocktxn message is defined as as a message containing a serialized BlockTransactions message and pchCommand == "blocktxn". From 376029beea0f0bec52531747291319b4c8b2ccdb Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Mon, 14 Nov 2016 10:58:22 -0500 Subject: [PATCH 0507/2326] BIP152: Allow block responses to getblocktxn requests Corresponding bitcoind change in: dac53b5 Modify getblocktxn handler not to drop requests for old blocks --- bip-0152.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 2621ea9cd1..8f6d02382c 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -128,7 +128,7 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde ====getblocktxn==== # The getblocktxn message is defined as as a message containing a serialized BlockTransactionsRequest message and pchCommand == "getblocktxn". -# Upon receipt of a properly-formatted getblocktxn message, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with an appropriate blocktxn message. Such a blocktxn message MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. +# Upon receipt of a properly-formatted getblocktxn message, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with either an appropriate blocktxn message, or a full block message. A blocktxn response MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. ====blocktxn==== # The blocktxn message is defined as as a message containing a serialized BlockTransactions message and pchCommand == "blocktxn". From 836d2dc91e1e21a77c0b0364ec4a0a9722c02a4f Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Tue, 8 Nov 2016 12:03:32 -0500 Subject: [PATCH 0508/2326] Initial draft of buried deployments. --- bip-buried-deployments.mediawiki | 96 ++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 bip-buried-deployments.mediawiki diff --git a/bip-buried-deployments.mediawiki b/bip-buried-deployments.mediawiki new file mode 100644 index 0000000000..84e3f4d611 --- /dev/null +++ b/bip-buried-deployments.mediawiki @@ -0,0 +1,96 @@ +
+BIP: ?
+Title: Buried deployments
+Author: Suhas Daftuar 
+Status: Draft
+Type: Standards Track
+Created: 2016-11-08
+
+ + +==Abstract== + +Prior soft forks (BIP 34, BIP 65, and BIP 66) were activated via miner signaling in block version numbers. Now that the chain has long since passed the blocks at which those consensus rules have triggered, we can (as a simplification and optimization) replace the trigger mechanism by caching the block heights at which those consensus rules became enforced. + +==Motivation== + +BIPs 34, 65 and 66 were deployed on mainnet using miner signaling using block version numbers. In short, new consensus rules were proposed for use in blocks with a higher version number (N+1) than the prevailing block version (N) in use on the network, and those rules became enforced under the following conditions: +# 75% rule: If 750 of the prior 1000 blocks are version N+1 or higher, then blocks with version N+1 or higher must correctly enforce the new consensus rule. +# 95% rule: If 950 of the prior 1000 blocks are version N+1 or higher, then blocks with version less than N+1 are invalid. + +Please see those [[#References|BIPs]] for more details. + +Note that this trigger mechanism is dependent on the chain history. To validate a block, we must test whether the trigger was met by looking at the previous 1000 blocks in the chain before it, which can be inefficient. + +In addition, this mechanism for code deployments have been deprecated in favor of BIP 9 deployments, which offer several advantages (please see [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP 9]). + +Thus we propose elimination of the logic implementing these kinds of deployments, by replacing the test which governs enforcement of BIP 34, BIP 65, and BIP 66 with simple height checks, which we choose to be the block height triggering the 95% activation rule on mainnet for each of those deployments. This simplification of the consensus rules would reduce the technical debt associated with deployment of those consensus changes and simultaneously provide a performance optimization. + +==Considerations== + +It is technically possible for this to be a non-backwards compatible change. For example, if an alternate chain were created in which BIP 34's 95% activation triggered at a lower height (H') than it did on the current mainnet chain (H), then older software would enforce that version 1 blocks were invalid at heights between H' and H, while newer software implementing this change would not. Similarly, this BIP proposes doing away with the 75% threshold check altogether, which means, for example, that a version 2 block forking off of mainnet at height H-1 which omitted the height in coinbase would be invalid to older software, while accepted by newer software. + +However, while newer software and older software might validate old blocks differently, that could only cause a consensus split if there were an extremely large blockchain reorganization onto a chain built off such a block. As of November 2016, the most recent of these changes (BIP 65, enforced since December 2015) has nearly 50,000 blocks built on top of it. The occurrence of such a reorg that would cause the activating block to be disconnected would raise fundamental concerns about the security assumptions of Bitcoin, a far bigger issue than any non-backwards compatible change. + +So while this proposal could theoretically result in a consensus split, it is extremely unlikely, and in particular any such circumstances would be sufficiently damaging to the Bitcoin network to dwarf any concerns about the effects of this proposed change. + +==Specification== + +The BIP 34, 66, and 65 activation heights are set to 227931, 363725, and 388381, respectively. + +The 1000-block lookback test, first described in BIP 34, is no longer performed during validation of any blocks. Instead, a new check is added: + + if((block.nVersion < 2 && nHeight >= consensusParams.BIP34Height) || + (block.nVersion < 3 && nHeight >= consensusParams.BIP66Height) || + (block.nVersion < 4 && nHeight >= consensusParams.BIP65Height)) + return state.Invalid(false, REJECT_OBSOLETE, strprintf("bad-version(0x%08x)", block.nVersion), + strprintf("rejected nVersion=0x%08x block", block.nVersion)); + +Furthermore, rather than consider the block versions of the prior 1000 blocks to determine whether to enforce BIP 34, BIP 65, or BIP 66 on a given block, we instead just compare the height of the block being validated with the stored activation heights: + + // Enforce rule that the coinbase starts with serialized block height + if (nHeight >= consensusParams.BIP34Height) + { + CScript expect = CScript() << nHeight; + if (block.vtx[0].vin[0].scriptSig.size() < expect.size() || + !std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) { + return state.DoS(100, false, REJECT_INVALID, "bad-cb-height", false, "block height mismatch in coinbase"); + } + } + +and + + // Start enforcing the DERSIG (BIP66) rule + if (pindex->nHeight >= chainparams.GetConsensus().BIP66Height) { + flags |= SCRIPT_VERIFY_DERSIG; + } + + // Start enforcing CHECKLOCKTIMEVERIFY (BIP65) rule + if (pindex->nHeight >= chainparams.GetConsensus().BIP65Height) { + flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY; + } + +Please see the implementation for additional details. + +==Implementation== + +https://github.com/bitcoin/bitcoin/pull/8391. + + +==References== + +[https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki BIP34 Block v2, Height in Coinbase] + +[https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66 Strict DER signatures] + +[https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP65 OP_CHECKLOCKTIMEVERIFY] + +[https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP9 Version bits with timeout and delay] + +==Acknowledgements== + +Thanks to Nicolas Dorier for drafting an initial version of this BIP, and to Alex Morcos, Matt Corallo, and Greg Maxwell for suggestions and feedback. + +==Copyright== + +This document is placed in the public domain. From e3a155c477eab1f0b78861b568b7cdda01f17e1e Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 23 Nov 2016 10:25:51 -0800 Subject: [PATCH 0509/2326] - Change EC Keys to use SEC encoding - Update identifier default to also include epoch time to great a more unique identifier --- bip-0075.mediawiki | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 11fa43bbee..9babf89eec 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -105,7 +105,7 @@ message InvoiceRequest { {| class="wikitable" ! Field Name !! Description |- -| sender_public_key || Sender's EC public key +| sender_public_key || Sender's SEC-encoded EC public key |- | amount || amount is integer-number-of-satoshis (default: 0) |- @@ -158,7 +158,7 @@ message ProtocolMessage { |- |status_message || Human-readable Payment Protocol status message |- -|identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default +|identifier || Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String) |} ===Versioning=== @@ -193,13 +193,13 @@ message EncryptedProtocolMessage { |- | encrypted_message || AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message |- -| receiver_public_key || Receiver's DER-encoded EC Public Key +| receiver_public_key || Receiver's SEC-encoded EC Public Key |- -| sender_public_key || Sender's DER-encoded EC Public Key +| sender_public_key || Sender's SEC-encoded EC Public Key |- | nonce || Microseconds since epoch |- -| identifier || Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default +| identifier || Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String) |- | status_message || Human-readable Payment Protocol status message |- @@ -362,7 +362,7 @@ When either '''status_code''' OR '''status_message''' are present, the AES-256 G Initial public key retrieval for [[#InvoiceRequest|InvoiceRequest]] encryption via [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] encapsulation can be done in a number of ways including, but not limited to, the following: # Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] # Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] -# QR Code - Use of QR-code to encode DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] +# QR Code - Use of QR-code to encode SEC-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480] # Address Service Public Key Exposure ==Payment / PaymentACK Messages with a HTTP Store & Forward Server== @@ -376,7 +376,8 @@ If a Store & Forward server wishes to protect themselves from spam or abuse, the Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a Payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice. ==Public Key & Signature Encoding== -* All EC public keys ('''sender_public_key''', '''receiver_public_key''') or x.509 certificates included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* All x.509 certificates included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded. +* All EC public keys ('''sender_public_key''', '''receiver_public_key''') in any message defined in this BIP MUST be [[SECP256k1|http://www.secg.org/sec2-v2.pdf]] ECDSA Public Key ECPoints encoded using [[SEC 2.3.3 Encoding|http://www.secg.org/sec1-v2.pdf]]. Encoding MAY be compressed. * All ECC signatures included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded. * All OpenPGP certificates must follow [[https://tools.ietf.org/html/rfc4880|RFC4880]], sections 5.5 and 12.1. From 626aa1a9fd9aca1e03c0c05d0f822155ac78635c Mon Sep 17 00:00:00 2001 From: TomZ Date: Mon, 28 Nov 2016 18:06:03 +0100 Subject: [PATCH 0510/2326] Update the spec following the new developments --- bip-0134.mediawiki | 184 ++++++++++++++++++++++++--------------------- 1 file changed, 100 insertions(+), 84 deletions(-) diff --git a/bip-0134.mediawiki b/bip-0134.mediawiki index afb5143a88..fa2103bd41 100644 --- a/bip-0134.mediawiki +++ b/bip-0134.mediawiki @@ -29,7 +29,7 @@ in future. Soft fork upgrades will become much easier and cleaner this way. This protocol upgrade cleans up past soft fork changes like BIP68 which -reuse existing fields and do them in a much better to maintain and easier +reuse existing fields and do them in a better to maintain and easier to parse system. It creates the building blocks to allow new features to be added much cleaner in the future. @@ -39,14 +39,29 @@ history. Tests show that this can reduce space usage to about 75%. ==Motivation== +After 8 years of using essentially the same transaction version and layout +Bitcoin is in need of an upgrade and lessons learned in that time are +taking into account when designing it. The most important detail is that +we have seen a need for more flexibility. For instance when the 'sequence' +fields were introduced in the old transaction format, and later deprecated +again, the end result was that all transactions still were forced to keep +those fields and grow the blockchain while they all were set to the default +value. + +The way towards that flexibility is to use a generic concept made popular +various decades ago with the XML format. The idea is that we give each +field a name and this means that new fields can be added or optional fields +can be omitted from individual transactions. Some other ideas are the +standardization of data-formats (like integer and string encoding) so +we create a more consistent system. +One thing we shall not inherit from XML is its text-based format. Instead +we use the [https://github.com/bitcoinclassic/documentation/blob/master/spec/compactmessageformat.md Compact Message Format] +(CMF) which is optimized to keep the size small and fast to parse. + Token based file-formats are not new, systems like XML and HTMl use a similar system to allow future growth and they have been quite successful for decades in part because of this property. -Bitcoin needs a similar way of making the transaction future-proof because -re-purposing not used fields for new features is not good for creating -maintainable code. - Next to that this protocol upgrade will re-order the data-fields which allows us to cleanly fix the malleability issue which means that future technologies like Lightning Network will depend on this BIP being deployed. @@ -55,6 +70,19 @@ At the same time, due to this re-ordering of data fields, it becomes very easy to remove signatures from a transaction without breaking its tx-id, which is great for future pruning features. +=== Features === + +* Fixes malleability +* Linear scaling of signature checking +* Very flexible future extensibility +* Makes transactions smaller +* Supports the Lightning Network + +Additionally, in the v4 (flextrans) format we add the support for the +following proofs; +* input amount. Including the amount means we sign this transaction only if the amount we are spending is the one provided. Wallets that do not have the full UTXO DB can safely sign knowing that if they were lied to about the amount being spent, their signature is useless. +* scriptBase is the combined script of input and output, without signatures naturally. Providing this to a hardware wallet means it knows what output it is spending and can respond properly. Including it in the hash means its signature would be broken if we lied.. +* Double spent-proof. Should a node detect a double spent he can notify his peers about this fact. Instead of sending the entire transactions, instead he sends only a proof. The node needs to send two pairs of info that proves that in both transactions the CTxIn are identical. === Tokens === @@ -63,7 +91,8 @@ define how these tokens are named, where they can be placed and which are optional. To refer to XML, this specification would be the schema of a transaction. -CMF tokens are triplets of name, format (like PositiveInteger) and value. +[https://github.com/bitcoinclassic/documentation/blob/master/spec/compactmessageformat.md CMF] +tokens are triplets of name, format (like PositiveInteger) and value. Names in this scope are defined much like an enumeration where the actual integer value (id, below) is equally important to the written name. If any token found that is not covered in the next table it will make the @@ -73,114 +102,92 @@ transaction that contains it invalid. |- ! Name !! id !! Format !! Default Value !! Description |- -|TxEnd || 0 ||BoolTrue || Required ||A marker that is end of the transaction. +|TxEnd || 0 ||BoolTrue || Required ||A marker that is the end of the transaction |- -|TxInPrevHash || 1 ||ByteArray|| Required ||TxId we are spending +|TxInPrevHash || 1 ||ByteArray|| Required ||TxId we are spending |- -|TxPrevIndex || 2 ||Integer || 0 ||Index in prev tx we are spending (applied to previous TxInPrevHash) +|TxPrevIndex || 2 ||Integer || 0 ||Index in prev tx we are spending (applied to previous TxInPrevHash) |- -|TxInScript || 3 ||ByteArray|| Required ||The 'input' part of the script +|TxInputStackItem || 3 ||ByteArray||   ||A 'push' of the input script |- -|TxOutValue || 4 ||Integer || Required ||Amount of Satoshis to transfer +|TxInputStackItemContinued||4||ByteArray|| &nsbp; ||Another section for the same input |- -|TxOutScript || 5 ||ByteArray|| Required ||The 'output' part of the script +|TxOutValue || 5 ||Integer || Required ||Amount of Satoshis to transfer |- -|LockByBlock || 6 ||Integer || Optional ||BIP68 replacement +|TxOutScript || 6 ||ByteArray|| Required ||The output script |- -|LockByTime || 7 ||Integer || Optional ||BIP68 replacement +|TxRelativeBlockLock|| 7 ||Integer || Optional ||Part of the input stating the amount of blocks (max 0XFFFF) after that input was mined, it can be mined |- -|ScriptVersion || 8 ||Integer || 2 ||Defines script version for outputs following +|TxRelativeTimeLock || 8 ||Integer || Optional ||Part of the input stating the amount of time (max 0XFFFF) after that input was mined, it can be mined. 1 Unit is 512 seconds +|- +|CoinbaseMessage || 9 ||ByteArray|| Optional ||A message and some data for a coinbase transaction. Can't be used in combination with any TxIn\* tags +|- +|NOP_1x || 1x ||  || Optional ||Values that will be ignored by anyone parsing the transaction |- -|NOP_1x || 1x || . || Optional ||Values that will be ignored by anyone parsing the transaction |} === Scripting changes === -In the current version of Bitcoin-script, version 1, there are various -opcodes that are used to validate the cryptographic proofs that users have -to provide in order to spend outputs. +In Bitcoin transactions version 1, checking of signatures is performed by +various opcodes. The OP_CHECKSIG, OP_CHECKMULTISIG and their equivalents +that immediately VERIFY. These are used to validate the cryptographic +proofs that users have to provide in order to spend outputs. + +We additionally have some hashing-types in like SIGHASH_SINGLE that all +specify slightly different subsections of what part of a transaction will +be hashed in order to be signed. + +For transactions with version 4 we calculate a sha256 hash for signing an +individual input based on the following content; + +# If the hash-type is 0 or 1 we hash the tx-id of the transaction. For other hash types we selectively ignore parts of the transaction exactly like it has always worked. With the caveat that we never serialize any signatures. +# the TxId of the transaction we are spending in this input. +# the index of output of the transaction we are spending in this input. +# the input script we are signing (without the signature, naturally). +# the amount, as a var-int. +# the hash-type as a var-int. -The OP_CHECKSIG is the most well known and, as its name implies, it -validates a signature. -In the new version of 'script' (version 2) the data that is signed is -changed to be equivalent to the transaction-id. This is a massive -simplification and also the only change between version 1 and version 2 of -script. === Serialization order=== -The tokens defined above shall be serialized in a certain order for the -transaction to be valid. Not serializing transactions in the -order specified would allow multiple interpretations of the data which -can't be allowed. -There is still some flexibility and for that reason it is important for -implementors to remember that the actual serialized data is used for the -calculation of the transaction-id. Reading and writing it may give you a -different output and when the txid changes, the signatures will break. -At a macro-level the transaction has these segments. The order of the -segments can not be changed, but you can skip segments. +To keep in line with the name Flexible Transactions, there is very little +requirement to have a specific order. The only exception is cases where +there are optional values and reordering would make unclear what is meant. -{| class="wikitable" -!Segment !! Description -|- -| Inputs || Details about inputs. -|- -| Outputs || Details and scripts for outputs -|- -| Additional || For future expansion -|- -| Signatures || The scripts for the inputs -|- -| TxEnd || End of the transaction -|} +For this reason the TxInPrevHash always has to be the first token to start +a new input. This is because the TxPrevIndex is optional. The tokens +TxRelativeTimeLock and TxRelativeBlockLock are part of the input and +similarly have to be set after the TxInPrevHash they belong to. -The TxId is calculated by taking the serialized transaction without the -Signatures and the TxEnd and hashing that. +Similarly, the TxInputStackItem always has to be the first and can be +followed by a number of TxInputStackItemContinued items. +At a larger scope we define 3 sections of a transaction. {| class="wikitable" !Segment !! Tags !! Description |- -|Inputs||TxInPrevHash and TxInPrevIndex||Index can be skipped, but in any input the PrevHash always has to come first -|- -|Outputs||TxOutScript, TxOutValue||Order is not relevant -|- -|Additional||LockByBlock LockByTime NOP_1x +|Transaction||all not elsewhere used||This section is used to make the TxId |- -|Signatures||TxInScript||Exactly the same amount as there are inputs +|Signatures||TxInputStackItem, TxInputStackItemContinued||The input-proofs |- -|TxEnd||TxEnd +|TxEnd||TxEnd||  |} +The TxId is calculated by taking the serialized transaction without the +Signatures and the TxEnd and hashing that. + TxEnd is there to allow a parser to know when one transaction in a stream has ended, allowing the next to be parsed. -Notice that the token ScriptVersion is currently not allowed because we -don't have any valid value to give it. But if we introduce a new script -version it would be placed in the outputs segment. - -=== Script v2 === - -The default value of ScriptVersion is number 2, as opposed to the version 1 -of script that is in use today. The version 2 is mostly identical -to version one, including upgrades made to it over the years and in the -future. The only exception is that the OP_CHECKSIG is made dramatically -simpler. The input-type for OP_CHECKSIG is now no longer configurable, it is -always '1' and the content that will be signed is the txid. - -TODO: does check-multisig need its own mention? - - === Block-malleability === The effect of leaving the signatures out of the calculation of the transaction-id implies that the signatures are also not used for the calculation of the merkle tree. This means that changes in signatures -would not be detectable. Except naturally by the fact that missing or -broken signatures breaks full validation. But it is important to detect -modifications to such signatures outside of validating all transactions. +would not be detectable and open an attack vector. For this reason the merkle tree is extended to include (append) the hash of the v4 transactions. The markle tree will continue to have all the @@ -188,9 +195,8 @@ transactions' tx-ids but appended to that are the v4 hashes that include the signatures as well. Specifically the hash is taken over a data-blob that is built up from: -1. the tx-id -2. the CMF-tokens 'TxInScript' - +# the tx-id +# The entire bytearray that makes up all of the transactions signatures. This is a serialization of all of the signature tokens, so the TxInputStackItem and TxInputStackItemContinued in the order based on the inputs they are associated with. === Future extensibility === @@ -207,9 +213,18 @@ trivially use these tokens for their own usage without cooperation and communication with the rest of the Bitcoin ecosystem as miners certainly have the option to reject transactions that use unknown-to-them tokens. +The amount of tokens that can be added after number 19 is practically +unlimited and they are currently specified to not be allowed in any +transaction and the transaction will be rejected if they are present. +In the future a protocol upgrade may chance that and specify meaning for +any token not yet specified here. Future upgrades should thus be quite a +lot smoother because there is no change in concepts or in format. Just new +data. + ==Backwards compatibility == -Fully validating older clients are not compatible with this change. +Fully validating older clients will not be able to understand or validate +version 4 transactions and will need to be updated to restore that ability. SPV (simple payment validation) wallets need to be updated to receive or create the new transaction type. @@ -220,11 +235,12 @@ backwards compatible for any existing data or parsing-code. ==Reference Implementation== -Bitcoin Classic includes this in its beta releases and a reference -implementation can be found at; - -https://github.com/bitcoinclassic/bitcoinclassic/pull/186 +Bitcoin Classic includes an implementation that is following this spec. +The spec-author rejects the notion of reference implementation. The +specification is always authoritative, the implementation is not. +The official spec can be found at; +https://github.com/bitcoinclassic/documentation/blob/master/spec/transactionv4.md ==Deployment== From 7dd419e08acb5075815aac3963aeb1a7377e4daa Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 28 Nov 2016 10:39:58 -0800 Subject: [PATCH 0511/2326] - Update identifier to be a required field in ProtocolMessage and EncryptedProtocolMessage --- bip-0075.mediawiki | 4 ++-- bip-0075/paymentrequest.proto | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 9babf89eec..878d708efc 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -141,7 +141,7 @@ message ProtocolMessage { required ProtocolMessageType message_type = 3; required bytes serialized_message = 4; optional string status_message = 5; - optional bytes identifier = 6; + required bytes identifier = 6; }
@@ -177,7 +177,7 @@ message EncryptedProtocolMessage { required bytes receiver_public_key = 5; required bytes sender_public_key = 6; required uint64 nonce = 7; - optional bytes identifier = 8; + required bytes identifier = 8; optional string status_message = 9; optional bytes signature = 10; } diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index 5a08192075..cb04369277 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -70,7 +70,7 @@ message ProtocolMessage { required ProtocolMessageType message_type = 3; // Message Type of serialized_message required bytes serialized_message = 4; // Serialized Payment Protocol Message optional string status_message = 5; // Human-readable Payment Protocol status message - optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + required bytes identifier = 6; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default } message EncryptedProtocolMessage { @@ -81,7 +81,7 @@ message EncryptedProtocolMessage { required bytes receiver_public_key = 5; // Receiver's DER-encoded EC Public Key required bytes sender_public_key = 6; // Sender's DER-encoded EC Public Key required uint64 nonce = 7; // Microseconds since epoch - optional bytes identifier = 8; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + required bytes identifier = 8; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default optional string status_message = 9; // Human-readable Payment Protocol status message optional bytes signature = 10; // Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively } \ No newline at end of file From 99614fcf2ee36ba5b4567c14b3e25e1fe4830ac6 Mon Sep 17 00:00:00 2001 From: Matt David Date: Mon, 28 Nov 2016 10:40:52 -0800 Subject: [PATCH 0512/2326] - Update identifier comment in paymentrequest.proto --- bip-0075/paymentrequest.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto index cb04369277..5097abb7f2 100644 --- a/bip-0075/paymentrequest.proto +++ b/bip-0075/paymentrequest.proto @@ -70,7 +70,7 @@ message ProtocolMessage { required ProtocolMessageType message_type = 3; // Message Type of serialized_message required bytes serialized_message = 4; // Serialized Payment Protocol Message optional string status_message = 5; // Human-readable Payment Protocol status message - required bytes identifier = 6; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + required bytes identifier = 6; // Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String) } message EncryptedProtocolMessage { @@ -81,7 +81,7 @@ message EncryptedProtocolMessage { required bytes receiver_public_key = 5; // Receiver's DER-encoded EC Public Key required bytes sender_public_key = 6; // Sender's DER-encoded EC Public Key required uint64 nonce = 7; // Microseconds since epoch - required bytes identifier = 8; // Unique key to identify this entire exchange on the server. SHA256 of initial serialized InvoiceRequest SHOULD be used by default + required bytes identifier = 8; // Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String) optional string status_message = 9; // Human-readable Payment Protocol status message optional bytes signature = 10; // Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively } \ No newline at end of file From c26a663b089cd77550cd54338c77b991b14f5bc2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 29 Nov 2016 03:05:46 +0000 Subject: [PATCH 0513/2326] BIP 2: Include Layer header from BIP 123 in general preamble and change list --- bip-0002.mediawiki | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 43a5ce6e88..e0644623ef 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -74,6 +74,7 @@ For each new BIP that comes in an editor does the following: * The title should accurately describe the content. * The BIP draft must have been sent to the Bitcoin development mailing list for discussion. * Motivation and backward compatibility (when applicable) must be addressed. +* The defined Layer header must be correctly assigned for the given specification. * Licensing terms must be acceptable for BIPs. If the BIP isn't ready, the editor will send it back to the author for revision, with specific instructions. @@ -120,6 +121,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
   BIP: 
+  Layer: 
   Title: 
   Author: 
 * Discussions-To: 
@@ -137,6 +139,9 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
 * Superseded-By: 
 
+The Layer header documents which layer of Bitcoin the BIP applies to. +See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. + The Author header lists the names and email addresses of all the authors/owners of the BIP. The format of the Author header value must be @@ -191,8 +196,6 @@ A process BIP may change status from Draft to Active when it achieves rough cons ====Progression to Final status==== -See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. - A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9). In addition, if the economy seems willing to make a "no confidence" hard-fork (such as a change in proof-of-work algorithm), the soft-fork does not become Final for as long as such a hard-fork might have majority support, or at most three months. Soft-fork BIPs may also set additional requirements for their adoption. Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold. A hard-fork BIP requires adoption from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Adoption must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish agreement before adoption of the BIP). This economic adoption cannot be established merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document). @@ -395,6 +398,7 @@ Why is Public Domain no longer acceptable for new BIPs? * An implementation is now required (when applicable) before BIPs can proceed to Proposed Status. * BIP Comments are newly introduced. * The License preamble headers have been added. +* The Layer header is included from BIP 123. * 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. From 2bd92edce1bbc365dcdb18f82bec93b371a552d2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 29 Nov 2016 03:07:35 +0000 Subject: [PATCH 0514/2326] BIP 2: Layer is only for ST BIPs --- bip-0002.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index e0644623ef..4796771122 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -121,7 +121,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
   BIP: 
-  Layer: 
+* Layer: 
   Title: 
   Author: 
 * Discussions-To: 
@@ -139,7 +139,7 @@ Each BIP must begin with an RFC 822 style header preamble. The headers must appe
 * Superseded-By: 
 
-The Layer header documents which layer of Bitcoin the BIP applies to. +The Layer header (only for Standards Track BIPs) documents which layer of Bitcoin the BIP applies to. See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123. The Author header lists the names and email addresses of all the authors/owners of the BIP. From c834fde23b11b61cefe0b97a53f198f2d9cffbdc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 29 Nov 2016 04:00:24 +0000 Subject: [PATCH 0515/2326] BIP 123: Clarify how used with non-Standards BIPs, and update list --- bip-0123.mediawiki | 332 +++++++++++++++++++++++++++--------------- scripts/buildtable.pl | 5 - 2 files changed, 218 insertions(+), 119 deletions(-) diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki index 3d40326b78..3005f012dd 100644 --- a/bip-0123.mediawiki +++ b/bip-0123.mediawiki @@ -1,6 +1,5 @@
   BIP: 123
-  Layer: Process
   Title: BIP Classification
   Author: Eric Lombrozo 
   Status: Draft
@@ -31,6 +30,8 @@ Standards BIPs are placed in one of four layers:
 # API/RPC
 # Applications
 
+Non-standards BIPs may be placed in these layers, or none at all.
+
 ===1. Consensus Layer===
 
 The consensus layer defines cryptographic commitment structures. Its purpose is ensuring that anyone can locally evaluate whether a particular state and history is valid, providing settlement guarantees, and assuring eventual convergence.
@@ -76,19 +77,26 @@ The applications layer specifies high level structures, abstractions, and conven
 !Status
 |- style="background-color: #cfffcf"
 | [[bip-0001.mediawiki|1]]
-| Process
+|
 | BIP Purpose and Guidelines
 | Amir Taaki
-| Standard
+| Process
 | Active
 |-
+| [[bip-0002.mediawiki|2]]
+|
+| BIP process, revised
+| Luke Dashjr
+| Process
+| Draft
+|- style="background-color: #cfffcf"
 | [[bip-0009.mediawiki|9]]
-| Consensus (soft fork)
+|
 | Version bits with timeout and delay
 | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
 | Informational
-| Draft
-|- 
+| Final
+|- style="background-color: #ffcfcf"
 | [[bip-0010.mediawiki|10]]
 | Applications
 | Multi-Sig Transaction Distribution
@@ -97,11 +105,11 @@ The applications layer specifies high level structures, abstractions, and conven
 | Withdrawn
 |- style="background-color: #cfffcf"
 | [[bip-0011.mediawiki|11]]
-| Peer Services
+| Applications
 | M-of-N Standard Transactions
 | Gavin Andresen
 | Standard
-| Accepted
+| Final
 |- style="background-color: #ffcfcf"
 | [[bip-0012.mediawiki|12]]
 | Consensus (soft fork)
@@ -122,8 +130,8 @@ The applications layer specifies high level structures, abstractions, and conven
 | Protocol Version and User Agent
 | Amir Taaki, Patrick Strateman
 | Standard
-| Accepted
-|- style="background-color: #ffcfcf"
+| Final
+|-
 | [[bip-0015.mediawiki|15]]
 | Applications
 | Aliases
@@ -133,7 +141,7 @@ The applications layer specifies high level structures, abstractions, and conven
 |- style="background-color: #cfffcf"
 | [[bip-0016.mediawiki|16]]
 | Consensus (soft fork)
-| Pay To Script Hash
+| Pay to Script Hash
 | Gavin Andresen
 | Standard
 | Final
@@ -142,18 +150,18 @@ The applications layer specifies high level structures, abstractions, and conven
 | Consensus (soft fork)
 | OP_CHECKHASHVERIFY (CHV)
 | Luke Dashjr
+| Standard
 | Withdrawn
-| Draft
-|-
+|- style="background-color: #ffffcf"
 | [[bip-0018.mediawiki|18]]
 | Consensus (soft fork)
 | hashScriptCheck
 | Luke Dashjr
 | Standard
-| Draft
+| Accepted
 |-
 | [[bip-0019.mediawiki|19]]
-| Peer Services
+| Applications
 | M-of-N Standard Transactions (Low SigOp)
 | Luke Dashjr
 | Standard
@@ -171,21 +179,21 @@ The applications layer specifies high level structures, abstractions, and conven
 | URI Scheme
 | Nils Schneider, Matt Corallo
 | Standard
-| Accepted
+| Final
 |- style="background-color: #cfffcf"
 | [[bip-0022.mediawiki|22]]
 | API/RPC
 | getblocktemplate - Fundamentals
 | Luke Dashjr
 | Standard
-| Accepted
+| Final
 |- style="background-color: #cfffcf"
 | [[bip-0023.mediawiki|23]]
 | API/RPC
 | getblocktemplate - Pooled Mining
 | Luke Dashjr
 | Standard
-| Accepted
+| Final
 |- style="background-color: #cfffcf"
 | [[bip-0030.mediawiki|30]]
 | Consensus (soft fork)
@@ -199,17 +207,17 @@ The applications layer specifies high level structures, abstractions, and conven
 | Pong message
 | Mike Hearn
 | Standard
-| Accepted
+| Final
 |- style="background-color: #cfffcf"
 | [[bip-0032.mediawiki|32]]
 | Applications
 | Hierarchical Deterministic Wallets
 | Pieter Wuille
 | Informational
-| Accepted
+| Final
 |-
 | [[bip-0033.mediawiki|33]]
-| API/RPC
+| Peer Services
 | Stratized Nodes
 | Amir Taaki
 | Standard
@@ -217,17 +225,17 @@ The applications layer specifies high level structures, abstractions, and conven
 |- style="background-color: #cfffcf"
 | [[bip-0034.mediawiki|34]]
 | Consensus (soft fork)
-| Block v2, Height in coinbase
+| Block v2, Height in Coinbase
 | Gavin Andresen
 | Standard
-| Accepted
+| Final
 |- style="background-color: #cfffcf"
 | [[bip-0035.mediawiki|35]]
 | Peer Services
 | mempool message
 | Jeff Garzik
 | Standard
-| Accepted
+| Final
 |-
 | [[bip-0036.mediawiki|36]]
 | Peer Services
@@ -238,38 +246,24 @@ The applications layer specifies high level structures, abstractions, and conven
 |- style="background-color: #cfffcf"
 | [[bip-0037.mediawiki|37]]
 | Peer Services
-| Bloom filtering
-| Mike Hearn and Matt Corallo
+| Connection Bloom filtering
+| Mike Hearn, Matt Corallo
 | Standard
-| Accepted
+| Final
 |-
 | [[bip-0038.mediawiki|38]]
 | Applications
 | Passphrase-protected private key
-| Mike Caldwell
+| Mike Caldwell, Aaron Voisine
 | Standard
 | Draft
-|-
+|- style="background-color: #ffffcf"
 | [[bip-0039.mediawiki|39]]
 | Applications
 | Mnemonic code for generating deterministic keys
-| Slush
-| Standard
-| Draft
-|-
-| 40
-| Applications
-| Stratum wire protocol
-| Slush
+| Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe
 | Standard
-| BIP number allocated
-|-
-| 41
-| Applications
-| Stratum mining protocol
-| Slush
-| Standard
-| BIP number allocated
+| Accepted
 |-
 | [[bip-0042.mediawiki|42]]
 | Consensus (soft fork)
@@ -281,31 +275,44 @@ The applications layer specifies high level structures, abstractions, and conven
 | [[bip-0043.mediawiki|43]]
 | Applications
 | Purpose Field for Deterministic Wallets
-| Slush
-| Standard
+| Marek Palatinus, Pavol Rusnak
+| Informational
 | Draft
-|-
+|- style="background-color: #ffffcf"
 | [[bip-0044.mediawiki|44]]
 | Applications
 | Multi-Account Hierarchy for Deterministic Wallets
-| Slush
+| Marek Palatinus, Pavol Rusnak
 | Standard
-| Draft
-|-
+| Accepted
+|- style="background-color: #ffffcf"
 | [[bip-0045.mediawiki|45]]
 | Applications
 | Structure for Deterministic P2SH Multisignature Wallets
-| Manuel Araoz
+| Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia
 | Standard
+| Accepted
+|-
+| [[bip-0047.mediawiki|47]]
+| Applications
+| Reusable Payment Codes for Hierarchical Deterministic Wallets
+| Justus Ranvier
+| Informational
 | Draft
 |-
-| [[bip-0050.mediawiki|50]]
+| [[bip-0049.mediawiki|49]]
+| Applications
+| Derivation scheme for P2WPKH-nested-in-P2SH based accounts
+| Daniel Weigl
 | Informational
+| Draft
+|- style="background-color: #cfffcf"
+| [[bip-0050.mediawiki|50]]
+|
 | March 2013 Chain Fork Post-Mortem
 | Gavin Andresen
 | Informational
-| Draft
-
+| Final
 |-
 | [[bip-0060.mediawiki|60]]
 | Peer Services
@@ -313,97 +320,118 @@ The applications layer specifies high level structures, abstractions, and conven
 | Amir Taaki
 | Standard
 | Draft
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0061.mediawiki|61]]
 | Peer Services
-| "reject" P2P message
+| Reject P2P message
 | Gavin Andresen
 | Standard
 | Final
-|-
+|- style="background-color: #ffcfcf"
 | [[bip-0062.mediawiki|62]]
 | Consensus (soft fork)
 | Dealing with malleability
 | Pieter Wuille
 | Standard
-| Draft
-|-
-| 63
-| Applications
-| Stealth Addresses
-| Peter Todd
-| Standard
-| BIP number allocated
+| Withdrawn
 |-
 | [[bip-0064.mediawiki|64]]
 | Peer Services
-| getutxos message
+| getutxo message
 | Mike Hearn
 | Standard
 | Draft
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0065.mediawiki|65]]
 | Consensus (soft fork)
 | OP_CHECKLOCKTIMEVERIFY
 | Peter Todd
 | Standard
-| Draft
-|-
+| Final
+|- style="background-color: #cfffcf"
 | [[bip-0066.mediawiki|66]]
 | Consensus (soft fork)
 | Strict DER signatures
 | Pieter Wuille
 | Standard
-| Draft
-|-
+| Final
+|- style="background-color: #ffffcf"
 | [[bip-0067.mediawiki|67]]
 | Applications
-| Deterministic P2SH multi-signature addresses
-| Thomas Kerin
+| Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
+| Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries
 | Standard
-| Draft
-|-
+| Accepted
+|- style="background-color: #cfffcf"
 | [[bip-0068.mediawiki|68]]
 | Consensus (soft fork)
-| Consensus-enforced transaction replacement signalled via sequence numbers
-| Mark Friedenbach
+| Relative lock-time using consensus-enforced sequence numbers
+| Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona
 | Standard
-| Draft
-|-
+| Final
+|- style="background-color: #ffffcf"
+| [[bip-0069.mediawiki|69]]
+| Applications
+| Lexicographical Indexing of Transaction Inputs and Outputs
+| Kristov Atlas
+| Informational
+| Accepted
+|- style="background-color: #cfffcf"
 | [[bip-0070.mediawiki|70]]
 | Applications
-| Payment protocol
-| Gavin Andresen
+| Payment Protocol
+| Gavin Andresen, Mike Hearn
 | Standard
 | Final
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0071.mediawiki|71]]
 | Applications
-| Payment protocol MIME types
+| Payment Protocol MIME types
 | Gavin Andresen
 | Standard
 | Final
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0072.mediawiki|72]]
 | Applications
-| Payment protocol URIs
+| bitcoin: uri extensions for Payment Protocol
 | Gavin Andresen
 | Standard
 | Final
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0073.mediawiki|73]]
 | Applications
-| Use "Accept" header with Payment Request URLs
+| Use "Accept" header for response type negotiation with Payment Request URLs
 | Stephen Pair
 | Standard
+| Final
+|-
+| [[bip-0074.mediawiki|74]]
+| Applications
+| Allow zero value OP_RETURN in Payment Protocol
+| Toby Padilla
+| Standard
 | Draft
 |-
-| [[bip-0080.mediawiki|80]]
+| [[bip-0075.mediawiki|75]]
 | Applications
+| Out of Band Address Exchange using Payment Protocol Encryption
+| Justin Newton, Matt David, Aaron Voisine, James MacWhyte
+| Standard
+| Draft
+|-
+| [[bip-0080.mediawiki|80]]
+|
 | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets
-| Monetas
+| Justus Ranvier, Jimmy Song
 | Informational
-| Draft
+| Deferred
+|-
+| [[bip-0081.mediawiki|81]]
+|
+| Hierarchy for Colored Voting Pool Deterministic Multisig Wallets
+| Justus Ranvier, Jimmy Song
+| Informational
+| Deferred
 |-
 | [[bip-0083.mediawiki|83]]
 | Applications
@@ -413,18 +441,18 @@ The applications layer specifies high level structures, abstractions, and conven
 | Draft
 |-
 | [[bip-0099.mediawiki|99]]
-| Informational
+|
 | Motivation and deployment of consensus rule changes ([soft/hard]forks)
 | Jorge Timón
-| Informational / Process
+| Informational
 | Draft
-|-
+|- style="background-color: #ffcfcf"
 | [[bip-0101.mediawiki|101]]
 | Consensus (hard fork)
 | Increase maximum block size
 | Gavin Andresen
 | Standard
-| Draft
+| Withdrawn
 |-
 | [[bip-0102.mediawiki|102]]
 | Consensus (hard fork)
@@ -442,7 +470,7 @@ The applications layer specifies high level structures, abstractions, and conven
 |-
 | [[bip-0105.mediawiki|105]]
 | Consensus (hard fork)
-| Consensus based block size retargetting algorithm
+| Consensus based block size retargeting algorithm
 | BtcDrak
 | Standard
 | Draft
@@ -461,25 +489,39 @@ The applications layer specifies high level structures, abstractions, and conven
 | Standard
 | Draft
 |-
+| [[bip-0109.mediawiki|109]]
+| Consensus (hard fork)
+| Two million byte size limit with sigop and sighash limits
+| Gavin Andresen
+| Standard
+| Draft
+|- style="background-color: #ffffcf"
 | [[bip-0111.mediawiki|111]]
 | Peer Services
 | NODE_BLOOM service bit
 | Matt Corallo, Peter Todd
 | Standard
-| Draft
-|-
+| Accepted
+|- style="background-color: #cfffcf"
 | [[bip-0112.mediawiki|112]]
 | Consensus (soft fork)
 | CHECKSEQUENCEVERIFY
 | BtcDrak, Mark Friedenbach, Eric Lombrozo
 | Standard
-| Draft
-|-
+| Final
+|- style="background-color: #cfffcf"
 | [[bip-0113.mediawiki|113]]
 | Consensus (soft fork)
-| Median time-past as endpoint for locktime calculations
+| Median time-past as endpoint for lock-time calculations
 | Thomas Kerin, Mark Friedenbach
 | Standard
+| Final
+|-
+| [[bip-0114.mediawiki|114]]
+| Consensus (soft fork)
+| Merkelized Abstract Syntax Tree
+| Johnson Lau
+| Standard
 | Draft
 |-
 | [[bip-0120.mediawiki|120]]
@@ -504,32 +546,39 @@ The applications layer specifies high level structures, abstractions, and conven
 | Draft
 |-
 | [[bip-0123.mediawiki|123]]
-| Process
+|
 | BIP Classification
 | Eric Lombrozo
-| Standard
+| Process
 | Draft
 |-
 | [[bip-0124.mediawiki|124]]
 | Applications
 | Hierarchical Deterministic Script Templates
 | Eric Lombrozo, William Swanson
-| Standard
+| Informational
 | Draft
-|-
+|- style="background-color: #ffffcf"
 | [[bip-0125.mediawiki|125]]
-| Peer Services
+| Applications
 | Opt-in Full Replace-by-Fee Signaling
-| David Harding, Peter Todd
+| David A. Harding, Peter Todd
 | Standard
-| Draft
+| Accepted
 |-
+| [[bip-0126.mediawiki|126]]
+|
+| Best Practices for Heterogeneous Input Script Transactions
+| Kristov Atlas
+| Informational
+| Draft
+|- style="background-color: #ffffcf"
 | [[bip-0130.mediawiki|130]]
 | Peer Services
 | sendheaders message
 | Suhas Daftuar
 | Standard
-| Draft
+| Accepted
 |-
 | [[bip-0131.mediawiki|131]]
 | Consensus (hard fork)
@@ -537,12 +586,26 @@ The applications layer specifies high level structures, abstractions, and conven
 | Chris Priest
 | Standard
 | Draft
-|-
+|- style="background-color: #ffcfcf"
 | [[bip-0132.mediawiki|132]]
-| Process
+|
 | Committee-based BIP Acceptance Process
 | Andy Chase
 | Process
+| Withdrawn
+|-
+| [[bip-0133.mediawiki|133]]
+| Peer Services
+| feefilter message
+| Alex Morcos
+| Standard
+| Draft
+|-
+| [[bip-0134.mediawiki|134]]
+| Consensus (hard fork)
+| Flexible Transactions
+| Tom Zander
+| Standard
 | Draft
 |-
 | [[bip-0140.mediawiki|140]]
@@ -564,7 +627,7 @@ The applications layer specifies high level structures, abstractions, and conven
 | Address Format for Segregated Witness
 | Johnson Lau
 | Standard
-| Draft
+| Deferred
 |-
 | [[bip-0143.mediawiki|143]]
 | Consensus (soft fork)
@@ -578,6 +641,47 @@ The applications layer specifies high level structures, abstractions, and conven
 | Segregated Witness (Peer Services)
 | Eric Lombrozo, Pieter Wuille
 | Standard
-| Draft 
+| Draft
+|-
+| [[bip-0145.mediawiki|145]]
+| API/RPC
+| getblocktemplate Updates for Segregated Witness
+| Luke Dashjr
+| Standard
+| Draft
+|-
+| [[bip-0146.mediawiki|146]]
+| Consensus (soft fork)
+| Dealing with signature encoding malleability
+| Johnson Lau, Pieter Wuille
+| Standard
+| Draft
+|-
+| [[bip-0147.mediawiki|147]]
+| Consensus (soft fork)
+| Dealing with dummy stack element malleability
+| Johnson Lau
+| Standard
+| Draft
+|-
+| [[bip-0150.mediawiki|150]]
+| Peer Services
+| Peer Authentication
+| Jonas Schnelli
+| Standard
+| Draft
+|-
+| [[bip-0151.mediawiki|151]]
+| Peer Services
+| Peer-to-Peer Communication Encryption
+| Jonas Schnelli
+| Standard
+| Draft
+|-
+| [[bip-0152.mediawiki|152]]
+| Peer Services
+| Compact Block Relay
+| Matt Corallo
+| Standard
+| Draft
 |}
-
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index f0e43d263a..d8f52f2ac9 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -31,9 +31,6 @@
 	'Resolution' => undef,
 );
 
-my %ValidLayer = (
-	Process => undef,
-);
 my %ValidStatus = (
 	Draft => undef,
 	Deferred => undef,
@@ -106,8 +103,6 @@
 			} else {
 				$type = $val;
 			}
-		} elsif ($field eq 'Layer') {  # BIP 123
-			die "Invalid layer $val in $fn" unless exists $ValidLayer{$val};
 		} elsif (exists $DateField{$field}) {
 			die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/;
 		} elsif (exists $EmailField{$field}) {

From 72f18918a8ae655212ea2700b30f0dc4d758b843 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Wed, 30 Nov 2016 09:45:33 +0000
Subject: [PATCH 0516/2326] Promote BIP 123 Draft->Active, and implement it

---
 README.mediawiki      |  4 ++--
 bip-0010.mediawiki    |  1 +
 bip-0011.mediawiki    |  1 +
 bip-0012.mediawiki    |  1 +
 bip-0013.mediawiki    |  1 +
 bip-0014.mediawiki    |  1 +
 bip-0015.mediawiki    |  1 +
 bip-0016.mediawiki    |  1 +
 bip-0017.mediawiki    |  1 +
 bip-0018.mediawiki    |  1 +
 bip-0019.mediawiki    |  1 +
 bip-0020.mediawiki    |  1 +
 bip-0021.mediawiki    |  1 +
 bip-0022.mediawiki    |  1 +
 bip-0023.mediawiki    |  1 +
 bip-0030.mediawiki    |  1 +
 bip-0031.mediawiki    |  1 +
 bip-0032.mediawiki    |  1 +
 bip-0033.mediawiki    |  1 +
 bip-0034.mediawiki    |  1 +
 bip-0035.mediawiki    |  1 +
 bip-0036.mediawiki    |  1 +
 bip-0037.mediawiki    |  1 +
 bip-0038.mediawiki    |  1 +
 bip-0039.mediawiki    |  1 +
 bip-0042.mediawiki    |  1 +
 bip-0043.mediawiki    |  1 +
 bip-0044.mediawiki    |  1 +
 bip-0045.mediawiki    |  1 +
 bip-0047.mediawiki    |  1 +
 bip-0049.mediawiki    |  3 ++-
 bip-0060.mediawiki    |  1 +
 bip-0061.mediawiki    |  1 +
 bip-0062.mediawiki    |  1 +
 bip-0064.mediawiki    |  3 ++-
 bip-0065.mediawiki    |  1 +
 bip-0066.mediawiki    |  1 +
 bip-0067.mediawiki    |  1 +
 bip-0068.mediawiki    |  1 +
 bip-0069.mediawiki    |  1 +
 bip-0070.mediawiki    |  1 +
 bip-0071.mediawiki    |  1 +
 bip-0072.mediawiki    |  1 +
 bip-0073.mediawiki    |  1 +
 bip-0074.mediawiki    |  1 +
 bip-0075.mediawiki    |  1 +
 bip-0083.mediawiki    |  1 +
 bip-0101.mediawiki    |  1 +
 bip-0102.mediawiki    |  1 +
 bip-0103.mediawiki    |  1 +
 bip-0105.mediawiki    |  1 +
 bip-0106.mediawiki    |  1 +
 bip-0107.mediawiki    |  1 +
 bip-0109.mediawiki    |  1 +
 bip-0111.mediawiki    |  1 +
 bip-0112.mediawiki    |  1 +
 bip-0113.mediawiki    |  1 +
 bip-0114.mediawiki    |  1 +
 bip-0120.mediawiki    |  1 +
 bip-0121.mediawiki    |  1 +
 bip-0122.mediawiki    |  1 +
 bip-0123.mediawiki    |  2 +-
 bip-0124.mediawiki    |  1 +
 bip-0125.mediawiki    |  1 +
 bip-0130.mediawiki    |  1 +
 bip-0131.mediawiki    |  1 +
 bip-0133.mediawiki    |  1 +
 bip-0134.mediawiki    |  1 +
 bip-0140.mediawiki    |  3 ++-
 bip-0141.mediawiki    |  1 +
 bip-0142.mediawiki    |  1 +
 bip-0143.mediawiki    |  1 +
 bip-0144.mediawiki    |  1 +
 bip-0145.mediawiki    |  1 +
 bip-0146.mediawiki    |  1 +
 bip-0147.mediawiki    |  1 +
 bip-0150.mediawiki    |  1 +
 bip-0151.mediawiki    |  1 +
 bip-0152.mediawiki    |  1 +
 scripts/buildtable.pl | 20 +++++++++++++++++++-
 80 files changed, 102 insertions(+), 7 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index da18d6b321..9ee9e98f63 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -433,12 +433,12 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Marco Pontello
 | Standard
 | Draft
-|-
+|- style="background-color: #cfffcf"
 | [[bip-0123.mediawiki|123]]
 | BIP Classification
 | Eric Lombrozo
 | Process
-| Draft
+| Active
 |-
 | [[bip-0124.mediawiki|124]]
 | Hierarchical Deterministic Script Templates
diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki
index d15cd77e5d..ef8da665bb 100644
--- a/bip-0010.mediawiki
+++ b/bip-0010.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 10
+  Layer: Applications
   Title: Multi-Sig Transaction Distribution
   Author: Alan Reiner 
   Status: Withdrawn
diff --git a/bip-0011.mediawiki b/bip-0011.mediawiki
index 4b12340d54..1248d38d7d 100644
--- a/bip-0011.mediawiki
+++ b/bip-0011.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 11
+  Layer: Applications
   Title: M-of-N Standard Transactions
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0012.mediawiki b/bip-0012.mediawiki
index ee2fda6b8c..d55cf87d87 100644
--- a/bip-0012.mediawiki
+++ b/bip-0012.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 12
+  Layer: Consensus (soft fork)
   Title: OP_EVAL
   Author: Gavin Andresen 
   Status: Withdrawn
diff --git a/bip-0013.mediawiki b/bip-0013.mediawiki
index a537d16a29..833ffeac8e 100644
--- a/bip-0013.mediawiki
+++ b/bip-0013.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 13
+  Layer: Applications
   Title: Address Format for pay-to-script-hash
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki
index f11cb63045..61c625a5e0 100644
--- a/bip-0014.mediawiki
+++ b/bip-0014.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 14
+  Layer: Peer Services
   Title: Protocol Version and User Agent
   Author: Amir Taaki 
           Patrick Strateman 
diff --git a/bip-0015.mediawiki b/bip-0015.mediawiki
index b90539da3c..c340e87686 100644
--- a/bip-0015.mediawiki
+++ b/bip-0015.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 15
+  Layer: Applications
   Title: Aliases
   Author: Amir Taaki 
   Status: Deferred
diff --git a/bip-0016.mediawiki b/bip-0016.mediawiki
index 25b652db70..9d7fdf8c44 100644
--- a/bip-0016.mediawiki
+++ b/bip-0016.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 16
+  Layer: Consensus (soft fork)
   Title: Pay to Script Hash
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0017.mediawiki b/bip-0017.mediawiki
index 44011d5790..af001cfca6 100644
--- a/bip-0017.mediawiki
+++ b/bip-0017.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 17
+  Layer: Consensus (soft fork)
   Title: OP_CHECKHASHVERIFY (CHV)
   Author: Luke Dashjr 
   Status: Withdrawn
diff --git a/bip-0018.mediawiki b/bip-0018.mediawiki
index fce42004e4..9dadcf3f56 100644
--- a/bip-0018.mediawiki
+++ b/bip-0018.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 18
+  Layer: Consensus (soft fork)
   Title: hashScriptCheck
   Author: Luke Dashjr 
   Status: Accepted
diff --git a/bip-0019.mediawiki b/bip-0019.mediawiki
index 7784e084a8..5ad0e0b2d9 100644
--- a/bip-0019.mediawiki
+++ b/bip-0019.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 19
+  Layer: Applications
   Title: M-of-N Standard Transactions (Low SigOp)
   Author: Luke Dashjr 
   Status: Draft
diff --git a/bip-0020.mediawiki b/bip-0020.mediawiki
index fad634b76d..2ce8bb3a17 100644
--- a/bip-0020.mediawiki
+++ b/bip-0020.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 20
+  Layer: Applications
   Title: URI Scheme
   Author: Luke Dashjr 
   Status: Replaced
diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki
index 513b8bb844..2862679aea 100644
--- a/bip-0021.mediawiki
+++ b/bip-0021.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 21
+  Layer: Applications
   Title: URI Scheme
   Author: Nils Schneider 
           Matt Corallo 
diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki
index 4b33e59529..785d05d600 100644
--- a/bip-0022.mediawiki
+++ b/bip-0022.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 22
+  Layer: API/RPC
   Title: getblocktemplate - Fundamentals
   Author: Luke Dashjr 
   Status: Final
diff --git a/bip-0023.mediawiki b/bip-0023.mediawiki
index 03909587f6..660880ef11 100644
--- a/bip-0023.mediawiki
+++ b/bip-0023.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 23
+  Layer: API/RPC
   Title: getblocktemplate - Pooled Mining
   Author: Luke Dashjr 
   Status: Final
diff --git a/bip-0030.mediawiki b/bip-0030.mediawiki
index 135d30062d..679ef8a5b8 100644
--- a/bip-0030.mediawiki
+++ b/bip-0030.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 30
+  Layer: Consensus (soft fork)
   Title: Duplicate transactions
   Author: Pieter Wuille 
   Status: Final
diff --git a/bip-0031.mediawiki b/bip-0031.mediawiki
index 1bfe143c44..e30e125e7f 100644
--- a/bip-0031.mediawiki
+++ b/bip-0031.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 31
+  Layer: Peer Services
   Title: Pong message
   Author: Mike Hearn 
   Status: Final
diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki
index 0c660ad8fd..da09c9fbf8 100644
--- a/bip-0032.mediawiki
+++ b/bip-0032.mediawiki
@@ -6,6 +6,7 @@ RECENT CHANGES:
 
 
   BIP: 32
+  Layer: Applications
   Title: Hierarchical Deterministic Wallets
   Author: Pieter Wuille 
   Status: Final
diff --git a/bip-0033.mediawiki b/bip-0033.mediawiki
index 6768e19802..254e21ed9b 100644
--- a/bip-0033.mediawiki
+++ b/bip-0033.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 33
+  Layer: Peer Services
   Title: Stratized Nodes
   Author: Amir Taaki 
   Status: Draft
diff --git a/bip-0034.mediawiki b/bip-0034.mediawiki
index 4870fc13dd..d8b7045593 100644
--- a/bip-0034.mediawiki
+++ b/bip-0034.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 34
+  Layer: Consensus (soft fork)
   Title: Block v2, Height in Coinbase
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0035.mediawiki b/bip-0035.mediawiki
index c66735ca75..5b69eeee99 100644
--- a/bip-0035.mediawiki
+++ b/bip-0035.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 35
+  Layer: Peer Services
   Title: mempool message
   Author: Jeff Garzik 
   Status: Final
diff --git a/bip-0036.mediawiki b/bip-0036.mediawiki
index 9c61fdb6d8..cfcd7d72db 100644
--- a/bip-0036.mediawiki
+++ b/bip-0036.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 36
+  Layer: Peer Services
   Title: Custom Services
   Author: Stefan Thomas 
   Status: Draft
diff --git a/bip-0037.mediawiki b/bip-0037.mediawiki
index eba06287ee..65d4004a2f 100644
--- a/bip-0037.mediawiki
+++ b/bip-0037.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 37
+  Layer: Peer Services
   Title: Connection Bloom filtering
   Author: Mike Hearn 
           Matt Corallo 
diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki
index 650b7d0233..facc27df52 100644
--- a/bip-0038.mediawiki
+++ b/bip-0038.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 38
+  Layer: Applications
   Title: Passphrase-protected private key
   Author: Mike Caldwell 
           Aaron Voisine 
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index f0f5909982..ef3dda3cc8 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 39
+  Layer: Applications
   Title: Mnemonic code for generating deterministic keys
   Author: Marek Palatinus 
           Pavol Rusnak 
diff --git a/bip-0042.mediawiki b/bip-0042.mediawiki
index d7ce71c4d3..87b0977c4a 100644
--- a/bip-0042.mediawiki
+++ b/bip-0042.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 42
+  Layer: Consensus (soft fork)
   Title: A finite monetary supply for Bitcoin
   Author: Pieter Wuille 
   Status: Draft
diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki
index 686221aa4b..8a164c06eb 100644
--- a/bip-0043.mediawiki
+++ b/bip-0043.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 43
+  Layer: Applications
   Title: Purpose Field for Deterministic Wallets
   Author: Marek Palatinus 
           Pavol Rusnak 
diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki
index c289887ab3..43fdbd9dcc 100644
--- a/bip-0044.mediawiki
+++ b/bip-0044.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 44
+  Layer: Applications
   Title: Multi-Account Hierarchy for Deterministic Wallets
   Author: Marek Palatinus 
           Pavol Rusnak 
diff --git a/bip-0045.mediawiki b/bip-0045.mediawiki
index 757fc7fe9f..22a5142301 100644
--- a/bip-0045.mediawiki
+++ b/bip-0045.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 45
+  Layer: Applications
   Title: Structure for Deterministic P2SH Multisignature Wallets
   Author: Manuel Araoz 
           Ryan X. Charles 
diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki
index b1145b381b..1aba5018ec 100644
--- a/bip-0047.mediawiki
+++ b/bip-0047.mediawiki
@@ -5,6 +5,7 @@ RECENT CHANGES:
 
 
   BIP: 47
+  Layer: Applications
   Title: Reusable Payment Codes for Hierarchical Deterministic Wallets
   Author: Justus Ranvier 
   Status: Draft
diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki
index 4460ba7683..3f465b1596 100644
--- a/bip-0049.mediawiki
+++ b/bip-0049.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 49
+  Layer: Applications
   Title: Derivation scheme for P2WPKH-nested-in-P2SH based accounts
   Author: Daniel Weigl 
   Status: Draft
@@ -101,4 +102,4 @@ This BIP is not backwards compatible by design as described under [#consideratio
 
 == Copyright ==
 
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.
diff --git a/bip-0060.mediawiki b/bip-0060.mediawiki
index ae9592ad1a..28c7ba6063 100644
--- a/bip-0060.mediawiki
+++ b/bip-0060.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 60
+  Layer: Peer Services
   Title: Fixed Length "version" Message (Relay-Transactions Field)
   Author: Amir Taaki 
   Status: Draft
diff --git a/bip-0061.mediawiki b/bip-0061.mediawiki
index aca329a729..7fa8c7cdde 100644
--- a/bip-0061.mediawiki
+++ b/bip-0061.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 61
+  Layer: Peer Services
   Title: Reject P2P message
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0062.mediawiki b/bip-0062.mediawiki
index 28b20dd822..13cf6580a1 100644
--- a/bip-0062.mediawiki
+++ b/bip-0062.mediawiki
@@ -2,6 +2,7 @@
 
 
   BIP: 62
+  Layer: Consensus (soft fork)
   Title: Dealing with malleability
   Author: Pieter Wuille 
   Status: Withdrawn
diff --git a/bip-0064.mediawiki b/bip-0064.mediawiki
index b03dcac140..43c5b0fa1a 100644
--- a/bip-0064.mediawiki
+++ b/bip-0064.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 64
+  Layer: Peer Services
   Title: getutxo message
   Author: Mike Hearn 
   Status: Draft
@@ -100,4 +101,4 @@ results.
 
 ==Implementation==
 
-https://github.com/bitcoin/bitcoin/pull/4351/files
\ No newline at end of file
+https://github.com/bitcoin/bitcoin/pull/4351/files
diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki
index 99298bf191..012a8debe9 100644
--- a/bip-0065.mediawiki
+++ b/bip-0065.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 65
+  Layer: Consensus (soft fork)
   Title: OP_CHECKLOCKTIMEVERIFY
   Author: Peter Todd 
   Status: Final
diff --git a/bip-0066.mediawiki b/bip-0066.mediawiki
index 1235afde90..421b445d50 100644
--- a/bip-0066.mediawiki
+++ b/bip-0066.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 66
+  Layer: Consensus (soft fork)
   Title: Strict DER signatures
   Author: Pieter Wuille 
   Status: Final
diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki
index 13e2ed9945..0d3f4f4939 100644
--- a/bip-0067.mediawiki
+++ b/bip-0067.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 67
+  Layer: Applications
   Title: Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
   Author: Thomas Kerin 
           Jean-Pierre Rupp 
diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki
index 923441ecc1..fbd0a7ab98 100644
--- a/bip-0068.mediawiki
+++ b/bip-0068.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 68
+  Layer: Consensus (soft fork)
   Title: Relative lock-time using consensus-enforced sequence numbers
   Author: Mark Friedenbach 
           BtcDrak 
diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki
index 832438c48a..dd7ae9f810 100644
--- a/bip-0069.mediawiki
+++ b/bip-0069.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 69
+  Layer: Applications
   Title: Lexicographical Indexing of Transaction Inputs and Outputs
   Author: Kristov Atlas 
   Editor: Daniel Cousens 
diff --git a/bip-0070.mediawiki b/bip-0070.mediawiki
index e3c17cf087..b09530e31e 100644
--- a/bip-0070.mediawiki
+++ b/bip-0070.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 70
+  Layer: Applications
   Title: Payment Protocol
   Author: Gavin Andresen 
           Mike Hearn 
diff --git a/bip-0071.mediawiki b/bip-0071.mediawiki
index 1fc8489243..9fd2e814d1 100644
--- a/bip-0071.mediawiki
+++ b/bip-0071.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 71
+  Layer: Applications
   Title: Payment Protocol MIME types
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0072.mediawiki b/bip-0072.mediawiki
index 4dcc48b557..86546808c8 100644
--- a/bip-0072.mediawiki
+++ b/bip-0072.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 72
+  Layer: Applications
   Title: bitcoin: uri extensions for Payment Protocol
   Author: Gavin Andresen 
   Status: Final
diff --git a/bip-0073.mediawiki b/bip-0073.mediawiki
index 41c89a3015..1e93d81074 100644
--- a/bip-0073.mediawiki
+++ b/bip-0073.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 73
+  Layer: Applications
   Title: Use "Accept" header for response type negotiation with Payment Request URLs
   Author: Stephen Pair 
   Status: Final
diff --git a/bip-0074.mediawiki b/bip-0074.mediawiki
index a860b38159..526cb9c298 100644
--- a/bip-0074.mediawiki
+++ b/bip-0074.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 74
+  Layer: Applications
   Title: Allow zero value OP_RETURN in Payment Protocol
   Author: Toby Padilla 
   Status: Draft
diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki
index 878d708efc..f23a84b198 100644
--- a/bip-0075.mediawiki
+++ b/bip-0075.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 75
+  Layer: Applications
   Title: Out of Band Address Exchange using Payment Protocol Encryption
   Author: Justin Newton 
           Matt David 
diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki
index f6aa8e7772..9897e8837b 100644
--- a/bip-0083.mediawiki
+++ b/bip-0083.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 83
+  Layer: Applications
   Title: Dynamic Hierarchical Deterministic Key Trees
   Author: Eric Lombrozo 
   Status: Draft
diff --git a/bip-0101.mediawiki b/bip-0101.mediawiki
index cc8cfd5f9e..23f490c368 100644
--- a/bip-0101.mediawiki
+++ b/bip-0101.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 101
+  Layer: Consensus (hard fork)
   Title: Increase maximum block size
   Author: Gavin Andresen 
   Status: Withdrawn
diff --git a/bip-0102.mediawiki b/bip-0102.mediawiki
index fc909f75aa..3ba2d4a36e 100644
--- a/bip-0102.mediawiki
+++ b/bip-0102.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 102
+  Layer: Consensus (hard fork)
   Title: Block size increase to 2MB
   Author: Jeff Garzik 
   Status: Draft
diff --git a/bip-0103.mediawiki b/bip-0103.mediawiki
index 39e8a3f644..71c6d2a5ee 100644
--- a/bip-0103.mediawiki
+++ b/bip-0103.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 103
+  Layer: Consensus (hard fork)
   Title: Block size following technological growth
   Author: Pieter Wuille 
   Status: Draft
diff --git a/bip-0105.mediawiki b/bip-0105.mediawiki
index c4f0a09982..021bc3aaaf 100644
--- a/bip-0105.mediawiki
+++ b/bip-0105.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 105
+  Layer: Consensus (hard fork)
   Title: Consensus based block size retargeting algorithm
   Author: BtcDrak 
   Status: Draft
diff --git a/bip-0106.mediawiki b/bip-0106.mediawiki
index e9018fac9f..9f64f13bcc 100644
--- a/bip-0106.mediawiki
+++ b/bip-0106.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 106
+  Layer: Consensus (hard fork)
   Title: Dynamically Controlled Bitcoin Block Size Max Cap
   Author: Upal Chakraborty 
   Status: Draft
diff --git a/bip-0107.mediawiki b/bip-0107.mediawiki
index 86edd9952e..440866a754 100644
--- a/bip-0107.mediawiki
+++ b/bip-0107.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 107
+  Layer: Consensus (hard fork)
   Title: Dynamic limit on the block size
   Author: Washington Y. Sanchez 
   Status: Draft
diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki
index 667ef5f53a..6de37abf54 100644
--- a/bip-0109.mediawiki
+++ b/bip-0109.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 109
+  Layer: Consensus (hard fork)
   Title: Two million byte size limit with sigop and sighash limits
   Author: Gavin Andresen 
   Status: Draft
diff --git a/bip-0111.mediawiki b/bip-0111.mediawiki
index 45578329d4..7e20e658cc 100644
--- a/bip-0111.mediawiki
+++ b/bip-0111.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 111
+  Layer: Peer Services
   Title: NODE_BLOOM service bit
   Author: Matt Corallo 
           Peter Todd 
diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki
index 40378ee76f..fb7366471d 100644
--- a/bip-0112.mediawiki
+++ b/bip-0112.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 112
+  Layer: Consensus (soft fork)
   Title: CHECKSEQUENCEVERIFY
   Author: BtcDrak 
           Mark Friedenbach 
diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki
index 1c402aa0cf..8842e63ce4 100644
--- a/bip-0113.mediawiki
+++ b/bip-0113.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 113
+  Layer: Consensus (soft fork)
   Title: Median time-past as endpoint for lock-time calculations
   Author: Thomas Kerin 
           Mark Friedenbach 
diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki
index cb9aea7c35..1838c56ed0 100644
--- a/bip-0114.mediawiki
+++ b/bip-0114.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 114
+  Layer: Consensus (soft fork)
   Title: Merkelized Abstract Syntax Tree
   Author: Johnson Lau 
   Status: Draft
diff --git a/bip-0120.mediawiki b/bip-0120.mediawiki
index 1602c655f2..89be19a70d 100644
--- a/bip-0120.mediawiki
+++ b/bip-0120.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 120
+  Layer: Applications
   Title: Proof of Payment
   Author: Kalle Rosenbaum 
   Status: Draft
diff --git a/bip-0121.mediawiki b/bip-0121.mediawiki
index bafe8564c0..f0aaf343d5 100644
--- a/bip-0121.mediawiki
+++ b/bip-0121.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 121
+  Layer: Applications
   Title: Proof of Payment URI scheme
   Author: Kalle Rosenbaum 
   Status: Draft
diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki
index 5386dd27a5..0457f73ce0 100644
--- a/bip-0122.mediawiki
+++ b/bip-0122.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 122
+  Layer: Applications
   Title: URI scheme for Blockchain references / exploration
   Author: Marco Pontello 
   Status: Draft
diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki
index 3005f012dd..3f3f5e62d2 100644
--- a/bip-0123.mediawiki
+++ b/bip-0123.mediawiki
@@ -2,7 +2,7 @@
   BIP: 123
   Title: BIP Classification
   Author: Eric Lombrozo 
-  Status: Draft
+  Status: Active
   Type: Process
   Created: 2015-08-26
 
diff --git a/bip-0124.mediawiki b/bip-0124.mediawiki index 2f9f4ad74c..ea1c72dfaf 100644 --- a/bip-0124.mediawiki +++ b/bip-0124.mediawiki @@ -1,5 +1,6 @@
   BIP: 124
+  Layer: Applications
   Title: Hierarchical Deterministic Script Templates
   Author: Eric Lombrozo 
           William Swanson 
diff --git a/bip-0125.mediawiki b/bip-0125.mediawiki
index 52dfe40439..7773c7b694 100644
--- a/bip-0125.mediawiki
+++ b/bip-0125.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 125
+  Layer: Applications
   Title: Opt-in Full Replace-by-Fee Signaling
   Author: David A. Harding 
           Peter Todd 
diff --git a/bip-0130.mediawiki b/bip-0130.mediawiki
index ae1e602af1..9f5365b7d8 100644
--- a/bip-0130.mediawiki
+++ b/bip-0130.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 130
+  Layer: Peer Services
   Title: sendheaders message
   Author: Suhas Daftuar 
   Status: Accepted
diff --git a/bip-0131.mediawiki b/bip-0131.mediawiki
index 1efe713374..2a1699c5ff 100644
--- a/bip-0131.mediawiki
+++ b/bip-0131.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 131
+  Layer: Consensus (hard fork)
   Title: "Coalescing Transaction" Specification (wildcard inputs)
   Author: Chris Priest 
   Status: Draft
diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki
index 7d98f87c36..bebba7e57b 100644
--- a/bip-0133.mediawiki
+++ b/bip-0133.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 133
+  Layer: Peer Services
   Title: feefilter message
   Author: Alex Morcos 
   Status: Draft
diff --git a/bip-0134.mediawiki b/bip-0134.mediawiki
index fa2103bd41..eb3cab6214 100644
--- a/bip-0134.mediawiki
+++ b/bip-0134.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 134
+  Layer: Consensus (hard fork)
   Title: Flexible Transactions
   Author: Tom Zander 
   Status: Draft
diff --git a/bip-0140.mediawiki b/bip-0140.mediawiki
index b187a49b8d..71637f27e9 100644
--- a/bip-0140.mediawiki
+++ b/bip-0140.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 140
+  Layer: Consensus (soft fork)
   Title: Normalized TXID
   Author: Christian Decker 
   Status: Draft
@@ -110,4 +111,4 @@ This is a softfork which replaces OP_NOP4 with the new implementati
 
 
 ==Copyright==
-This document is placed in the public domain.
\ No newline at end of file
+This document is placed in the public domain.
diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 352256f782..4a90ff00c4 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 141
+  Layer: Consensus (soft fork)
   Title: Segregated Witness (Consensus layer)
   Author: Eric Lombrozo 
           Johnson Lau 
diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki
index bb60265388..8713454852 100644
--- a/bip-0142.mediawiki
+++ b/bip-0142.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 142
+  Layer: Applications
   Title: Address Format for Segregated Witness
   Author: Johnson Lau 
   Status: Deferred
diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 766fd9f294..dc6fbfefa5 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 143
+  Layer: Consensus (soft fork)
   Title: Transaction Signature Verification for Version 0 Witness Program
   Author: Johnson Lau 
           Pieter Wuille 
diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki
index f10fe0cdb5..4e42823879 100644
--- a/bip-0144.mediawiki
+++ b/bip-0144.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 144
+  Layer: Peer Services
   Title: Segregated Witness (Peer Services)
   Author: Eric Lombrozo 
           Pieter Wuille 
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index cac838df11..d26b64643e 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 145
+  Layer: API/RPC
   Title: getblocktemplate Updates for Segregated Witness
   Author: Luke Dashjr 
   Status: Draft
diff --git a/bip-0146.mediawiki b/bip-0146.mediawiki
index 5358411a65..635c015ada 100644
--- a/bip-0146.mediawiki
+++ b/bip-0146.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 146
+  Layer: Consensus (soft fork)
   Title: Dealing with signature encoding malleability
   Author: Johnson Lau 
           Pieter Wuille 
diff --git a/bip-0147.mediawiki b/bip-0147.mediawiki
index 001abc6519..4a1aa87dcc 100644
--- a/bip-0147.mediawiki
+++ b/bip-0147.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 147
+  Layer: Consensus (soft fork)
   Title: Dealing with dummy stack element malleability
   Author: Johnson Lau 
   Status: Draft
diff --git a/bip-0150.mediawiki b/bip-0150.mediawiki
index b1d46c1bcf..161a66156c 100644
--- a/bip-0150.mediawiki
+++ b/bip-0150.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 150
+  Layer: Peer Services
   Title: Peer Authentication
   Author: Jonas Schnelli 
   Status: Draft
diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki
index cf221f2479..19ac196c14 100644
--- a/bip-0151.mediawiki
+++ b/bip-0151.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 151
+  Layer: Peer Services
   Title: Peer-to-Peer Communication Encryption
   Author: Jonas Schnelli 
   Status: Draft
diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index e05cc2acd1..169cb6be5b 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -1,5 +1,6 @@
 
   BIP: 152
+  Layer: Peer Services
   Title: Compact Block Relay
   Author: Matt Corallo 
   Status: Draft
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index d8f52f2ac9..dbd42d9c4b 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -3,6 +3,7 @@
 use warnings;
 
 my $topbip = 9999;
+my $include_layer = 0;
 
 my %RequiredFields = (
 	BIP => undef,
@@ -31,6 +32,13 @@
 	'Resolution' => undef,
 );
 
+my %ValidLayer = (
+	'Consensus (soft fork)' => undef,
+	'Consensus (hard fork)' => undef,
+	'Peer Services' => undef,
+	'API/RPC' => undef,
+	'Applications' => undef,
+);
 my %ValidStatus = (
 	Draft => undef,
 	Deferred => undef,
@@ -58,7 +66,7 @@
 			die "No 
 in $fn" if eof $F;
 	}
 	my %found;
-	my ($title, $author, $status, $type);
+	my ($title, $author, $status, $type, $layer);
 	my ($field, $val);
 	while (<$F>) {
 		m[^
$] && last; @@ -103,6 +111,9 @@ } else { $type = $val; } + } elsif ($field eq 'Layer') { # BIP 123 + die "Invalid layer $val in $fn" unless exists $ValidLayer{$val}; + $layer = $val; } elsif (exists $DateField{$field}) { die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/; } elsif (exists $EmailField{$field}) { @@ -120,6 +131,13 @@ } print "\n"; print "| [[${fn}|${bipnum}]]\n"; + if ($include_layer) { + if (defined $layer) { + print "| ${layer}\n"; + } else { + print "|\n"; + } + } print "| ${title}\n"; print "| ${author}\n"; print "| ${type}\n"; From 959fecc15bdad070afa63455468b1dba54655fa6 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Nov 2016 09:47:31 +0000 Subject: [PATCH 0517/2326] Promote BIP 2 Draft->Active, and implement it - Update all Accepted status to Proposed (renamed status) - The BIP Comments preamble headers added to every BIP - The License preamble headers have been added to all BIPs with a Copyright section --- README.mediawiki | 26 +++++++++++------------ bip-0001.mediawiki | 5 ++++- bip-0002.mediawiki | 6 +++++- bip-0009.mediawiki | 3 +++ bip-0010.mediawiki | 2 ++ bip-0011.mediawiki | 2 ++ bip-0012.mediawiki | 2 ++ bip-0013.mediawiki | 2 ++ bip-0014.mediawiki | 2 ++ bip-0015.mediawiki | 2 ++ bip-0016.mediawiki | 2 ++ bip-0017.mediawiki | 2 ++ bip-0018.mediawiki | 4 +++- bip-0019.mediawiki | 2 ++ bip-0020.mediawiki | 2 ++ bip-0021.mediawiki | 2 ++ bip-0022.mediawiki | 2 ++ bip-0023.mediawiki | 2 ++ bip-0030.mediawiki | 2 ++ bip-0031.mediawiki | 2 ++ bip-0032.mediawiki | 2 ++ bip-0033.mediawiki | 2 ++ bip-0034.mediawiki | 2 ++ bip-0035.mediawiki | 2 ++ bip-0036.mediawiki | 3 +++ bip-0037.mediawiki | 3 +++ bip-0038.mediawiki | 3 +++ bip-0039.mediawiki | 4 +++- bip-0042.mediawiki | 3 +++ bip-0043.mediawiki | 2 ++ bip-0044.mediawiki | 4 +++- bip-0045.mediawiki | 4 +++- bip-0047.mediawiki | 2 ++ bip-0049.mediawiki | 3 +++ bip-0050.mediawiki | 3 +++ bip-0060.mediawiki | 3 +++ bip-0061.mediawiki | 2 ++ bip-0062.mediawiki | 2 ++ bip-0064.mediawiki | 2 ++ bip-0065.mediawiki | 3 +++ bip-0066.mediawiki | 2 ++ bip-0067.mediawiki | 4 +++- bip-0068.mediawiki | 2 ++ bip-0069.mediawiki | 5 ++++- bip-0070.mediawiki | 2 ++ bip-0071.mediawiki | 2 ++ bip-0072.mediawiki | 2 ++ bip-0073.mediawiki | 2 ++ bip-0074.mediawiki | 3 +++ bip-0075.mediawiki | 2 ++ bip-0080.mediawiki | 3 +++ bip-0081.mediawiki | 3 +++ bip-0083.mediawiki | 3 +++ bip-0099.mediawiki | 3 +++ bip-0101.mediawiki | 2 ++ bip-0102.mediawiki | 2 ++ bip-0103.mediawiki | 2 ++ bip-0105.mediawiki | 3 +++ bip-0106.mediawiki | 2 ++ bip-0107.mediawiki | 3 +++ bip-0109.mediawiki | 3 +++ bip-0111.mediawiki | 5 ++++- bip-0112.mediawiki | 3 +++ bip-0113.mediawiki | 3 +++ bip-0114.mediawiki | 3 +++ bip-0120.mediawiki | 2 ++ bip-0121.mediawiki | 2 ++ bip-0122.mediawiki | 3 +++ bip-0123.mediawiki | 2 ++ bip-0124.mediawiki | 3 +++ bip-0125.mediawiki | 5 ++++- bip-0126.mediawiki | 3 +++ bip-0130.mediawiki | 5 ++++- bip-0131.mediawiki | 3 +++ bip-0132.mediawiki | 3 +++ bip-0133.mediawiki | 3 +++ bip-0134.mediawiki | 4 ++++ bip-0140.mediawiki | 4 ++++ bip-0141.mediawiki | 3 +++ bip-0142.mediawiki | 3 +++ bip-0143.mediawiki | 3 +++ bip-0144.mediawiki | 3 +++ bip-0145.mediawiki | 4 ++++ bip-0146.mediawiki | 3 +++ bip-0147.mediawiki | 3 +++ bip-0150.mediawiki | 3 +++ bip-0151.mediawiki | 3 +++ bip-0152.mediawiki | 3 +++ scripts/buildtable.pl | 49 +++++++++++++++++++++++++++++++++++++++++-- 89 files changed, 293 insertions(+), 26 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 9ee9e98f63..52756abd25 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -12,18 +12,18 @@ Those proposing changes should consider that ultimately consent may rest with th !Owner !Type !Status -|- style="background-color: #cfffcf" +|- style="background-color: #ffcfcf" | [[bip-0001.mediawiki|1]] | BIP Purpose and Guidelines | Amir Taaki | Process -| Active -|- +| Replaced +|- style="background-color: #cfffcf" | [[bip-0002.mediawiki|2]] | BIP process, revised | Luke Dashjr | Process -| Draft +| Active |- style="background-color: #cfffcf" | [[bip-0009.mediawiki|9]] | Version bits with timeout and delay @@ -83,7 +83,7 @@ Those proposing changes should consider that ultimately consent may rest with th | hashScriptCheck | Luke Dashjr | Standard -| Accepted +| Proposed |- | [[bip-0019.mediawiki|19]] | M-of-N Standard Transactions (Low SigOp) @@ -173,7 +173,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Mnemonic code for generating deterministic keys | Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe | Standard -| Accepted +| Proposed |- | 40 | Stratum wire protocol @@ -203,13 +203,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Multi-Account Hierarchy for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Standard -| Accepted +| Proposed |- style="background-color: #ffffcf" | [[bip-0045.mediawiki|45]] | Structure for Deterministic P2SH Multisignature Wallets | Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia | Standard -| Accepted +| Proposed |- | [[bip-0047.mediawiki|47]] | Reusable Payment Codes for Hierarchical Deterministic Wallets @@ -276,7 +276,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Deterministic Pay-to-script-hash multi-signature addresses through public key sorting | Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries | Standard -| Accepted +| Proposed |- style="background-color: #cfffcf" | [[bip-0068.mediawiki|68]] | Relative lock-time using consensus-enforced sequence numbers @@ -288,7 +288,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Lexicographical Indexing of Transaction Inputs and Outputs | Kristov Atlas | Informational -| Accepted +| Proposed |- style="background-color: #cfffcf" | [[bip-0070.mediawiki|70]] | Payment Protocol @@ -396,7 +396,7 @@ Those proposing changes should consider that ultimately consent may rest with th | NODE_BLOOM service bit | Matt Corallo, Peter Todd | Standard -| Accepted +| Proposed |- style="background-color: #cfffcf" | [[bip-0112.mediawiki|112]] | CHECKSEQUENCEVERIFY @@ -450,7 +450,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Opt-in Full Replace-by-Fee Signaling | David A. Harding, Peter Todd | Standard -| Accepted +| Proposed |- | [[bip-0126.mediawiki|126]] | Best Practices for Heterogeneous Input Script Transactions @@ -462,7 +462,7 @@ Those proposing changes should consider that ultimately consent may rest with th | sendheaders message | Suhas Daftuar | Standard -| Accepted +| Proposed |- | [[bip-0131.mediawiki|131]] | "Coalescing Transaction" Specification (wildcard inputs) diff --git a/bip-0001.mediawiki b/bip-0001.mediawiki index 44fbe8b293..b1947ea3d9 100644 --- a/bip-0001.mediawiki +++ b/bip-0001.mediawiki @@ -2,9 +2,12 @@ BIP: 1 Title: BIP Purpose and Guidelines Author: Amir Taaki - Status: Active + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0001 + Status: Replaced Type: Process Created: 2011-08-19 + Superseded-By: 2
==What is a BIP?== diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki index 4796771122..ea60d1d7c1 100644 --- a/bip-0002.mediawiki +++ b/bip-0002.mediawiki @@ -2,9 +2,13 @@ BIP: 2 Title: BIP process, revised Author: Luke Dashjr - Status: Draft + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0002 + Status: Active Type: Process Created: 2016-02-03 + License: BSD-2-Clause + OPL Replaces: 1
diff --git a/bip-0009.mediawiki b/bip-0009.mediawiki index 536ef1f063..11e350517f 100644 --- a/bip-0009.mediawiki +++ b/bip-0009.mediawiki @@ -5,9 +5,12 @@ Peter Todd Greg Maxwell Rusty Russell + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0009 Status: Final Type: Informational Created: 2015-10-04 + License: PD
==Abstract== diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki index ef8da665bb..42071f3a6f 100644 --- a/bip-0010.mediawiki +++ b/bip-0010.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Multi-Sig Transaction Distribution Author: Alan Reiner + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0010 Status: Withdrawn Type: Informational Created: 2011-10-28 diff --git a/bip-0011.mediawiki b/bip-0011.mediawiki index 1248d38d7d..bb0a308826 100644 --- a/bip-0011.mediawiki +++ b/bip-0011.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: M-of-N Standard Transactions Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0011 Status: Final Type: Standards Track Created: 2011-10-18 diff --git a/bip-0012.mediawiki b/bip-0012.mediawiki index d55cf87d87..9cb3795cd1 100644 --- a/bip-0012.mediawiki +++ b/bip-0012.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: OP_EVAL Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0012 Status: Withdrawn Type: Standards Track Created: 2011-10-18 diff --git a/bip-0013.mediawiki b/bip-0013.mediawiki index 833ffeac8e..9805ed0bc4 100644 --- a/bip-0013.mediawiki +++ b/bip-0013.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Address Format for pay-to-script-hash Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0013 Status: Final Type: Standards Track Created: 2011-10-18 diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki index 61c625a5e0..abd575ce9b 100644 --- a/bip-0014.mediawiki +++ b/bip-0014.mediawiki @@ -4,6 +4,8 @@ Title: Protocol Version and User Agent Author: Amir Taaki Patrick Strateman + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0014 Status: Final Type: Standards Track Created: 2011-11-10 diff --git a/bip-0015.mediawiki b/bip-0015.mediawiki index c340e87686..a6e4426a81 100644 --- a/bip-0015.mediawiki +++ b/bip-0015.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Aliases Author: Amir Taaki + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0015 Status: Deferred Type: Standards Track Created: 2011-12-10 diff --git a/bip-0016.mediawiki b/bip-0016.mediawiki index 9d7fdf8c44..d5d39ef1ab 100644 --- a/bip-0016.mediawiki +++ b/bip-0016.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: Pay to Script Hash Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0016 Status: Final Type: Standards Track Created: 2012-01-03 diff --git a/bip-0017.mediawiki b/bip-0017.mediawiki index af001cfca6..04a71d7045 100644 --- a/bip-0017.mediawiki +++ b/bip-0017.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: OP_CHECKHASHVERIFY (CHV) Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0017 Status: Withdrawn Type: Standards Track Created: 2012-01-18 diff --git a/bip-0018.mediawiki b/bip-0018.mediawiki index 9dadcf3f56..b459970dbe 100644 --- a/bip-0018.mediawiki +++ b/bip-0018.mediawiki @@ -3,7 +3,9 @@ Layer: Consensus (soft fork) Title: hashScriptCheck Author: Luke Dashjr - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0018 + Status: Proposed Type: Standards Track Created: 2012-01-27
diff --git a/bip-0019.mediawiki b/bip-0019.mediawiki index 5ad0e0b2d9..eed0df998a 100644 --- a/bip-0019.mediawiki +++ b/bip-0019.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: M-of-N Standard Transactions (Low SigOp) Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0019 Status: Draft Type: Standards Track Created: 2012-01-30 diff --git a/bip-0020.mediawiki b/bip-0020.mediawiki index 2ce8bb3a17..96da0625e2 100644 --- a/bip-0020.mediawiki +++ b/bip-0020.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: URI Scheme Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0020 Status: Replaced Type: Standards Track Created: 2011-01-10 diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki index 2862679aea..cfab856422 100644 --- a/bip-0021.mediawiki +++ b/bip-0021.mediawiki @@ -4,6 +4,8 @@ Title: URI Scheme Author: Nils Schneider Matt Corallo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0021 Status: Final Type: Standards Track Created: 2012-01-29 diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki index 785d05d600..ffbe229d7b 100644 --- a/bip-0022.mediawiki +++ b/bip-0022.mediawiki @@ -3,6 +3,8 @@ Layer: API/RPC Title: getblocktemplate - Fundamentals Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0022 Status: Final Type: Standards Track Created: 2012-02-28 diff --git a/bip-0023.mediawiki b/bip-0023.mediawiki index 660880ef11..25581bf59a 100644 --- a/bip-0023.mediawiki +++ b/bip-0023.mediawiki @@ -3,6 +3,8 @@ Layer: API/RPC Title: getblocktemplate - Pooled Mining Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0023 Status: Final Type: Standards Track Created: 2012-02-28 diff --git a/bip-0030.mediawiki b/bip-0030.mediawiki index 679ef8a5b8..56ef3deef4 100644 --- a/bip-0030.mediawiki +++ b/bip-0030.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: Duplicate transactions Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0030 Status: Final Type: Standards Track Created: 2012-02-22 diff --git a/bip-0031.mediawiki b/bip-0031.mediawiki index e30e125e7f..7f4cec45ef 100644 --- a/bip-0031.mediawiki +++ b/bip-0031.mediawiki @@ -3,6 +3,8 @@ Layer: Peer Services Title: Pong message Author: Mike Hearn + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0031 Status: Final Type: Standards Track Created: 2012-04-11 diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index da09c9fbf8..50964a2b65 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -9,6 +9,8 @@ RECENT CHANGES: Layer: Applications Title: Hierarchical Deterministic Wallets Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0032 Status: Final Type: Informational Created: 2012-02-11 diff --git a/bip-0033.mediawiki b/bip-0033.mediawiki index 254e21ed9b..d95357d1b4 100644 --- a/bip-0033.mediawiki +++ b/bip-0033.mediawiki @@ -3,6 +3,8 @@ Layer: Peer Services Title: Stratized Nodes Author: Amir Taaki + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0033 Status: Draft Type: Standards Track Created: 2012-05-15 diff --git a/bip-0034.mediawiki b/bip-0034.mediawiki index d8b7045593..a993b7e7ee 100644 --- a/bip-0034.mediawiki +++ b/bip-0034.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: Block v2, Height in Coinbase Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0034 Status: Final Type: Standards Track Created: 2012-07-06 diff --git a/bip-0035.mediawiki b/bip-0035.mediawiki index 5b69eeee99..64edaf5d7a 100644 --- a/bip-0035.mediawiki +++ b/bip-0035.mediawiki @@ -3,6 +3,8 @@ Layer: Peer Services Title: mempool message Author: Jeff Garzik + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0035 Status: Final Type: Standards Track Created: 2012-08-16 diff --git a/bip-0036.mediawiki b/bip-0036.mediawiki index cfcd7d72db..d3e36f48e5 100644 --- a/bip-0036.mediawiki +++ b/bip-0036.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: Custom Services Author: Stefan Thomas + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0036 Status: Draft Type: Standards Track Created: 2012-08-03 + License: PD
==Abstract== diff --git a/bip-0037.mediawiki b/bip-0037.mediawiki index 65d4004a2f..d817bc012c 100644 --- a/bip-0037.mediawiki +++ b/bip-0037.mediawiki @@ -4,9 +4,12 @@ Title: Connection Bloom filtering Author: Mike Hearn Matt Corallo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0037 Status: Final Type: Standards Track Created: 2012-10-24 + License: PD
==Abstract== diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki index facc27df52..e1e35585ec 100644 --- a/bip-0038.mediawiki +++ b/bip-0038.mediawiki @@ -4,9 +4,12 @@ Title: Passphrase-protected private key Author: Mike Caldwell Aaron Voisine + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0038 Status: Draft (Some confusion applies: The announcements for this never made it to the list, so it hasn't had public discussion) Type: Standards Track Created: 2012-11-20 + License: PD
==Abstract== diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index ef3dda3cc8..4a6b41e0d2 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -6,7 +6,9 @@ Pavol Rusnak Aaron Voisine Sean Bowe - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0039 + Status: Proposed Type: Standards Track Created: 2013-09-10
diff --git a/bip-0042.mediawiki b/bip-0042.mediawiki index 87b0977c4a..1b80605efd 100644 --- a/bip-0042.mediawiki +++ b/bip-0042.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (soft fork) Title: A finite monetary supply for Bitcoin Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0042 Status: Draft Type: Standards Track Created: 2014-04-01 + License: PD
==Abstract== diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki index 8a164c06eb..85578d8620 100644 --- a/bip-0043.mediawiki +++ b/bip-0043.mediawiki @@ -4,6 +4,8 @@ Title: Purpose Field for Deterministic Wallets Author: Marek Palatinus Pavol Rusnak + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0043 Status: Draft Type: Informational Created: 2014-04-24 diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index 43fdbd9dcc..b13ba54ebe 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -4,7 +4,9 @@ Title: Multi-Account Hierarchy for Deterministic Wallets Author: Marek Palatinus Pavol Rusnak - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0044 + Status: Proposed Type: Standards Track Created: 2014-04-24
diff --git a/bip-0045.mediawiki b/bip-0045.mediawiki index 22a5142301..d3647842d1 100644 --- a/bip-0045.mediawiki +++ b/bip-0045.mediawiki @@ -5,7 +5,9 @@ Author: Manuel Araoz Ryan X. Charles Matias Alejo Garcia - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0045 + Status: Proposed Type: Standards Track Created: 2014-04-25
diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki index 1aba5018ec..e16dd7f9b8 100644 --- a/bip-0047.mediawiki +++ b/bip-0047.mediawiki @@ -8,6 +8,8 @@ RECENT CHANGES: Layer: Applications Title: Reusable Payment Codes for Hierarchical Deterministic Wallets Author: Justus Ranvier + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0047 Status: Draft Type: Informational Created: 2015-04-24 diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki index 3f465b1596..109fde878e 100644 --- a/bip-0049.mediawiki +++ b/bip-0049.mediawiki @@ -3,9 +3,12 @@ Layer: Applications Title: Derivation scheme for P2WPKH-nested-in-P2SH based accounts Author: Daniel Weigl + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0049 Status: Draft Type: Informational Created: 2016-05-19 + License: PD
==Abstract== diff --git a/bip-0050.mediawiki b/bip-0050.mediawiki index fbc1c0f438..0b41c8d220 100644 --- a/bip-0050.mediawiki +++ b/bip-0050.mediawiki @@ -2,9 +2,12 @@ BIP: 50 Title: March 2013 Chain Fork Post-Mortem Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0050 Status: Final Type: Informational Created: 2013-03-20 + License: PD
==What went wrong== diff --git a/bip-0060.mediawiki b/bip-0060.mediawiki index 28c7ba6063..4627dfbef0 100644 --- a/bip-0060.mediawiki +++ b/bip-0060.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: Fixed Length "version" Message (Relay-Transactions Field) Author: Amir Taaki + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0060 Status: Draft Type: Standards Track Created: 2013-06-16 + License: PD
==Abstract== diff --git a/bip-0061.mediawiki b/bip-0061.mediawiki index 7fa8c7cdde..2060658500 100644 --- a/bip-0061.mediawiki +++ b/bip-0061.mediawiki @@ -3,6 +3,8 @@ Layer: Peer Services Title: Reject P2P message Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0061 Status: Final Type: Standards Track Created: 2014-06-18 diff --git a/bip-0062.mediawiki b/bip-0062.mediawiki index 13cf6580a1..deff62b81a 100644 --- a/bip-0062.mediawiki +++ b/bip-0062.mediawiki @@ -5,6 +5,8 @@ Layer: Consensus (soft fork) Title: Dealing with malleability Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0062 Status: Withdrawn Type: Standards Track Created: 2014-03-12 diff --git a/bip-0064.mediawiki b/bip-0064.mediawiki index 43c5b0fa1a..22e56ba346 100644 --- a/bip-0064.mediawiki +++ b/bip-0064.mediawiki @@ -3,6 +3,8 @@ Layer: Peer Services Title: getutxo message Author: Mike Hearn + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0064 Status: Draft Type: Standards Track Created: 2014-06-10 diff --git a/bip-0065.mediawiki b/bip-0065.mediawiki index 012a8debe9..904dc162dc 100644 --- a/bip-0065.mediawiki +++ b/bip-0065.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (soft fork) Title: OP_CHECKLOCKTIMEVERIFY Author: Peter Todd + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0065 Status: Final Type: Standards Track Created: 2014-10-01 + License: PD
==Abstract== diff --git a/bip-0066.mediawiki b/bip-0066.mediawiki index 421b445d50..d2ab1893cf 100644 --- a/bip-0066.mediawiki +++ b/bip-0066.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (soft fork) Title: Strict DER signatures Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0066 Status: Final Type: Standards Track Created: 2015-01-10 diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki index 0d3f4f4939..2a0212e476 100644 --- a/bip-0067.mediawiki +++ b/bip-0067.mediawiki @@ -5,7 +5,9 @@ Author: Thomas Kerin Jean-Pierre Rupp Ruben de Vries - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0067 + Status: Proposed Type: Standards Track Created: 2015-02-08
diff --git a/bip-0068.mediawiki b/bip-0068.mediawiki index fbd0a7ab98..ea0761d5b2 100644 --- a/bip-0068.mediawiki +++ b/bip-0068.mediawiki @@ -6,6 +6,8 @@ BtcDrak Nicolas Dorier kinoshitajona + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0068 Status: Final Type: Standards Track Created: 2015-05-28 diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki index dd7ae9f810..f262126a56 100644 --- a/bip-0069.mediawiki +++ b/bip-0069.mediawiki @@ -4,9 +4,12 @@ Title: Lexicographical Indexing of Transaction Inputs and Outputs Author: Kristov Atlas Editor: Daniel Cousens - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0069 + Status: Proposed Type: Informational Created: 2015-06-12 + License: PD
==Abstract== diff --git a/bip-0070.mediawiki b/bip-0070.mediawiki index b09530e31e..28349ee300 100644 --- a/bip-0070.mediawiki +++ b/bip-0070.mediawiki @@ -4,6 +4,8 @@ Title: Payment Protocol Author: Gavin Andresen Mike Hearn + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0070 Status: Final Type: Standards Track Created: 2013-07-29 diff --git a/bip-0071.mediawiki b/bip-0071.mediawiki index 9fd2e814d1..b4e9def056 100644 --- a/bip-0071.mediawiki +++ b/bip-0071.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Payment Protocol MIME types Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0071 Status: Final Type: Standards Track Created: 2013-07-29 diff --git a/bip-0072.mediawiki b/bip-0072.mediawiki index 86546808c8..d5e295e189 100644 --- a/bip-0072.mediawiki +++ b/bip-0072.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: bitcoin: uri extensions for Payment Protocol Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0072 Status: Final Type: Standards Track Created: 2013-07-29 diff --git a/bip-0073.mediawiki b/bip-0073.mediawiki index 1e93d81074..e8a37a59b2 100644 --- a/bip-0073.mediawiki +++ b/bip-0073.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Use "Accept" header for response type negotiation with Payment Request URLs Author: Stephen Pair + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0073 Status: Final Type: Standards Track Created: 2013-08-27 diff --git a/bip-0074.mediawiki b/bip-0074.mediawiki index 526cb9c298..d1f1a231ee 100644 --- a/bip-0074.mediawiki +++ b/bip-0074.mediawiki @@ -3,9 +3,12 @@ Layer: Applications Title: Allow zero value OP_RETURN in Payment Protocol Author: Toby Padilla + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0074 Status: Draft Type: Standards Track Created: 2016-01-29 + License: PD
==Abstract== diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index f23a84b198..33e2747c32 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -6,6 +6,8 @@ Matt David Aaron Voisine James MacWhyte + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0075 Status: Draft Type: Standards Track Created: 2015-11-20 diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki index 05322e08f2..2c4d8a7f4c 100644 --- a/bip-0080.mediawiki +++ b/bip-0080.mediawiki @@ -3,9 +3,12 @@ Title: Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets Author: Justus Ranvier Jimmy Song + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0080 Status: Deferred Type: Informational Created: 2014-08-11 + License: PD
==Abstract== diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki index 713cb5725c..e88ee14667 100644 --- a/bip-0081.mediawiki +++ b/bip-0081.mediawiki @@ -3,9 +3,12 @@ Title: Hierarchy for Colored Voting Pool Deterministic Multisig Wallets Author: Justus Ranvier Jimmy Song + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0081 Status: Deferred Type: Informational Created: 2014-08-11 + License: PD
==Abstract== diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki index 9897e8837b..a0b1e5ee03 100644 --- a/bip-0083.mediawiki +++ b/bip-0083.mediawiki @@ -3,9 +3,12 @@ Layer: Applications Title: Dynamic Hierarchical Deterministic Key Trees Author: Eric Lombrozo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0083 Status: Draft Type: Standards Track Created: 2015-11-16 + License: PD
==Abstract== diff --git a/bip-0099.mediawiki b/bip-0099.mediawiki index 3e0a43a886..cbde553fc5 100644 --- a/bip-0099.mediawiki +++ b/bip-0099.mediawiki @@ -2,9 +2,12 @@ BIP: 99 Title: Motivation and deployment of consensus rule changes ([soft/hard]forks) Author: Jorge Timón + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0099 Status: Draft Type: Informational Created: 2015-06-20 + License: PD Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-June/008936.html
diff --git a/bip-0101.mediawiki b/bip-0101.mediawiki index 23f490c368..03215697bc 100644 --- a/bip-0101.mediawiki +++ b/bip-0101.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (hard fork) Title: Increase maximum block size Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0101 Status: Withdrawn Type: Standards Track Created: 2015-06-22 diff --git a/bip-0102.mediawiki b/bip-0102.mediawiki index 3ba2d4a36e..ed6b4e32a3 100644 --- a/bip-0102.mediawiki +++ b/bip-0102.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (hard fork) Title: Block size increase to 2MB Author: Jeff Garzik + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0102 Status: Draft Type: Standards Track Created: 2015-06-23 diff --git a/bip-0103.mediawiki b/bip-0103.mediawiki index 71c6d2a5ee..7cef84a163 100644 --- a/bip-0103.mediawiki +++ b/bip-0103.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (hard fork) Title: Block size following technological growth Author: Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0103 Status: Draft Type: Standards Track Created: 2015-07-21 diff --git a/bip-0105.mediawiki b/bip-0105.mediawiki index 021bc3aaaf..125d85248c 100644 --- a/bip-0105.mediawiki +++ b/bip-0105.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (hard fork) Title: Consensus based block size retargeting algorithm Author: BtcDrak + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0105 Status: Draft Type: Standards Track Created: 2015-08-21 + License: PD
==Abstract== diff --git a/bip-0106.mediawiki b/bip-0106.mediawiki index 9f64f13bcc..399c725f3a 100644 --- a/bip-0106.mediawiki +++ b/bip-0106.mediawiki @@ -3,6 +3,8 @@ Layer: Consensus (hard fork) Title: Dynamically Controlled Bitcoin Block Size Max Cap Author: Upal Chakraborty + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0106 Status: Draft Type: Standards Track Created: 2015-08-24 diff --git a/bip-0107.mediawiki b/bip-0107.mediawiki index 440866a754..84cd6a62e7 100644 --- a/bip-0107.mediawiki +++ b/bip-0107.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (hard fork) Title: Dynamic limit on the block size Author: Washington Y. Sanchez + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0107 Status: Draft Type: Standards Track Created: 2015-09-11 + License: PD
==Abstract== diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki index 6de37abf54..04ae5ea89b 100644 --- a/bip-0109.mediawiki +++ b/bip-0109.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (hard fork) Title: Two million byte size limit with sigop and sighash limits Author: Gavin Andresen + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0109 Status: Draft Type: Standards Track Created: 2016-01-28 + License: PD
==Abstract== diff --git a/bip-0111.mediawiki b/bip-0111.mediawiki index 7e20e658cc..cb5028f5e0 100644 --- a/bip-0111.mediawiki +++ b/bip-0111.mediawiki @@ -4,9 +4,12 @@ Title: NODE_BLOOM service bit Author: Matt Corallo Peter Todd - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0111 + Status: Proposed Type: Standards Track Created: 2015-08-20 + License: PD
== Abstract == diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki index fb7366471d..65171a4b56 100644 --- a/bip-0112.mediawiki +++ b/bip-0112.mediawiki @@ -5,9 +5,12 @@ Author: BtcDrak Mark Friedenbach Eric Lombrozo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0112 Status: Final Type: Standards Track Created: 2015-08-10 + License: PD
==Abstract== diff --git a/bip-0113.mediawiki b/bip-0113.mediawiki index 8842e63ce4..368677715b 100644 --- a/bip-0113.mediawiki +++ b/bip-0113.mediawiki @@ -4,9 +4,12 @@ Title: Median time-past as endpoint for lock-time calculations Author: Thomas Kerin Mark Friedenbach + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0113 Status: Final Type: Standards Track Created: 2015-08-10 + License: PD
diff --git a/bip-0114.mediawiki b/bip-0114.mediawiki index 1838c56ed0..21d0b6cc54 100644 --- a/bip-0114.mediawiki +++ b/bip-0114.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (soft fork) Title: Merkelized Abstract Syntax Tree Author: Johnson Lau + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0114 Status: Draft Type: Standards Track Created: 2016-04-02 + License: PD
==Abstract== diff --git a/bip-0120.mediawiki b/bip-0120.mediawiki index 89be19a70d..d48cdfac08 100644 --- a/bip-0120.mediawiki +++ b/bip-0120.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Proof of Payment Author: Kalle Rosenbaum + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0120 Status: Draft Type: Standards Track Created: 2015-07-28 diff --git a/bip-0121.mediawiki b/bip-0121.mediawiki index f0aaf343d5..34820f5fa7 100644 --- a/bip-0121.mediawiki +++ b/bip-0121.mediawiki @@ -3,6 +3,8 @@ Layer: Applications Title: Proof of Payment URI scheme Author: Kalle Rosenbaum + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0121 Status: Draft Type: Standards Track Created: 2015-07-27 diff --git a/bip-0122.mediawiki b/bip-0122.mediawiki index 0457f73ce0..3fb5df870c 100644 --- a/bip-0122.mediawiki +++ b/bip-0122.mediawiki @@ -3,9 +3,12 @@ Layer: Applications Title: URI scheme for Blockchain references / exploration Author: Marco Pontello + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0122 Status: Draft Type: Standards Track Created: 2015-08-29 + License: PD Post-History: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010712.html
diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki index 3f3f5e62d2..d438322a76 100644 --- a/bip-0123.mediawiki +++ b/bip-0123.mediawiki @@ -2,6 +2,8 @@ BIP: 123 Title: BIP Classification Author: Eric Lombrozo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0123 Status: Active Type: Process Created: 2015-08-26 diff --git a/bip-0124.mediawiki b/bip-0124.mediawiki index ea1c72dfaf..a5929ac0cd 100644 --- a/bip-0124.mediawiki +++ b/bip-0124.mediawiki @@ -4,9 +4,12 @@ Title: Hierarchical Deterministic Script Templates Author: Eric Lombrozo William Swanson + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0124 Status: Draft Type: Informational Created: 2015-11-20 + License: PD Post-History: http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-November/011795.html
diff --git a/bip-0125.mediawiki b/bip-0125.mediawiki index 7773c7b694..a4b0279cf0 100644 --- a/bip-0125.mediawiki +++ b/bip-0125.mediawiki @@ -4,9 +4,12 @@ Title: Opt-in Full Replace-by-Fee Signaling Author: David A. Harding Peter Todd - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0125 + Status: Proposed Type: Standards Track Created: 2015-12-04 + License: PD
==Abstract== diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki index 43722d0d46..f498b1cb33 100644 --- a/bip-0126.mediawiki +++ b/bip-0126.mediawiki @@ -2,9 +2,12 @@ BIP: 126 Title: Best Practices for Heterogeneous Input Script Transactions Author: Kristov Atlas + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0126 Status: Draft Type: Informational Created: 2016-02-10 + License: PD
==Abstract== diff --git a/bip-0130.mediawiki b/bip-0130.mediawiki index 9f5365b7d8..8d96c0c8a3 100644 --- a/bip-0130.mediawiki +++ b/bip-0130.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: sendheaders message Author: Suhas Daftuar - Status: Accepted + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0130 + Status: Proposed Type: Standards Track Created: 2015-05-08 + License: PD
==Abstract== diff --git a/bip-0131.mediawiki b/bip-0131.mediawiki index 2a1699c5ff..5938138b66 100644 --- a/bip-0131.mediawiki +++ b/bip-0131.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (hard fork) Title: "Coalescing Transaction" Specification (wildcard inputs) Author: Chris Priest + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0131 Status: Draft Type: Standards Track Created: 2015-11-30 + License: PD
==Abstract== diff --git a/bip-0132.mediawiki b/bip-0132.mediawiki index 03cc83498a..e7aed29248 100644 --- a/bip-0132.mediawiki +++ b/bip-0132.mediawiki @@ -2,9 +2,12 @@ BIP: 132 Title: Committee-based BIP Acceptance Process Author: Andy Chase + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0132 Status: Withdrawn Type: Process Created: 2015-08-31 + License: PD
== Abstract == diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki index bebba7e57b..c109f12ff9 100644 --- a/bip-0133.mediawiki +++ b/bip-0133.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: feefilter message Author: Alex Morcos + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0133 Status: Draft Type: Standards Track Created: 2016-02-13 + License: PD
==Abstract== diff --git a/bip-0134.mediawiki b/bip-0134.mediawiki index eb3cab6214..9adc8b54db 100644 --- a/bip-0134.mediawiki +++ b/bip-0134.mediawiki @@ -3,9 +3,13 @@ Layer: Consensus (hard fork) Title: Flexible Transactions Author: Tom Zander + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0134 Status: Draft Type: Standards Track Created: 2016-07-27 + License: CC-BY-SA-4.0 + OPL
==Abstract== diff --git a/bip-0140.mediawiki b/bip-0140.mediawiki index 71637f27e9..ea5061fe4a 100644 --- a/bip-0140.mediawiki +++ b/bip-0140.mediawiki @@ -3,10 +3,14 @@ Layer: Consensus (soft fork) Title: Normalized TXID Author: Christian Decker + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0140 Status: Draft Type: Standards Track Created: 2015-10-14 + License: PD
+ == Abstract == This BIP describes the use of normalized transaction IDs (NTXIDs) in order to eliminate transaction malleability, both in the third-party modification scenario as well as the participant modification scenario. The transaction ID is normalized by removing the signature scripts from transactions before computing its hash. The normalized transaction hashes are then used during the signature creation and signature verification of dependent transactions. diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 4a90ff00c4..7cc587a28f 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -5,9 +5,12 @@ Author: Eric Lombrozo Johnson Lau Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0141 Status: Draft Type: Standards Track Created: 2015-12-21 + License: PD
==Abstract== diff --git a/bip-0142.mediawiki b/bip-0142.mediawiki index 8713454852..80a413f28b 100644 --- a/bip-0142.mediawiki +++ b/bip-0142.mediawiki @@ -3,9 +3,12 @@ Layer: Applications Title: Address Format for Segregated Witness Author: Johnson Lau + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0142 Status: Deferred Type: Standards Track Created: 2015-12-24 + License: PD
== Abstract == diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki index dc6fbfefa5..476b84da5a 100644 --- a/bip-0143.mediawiki +++ b/bip-0143.mediawiki @@ -4,9 +4,12 @@ Title: Transaction Signature Verification for Version 0 Witness Program Author: Johnson Lau Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0143 Status: Draft Type: Standards Track Created: 2016-01-03 + License: PD
== Abstract == diff --git a/bip-0144.mediawiki b/bip-0144.mediawiki index 4e42823879..8e65554c67 100644 --- a/bip-0144.mediawiki +++ b/bip-0144.mediawiki @@ -4,9 +4,12 @@ Title: Segregated Witness (Peer Services) Author: Eric Lombrozo Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0144 Status: Draft Type: Standards Track Created: 2016-01-08 + License: PD
==Abstract== diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki index d26b64643e..a7ace987ae 100644 --- a/bip-0145.mediawiki +++ b/bip-0145.mediawiki @@ -3,9 +3,13 @@ Layer: API/RPC Title: getblocktemplate Updates for Segregated Witness Author: Luke Dashjr + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0145 Status: Draft Type: Standards Track Created: 2016-01-30 + License: BSD-2-Clause + OPL
==Abstract== diff --git a/bip-0146.mediawiki b/bip-0146.mediawiki index 635c015ada..240f82a0f4 100644 --- a/bip-0146.mediawiki +++ b/bip-0146.mediawiki @@ -4,9 +4,12 @@ Title: Dealing with signature encoding malleability Author: Johnson Lau Pieter Wuille + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0146 Status: Draft Type: Standards Track Created: 2016-08-16 + License: PD
==Abstract== diff --git a/bip-0147.mediawiki b/bip-0147.mediawiki index 4a1aa87dcc..8a5c67ac90 100644 --- a/bip-0147.mediawiki +++ b/bip-0147.mediawiki @@ -3,9 +3,12 @@ Layer: Consensus (soft fork) Title: Dealing with dummy stack element malleability Author: Johnson Lau + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0147 Status: Draft Type: Standards Track Created: 2016-09-02 + License: PD
==Abstract== diff --git a/bip-0150.mediawiki b/bip-0150.mediawiki index 161a66156c..e3f74f5228 100644 --- a/bip-0150.mediawiki +++ b/bip-0150.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: Peer Authentication Author: Jonas Schnelli + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0150 Status: Draft Type: Standards Track Created: 2016-03-23 + License: PD
== Abstract == diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index 19ac196c14..228f66dc3d 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: Peer-to-Peer Communication Encryption Author: Jonas Schnelli + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0151 Status: Draft Type: Standards Track Created: 2016-03-23 + License: PD
== Abstract == diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 169cb6be5b..221140908b 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -3,9 +3,12 @@ Layer: Peer Services Title: Compact Block Relay Author: Matt Corallo + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0152 Status: Draft Type: Standards Track Created: 2016-04-27 + License: PD
==Abstract== diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index dbd42d9c4b..ca2f4b8b5e 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -9,12 +9,17 @@ BIP => undef, Title => undef, Author => undef, + 'Comments-Summary' => undef, + 'Comments-URI' => undef, Status => undef, Type => undef, Created => undef, + # License => undef, (has exceptions) ); my %MayHaveMulti = ( Author => undef, + 'Comments-URI' => undef, + License => undef, 'Post-History' => undef, ); my %DateField = ( @@ -25,11 +30,11 @@ Editor => undef, ); my %MiscField = ( + 'Comments-Summary' => undef, 'Discussions-To' => undef, 'Post-History' => undef, 'Replaces' => undef, 'Superseded-By' => undef, - 'Resolution' => undef, ); my %ValidLayer = ( @@ -42,7 +47,7 @@ my %ValidStatus = ( Draft => undef, Deferred => undef, - Accepted => "background-color: #ffffcf", + Proposed => "background-color: #ffffcf", Rejected => "background-color: #ffcfcf", Withdrawn => "background-color: #ffcfcf", Final => "background-color: #cfffcf", @@ -54,6 +59,34 @@ 'Informational' => undef, 'Process' => undef, ); +my %RecommendedLicenses = ( + 'BSD-2-Clause' => undef, + 'BSD-3-Clause' => undef, + 'CC0-1.0' => undef, + 'GNU-All-Permissive' => undef, +); +my %AcceptableLicenses = ( + %RecommendedLicenses, + 'Apache-2.0' => undef, + 'BSL-1.0' => undef, + 'CC-BY-4.0' => undef, + 'CC-BY-SA-4.0' => undef, + 'MIT' => undef, + 'AGPL-3.0' => undef, + 'AGPL-3.0+' => undef, + 'FDL-1.3' => undef, + 'GPL-2.0' => undef, + 'GPL-2.0+' => undef, + 'LGPL-2.1' => undef, + 'LGPL-2.1+' => undef, +); +my %DefinedLicenses = ( + %AcceptableLicenses, + 'OPL' => undef, + 'PD' => undef, +); +my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 69 74 80 81 83 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152); +my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 17 18 19 20 21 22 23 30 31 32 33 34 35 39 43 44 45 47 61 62 64 66 67 68 70 71 72 73 75 101 102 103 106 120 121 123); my %emails; @@ -114,6 +147,15 @@ } elsif ($field eq 'Layer') { # BIP 123 die "Invalid layer $val in $fn" unless exists $ValidLayer{$val}; $layer = $val; + } elsif ($field eq 'License') { + die "Undefined license $val in $fn" unless exists $DefinedLicenses{$val}; + if (not $found{License}) { + die "Unacceptable license $val in $fn" unless exists $AcceptableLicenses{$val} or ($val eq 'PD' and exists $GrandfatheredPD{$bipnum}); + } + } elsif ($field eq 'Comments-URI') { + if (not $found{'Comments-URI'}) { + die unless $val eq sprintf('https://github.com/bitcoin/bips/wiki/Comments:BIP-%04d', $bipnum); + } } elsif (exists $DateField{$field}) { die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/; } elsif (exists $EmailField{$field}) { @@ -122,6 +164,9 @@ die "Unknown field $field in $fn"; } } + if (not $found{License}) { + die "Missing License in $fn" unless exists $TolerateMissingLicense{$bipnum}; + } for my $field (keys %RequiredFields) { die "Missing $field in $fn" unless $found{$field}; } From 395262bd1d26263b0105b5ac96782b3f3cf3bf71 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Nov 2016 10:09:54 +0000 Subject: [PATCH 0518/2326] BIPs 17, 18, 19, 20, 22, and 23: Add missing Copyright section --- bip-0017.mediawiki | 4 ++++ bip-0018.mediawiki | 4 ++++ bip-0019.mediawiki | 4 ++++ bip-0020.mediawiki | 3 +++ bip-0022.mediawiki | 4 ++++ bip-0023.mediawiki | 4 ++++ 6 files changed, 23 insertions(+) diff --git a/bip-0017.mediawiki b/bip-0017.mediawiki index 44011d5790..3863487922 100644 --- a/bip-0017.mediawiki +++ b/bip-0017.mediawiki @@ -11,6 +11,10 @@ This BIP describes a new opcode (OP_CHECKHASHVERIFY) for the Bitcoin scripting system, and a new 'standard' transaction type that uses it to enables the receiver of bitcoins to specify the transaction type needed to re-spend them. +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + ==Motivation== The purpose of pay-to-script-hash is to move the responsibility for supplying the conditions to redeem a transaction from the sender of the funds to the redeemer. diff --git a/bip-0018.mediawiki b/bip-0018.mediawiki index fce42004e4..15e4418733 100644 --- a/bip-0018.mediawiki +++ b/bip-0018.mediawiki @@ -11,6 +11,10 @@ This BIP modifies the basic format of transaction inputs and outputs, replacing the current scriptSig and scriptPubKey (scripts executed to validate a transaction) with new contents: dataSig, scriptCheck, and hashScriptCheck. +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + ==Motivation== The purpose of pay-to-script-hash is to move the responsibility for supplying the conditions to redeem a transaction from the sender of the funds to the redeemer. diff --git a/bip-0019.mediawiki b/bip-0019.mediawiki index 7784e084a8..228fdc837c 100644 --- a/bip-0019.mediawiki +++ b/bip-0019.mediawiki @@ -11,6 +11,10 @@ This BIP proposes M-of-N-signatures required transactions as a new 'standard' transaction type using the existing scripting system without significant modifications. +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + ==Motivation== Enable secured wallets, escrow transactions, and other use cases where redeeming funds requires more than a single signature. diff --git a/bip-0020.mediawiki b/bip-0020.mediawiki index fad634b76d..ff7fdedd60 100644 --- a/bip-0020.mediawiki +++ b/bip-0020.mediawiki @@ -12,6 +12,9 @@ BIP 0020 is based off an earlier document by Nils Schneider. '''And has been rep ==Abstract== This BIP proposes a URI scheme for making Bitcoin payments. +==Copyright== +This BIP is licensed under the BSD 2-clause license. + ==Motivation== The purpose of this URI scheme is to enable users to easily make payments by simply clicking links on webpages or scanning QR Codes. diff --git a/bip-0022.mediawiki b/bip-0022.mediawiki index 4b33e59529..82a13bfcf7 100644 --- a/bip-0022.mediawiki +++ b/bip-0022.mediawiki @@ -12,6 +12,10 @@ This BIP describes a new JSON-RPC method for "smart" Bitcoin miners and proxies. Instead of sending a simple block header for hashing, the entire block structure is sent, and left to the miner to (optionally) customize and assemble. +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + ==Specification== ===Block Template Request=== diff --git a/bip-0023.mediawiki b/bip-0023.mediawiki index 03909587f6..1c7e721b88 100644 --- a/bip-0023.mediawiki +++ b/bip-0023.mediawiki @@ -11,6 +11,10 @@ This BIP describes extensions to the getblocktemplate JSON-RPC call to enhance pooled mining. +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + ==Specification== Note that all sections of this specification are optional extensions on top of [[bip-0022.mediawiki|BIP 22]]. From 148988067a7298dcb03335b1a5be8fe4e21c2f1e Mon Sep 17 00:00:00 2001 From: Ruben de Vries Date: Wed, 30 Nov 2016 17:48:54 +0100 Subject: [PATCH 0519/2326] add Copyright to BIP67 --- bip-0067.mediawiki | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki index 13e2ed9945..e266ab85fe 100644 --- a/bip-0067.mediawiki +++ b/bip-0067.mediawiki @@ -126,3 +126,8 @@ The authors wish to thank BtcDrak and Luke-Jr for their involvement & contributi == References == + + +== Copyright == +This document is placed in the public domain. + From 0fc3fe20ca138821f81cf454c0f0ed50e7c94229 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Wed, 30 Nov 2016 12:25:52 -0500 Subject: [PATCH 0520/2326] Emphasize code simplification over performance optimization --- bip-buried-deployments.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-buried-deployments.mediawiki b/bip-buried-deployments.mediawiki index 84e3f4d611..e539204986 100644 --- a/bip-buried-deployments.mediawiki +++ b/bip-buried-deployments.mediawiki @@ -3,14 +3,14 @@ BIP: ? Title: Buried deployments Author: Suhas Daftuar Status: Draft -Type: Standards Track +Type: Informational Created: 2016-11-08
==Abstract== -Prior soft forks (BIP 34, BIP 65, and BIP 66) were activated via miner signaling in block version numbers. Now that the chain has long since passed the blocks at which those consensus rules have triggered, we can (as a simplification and optimization) replace the trigger mechanism by caching the block heights at which those consensus rules became enforced. +Prior soft forks (BIP 34, BIP 65, and BIP 66) were activated via miner signaling in block version numbers. Now that the chain has long since passed the blocks at which those consensus rules have triggered, we can (as a simplification) replace the trigger mechanism by caching the block heights at which those consensus rules became enforced. ==Motivation== @@ -24,7 +24,7 @@ Note that this trigger mechanism is dependent on the chain history. To validate In addition, this mechanism for code deployments have been deprecated in favor of BIP 9 deployments, which offer several advantages (please see [https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki BIP 9]). -Thus we propose elimination of the logic implementing these kinds of deployments, by replacing the test which governs enforcement of BIP 34, BIP 65, and BIP 66 with simple height checks, which we choose to be the block height triggering the 95% activation rule on mainnet for each of those deployments. This simplification of the consensus rules would reduce the technical debt associated with deployment of those consensus changes and simultaneously provide a performance optimization. +Thus we propose elimination of the logic implementing these kinds of deployments, by replacing the test which governs enforcement of BIP 34, BIP 65, and BIP 66 with simple height checks, which we choose to be the block height triggering the 95% activation rule on mainnet for each of those deployments. This simplification of the consensus rules would reduce the technical debt associated with deployment of those consensus changes. ==Considerations== From 710a20ad331abcd64c01f114143fbb17dc47fae2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 30 Nov 2016 23:33:24 +0000 Subject: [PATCH 0521/2326] Update BIP 109 status Draft->Rejected All proponents of BIP 109 seem to agree it is dead --- README.mediawiki | 4 ++-- bip-0109.mediawiki | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index da18d6b321..f6d05c5d11 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -385,12 +385,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Washington Y. Sanchez | Standard | Draft -|- +|- style="background-color: #ffcfcf" | [[bip-0109.mediawiki|109]] | Two million byte size limit with sigop and sighash limits | Gavin Andresen | Standard -| Draft +| Rejected |- style="background-color: #ffffcf" | [[bip-0111.mediawiki|111]] | NODE_BLOOM service bit diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki index 667ef5f53a..bd37489cea 100644 --- a/bip-0109.mediawiki +++ b/bip-0109.mediawiki @@ -2,7 +2,7 @@ BIP: 109 Title: Two million byte size limit with sigop and sighash limits Author: Gavin Andresen - Status: Draft + Status: Rejected Type: Standards Track Created: 2016-01-28
From 5d21c93a681180b99da6b78e462f8fab245989ca Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 1 Dec 2016 08:56:40 -0500 Subject: [PATCH 0522/2326] Assign BIP90 and update README --- README.mediawiki | 6 ++++++ bip-buried-deployments.mediawiki => bip-0090.mediawiki | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) rename bip-buried-deployments.mediawiki => bip-0090.mediawiki (99%) diff --git a/README.mediawiki b/README.mediawiki index da18d6b321..3ac1078422 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -344,6 +344,12 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0090.mediawiki|90]] +| Buried Deployments +| Suhas Daftuar +| Informational +| Draft +|- | [[bip-0099.mediawiki|99]] | Motivation and deployment of consensus rule changes ([soft/hard]forks) | Jorge Timón diff --git a/bip-buried-deployments.mediawiki b/bip-0090.mediawiki similarity index 99% rename from bip-buried-deployments.mediawiki rename to bip-0090.mediawiki index e539204986..a8de9315c5 100644 --- a/bip-buried-deployments.mediawiki +++ b/bip-0090.mediawiki @@ -1,5 +1,5 @@
-BIP: ?
+BIP: 90
 Title: Buried deployments
 Author: Suhas Daftuar 
 Status: Draft

From 2bc2f060895ed43edd1553d74405d5ba2c0dcfae Mon Sep 17 00:00:00 2001
From: Suhas Daftuar 
Date: Thu, 1 Dec 2016 15:11:16 -0500
Subject: [PATCH 0523/2326] fix preamble

---
 bip-0090.mediawiki | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/bip-0090.mediawiki b/bip-0090.mediawiki
index a8de9315c5..342657c768 100644
--- a/bip-0090.mediawiki
+++ b/bip-0090.mediawiki
@@ -1,10 +1,10 @@
 
-BIP: 90
-Title: Buried deployments
-Author: Suhas Daftuar 
-Status: Draft
-Type: Informational
-Created: 2016-11-08
+  BIP: 90
+  Title: Buried Deployments
+  Author: Suhas Daftuar 
+  Status: Draft
+  Type: Informational
+  Created: 2016-11-08
 
From 9ec4be28087c129d057bc7fb58a3aa3085f118f7 Mon Sep 17 00:00:00 2001 From: Matt David Date: Fri, 2 Dec 2016 14:37:32 -0800 Subject: [PATCH 0524/2326] - Add CC-BY license for BIP75 --- bip-0075.mediawiki | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 878d708efc..feddb6cd00 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -21,6 +21,12 @@ This BIP is an extension to BIP 70 that provides two enhancements to the existin The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. +==Copyright== + + + +This BIP is licensed under CC BY. + ==Definitions== {| class="wikitable" | Sender || Entity wishing to transfer value that they control From aee228746d6710013cb9f35b25ccb9c3f97950c7 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 5 Dec 2016 13:55:40 -0800 Subject: [PATCH 0525/2326] Clarify SPV node usage. --- bip-0152.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index e05cc2acd1..69abf7c377 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -185,6 +185,8 @@ Compact blocks version 2 is almost identical to version 1, but supports segregat # As high-bandwidth mode permits relaying of CMPCTBLOCK messages prior to full validation (requiring only that the block header is valid before relay), nodes SHOULD NOT ban a peer for announcing a new block with a CMPCTBLOCK message that is invalid, but has a valid header. For avoidance of doubt, nodes SHOULD bump their peer-to-peer protocol version to 70015 or higher to signal that they will not ban or punish a peer for announcing compact blocks prior to full validation, and nodes SHOULD NOT announce a CMPCTBLOCK to a peer with a version number below 70015 before fully validating the block. +# SPV nodes which implement this spec must consider the implications of accepting blocks which were not validated by the node which provided them. Especially SPV nodes which allow users to select a "trusted full node" to sync from may wish to avoid implementing this spec in high-bandwidth mode. + ==Justification== ====Protocol design==== From 8102d5f5afd0567662d46e6b2646749c7051ba24 Mon Sep 17 00:00:00 2001 From: paveljanik Date: Thu, 8 Dec 2016 10:20:04 +0100 Subject: [PATCH 0526/2326] Fix typos --- bip-0152.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 69abf7c377..109bbb3e29 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -120,18 +120,18 @@ A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages are adde # MSG_CMPCT_BLOCK inv objects MUST NOT appear anywhere except for in getdata messages. ====cmpctblock==== -# The cmpctblock message is defined as as a message containing a serialized HeaderAndShortIDs message and pchCommand == "cmpctblock". +# The cmpctblock message is defined as a message containing a serialized HeaderAndShortIDs message and pchCommand == "cmpctblock". # Upon receipt of a cmpctblock message after sending a sendcmpct message, nodes SHOULD calculate the short transaction ID for each unconfirmed transaction they have available (ie in their mempool) and compare each to each short transaction ID in the cmpctblock message. # After finding already-available transactions, nodes which do not have all transactions available to reconstruct the full block SHOULD request the missing transactions using a getblocktxn message. # A node MUST NOT send a cmpctblock message unless they are able to respond to a getblocktxn message which requests every transaction in the block. # A node MUST NOT send a cmpctblock message without having validated that the header properly commits to each transaction in the block, and properly builds on top of the existing chain with a valid proof-of-work. A node MAY send a cmpctblock before validating that each transaction in the block validly spends existing UTXO set entries. ====getblocktxn==== -# The getblocktxn message is defined as as a message containing a serialized BlockTransactionsRequest message and pchCommand == "getblocktxn". +# The getblocktxn message is defined as a message containing a serialized BlockTransactionsRequest message and pchCommand == "getblocktxn". # Upon receipt of a properly-formatted getblocktxn message, nodes which recently provided the sender of such a message a cmpctblock for the block hash identified in this message MUST respond with either an appropriate blocktxn message, or a full block message. A blocktxn response MUST contain exactly and only each transaction which is present in the appropriate block at the index specified in the getblocktxn indexes list, in the order requested. ====blocktxn==== -# The blocktxn message is defined as as a message containing a serialized BlockTransactions message and pchCommand == "blocktxn". +# The blocktxn message is defined as a message containing a serialized BlockTransactions message and pchCommand == "blocktxn". # Upon receipt of a properly-formatted requested blocktxn message, nodes SHOULD attempt to reconstruct the full block by: ## Taking the prefilledtxn transactions from the original cmpctblock and placing them in the marked positions. ## For each short transaction ID from the original cmpctblock, in order, find the corresponding transaction either from the blocktxn message or from other sources and place it in the first available position in the block. From b8c29597830995b9ac269c2c649efa1d4aafad99 Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 14 Dec 2016 13:55:49 -0800 Subject: [PATCH 0527/2326] - Update CC-BY version to specify 4.0 --- bip-0075.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index feddb6cd00..55f8167d22 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -23,9 +23,9 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ==Copyright== - + -This BIP is licensed under CC BY. +This work is licensed under a [[http://creativecommons.org/licenses/by/4.0/|Creative Commons Attribution 4.0 International License]]. ==Definitions== {| class="wikitable" From 42770fb6194f0e55a7e7139cf7fe97f5c8f84f4e Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 15 Dec 2016 04:20:10 +0000 Subject: [PATCH 0528/2326] Bugfix: scripts/buildtable: Increment found marker *after* processing the header --- scripts/buildtable.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index ca2f4b8b5e..c2392af350 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -115,7 +115,6 @@ } else { die "Bad line in $fn preamble"; } - ++$found{$field}; die "Extra spaces in $fn" if $val =~ /^\s/; if ($field eq 'BIP') { die "$fn claims to be BIP $val" if $val ne $bipnum; @@ -163,6 +162,7 @@ } elsif (not exists $MiscField{$field}) { die "Unknown field $field in $fn"; } + ++$found{$field}; } if (not $found{License}) { die "Missing License in $fn" unless exists $TolerateMissingLicense{$bipnum}; From 183852337bc9538ca5901fdc20a6f7e7ca288901 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 15 Dec 2016 05:04:28 +0000 Subject: [PATCH 0529/2326] README: Include BIP Layers in index --- README.mediawiki | 92 +++++++++++++++++++++++++++++++++++++++++++ scripts/buildtable.pl | 2 +- 2 files changed, 93 insertions(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index a5bed78d46..3ffa466569 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -8,222 +8,259 @@ Those proposing changes should consider that ultimately consent may rest with th {| class="wikitable sortable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" !Number +!Layer !Title !Owner !Type !Status |- style="background-color: #ffcfcf" | [[bip-0001.mediawiki|1]] +| | BIP Purpose and Guidelines | Amir Taaki | Process | Replaced |- style="background-color: #cfffcf" | [[bip-0002.mediawiki|2]] +| | BIP process, revised | Luke Dashjr | Process | Active |- style="background-color: #cfffcf" | [[bip-0009.mediawiki|9]] +| | Version bits with timeout and delay | Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell | Informational | Final |- style="background-color: #ffcfcf" | [[bip-0010.mediawiki|10]] +| Applications | Multi-Sig Transaction Distribution | Alan Reiner | Informational | Withdrawn |- style="background-color: #cfffcf" | [[bip-0011.mediawiki|11]] +| Applications | M-of-N Standard Transactions | Gavin Andresen | Standard | Final |- style="background-color: #ffcfcf" | [[bip-0012.mediawiki|12]] +| Consensus (soft fork) | OP_EVAL | Gavin Andresen | Standard | Withdrawn |- style="background-color: #cfffcf" | [[bip-0013.mediawiki|13]] +| Applications | Address Format for pay-to-script-hash | Gavin Andresen | Standard | Final |- style="background-color: #cfffcf" | [[bip-0014.mediawiki|14]] +| Peer Services | Protocol Version and User Agent | Amir Taaki, Patrick Strateman | Standard | Final |- | [[bip-0015.mediawiki|15]] +| Applications | Aliases | Amir Taaki | Standard | Deferred |- style="background-color: #cfffcf" | [[bip-0016.mediawiki|16]] +| Consensus (soft fork) | Pay to Script Hash | Gavin Andresen | Standard | Final |- style="background-color: #ffcfcf" | [[bip-0017.mediawiki|17]] +| Consensus (soft fork) | OP_CHECKHASHVERIFY (CHV) | Luke Dashjr | Standard | Withdrawn |- style="background-color: #ffffcf" | [[bip-0018.mediawiki|18]] +| Consensus (soft fork) | hashScriptCheck | Luke Dashjr | Standard | Proposed |- | [[bip-0019.mediawiki|19]] +| Applications | M-of-N Standard Transactions (Low SigOp) | Luke Dashjr | Standard | Draft |- style="background-color: #ffcfcf" | [[bip-0020.mediawiki|20]] +| Applications | URI Scheme | Luke Dashjr | Standard | Replaced |- style="background-color: #cfffcf" | [[bip-0021.mediawiki|21]] +| Applications | URI Scheme | Nils Schneider, Matt Corallo | Standard | Final |- style="background-color: #cfffcf" | [[bip-0022.mediawiki|22]] +| API/RPC | getblocktemplate - Fundamentals | Luke Dashjr | Standard | Final |- style="background-color: #cfffcf" | [[bip-0023.mediawiki|23]] +| API/RPC | getblocktemplate - Pooled Mining | Luke Dashjr | Standard | Final |- style="background-color: #cfffcf" | [[bip-0030.mediawiki|30]] +| Consensus (soft fork) | Duplicate transactions | Pieter Wuille | Standard | Final |- style="background-color: #cfffcf" | [[bip-0031.mediawiki|31]] +| Peer Services | Pong message | Mike Hearn | Standard | Final |- style="background-color: #cfffcf" | [[bip-0032.mediawiki|32]] +| Applications | Hierarchical Deterministic Wallets | Pieter Wuille | Informational | Final |- | [[bip-0033.mediawiki|33]] +| Peer Services | Stratized Nodes | Amir Taaki | Standard | Draft |- style="background-color: #cfffcf" | [[bip-0034.mediawiki|34]] +| Consensus (soft fork) | Block v2, Height in Coinbase | Gavin Andresen | Standard | Final |- style="background-color: #cfffcf" | [[bip-0035.mediawiki|35]] +| Peer Services | mempool message | Jeff Garzik | Standard | Final |- | [[bip-0036.mediawiki|36]] +| Peer Services | Custom Services | Stefan Thomas | Standard | Draft |- style="background-color: #cfffcf" | [[bip-0037.mediawiki|37]] +| Peer Services | Connection Bloom filtering | Mike Hearn, Matt Corallo | Standard | Final |- | [[bip-0038.mediawiki|38]] +| Applications | Passphrase-protected private key | Mike Caldwell, Aaron Voisine | Standard | Draft |- style="background-color: #ffffcf" | [[bip-0039.mediawiki|39]] +| Applications | Mnemonic code for generating deterministic keys | Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe | Standard | Proposed |- | 40 +| API/RPC | Stratum wire protocol | Marek Palatinus | Standard | BIP number allocated |- | 41 +| API/RPC | Stratum mining protocol | Marek Palatinus | Standard | BIP number allocated |- | [[bip-0042.mediawiki|42]] +| Consensus (soft fork) | A finite monetary supply for Bitcoin | Pieter Wuille | Standard | Draft |- | [[bip-0043.mediawiki|43]] +| Applications | Purpose Field for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Informational | Draft |- style="background-color: #ffffcf" | [[bip-0044.mediawiki|44]] +| Applications | Multi-Account Hierarchy for Deterministic Wallets | Marek Palatinus, Pavol Rusnak | Standard | Proposed |- style="background-color: #ffffcf" | [[bip-0045.mediawiki|45]] +| Applications | Structure for Deterministic P2SH Multisignature Wallets | Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia | Standard | Proposed |- | [[bip-0047.mediawiki|47]] +| Applications | Reusable Payment Codes for Hierarchical Deterministic Wallets | Justus Ranvier | Informational | Draft |- | [[bip-0049.mediawiki|49]] +| Applications | Derivation scheme for P2WPKH-nested-in-P2SH based accounts | Daniel Weigl | Informational | Draft |- style="background-color: #cfffcf" | [[bip-0050.mediawiki|50]] +| | March 2013 Chain Fork Post-Mortem | Gavin Andresen | Informational @@ -231,330 +268,385 @@ Those proposing changes should consider that ultimately consent may rest with th |- | [[bip-0060.mediawiki|60]] +| Peer Services | Fixed Length "version" Message (Relay-Transactions Field) | Amir Taaki | Standard | Draft |- style="background-color: #cfffcf" | [[bip-0061.mediawiki|61]] +| Peer Services | Reject P2P message | Gavin Andresen | Standard | Final |- style="background-color: #ffcfcf" | [[bip-0062.mediawiki|62]] +| Consensus (soft fork) | Dealing with malleability | Pieter Wuille | Standard | Withdrawn |- | 63 +| Applications | Stealth Addresses | Peter Todd | Standard | BIP number allocated |- | [[bip-0064.mediawiki|64]] +| Peer Services | getutxo message | Mike Hearn | Standard | Draft |- style="background-color: #cfffcf" | [[bip-0065.mediawiki|65]] +| Consensus (soft fork) | OP_CHECKLOCKTIMEVERIFY | Peter Todd | Standard | Final |- style="background-color: #cfffcf" | [[bip-0066.mediawiki|66]] +| Consensus (soft fork) | Strict DER signatures | Pieter Wuille | Standard | Final |- style="background-color: #ffffcf" | [[bip-0067.mediawiki|67]] +| Applications | Deterministic Pay-to-script-hash multi-signature addresses through public key sorting | Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries | Standard | Proposed |- style="background-color: #cfffcf" | [[bip-0068.mediawiki|68]] +| Consensus (soft fork) | Relative lock-time using consensus-enforced sequence numbers | Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona | Standard | Final |- style="background-color: #ffffcf" | [[bip-0069.mediawiki|69]] +| Applications | Lexicographical Indexing of Transaction Inputs and Outputs | Kristov Atlas | Informational | Proposed |- style="background-color: #cfffcf" | [[bip-0070.mediawiki|70]] +| Applications | Payment Protocol | Gavin Andresen, Mike Hearn | Standard | Final |- style="background-color: #cfffcf" | [[bip-0071.mediawiki|71]] +| Applications | Payment Protocol MIME types | Gavin Andresen | Standard | Final |- style="background-color: #cfffcf" | [[bip-0072.mediawiki|72]] +| Applications | bitcoin: uri extensions for Payment Protocol | Gavin Andresen | Standard | Final |- style="background-color: #cfffcf" | [[bip-0073.mediawiki|73]] +| Applications | Use "Accept" header for response type negotiation with Payment Request URLs | Stephen Pair | Standard | Final |- | [[bip-0074.mediawiki|74]] +| Applications | Allow zero value OP_RETURN in Payment Protocol | Toby Padilla | Standard | Draft |- | [[bip-0075.mediawiki|75]] +| Applications | Out of Band Address Exchange using Payment Protocol Encryption | Justin Newton, Matt David, Aaron Voisine, James MacWhyte | Standard | Draft |- | [[bip-0080.mediawiki|80]] +| | Hierarchy for Non-Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational | Deferred |- | [[bip-0081.mediawiki|81]] +| | Hierarchy for Colored Voting Pool Deterministic Multisig Wallets | Justus Ranvier, Jimmy Song | Informational | Deferred |- | [[bip-0083.mediawiki|83]] +| Applications | Dynamic Hierarchical Deterministic Key Trees | Eric Lombrozo | Standard | Draft |- | [[bip-0090.mediawiki|90]] +| Consensus (hard fork) | Buried Deployments | Suhas Daftuar | Informational | Draft |- | [[bip-0099.mediawiki|99]] +| | Motivation and deployment of consensus rule changes ([soft/hard]forks) | Jorge Timón | Informational | Draft |- style="background-color: #ffcfcf" | [[bip-0101.mediawiki|101]] +| Consensus (hard fork) | Increase maximum block size | Gavin Andresen | Standard | Withdrawn |- | [[bip-0102.mediawiki|102]] +| Consensus (hard fork) | Block size increase to 2MB | Jeff Garzik | Standard | Draft |- | [[bip-0103.mediawiki|103]] +| Consensus (hard fork) | Block size following technological growth | Pieter Wuille | Standard | Draft |- | [[bip-0105.mediawiki|105]] +| Consensus (hard fork) | Consensus based block size retargeting algorithm | BtcDrak | Standard | Draft |- | [[bip-0106.mediawiki|106]] +| Consensus (hard fork) | Dynamically Controlled Bitcoin Block Size Max Cap | Upal Chakraborty | Standard | Draft |- | [[bip-0107.mediawiki|107]] +| Consensus (hard fork) | Dynamic limit on the block size | Washington Y. Sanchez | Standard | Draft |- style="background-color: #ffcfcf" | [[bip-0109.mediawiki|109]] +| Consensus (hard fork) | Two million byte size limit with sigop and sighash limits | Gavin Andresen | Standard | Rejected |- style="background-color: #ffffcf" | [[bip-0111.mediawiki|111]] +| Peer Services | NODE_BLOOM service bit | Matt Corallo, Peter Todd | Standard | Proposed |- style="background-color: #cfffcf" | [[bip-0112.mediawiki|112]] +| Consensus (soft fork) | CHECKSEQUENCEVERIFY | BtcDrak, Mark Friedenbach, Eric Lombrozo | Standard | Final |- style="background-color: #cfffcf" | [[bip-0113.mediawiki|113]] +| Consensus (soft fork) | Median time-past as endpoint for lock-time calculations | Thomas Kerin, Mark Friedenbach | Standard | Final |- | [[bip-0114.mediawiki|114]] +| Consensus (soft fork) | Merkelized Abstract Syntax Tree | Johnson Lau | Standard | Draft |- | [[bip-0120.mediawiki|120]] +| Applications | Proof of Payment | Kalle Rosenbaum | Standard | Draft |- | [[bip-0121.mediawiki|121]] +| Applications | Proof of Payment URI scheme | Kalle Rosenbaum | Standard | Draft |- | [[bip-0122.mediawiki|122]] +| Applications | URI scheme for Blockchain references / exploration | Marco Pontello | Standard | Draft |- style="background-color: #cfffcf" | [[bip-0123.mediawiki|123]] +| | BIP Classification | Eric Lombrozo | Process | Active |- | [[bip-0124.mediawiki|124]] +| Applications | Hierarchical Deterministic Script Templates | Eric Lombrozo, William Swanson | Informational | Draft |- style="background-color: #ffffcf" | [[bip-0125.mediawiki|125]] +| Applications | Opt-in Full Replace-by-Fee Signaling | David A. Harding, Peter Todd | Standard | Proposed |- | [[bip-0126.mediawiki|126]] +| | Best Practices for Heterogeneous Input Script Transactions | Kristov Atlas | Informational | Draft |- style="background-color: #ffffcf" | [[bip-0130.mediawiki|130]] +| Peer Services | sendheaders message | Suhas Daftuar | Standard | Proposed |- | [[bip-0131.mediawiki|131]] +| Consensus (hard fork) | "Coalescing Transaction" Specification (wildcard inputs) | Chris Priest | Standard | Draft |- style="background-color: #ffcfcf" | [[bip-0132.mediawiki|132]] +| | Committee-based BIP Acceptance Process | Andy Chase | Process | Withdrawn |- | [[bip-0133.mediawiki|133]] +| Peer Services | feefilter message | Alex Morcos | Standard | Draft |- | [[bip-0134.mediawiki|134]] +| Consensus (hard fork) | Flexible Transactions | Tom Zander | Standard | Draft |- | [[bip-0140.mediawiki|140]] +| Consensus (soft fork) | Normalized TXID | Christian Decker | Standard | Draft |- | [[bip-0141.mediawiki|141]] +| Consensus (soft fork) | Segregated Witness (Consensus layer) | Eric Lombrozo, Johnson Lau, Pieter Wuille | Standard | Draft |- | [[bip-0142.mediawiki|142]] +| Applications | Address Format for Segregated Witness | Johnson Lau | Standard | Deferred |- | [[bip-0143.mediawiki|143]] +| Consensus (soft fork) | Transaction Signature Verification for Version 0 Witness Program | Johnson Lau, Pieter Wuille | Standard | Draft |- | [[bip-0144.mediawiki|144]] +| Peer Services | Segregated Witness (Peer Services) | Eric Lombrozo, Pieter Wuille | Standard | Draft |- | [[bip-0145.mediawiki|145]] +| API/RPC | getblocktemplate Updates for Segregated Witness | Luke Dashjr | Standard | Draft |- | [[bip-0146.mediawiki|146]] +| Consensus (soft fork) | Dealing with signature encoding malleability | Johnson Lau, Pieter Wuille | Standard | Draft |- | [[bip-0147.mediawiki|147]] +| Consensus (soft fork) | Dealing with dummy stack element malleability | Johnson Lau | Standard | Draft |- | [[bip-0150.mediawiki|150]] +| Peer Services | Peer Authentication | Jonas Schnelli | Standard | Draft |- | [[bip-0151.mediawiki|151]] +| Peer Services | Peer-to-Peer Communication Encryption | Jonas Schnelli | Standard | Draft |- | [[bip-0152.mediawiki|152]] +| Peer Services | Compact Block Relay | Matt Corallo | Standard diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index fb49c67bbd..b869ef26e9 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -3,7 +3,7 @@ use warnings; my $topbip = 9999; -my $include_layer = 0; +my $include_layer = 1; my %RequiredFields = ( BIP => undef, From f51459368752ca3b2db881b6cd76108393e4478b Mon Sep 17 00:00:00 2001 From: Matt David Date: Wed, 21 Dec 2016 15:28:43 -0800 Subject: [PATCH 0530/2326] - Change "CBC" to GCM. This was missed during the original change from CBC to GCM --- bip-0075.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index 55f8167d22..85fc0d662f 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -326,13 +326,13 @@ For the following we assume the Sender already knows the Receiver's public key, * If '''pki_type''' is x509+sha256 and '''signature''' is valid for the serialized [[#InvoiceRequest|InvoiceRequest]] where signature is set to "", [[#InvoiceRequest|InvoiceRequest]] is VALID ===Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages=== -* Encrypt the serialized Payment Protocol message using AES-256-CBC setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] +* Encrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ECDH_Point_Generation_and_AES256_GCM_Mode_Setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]] * Create [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message * Set '''encrypted_message''' to be the encrypted value of the Payment Protocol message * '''version''' SHOULD be set to the highest version number the client understands (currently 1) * '''sender_public_key''' MUST be set to the public key of the Sender's EC keypair * '''receiver_public_key''' MUST be set to the public key of the Receiver's EC keypair -* '''nonce''' MUST be set to the nonce used in the AES-256-CBC encryption operation +* '''nonce''' MUST be set to the nonce used in the AES-256-GCM encryption operation * Set '''identifier''' to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message * Set '''signature''' to "" * Sign the serialized [[#EncryptedProtocolMessage|EncryptedProtocolMessage]] message with the communicating party's EC public key From f8a9db58c0081268dbf4b5b079339179eaad7524 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 1 Jan 2017 04:16:28 +0100 Subject: [PATCH 0531/2326] Clarify BIP 152 interaction with classic relay mechanisms --- bip-0152.mediawiki | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki index 69abf7c377..c548cd1a53 100644 --- a/bip-0152.mediawiki +++ b/bip-0152.mediawiki @@ -183,10 +183,16 @@ Compact blocks version 2 is almost identical to version 1, but supports segregat # Any undefined behavior in this spec may cause failure to transfer block to, peer disconnection by, or self-destruction by the receiving node. A node receiving non-minimally-encoded CompactSize encodings should make a best-effort to eat the sender's cat. +===Pre-Validation Relay and Consistency Considerations=== + # As high-bandwidth mode permits relaying of CMPCTBLOCK messages prior to full validation (requiring only that the block header is valid before relay), nodes SHOULD NOT ban a peer for announcing a new block with a CMPCTBLOCK message that is invalid, but has a valid header. For avoidance of doubt, nodes SHOULD bump their peer-to-peer protocol version to 70015 or higher to signal that they will not ban or punish a peer for announcing compact blocks prior to full validation, and nodes SHOULD NOT announce a CMPCTBLOCK to a peer with a version number below 70015 before fully validating the block. # SPV nodes which implement this spec must consider the implications of accepting blocks which were not validated by the node which provided them. Especially SPV nodes which allow users to select a "trusted full node" to sync from may wish to avoid implementing this spec in high-bandwidth mode. +# Note that this spec does not change the requirement that nodes only relay information about blocks which they have fully validated in response to GETDATA/GETHEADERS/GETBLOCKS/etc requests. Nodes which announce using CMPCTBLOCK message and then receive a request for associated block data SHOULD ensure that messages do not go unresponded to, and that the appropriate data is provided after the block has been validated, subject to standard message-response ordering requirements. Note that no requirement is added that the node respond to the request with the new block included in eg GETHEADERS or GETBLOCKS messages, but the node SHOULD re-announce the block using the associated announcement methods after validation has completed if it is not included in the original response. On the other hand, nodes SHOULD delay responding to GETDATA requests for the block until validation has completed, stalling all message processing for the associated peer. REJECT messages are not considered "responses" for the purpose of this section. + +# As a result of the above requirements, implementors may wish to consider the potential for the introduction of delays in responses while remote peers validate blocks, avoiding delay-causing requests where possible. + ==Justification== ====Protocol design==== From 7d94bb685bd14cd8fb119af9c42f26b3eafa359a Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 1 Jan 2017 12:29:10 +0000 Subject: [PATCH 0532/2326] BIP 75: Add License header --- bip-0075.mediawiki | 1 + scripts/buildtable.pl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki index b8c76e7744..2a6fdd580e 100644 --- a/bip-0075.mediawiki +++ b/bip-0075.mediawiki @@ -11,6 +11,7 @@ Status: Draft Type: Standards Track Created: 2015-11-20 + License: CC-BY-4.0
==Abstract== diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index b869ef26e9..981346b225 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -86,7 +86,7 @@ 'PD' => undef, ); my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 67 69 74 80 81 83 90 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152); -my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 30 31 32 33 34 35 39 43 44 45 47 61 62 64 66 68 70 71 72 73 75 101 102 103 106 120 121 123); +my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 30 31 32 33 34 35 39 43 44 45 47 61 62 64 66 68 70 71 72 73 101 102 103 106 120 121 123); my %emails; From d84186c01caa6728aff157b596908e8c5fdd2ad0 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Tue, 3 Jan 2017 17:07:37 -0600 Subject: [PATCH 0533/2326] 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 0534/2326] 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 cedf5531847d3051de3da937e8b7540dc890df5c Mon Sep 17 00:00:00 2001 From: Gregory Sanders Date: Fri, 13 Jan 2017 11:08:26 -0500 Subject: [PATCH 0535/2326] Slight clarification for replacement implementation --- bip-0125.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0125.mediawiki b/bip-0125.mediawiki index a4b0279cf0..b2e3cecc30 100644 --- a/bip-0125.mediawiki +++ b/bip-0125.mediawiki @@ -51,11 +51,11 @@ transaction) that spends one or more of the same inputs if, # The original transactions signal replaceability explicitly or through inheritance as described in the above Summary section. -# The replacement transaction pays an absolute higher fee than the sum paid by the original transactions. - # The replacement transaction does not contain any new unconfirmed inputs that did not previously appear in the mempool. (Unconfirmed inputs are inputs spending outputs from currently unconfirmed transactions.) -# The replacement transaction must pay for its own bandwidth in addition to the amount paid by the original transactions at or above the rate set by the node's minimum relay fee setting. For example, if the minimum relay fee is 1 satoshi/byte and the replacement transaction is 500 bytes total, then the replacement must pay a fee at least 500 satoshis higher than the sum of the originals. +# The replacement transaction pays an absolute fee of at least the sum paid by the original transactions. + +# The replacement transaction must also pay for its own bandwidth at or above the rate set by the node's minimum relay fee setting. For example, if the minimum relay fee is 1 satoshi/byte and the replacement transaction is 500 bytes total, then the replacement must pay a fee at least 500 satoshis higher than the sum of the originals. # The number of original transactions to be replaced and their descendant transactions which will be evicted from the mempool must not exceed a total of 100 transactions. From 2a9e9503cd8604d36f966b95005ef7a88ee979c6 Mon Sep 17 00:00:00 2001 From: "t.khan" Date: Fri, 13 Jan 2017 18:23:15 -0500 Subject: [PATCH 0536/2326] Create bip-tkhan-block75.mediawiki --- bip-tkhan-block75.mediawiki | 77 +++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 bip-tkhan-block75.mediawiki diff --git a/bip-tkhan-block75.mediawiki b/bip-tkhan-block75.mediawiki new file mode 100644 index 0000000000..c8f21cf425 --- /dev/null +++ b/bip-tkhan-block75.mediawiki @@ -0,0 +1,77 @@ +
+  BIP: ?
+  Layer: Consensus (hard fork)
+  Title: ‘Block75’ - Max block size like difficulty
+  Author: t.khan 
+  Comments-Summary: No comments yet.
+  Comments-URI: TBD
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-01-13
+  License:  BSD-2, GNU-AP
+
+ +==Abstract== + +Automatic adjustment of max block size with the target of keeping blocks 75% full, based on the average block size of the previous 2016 blocks. This would be done on the same schedule as difficulty. + +==Motivation== + +Blocks are already too full and cannot support further transaction growth. While SegWit and Lightning (and other off-chain solutions) will help, they will not solve this problem. + +Bitcoin needs a reasonably effective and predictable way of managing the maximum block size which allows moderate growth, keeps max block size as small as possible, and prevents wild swings in transaction fees. + +The every two-week and automatic adjustment of difficulty has proven to be a reasonably effective and predictable way of managing how quickly blocks are mined. It works well because humans aren’t involved (except for setting the original target of a 10 minute per block average), and therefore it isn’t political or contentious. It’s simply a response to changing network resources. + +It’s clear at this point that human beings should not be involved in the determination of max block size, just as they’re not involved in deciding the difficulty. Therefore, it is logical and consistent with Bitcoin’s design to implement a permanent solution which, as with the difficulty adjustment, is simply an automatic response to changing transaction volumes. With the target of keeping blocks 75% full on average, this is the goal of Block75. + + +==Specification== + +The max block size will be recalculated every 2016 blocks, along with difficulty, using Block75’s simple algorithm: + + +new max block size = x + (x * (AVERAGE_CAPACITY - TARGET_CAPACITY)) + + +* TARGET_CAPACITY = 0.75    //Block75's target of keeping blocks 75% full +* AVERAGE_CAPACITY = average percentage full of the last 2016 blocks, as a decimal +* x = current max block size + + +All code which generates/validates blocks or uses/references the current hardcoded limits will need to be changed to support Block75. + +==Rationale== + +The 75% full block target was selected because: +* it is the middle ground between blocks being too small (average 100% full) and blocks being unnecessarily large (average 50% full) +* it can handle short-term spikes in transaction volume of up to 33% +* it limits the growth of max block size to less than 25% over the previous period +* it will maintain average transaction fees at a stable level similar to that of May/June 2016 + +The 2016 block (~2 weeks) period was selected because: +* it has been shown to be reasonably adaptive to changing network resources (re: difficulty) +* the frequent and gradual adjustments that result will be relatively easy for miners and node operators to predict and adapt to, as any unforeseen consequences will be visible well in advance +* it minimizes any effect a malicious party could have in an attempt to manipulate max block size + +The Block75 algorithm will adjust the max block size up and down in response to transaction volume, including changes brought on by SegWit and Lightning. This is important as it will keep average transaction fees stable, thereby allowing miners and businesses using Bitcoin more certainty regarding future income/expenses. + +==Other solutions considered== +A hardcoded increase to max block size (2MB, 8MB, etc.), rejected because: +* only a temporary solution, whatever limit was chosen would inevitably become a problem again +* would cause transaction fees to vary wildly over time + +Allow miners to vote for max block size, rejected because: +* overly complex and political +* human involvement makes this slow to respond to changing transaction volumes +* focuses power over max block size to a relatively small group of people +* unpredictable transaction fees caused by this would create uncertainty in the ecosystem + +==Backward Compatibility== +This BIP is not backward compatible (hard fork). Any code which fully validates blocks must be upgraded prior to activation, as failure to do so will result in rejection of blocks over the current 1MB limit. + +==Activation== +To help negate some of the risks associated with a hard fork and to prevent a single relatively small mining pool from preventing Block75's adoption, activation would occur at the next difficulty adjustment once 900 of the last 1,000 blocks mined signal support and a grace period of 4,032 blocks (~1 month) has elapsed. + +==Copyright== +This BIP is dual-licensed under the BSD 2-clause license and the GNU All-Permissive License. From 95dfd21ea2a292a4a27b05988054753f80923d09 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 14 Jan 2017 07:03:49 +0000 Subject: [PATCH 0537/2326] scripts/buildtable: Check for extraneous spaces after header name --- scripts/buildtable.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index 981346b225..0de4a36643 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -107,6 +107,7 @@ $field = $1; $val = $2; die "Duplicate $field field in $fn" if exists $found{$field}; + die "Too many spaces in $fn" if $val =~ /^\s/; } elsif (m[^ ( +)(.*\S)$]) { die "Continuation of non-field in $fn" unless defined $field; die "Too many spaces in $fn" if length $1 != 2 + length $field; From 0262ba0288ead694442e45f5cefeabd21c965fa0 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 14 Jan 2017 07:02:41 +0000 Subject: [PATCH 0538/2326] BIP 104: Use ASCII quotes in Title --- bip-tkhan-block75.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-tkhan-block75.mediawiki b/bip-tkhan-block75.mediawiki index c8f21cf425..1aa91e86e8 100644 --- a/bip-tkhan-block75.mediawiki +++ b/bip-tkhan-block75.mediawiki @@ -1,7 +1,7 @@
   BIP: ?
   Layer: Consensus (hard fork)
-  Title: ‘Block75’ - Max block size like difficulty
+  Title: 'Block75' - Max block size like difficulty
   Author: t.khan 
   Comments-Summary: No comments yet.
   Comments-URI: TBD

From 5d80de82cf5a8d115ad1798b94618ca30d6cca0d Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 14 Jan 2017 07:03:16 +0000
Subject: [PATCH 0539/2326] BIP 104: Fix License header

---
 bip-tkhan-block75.mediawiki | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/bip-tkhan-block75.mediawiki b/bip-tkhan-block75.mediawiki
index 1aa91e86e8..69d966e4d9 100644
--- a/bip-tkhan-block75.mediawiki
+++ b/bip-tkhan-block75.mediawiki
@@ -8,7 +8,8 @@
   Status: Draft
   Type: Standards Track
   Created: 2017-01-13
-  License:  BSD-2, GNU-AP
+  License: BSD-2-Clause
+           GNU-All-Permissive
 
==Abstract== From 834db1b0fbcff8ca97c28192e33c6b49063adcb8 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 14 Jan 2017 07:01:54 +0000 Subject: [PATCH 0540/2326] Assign BIP 104 for Block75 --- README.mediawiki | 7 +++++++ bip-tkhan-block75.mediawiki => bip-0104.mediawiki | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) rename bip-tkhan-block75.mediawiki => bip-0104.mediawiki (98%) diff --git a/README.mediawiki b/README.mediawiki index 3ffa466569..1398ca383e 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -435,6 +435,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0104.mediawiki|104]] +| Consensus (hard fork) +| 'Block75' - Max block size like difficulty +| t.khan +| Standard +| Draft +|- | [[bip-0105.mediawiki|105]] | Consensus (hard fork) | Consensus based block size retargeting algorithm diff --git a/bip-tkhan-block75.mediawiki b/bip-0104.mediawiki similarity index 98% rename from bip-tkhan-block75.mediawiki rename to bip-0104.mediawiki index 69d966e4d9..00db9a3b94 100644 --- a/bip-tkhan-block75.mediawiki +++ b/bip-0104.mediawiki @@ -1,10 +1,10 @@
-  BIP: ?
+  BIP: 104
   Layer: Consensus (hard fork)
   Title: 'Block75' - Max block size like difficulty
   Author: t.khan 
   Comments-Summary: No comments yet.
-  Comments-URI: TBD
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0104
   Status: Draft
   Type: Standards Track
   Created: 2017-01-13

From 855eb2200406166032debb719a0eedf0ae4e3860 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Thu, 19 Jan 2017 19:55:44 +0000
Subject: [PATCH 0541/2326] BIPs 30, 32, 62, 66, and 103: License under
 BSD-2-Clause terms

[Thursday, January 19, 2017] [7:46:36 PM UTC]  sipa: if you get a minute, can you give me at least a text-"verbal" ACK for some copyright license to put on BIPs 30, 32, 62, 66, and 103 please? is BSD-2-Clause okay?
[Thursday, January 19, 2017] [7:47:01 PM UTC]     luke-jr: ACK on 2-clause BSD for 30,32,62,66,103
[Thursday, January 19, 2017] [7:47:13 PM UTC]     (and for any other BIPs I contributed to)
---
 bip-0030.mediawiki | 5 +++++
 bip-0032.mediawiki | 5 +++++
 bip-0062.mediawiki | 5 +++++
 bip-0066.mediawiki | 5 +++++
 bip-0103.mediawiki | 5 +++++
 5 files changed, 25 insertions(+)

diff --git a/bip-0030.mediawiki b/bip-0030.mediawiki
index 56ef3deef4..a63b737d5c 100644
--- a/bip-0030.mediawiki
+++ b/bip-0030.mediawiki
@@ -8,11 +8,16 @@
   Status: Final
   Type: Standards Track
   Created: 2012-02-22
+  License: BSD-2-Clause
 
==Abstract== This document gives a specification for dealing with duplicate transactions in the block chain, in an attempt to solve certain problems the reference implementations has with them. +==Copyright== + +This BIP is licensed under the 2-clause BSD license. + ==Motivation== So far, the Bitcoin reference implementation always assumed duplicate transactions (transactions with the same identifier) didn't exist. This is not true; in particular coinbases are easy to duplicate, and by building on duplicate coinbases, duplicate normal transactions are possible as well. Recently, an attack that exploits the reference implementation's dealing with duplicate transactions was described and demonstrated. It allows reverting fully-confirmed transactions to a single confirmation, making them vulnerable to become unspendable entirely. Another attack is possible that allows forking the block chain for a subset of the network. diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index 50964a2b65..a4c1b96bc6 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -14,6 +14,7 @@ RECENT CHANGES: Status: Final Type: Informational Created: 2012-02-11 + License: BSD-2-Clause
==Abstract== @@ -24,6 +25,10 @@ The specification is intended to set a standard for deterministic wallets that c 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. +==Copyright== + +This BIP is licensed under the 2-clause BSD license. + ==Motivation== The Bitcoin reference client uses randomly generated keys. In order to avoid the necessity for a backup after every transaction, (by default) 100 keys are cached in a pool of reserve keys. Still, these wallets are not intended to be shared and used on several systems simultaneously. They support hiding their private keys by using the wallet encrypt feature and not sharing the password, but such "neutered" wallets lose the power to generate public keys as well. diff --git a/bip-0062.mediawiki b/bip-0062.mediawiki index deff62b81a..7dd2b5b6db 100644 --- a/bip-0062.mediawiki +++ b/bip-0062.mediawiki @@ -10,12 +10,17 @@ Status: Withdrawn Type: Standards Track Created: 2014-03-12 + License: BSD-2-Clause
==Abstract== This document specifies proposed changes to the Bitcoin transaction validity rules in order to make malleability of transactions impossible (at least when the sender doesn't choose to avoid it). +==Copyright== + +This BIP is licensed under the 2-clause BSD license. + ==Motivation== As of february 2014, Bitcoin transactions are malleable in multiple ways. This means a (valid) transaction can be modified in-flight, without invalidating it, but without access to the relevant private keys. diff --git a/bip-0066.mediawiki b/bip-0066.mediawiki index d2ab1893cf..a47c82dbe7 100644 --- a/bip-0066.mediawiki +++ b/bip-0066.mediawiki @@ -8,12 +8,17 @@ Status: Final Type: Standards Track Created: 2015-01-10 + License: BSD-2-Clause
==Abstract== This document specifies proposed changes to the Bitcoin transaction validity rules to restrict signatures to strict DER encoding. +==Copyright== + +This BIP is licensed under the 2-clause BSD license. + ==Motivation== Bitcoin's reference implementation currently relies on OpenSSL for signature validation, which means it is implicitly defining Bitcoin's block validity rules. Unfortunately, OpenSSL is not designed for consensus-critical behaviour (it does not guarantee bug-for-bug compatibility between versions), and thus changes to it can - and have - affected Bitcoin software. diff --git a/bip-0103.mediawiki b/bip-0103.mediawiki index 7cef84a163..36bb87f886 100644 --- a/bip-0103.mediawiki +++ b/bip-0103.mediawiki @@ -8,12 +8,17 @@ Status: Draft Type: Standards Track Created: 2015-07-21 + License: BSD-2-Clause
==Abstract== This BIP proposes a block size growth intended to accommodate for hardware and other technological improvements for the foreseeable future. +==Copyright== + +This BIP is licensed under the 2-clause BSD license. + ==Motivation== Many people want to see Bitcoin scale over time, allowing an increasing number of transactions on the block chain. It would come at an increased cost for the ecosystem (bandwidth, processing, and storage for relay nodes, as well as an impact on propagation speed of blocks on the network), but technology also improves over time. When all technologies depended on have improved as well as their availability on the market, there is no reason why Bitcoin's fundamental transaction rate cannot improve proportionally. From 4945e73c76439feb698aaf8670b19cb379b9ee70 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 20 Jan 2017 00:11:02 +0000 Subject: [PATCH 0542/2326] BIP 123: License under CC0-1.0 or GNU-All-Permissive terms [Friday, January 20, 2017] [12:07:33 AM UTC] luke-jr: for BIP123, I think either CC0 or GNU-all-permissive --- bip-0123.mediawiki | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bip-0123.mediawiki b/bip-0123.mediawiki index d438322a76..2404937b8e 100644 --- a/bip-0123.mediawiki +++ b/bip-0123.mediawiki @@ -7,6 +7,8 @@ Status: Active Type: Process Created: 2015-08-26 + License: CC0-1.0 + GNU-All-Permissive
==Abstract== @@ -17,6 +19,10 @@ BIPs are classified by system layers with lower numbered layers involving more i The specification defines the layers and sets forth specific criteria for deciding to which layer a particular standards BIP belongs. +==Copyright== + +This BIP is dual-licensed under the Creative Commons CC0 1.0 Universal and GNU All-Permissive licenses. + ==Motivation== Bitcoin is a system involving a number of different standards. Some standards are absolute requirements for interoperability while others can be considered optional, giving implementors a choice of whether to support them. From 24af63b7e68b08ab2fd08604ceef7c78b9540365 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 20 Jan 2017 00:12:51 +0000 Subject: [PATCH 0543/2326] script/buildtable: Remove missing-license exceptions no longer needed --- scripts/buildtable.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index 0de4a36643..5589abb189 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -86,7 +86,7 @@ 'PD' => undef, ); my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 67 69 74 80 81 83 90 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152); -my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 30 31 32 33 34 35 39 43 44 45 47 61 62 64 66 68 70 71 72 73 101 102 103 106 120 121 123); +my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 31 33 34 35 39 43 44 45 47 61 64 68 70 71 72 73 101 102 106 120 121); my %emails; From e3ec9cf9db5cc8eb2af86c500f6fd77643502aba Mon Sep 17 00:00:00 2001 From: zizelevak Date: Mon, 23 Jan 2017 12:30:55 +0100 Subject: [PATCH 0544/2326] Create Czech.txt --- bip-0039/Czech.txt | 2048 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2048 insertions(+) create mode 100644 bip-0039/Czech.txt diff --git a/bip-0039/Czech.txt b/bip-0039/Czech.txt new file mode 100644 index 0000000000..24863efa50 --- /dev/null +++ b/bip-0039/Czech.txt @@ -0,0 +1,2048 @@ +abeceda +adresa +akce +aktovka +alej +alkohol +ananas +andulka +anekdota +anketa +antika +archa +asfalt +asistent +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bacil +baculka +badatel +bageta +bagr +bahno +bachor +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +bariera +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bezva +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blaf +blahobyt +blatouch +bledule +blecha +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +borskev +bota +boubel +bouda +bouchat +boule +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buditel +budka +budova +bufet +buchta +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvnout +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +decibel +deficit +dechovka +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +diplom +disk +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dodnes +dohled +dohoda +dohra +dochutit +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtivost +drzost +duben +dudek +duha +duhovka +duchovno +dusit +dusno +dutost +dvojice +dvorec +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epos +esej +esemeska +esence +eskorta +eskymo +etiketa +euro +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +fabrika +facka +fajfka +fakulta +falzum +fanatik +fanda +fantazie +fara +farmacie +faul +favorit +fazole +federace +fejeton +fenka +fialka +fiflena +figurant +filozof +filtr +finance +finta +fixa +fjord +flanel +flirt +flotila +folklor +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glejt +globus +golem +golfista +gondola +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hafan +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +herec +herna +heslo +hezky +hezoun +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltan +hlubina +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hodiny +hodlat +hodnota +hodovat +hoch +hojnost +hokej +holinky +holka +holub +homole +honitba +honorace +horal +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +chalupa +chapadlo +charita +chata +cheb +chechtat +chemie +chichot +chile +chirurg +chlad +chleba +chlor +chlubit +chmel +chmura +chobot +chodba +chochol +cholera +chopit +choroba +chov +chrapot +chrlit +chrom +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jahoda +jachta +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jestli +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kadet +kadidlo +kafe +kahan +kachna +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +karamel +karfiol +karotka +karton +kasa +kasino +kastrol +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmit +kmotr +kniha +knot +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +ladnost +lahev +lachtan +laik +lakomec +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilky +lepenka +lepidlo +lepra +letadlo +letec +letmo +letokruh +levhart +levitace +levnost +levobok +lhota +libra +lidojed +lidskost +lihovina +lichotka +lijavec +lilek +limetka +limitace +linie +linka +listopad +litina +litovat +lobista +logicky +logoped +lokalita +loket +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +luneta +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +machr +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +marnost +marodka +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +meditace +medovina +mechanik +mejdan +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixer +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocensky +mocnost +modelka +modlitba +mohyla +mokrost +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moudrost +moucha +movitost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzika +myslivec +mzda +nabourat +nadace +nadbytek +nadhoz +nadlouho +nadobro +nadpis +nadrobno +naftalen +nahlas +nahnat +nahota +nahradit +nachytat +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +natrvalo +natvrdo +navenek +navrch +navzdory +nazvat +nebe +necky +nedaleko +nedbat +neduh +nefrit +negace +nehet +nehoda +nechat +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +nestor +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nimrod +nitro +nocleh +nohavice +nominace +norek +normativ +nositel +nosnost +nouze +noviny +novotvar +nozdra +nuda +nudle +nuget +nutit +nutnost +nynfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ocitnout +odboj +odbyt +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odchod +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +ochladit +ochota +ochrana +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +oktet +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +onkolog +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +opuka +orbital +orgie +orchest +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhanec +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +ozon +pacient +padouch +pagoda +pahorek +pachatel +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivum +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peleton +penalta +pendrek +penze +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +piliny +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plodina +plocha +plomba +plout +pluk +plyn +pobavit +pobyt +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podle +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pochod +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponton +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +praktika +prales +praotec +praporek +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +pudl +puch +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +radiace +radnice +radon +raft +ragby +rachot +raketa +rameno +rampouch +rande +rarach +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +rejnok +reklama +rekord +rekrut +rektor +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozdat +rozeznat +rozhodce +rozchod +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rypadlo +rytec +rytina +ryzost +sadista +sahat +sahel +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +sebranka +secese +sedadlo +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +schovat +sifon +silnice +sirka +sirotek +sirup +situace +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklivec +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluha +sluch +slunce +slupka +slza +smetana +smilstvo +smlouva +smog +smola +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +sodovka +socha +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +spornost +spousta +spratek +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +sudost +suchar +suknice +sundat +sunout +surovina +sutana +svah +svalstvo +svatba +svazek +svetr +svisle +svitek +svoboda +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tankista +tapeta +tatarka +tavenina +tazatel +tehdy +technika +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +textil +ticho +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truhlice +truchlit +trus +trvat +tudy +tuhnout +tuhost +tundra +tunika +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +uctivost +udivit +uhradit +ucho +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vatra +vcelku +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +verze +veselka +veskrze +vesnice +vespod +vesta +veterina +veverka +vchod +vibrace +videohra +vidina +vidle +vichr +vila +vinice +viset +vitamin +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloni +vloupat +vnucovat +vnuk +voda +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrhat +vrcholek +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vychovat +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzchopit +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +zabrat +zabydlet +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zachovat +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdrtit +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzek +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk From 5be84b01f1641ddbaa922b3d44e2728bd7849608 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Mon, 23 Jan 2017 12:32:52 +0100 Subject: [PATCH 0545/2326] Rename Czech.txt to czech.txt --- bip-0039/{Czech.txt => czech.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bip-0039/{Czech.txt => czech.txt} (100%) diff --git a/bip-0039/Czech.txt b/bip-0039/czech.txt similarity index 100% rename from bip-0039/Czech.txt rename to bip-0039/czech.txt From 469a12b91845ba6c7da77b48e34e3abd4aeeb66b Mon Sep 17 00:00:00 2001 From: zizelevak Date: Mon, 23 Jan 2017 13:46:36 +0100 Subject: [PATCH 0546/2326] Update bip-0039-wordlists.md --- bip-0039/bip-0039-wordlists.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md index aef1a230a2..f31a7f2656 100644 --- a/bip-0039/bip-0039-wordlists.md +++ b/bip-0039/bip-0039-wordlists.md @@ -7,6 +7,7 @@ * [Chinese (Traditional)](chinese_traditional.txt) * [French](french.txt) * [Italian](italian.txt) +* [Czech](czech.txt) ##Wordlists (Special Considerations) @@ -81,3 +82,17 @@ Words chosen using the following rules: Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good. All the words have been manually selected and automatically checked against the rules. + +### Czech + +Credits: @zizelevak + +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.) +4. Only nouns, werbs and adverbs, no other word types. All words are in basic form. +5. No personal names or geografical names. +6. No very similar words with 1 letter of difference. +7. 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. From 9eefdc9151b8765c571261ba6ea9fc5dd9195363 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Mon, 23 Jan 2017 13:47:51 +0100 Subject: [PATCH 0547/2326] Update bip-0039-wordlists.md --- bip-0039/bip-0039-wordlists.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md index f31a7f2656..37ba5888d9 100644 --- a/bip-0039/bip-0039-wordlists.md +++ b/bip-0039/bip-0039-wordlists.md @@ -85,7 +85,7 @@ All the words have been manually selected and automatically checked against the ### Czech -Credits: @zizelevak +Credits: @zizelevak (Jan Lansky zizelevak@gmail.com) Words chosen using the following rules: From 1554541db444a375c0453e3c7cc3510be31a32bb Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 26 Jan 2017 21:48:59 +0000 Subject: [PATCH 0548/2326] bip-noreplay: Initial draft of an anti-replay BIP --- bip-noreplay.mediawiki | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 bip-noreplay.mediawiki diff --git a/bip-noreplay.mediawiki b/bip-noreplay.mediawiki new file mode 100644 index 0000000000..efd1a2cb91 --- /dev/null +++ b/bip-noreplay.mediawiki @@ -0,0 +1,61 @@ +
+  BIP: ?
+  Layer: Consensus (soft fork)
+  Title: Generic anti-replay protection using Script
+  Author: Luke Dashjr 
+  Comments-Summary: No comments yet.
+  Comments-URI: FIXME
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-01-26
+  License: BSD-2-Clause
+
+ +==Abstract== + +This BIP describes a new opcode (OP_CHECKBLOCKATHEIGHT) for the Bitcoin scripting system that allows construction of transactions which are valid only on specific blockchains. + +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + +==Specification== + +OP_CHECKBLOCKATHEIGHT redefines the existing NOP5 opcode. + +When executed, if any of the following conditions are true, the script interpreter will terminate with an error: + +* the stack has fewer than 2 elements; or +* the top item on the stack is not interpretable as a minimal-length CScriptNum; or +* the top item on the stack, when interpreted as a block height (see below) is not within the range of allowed blocks; or +* the second-to-top item on the stack, when interpreted as a block hash, has leading zeros; or +* the second-to-top item on the stack does not match the block hash of the block specified by the top item on the stack interpreted as a height. + +Otherwise, script execution will continue as if a NOP had been executed. + +FIXME: some way to mask out parts of the block hash for gambling/deterministic-random applications? + +===Block height interpretation and limits=== + +The specified block height may be either a negative number to specify a relative height, or a positive number for an absolute height. +A value of -1 refers to the block immediately preceding the block the transaction is mined it (but this is not a valid value, note). + +The specified height must not be more recent than the previous 100 blocks (that is, the largest negative value allowed is -101), nor older than 262144 blocks prior (ie, the smallest negative value is -262144). + +===Deployment=== + +This BIP will be deployed by "version bits" BIP9 with the '''name''' TBD and using '''bit''' TBD. + +For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be TBD (Epoch timestamp TBD) and BIP9 '''timeout''' will be TBD (Epoch timestamp TBD). + +For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be TBD (Epoch timestamp TBD) and BIP9 '''timeout''' will be TBD (Epoch timestamp TBD). + +==Motivation== + +In the event of a permanent blockchain split, some mechanism is desired by which the UTXOs valid in either chain may be spent without the transaction being validly replayable on the other chain. + +Additionally, there are some cases in normal Bitcoin operation wherein a wallet may need to respend a payment, but must guarantee its respend cannot be mined in the same block as a previous payment which has been recently conflicted by a double-spend. + +==Reference Implementation== + +TODO From af07fb993e8b9c322eb69f7f6282da41a2e6eca4 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 27 Jan 2017 16:49:45 +0100 Subject: [PATCH 0549/2326] Update czech.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Words are sorting according English alphabet (Czech sorting has difference in “ch”) --- bip-0039/czech.txt | 156 ++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index 24863efa50..db69cfa0aa 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -20,13 +20,13 @@ atol autobus azyl babka +bachor bacil baculka badatel bageta bagr bahno -bachor bakterie balada baletka @@ -69,8 +69,8 @@ bizon blaf blahobyt blatouch -bledule blecha +bledule blesk blikat blizna @@ -91,8 +91,8 @@ borovice borskev bota boubel -bouda bouchat +bouda boule boxer bradavka @@ -111,11 +111,11 @@ brzda brzy bublina bubnovat +buchta buditel budka budova bufet -buchta bujarost bukvice buldok @@ -146,6 +146,43 @@ centrum cenzor cestopis cetka +chalupa +chapadlo +charita +chata +cheb +chechtat +chemie +chichot +chile +chirurg +chlad +chleba +chlor +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chopit +choroba +chov +chrapot +chrlit +chrom +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit cibule cigareta cihelna @@ -177,9 +214,9 @@ datel datum dcera debata +dechovka decibel deficit -dechovka dekl dekret demokrat @@ -200,11 +237,11 @@ dnes dobro dobytek docent +dochutit dodnes dohled dohoda dohra -dochutit dojem dojnice doklad @@ -255,10 +292,10 @@ drsnost drtivost drzost duben +duchovno dudek duha duhovka -duchovno dusit dusno dutost @@ -387,11 +424,11 @@ hnojivo hnout hoblina hoboj +hoch hodiny hodlat hodnota hodovat -hoch hojnost hokej holinky @@ -446,43 +483,6 @@ hydrant hygiena hymna hysterik -chalupa -chapadlo -charita -chata -cheb -chechtat -chemie -chichot -chile -chirurg -chlad -chleba -chlor -chlubit -chmel -chmura -chobot -chodba -chochol -cholera -chopit -choroba -chov -chrapot -chrlit -chrom -chrt -chrup -chtivost -chudina -chutnat -chvat -chvilka -chvost -chyba -chystat -chytit idylka ihned ikona @@ -499,8 +499,8 @@ investor inzerce ironie jablko -jahoda jachta +jahoda jakmile jakost jalovec @@ -540,11 +540,11 @@ jurta kabaret kabel kabinet +kachna kadet kadidlo kafe kahan -kachna kajak kajuta kakao @@ -719,9 +719,9 @@ kytka kytovec kyvadlo labrador +lachtan ladnost lahev -lachtan laik lakomec lampa @@ -759,10 +759,10 @@ levnost levobok lhota libra +lichotka lidojed lidskost lihovina -lichotka lijavec lilek limetka @@ -798,10 +798,10 @@ lvice lyra lyrika lysina +machr madam madlo magistr -machr majetek majitel majorita @@ -827,9 +827,9 @@ mazivo mazlit mazurka mdloba +mechanik meditace medovina -mechanik mejdan meloun mentolka @@ -881,8 +881,8 @@ most motivace motorka motyka -moudrost moucha +moudrost movitost mozaika mozek @@ -906,6 +906,7 @@ muzika myslivec mzda nabourat +nachytat nadace nadbytek nadhoz @@ -918,7 +919,6 @@ nahlas nahnat nahota nahradit -nachytat naivita najednou najisto @@ -953,6 +953,7 @@ navrch navzdory nazvat nebe +nechat necky nedaleko nedbat @@ -961,7 +962,6 @@ nefrit negace nehet nehoda -nechat nejen nejprve neklid @@ -1044,9 +1044,13 @@ obzor ocas ocel ocenit +ochladit +ochota +ochrana ocitnout odboj odbyt +odchod odcizit odebrat odeslat @@ -1054,7 +1058,6 @@ odevzdat odezva odhadce odhodit -odchod odjet odjinud odkaz @@ -1087,9 +1090,6 @@ ohnisko ohrada ohrozit ohryzek -ochladit -ochota -ochrana okap okenice oklika @@ -1127,8 +1127,8 @@ opravdu oproti opuka orbital -orgie orchest +orgie orlice orloj ortel @@ -1165,11 +1165,11 @@ ovoce oxid ozdoba ozon +pachatel pacient padouch pagoda pahorek -pachatel pakt palanda palec @@ -1244,14 +1244,15 @@ plevel plivat plnit plno -plodina plocha +plodina plomba plout pluk plyn pobavit pobyt +pochod pocit poctivec podat @@ -1275,7 +1276,6 @@ pohnutka pohovor pohroma pohyb -pochod pointa pojistka pojmout @@ -1378,8 +1378,8 @@ psovod pstruh ptactvo puberta -pudl puch +pudl pukavec puklina pukrle @@ -1396,12 +1396,12 @@ pyramida pysk pytel racek +rachot radiace radnice radon raft ragby -rachot raketa rameno rampouch @@ -1447,10 +1447,10 @@ roura rovina rovnice rozbor +rozchod rozdat rozeznat rozhodce -rozchod rozinka rozjezd rozkaz @@ -1486,6 +1486,7 @@ satelit sazba sazenice sbor +schovat sebranka secese sedadlo @@ -1515,7 +1516,6 @@ sever seznam shoda shrnout -schovat sifon silnice sirka @@ -1555,8 +1555,8 @@ sliznice slon sloupek slovo -sluha sluch +sluha slunce slupka slza @@ -1574,8 +1574,8 @@ snad snaha snob sobota -sodovka socha +sodovka sokol sopka sotva @@ -1632,8 +1632,8 @@ stvol styk subjekt subtropy -sudost suchar +sudost suknice sundat sunout @@ -1676,8 +1676,8 @@ tapeta tatarka tavenina tazatel -tehdy technika +tehdy tekutina telefon temnota @@ -1721,8 +1721,8 @@ trpce trpitel trpkost trubec -truhlice truchlit +truhlice trus trvat tudy @@ -1745,10 +1745,10 @@ ubrat ubrousek ubrus ubytovna +ucho uctivost udivit uhradit -ucho ujednat ujistit ujmout @@ -1803,6 +1803,7 @@ varhany varovat vatra vcelku +vchod vdova vedro vegetace @@ -1821,12 +1822,11 @@ vespod vesta veterina veverka -vchod vibrace +vichr videohra vidina vidle -vichr vila vinice viset @@ -1866,8 +1866,8 @@ vracet vrah vrata vrba -vrhat vrcholek +vrhat vrstva vrtule vsadit @@ -1876,6 +1876,7 @@ vstup vtip vybavit vybrat +vychovat vydat vydra vyfotit @@ -1884,7 +1885,6 @@ vyhnout vyhodit vyhradit vyhubit -vychovat vyjasnit vyjet vyjmout @@ -1919,12 +1919,12 @@ vyzdobit vyznat vzadu vzbudit +vzchopit vzdor vzduch vzdychat vzestup vzhledem -vzchopit vzkaz vzlykat vznik @@ -1934,6 +1934,7 @@ vztah vztek zabrat zabydlet +zachovat zadarmo zadusit zafoukat @@ -1941,7 +1942,6 @@ zahltit zahodit zahrada zahynout -zachovat zajatec zajet zajistit From 875f35a07a3c8690ab5ebe980258172e0ccabf90 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 27 Jan 2017 16:51:06 +0100 Subject: [PATCH 0550/2326] Update bip-0039-wordlists.md --- bip-0039/bip-0039-wordlists.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md index 37ba5888d9..5b4a1de920 100644 --- a/bip-0039/bip-0039-wordlists.md +++ b/bip-0039/bip-0039-wordlists.md @@ -95,4 +95,5 @@ Words chosen using the following rules: 4. Only nouns, werbs and adverbs, no other word types. All words are in basic form. 5. No personal names or geografical names. 6. No very similar words with 1 letter of difference. -7. 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 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. From 1a3ec3a459febc0430e13928ca03df278e4f3a44 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 27 Jan 2017 17:34:25 +0100 Subject: [PATCH 0551/2326] Update czech.txt --- bip-0039/czech.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index db69cfa0aa..48c77300c8 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -88,12 +88,12 @@ bokorys bolest borec borovice -borskev bota boubel bouchat bouda boule +bourat boxer bradavka brambora @@ -135,6 +135,7 @@ carevna cedr cedule cejch +cejn cela celer celkem @@ -150,11 +151,9 @@ chalupa chapadlo charita chata -cheb chechtat chemie chichot -chile chirurg chlad chleba @@ -166,6 +165,7 @@ chobot chochol chodba cholera +chomout chopit choroba chov From 7ae1049232ffcc7c89dfb947fddbb785233a3730 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 27 Jan 2017 18:23:25 +0100 Subject: [PATCH 0552/2326] Update czech.txt --- bip-0039/czech.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index 48c77300c8..e0fdc67138 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -66,7 +66,6 @@ biograf biolog bitva bizon -blaf blahobyt blatouch blecha @@ -336,7 +335,6 @@ fanda fantazie fara farmacie -faul favorit fazole federace @@ -623,6 +621,7 @@ kokos koktejl kolaps koleda +kolize kolo komando kometa @@ -1350,6 +1349,7 @@ praktika prales praotec praporek +prase pravda princip prkno From 92a07ee121bc85def9bf7bec2165ac25172498f6 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 27 Jan 2017 19:54:28 +0100 Subject: [PATCH 0553/2326] Update czech.txt --- bip-0039/czech.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index e0fdc67138..6903d25392 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -1,5 +1,6 @@ abeceda adresa +agrese akce aktovka alej @@ -56,7 +57,6 @@ beton bezinka bezmoc beztak -bezva bicykl bidlo biftek @@ -312,11 +312,11 @@ epizoda epocha epos esej -esemeska esence eskorta eskymo etiketa +euforie euro evoluce exekuce @@ -521,7 +521,6 @@ jemnost jenom jepice jeseter -jestli jevit jezdec jezero @@ -1932,6 +1931,7 @@ vzorek vzpoura vztah vztek +xylofon zabrat zabydlet zachovat From 1761e8a4956e25a54a4e081da4573cc293bb824c Mon Sep 17 00:00:00 2001 From: azuchi Date: Sat, 28 Jan 2017 18:55:50 +0900 Subject: [PATCH 0554/2326] Remove duplication BIP69 --- bip-0069.mediawiki | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bip-0069.mediawiki b/bip-0069.mediawiki index f262126a56..e9f9245169 100644 --- a/bip-0069.mediawiki +++ b/bip-0069.mediawiki @@ -25,11 +25,6 @@ This BIP is in the public domain. ==Motivation== -Currently, there is no clear standard for how wallet clients ought to order transaction inputs and outputs. -Since wallet clients are left to their own devices to determine this ordering, they often leak information about their users’ finances. -For example, a wallet client might naively order inputs based on when addresses were added to a wallet by the user through importing or random generation. -Many wallets will place spending outputs first and change outputs second, leaking information about both the sender and receiver’s finances to passive blockchain observers. -Such information should remain private not only for the benefit of consumers, but in higher order financial systems must be kept secret to prevent fraud. Currently, there is no clear standard for how wallet clients ought to order transaction inputs and outputs. Since wallet clients are left to their own devices to determine this ordering, they often leak information about their users’ finances. For example, a wallet client might naively order inputs based on when addresses were added to a wallet by the user through importing or random generation. From dab9d97b44f5dcb60e0bcb33900aed97c58b904b Mon Sep 17 00:00:00 2001 From: zizelevak Date: Tue, 31 Jan 2017 08:08:42 +0100 Subject: [PATCH 0555/2326] Update czech.txt --- bip-0039/czech.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index 6903d25392..baf835cf1c 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -1002,7 +1002,7 @@ nudle nuget nutit nutnost -nynfa +nymfa obal obarvit obava From f4691796c60d4ceee51f06b7dacd1cc760890f35 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Tue, 31 Jan 2017 08:15:12 +0100 Subject: [PATCH 0556/2326] Update czech.txt --- bip-0039/czech.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index baf835cf1c..abaabbe269 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -1125,7 +1125,7 @@ opravdu oproti opuka orbital -orchest +orchestr orgie orlice orloj From b9f09aae63ac1374fe9284afbeeda2625616871a Mon Sep 17 00:00:00 2001 From: zizelevak Date: Tue, 31 Jan 2017 08:49:29 +0100 Subject: [PATCH 0557/2326] Update czech.txt --- bip-0039/czech.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index abaabbe269..a3643a8758 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -1199,7 +1199,6 @@ pecka pedagog pejsek peklo -peleton penalta pendrek penze @@ -1215,6 +1214,7 @@ piha pijavice pikle piknik +piksla piliny pilnost pilulka From 702d651aa55e963fc5509c05518220ad5dd16b4e Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 10 Feb 2017 23:51:36 +0100 Subject: [PATCH 0558/2326] Update czech.txt From 8a2a06e94cf6a7ff9cb6739bf05a1aef6c8ed3be Mon Sep 17 00:00:00 2001 From: zizelevak Date: Fri, 10 Feb 2017 23:56:16 +0100 Subject: [PATCH 0559/2326] Update czech.txt --- bip-0039/czech.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index a3643a8758..cbf465142e 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -39,7 +39,6 @@ bambus bankomat barbar baret -bariera barman baroko barva @@ -995,7 +994,7 @@ nositel nosnost nouze noviny -novotvar +novota nozdra nuda nudle @@ -1150,7 +1149,7 @@ osvojit oteplit otisk otop -otrhanec +otrhat otrlost otrok otruby @@ -1559,6 +1558,7 @@ sluha slunce slupka slza +smaragd smetana smilstvo smlouva From b7f682f702bfb5679b39ef19c994b191693f59b4 Mon Sep 17 00:00:00 2001 From: zizelevak Date: Sun, 12 Feb 2017 03:40:30 +0100 Subject: [PATCH 0560/2326] Update czech.txt --- bip-0039/czech.txt | 152 ++++++++++++++++++++++----------------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/bip-0039/czech.txt b/bip-0039/czech.txt index cbf465142e..fdab4a2aea 100644 --- a/bip-0039/czech.txt +++ b/bip-0039/czech.txt @@ -1,3 +1,4 @@ +abdikace abeceda adresa agrese @@ -5,14 +6,18 @@ akce aktovka alej alkohol +amputace ananas andulka anekdota anketa antika +anulovat archa +arogance asfalt asistent +aspirace astma astronom atlas @@ -155,7 +160,6 @@ chichot chirurg chlad chleba -chlor chlubit chmel chmura @@ -169,7 +173,6 @@ choroba chov chrapot chrlit -chrom chrt chrup chtivost @@ -194,7 +197,7 @@ cizinec cizost clona cokoliv -couvnout +couvat ctitel ctnost cudnost @@ -215,6 +218,7 @@ debata dechovka decibel deficit +deflace dekl dekret demokrat @@ -224,8 +228,10 @@ deska detektiv dikobraz diktovat +dioda diplom disk +displej divadlo divoch dlaha @@ -287,7 +293,7 @@ drobnost drogerie drozd drsnost -drtivost +drtit drzost duben duchovno @@ -299,6 +305,7 @@ dusno dutost dvojice dvorec +dynamit ekolog ekonomie elektron @@ -309,6 +316,7 @@ emoce empatie epizoda epocha +epopej epos esej esence @@ -316,7 +324,6 @@ eskorta eskymo etiketa euforie -euro evoluce exekuce exkurze @@ -324,15 +331,11 @@ expedice exploze export extrakt -fabrika facka fajfka fakulta -falzum fanatik -fanda fantazie -fara farmacie favorit fazole @@ -340,18 +343,16 @@ federace fejeton fenka fialka -fiflena figurant filozof filtr finance finta -fixa +fixace fjord flanel flirt flotila -folklor fond fosfor fotbal @@ -360,6 +361,7 @@ foton frakce freska fronta +fukar funkce fyzika galeje @@ -367,11 +369,10 @@ garant genetika geolog gilotina +glazura glejt -globus golem golfista -gondola gotika graf gramofon @@ -383,7 +384,6 @@ groteska guma hadice hadr -hafan hala halenka hanba @@ -397,11 +397,11 @@ hejno hejtman hektar helma +hematom herec herna heslo hezky -hezoun historik hladovka hlasivky @@ -411,8 +411,9 @@ hlen hlodavec hloh hloupost -hltan +hltat hlubina +hluchota hmat hmota hmyz @@ -428,13 +429,14 @@ hodnota hodovat hojnost hokej -holinky +holinka holka holub homole honitba honorace horal +horda horizont horko horlivec @@ -539,7 +541,6 @@ kabinet kachna kadet kadidlo -kafe kahan kajak kajuta @@ -563,13 +564,11 @@ kaple kapota kapr kapusta +kapybara karamel -karfiol karotka karton kasa -kasino -kastrol katalog katedra kauce @@ -595,6 +594,7 @@ klenba klepat klesnout klid +klima klisna klobouk klokan @@ -604,10 +604,11 @@ klubovna klusat kluzkost kmen -kmit +kmitat kmotr kniha knot +koalice koberec kobka kobliha @@ -654,6 +655,7 @@ kosatec kostka kotel kotleta +kotoul koukat koupelna kousek @@ -680,6 +682,7 @@ krmivo krocan krok kronika +kropit kroupa krovka krtek @@ -718,9 +721,9 @@ kyvadlo labrador lachtan ladnost -lahev laik lakomec +lamela lampa lanovka lasice @@ -742,19 +745,16 @@ lehkost lehnout lektvar lenochod -lentilky +lentilka lepenka lepidlo -lepra letadlo letec letmo letokruh levhart levitace -levnost levobok -lhota libra lichotka lidojed @@ -763,17 +763,19 @@ lihovina lijavec lilek limetka -limitace linie linka +linoleum listopad litina litovat lobista -logicky +lodivod +logika logoped lokalita loket +lomcovat lopata lopuch lord @@ -788,17 +790,16 @@ lstivost lucerna lucifer lump -luneta lusk lustrace lvice lyra lyrika lysina -machr madam madlo magistr +mahagon majetek majitel majorita @@ -811,8 +812,8 @@ malovat malvice maminka mandle +manko marnost -marodka masakr maskot masopust @@ -827,7 +828,7 @@ mdloba mechanik meditace medovina -mejdan +melasa meloun mentolka metla @@ -849,7 +850,7 @@ minomet minulost miska mistr -mixer +mixovat mladost mlha mlhovina @@ -859,12 +860,11 @@ mluvit mnich mnohem mobil -mocensky mocnost modelka modlitba mohyla -mokrost +mokro molekula momentka monarcha @@ -880,7 +880,6 @@ motorka motyka moucha moudrost -movitost mozaika mozek mozol @@ -899,7 +898,7 @@ munice muset mutace muzeum -muzika +muzikant myslivec mzda nabourat @@ -907,14 +906,11 @@ nachytat nadace nadbytek nadhoz -nadlouho nadobro nadpis -nadrobno -naftalen nahlas nahnat -nahota +nahodile nahradit naivita najednou @@ -926,6 +922,7 @@ nakrmit nalevo namazat namluvit +nanometr naoko naopak naostro @@ -943,8 +940,6 @@ nasekat naslepo nastat natolik -natrvalo -natvrdo navenek navrch navzdory @@ -955,7 +950,6 @@ necky nedaleko nedbat neduh -nefrit negace nehet nehoda @@ -972,7 +966,6 @@ nerost nerv nesmysl nesoulad -nestor netvor neuron nevina @@ -983,13 +976,12 @@ nikam nikdy nikl nikterak -nimrod nitro nocleh nohavice nominace +nora norek -normativ nositel nosnost nouze @@ -1001,6 +993,7 @@ nudle nuget nutit nutnost +nutrie nymfa obal obarvit @@ -1097,7 +1090,6 @@ okrasa okres okrsek okruh -oktet okupant okurka okusit @@ -1111,7 +1103,6 @@ omlouvat omluva omyl onehdy -onkolog opakovat opasek operace @@ -1122,7 +1113,6 @@ opora opozice opravdu oproti -opuka orbital orchestr orgie @@ -1161,11 +1151,9 @@ ovlivnit ovoce oxid ozdoba -ozon pachatel pacient padouch -pagoda pahorek pakt palanda @@ -1187,7 +1175,7 @@ parta paruka paryba paseka -pasivum +pasivita pastelka patent patrona @@ -1198,9 +1186,11 @@ pecka pedagog pejsek peklo +peloton penalta pendrek penze +periskop pero pestrost petarda @@ -1213,8 +1203,7 @@ piha pijavice pikle piknik -piksla -piliny +pilina pilnost pilulka pinzeta @@ -1258,7 +1247,6 @@ podepsat podhled podivit podklad -podle podmanit podnik podoba @@ -1295,7 +1283,6 @@ pomsta pomyslet ponechat ponorka -ponton ponurost popadat popel @@ -1343,6 +1330,7 @@ poznatek pozor pozvat pracovat +prahory praktika prales praotec @@ -1369,6 +1357,7 @@ provaz prskavka prsten prudkost +prut prvek prvohory psanec @@ -1401,10 +1390,12 @@ radon raft ragby raketa +rakovina rameno rampouch rande rarach +rarita rasovna rastr ratolest @@ -1414,11 +1405,14 @@ reagovat reakce recept redaktor +referent +reflex rejnok reklama rekord rekrut rektor +reputace revize revma revolver @@ -1437,6 +1431,7 @@ rorejs rosol rostlina rotmistr +rotoped rotunda roubenka roucho @@ -1460,19 +1455,19 @@ rozsah roztok rozum rozvod +rubrika ruchadlo rukavice rukopis ryba rybolov rychlost +rydlo rypadlo -rytec rytina ryzost sadista sahat -sahel sako samec samizdat @@ -1488,6 +1483,7 @@ schovat sebranka secese sedadlo +sediment sedlo sehnat sejmout @@ -1520,6 +1516,7 @@ sirka sirotek sirup situace +skafandr skalisko skanzen skaut @@ -1527,7 +1524,6 @@ skeptik skica skladba sklenice -sklivec sklo skluz skoba @@ -1563,7 +1559,6 @@ smetana smilstvo smlouva smog -smola smrad smrk smrtka @@ -1595,9 +1590,9 @@ splav spodek spojenec spolu +sponzor spornost spousta -spratek sprcha spustit sranda @@ -1633,19 +1628,20 @@ subjekt subtropy suchar sudost -suknice +sukno sundat sunout +surikata surovina -sutana svah svalstvo +svetr svatba svazek -svetr svisle svitek svoboda +svodidlo svorka svrab sykavka @@ -1670,9 +1666,8 @@ tamhle tampon tancovat tanec -tankista +tanker tapeta -tatarka tavenina tazatel technika @@ -1687,8 +1682,10 @@ teplota tepna teprve terapie +termoska textil ticho +tiskopis titulek tkadlec tkanina @@ -1707,6 +1704,7 @@ tradice traktor tramp trasa +traverza trefit trest trezor @@ -1728,7 +1726,6 @@ tudy tuhnout tuhost tundra -tunika turista turnaj tuzemsko @@ -1760,6 +1757,7 @@ ulice ulita ulovit umyvadlo +unavit uniforma uniknout upadnout @@ -1800,7 +1798,6 @@ vanilka varan varhany varovat -vatra vcelku vchod vdova @@ -1813,11 +1810,12 @@ velitel velmoc velryba venkov +veranda verze veselka veskrze vesnice -vespod +vespodu vesta veterina veverka @@ -1829,7 +1827,7 @@ vidle vila vinice viset -vitamin +vitalita vize vizitka vjezd @@ -1842,11 +1840,11 @@ vlevo vlhkost vliv vlnovka -vloni vloupat vnucovat vnuk voda +vodivost vodoznak vodstvo vojensky @@ -1903,6 +1901,7 @@ vypravit vypustit vyrazit vyrovnat +vyrvat vyslovit vysoko vystavit @@ -1979,7 +1978,6 @@ zdatnost zdivo zdobit zdroj -zdrtit zdvih zdymadlo zelenina @@ -1988,6 +1986,7 @@ zemina zeptat zezadu zezdola +zhatit zhltnout zhluboka zhotovit @@ -2013,6 +2012,7 @@ zmizet zmocnit zmodrat zmrzlina +zmutovat znak znalost znamenat @@ -2034,7 +2034,7 @@ zrnitost zrno zrovna zrychlit -zrzek +zrzavost zticha ztratit zubovina From b2b24b53935544f45188fbe1ae8701074b8cc9f6 Mon Sep 17 00:00:00 2001 From: azuchi Date: Sun, 19 Feb 2017 16:19:17 +0900 Subject: [PATCH 0561/2326] 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 6f94288741fb05d1ea6691675574dcb89d7b7602 Mon Sep 17 00:00:00 2001 From: Ian Coleman Date: Fri, 24 Feb 2017 10:30:20 +1100 Subject: [PATCH 0562/2326] BIP 32: Test vectors for leading zeros These additional test vectors will ensure all future implementations are interoperable. See https://github.com/iancoleman/bip39/issues/58 and https://github.com/bitpay/bitcore-lib/issues/47 --- bip-0032.mediawiki | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index a4c1b96bc6..acaaea034f 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -1,4 +1,5 @@ RECENT CHANGES: +* (24 Feb 2017) Added test vectors for hardened derivation with leading zeros * (16 Apr 2013) Added private derivation for i ≥ 0x80000000 (less risk of parent private key leakage) * (30 Apr 2013) Switched from multiplication by IL to addition of IL (faster, easier implementation) * (25 May 2013) Added test vectors @@ -259,6 +260,18 @@ Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c ** ext pub: xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt ** ext prv: xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j +===Test vector 3=== + +These vectors test for the retention of leading zeros. See [bitpay/bitcore-lib#47](https://github.com/bitpay/bitcore-lib/issues/47) and [iancoleman/bip39#58](https://github.com/iancoleman/bip39/issues/58) for more information. + +Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be +* Chain m +** ext pub: xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13 +** ext prv: xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6 +* Chain m/0H +** ext pub: xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y +** ext prv: xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L + ==Implementations== Two Python implementations exist: From 11b0fa37bee4eac40c3a1be0591078688bcc3392 Mon Sep 17 00:00:00 2001 From: Ian Coleman Date: Sat, 25 Feb 2017 15:08:58 +1100 Subject: [PATCH 0563/2326] Mediawiki format used for external links --- bip-0032.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index acaaea034f..9ca80ef9c2 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -262,7 +262,7 @@ Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c ===Test vector 3=== -These vectors test for the retention of leading zeros. See [bitpay/bitcore-lib#47](https://github.com/bitpay/bitcore-lib/issues/47) and [iancoleman/bip39#58](https://github.com/iancoleman/bip39/issues/58) for more information. +These vectors test for the retention of leading zeros. See [https://github.com/bitpay/bitcore-lib/issues/47 bitpay/bitcore-lib#47] and [https://github.com/iancoleman/bip39/issues/58 iancoleman/bip39#58] for more information. Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be * Chain m From 136d85ea56f4ab1d04c7c3df6b982a76d286e449 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 08:04:20 +0000 Subject: [PATCH 0564/2326] bip-xchgrate: Draft of a new BIP for a common format for exchange rate information --- bip-xchgrate.mediawiki | 115 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 bip-xchgrate.mediawiki diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki new file mode 100644 index 0000000000..7c78de3c21 --- /dev/null +++ b/bip-xchgrate.mediawiki @@ -0,0 +1,115 @@ +
+  BIP: ?
+  Layer: Applications
+  Title: Currency/exchange rate information API
+  Author: Luke Dashjr 
+  Comments-Summary: No comments yet.
+  Comments-URI: ?
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-03-04
+  License: BSD-2-Clause
+
+ +==Abstract== + +A common interface for requesting currency exchange rate information from a server. + +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + +==Specification== + +Four requests are defined, which are all made by a GET request to a common URI with parameters encoded in application/x-www-form-urlencoded format. +All matching parameters may be specified with multiple comma-separated values, which are to be interpreted as "any of these". +Each result is always in JSON format, with a line-feed (never a carriage-return) separating multiple results. + +To be BIP compatible, servers MUST support at least one currency-pair compared to XBT. +All inquiries for bitcoin amounts MUST be specified in XBT, even if the presentation to the end user is in another unit. +(FIXME: or should this be satoshis?) + +Currency code(s) used herein are defined as such: + +* All ISO 4217 codes are valid currency codes. +* XBT is defined as 100000000 satoshis (commonly known as 1 BTC). +* Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) + +===Enumerating supported currency-pair tokens=== + +Parameters: + +* ''mode'' - Always "list" for this request. +* ''cc'' - If provided, the server MAY limit the results to only currency-pairs describing a currency with the given currency code(s). +* ''alt'' - If provided, the server MAY limit the results to only currency-pairs describing currency rates compared to the given currency code(s). +* ''locale'' - If provided, the server MAY limit the results to only currency-pairs supporting the given locale(s). + +There is only one result, which is a JSON Array of Strings, each representing a supported currency-pair. +These Strings are arbitrarily decided by the server. + +===Currency-pair information=== + +Parameters: + +* ''mode'' - Always "info" for this request. +* ''cp'' - Currency pair(s) for which information is requested. + +Each currency-pair will receive a separate result, a JSON Object, with the following information: + +* ''cp'' - The currency-pair token. +* ''cc'' - The currency code for the primary currency, if any. +* ''symbol'' - An Array of prefix and suffix for the primary currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. +* ''digits'' - The type of digits to use for the primary currency's numbers. "arabic" should be used for common 0-9 digits. +* ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] +* ''fraction_sep'' - A String to be placed between whole numbers and a fractional amount. +* ''fraction_digits'' - Array of absolute minimum (even for whole numbers) number of fractional digits, minimum fractional digits when a fraction exists, and maximum number of fractional digits when absolute precision is not demanded (below which is to be rounded in an implementation-dependent manner). +* ''locale'' - If provided, a String with the applicable ISO 15897 locale. +* ''minpoll'' - A Number of seconds indicating a minimum time between polls to the server. Clients should be prudent about not polling too often, even if this number is low. +* ''longpoll'' - If provided and true, indicates longpolling is supported by the server. +* ''history'' - If provided, indicates the server has historical records going back no earlier than the POSIX timestamp provided as a value. +* ''archive'' - If provided, indicates the server no longer has current rates, and has no historical rates more recent than the POSIX timestamp provided as a value. + +===Current exchange rate=== + +Parameters: + +* ''mode'' - Always "rate" for this request. +* ''cp'' - Currency pair(s) for which rate is requested. +* ''type'' - Type of exchange rate data being requested. May be "high", "low", "average", "typical", or any other arbitrary name. If omitted, the server may provide any rates it deems appropriate. +* ''minrate'', ''maxrate'' - If specified, indicates this request is a longpoll. The server should not send a response until the rate(s) fall below or above (respectively) the provided value. + +Each currency-pair receives a separate result (a JSON Object) with all requested rate types: + +* ''cp'' - The currency-pair token. +* ''time'' - The time (as a POSIX timestamp) the rate information is applicable to (should be approximately the request time). +* ''rates'' - A JSON Object with each rate type provided as a key, and a Number as the value specifying the rate. + +===Historical exchange rates=== + +Parameters: + +* ''mode'' - Always "history" for this request. +* ''cp'' - Currency pair(s) for which rate is requested. +* ''type'' - Type of exchange rate data being requested. May be "high", "low", "average", "typical", or any other arbitrary name. If omitted, the server may provide any rates it deems appropriate. +* ''from'' - POSIX timestamp the results should begin with. +* ''to'' - POSIX timestamp the results should end with. If omitted, the present time shall be used. +* ''ratedelta'', ''timedelta'' - If specified, the server may omit data where the rate or time has not changed since the last provided rate and time. If both are provided, either a significant rate change OR time change should trigger a new record in the results. + +A result is provided for each currency-pair and timestamp record, in the same format as the current exchange rate request. +Records MUST be provided in chronological order, but only within the scope of the applicable currency-pair (ie, it is okay to send the full history for one currency-pair, and then the full history for the next; or to intermix them out of any given order). + +==Motivation== + +End users often desire to see fiat currency information in their Bitcoin wallet software. +Due to the nature of Bitcoin, there is inherently no authoritative source for exchange rates. +There are many independent providers of such information, but they all use different formats for providing it, so wallet software is currently forced to implement dedicated code for each provider. + +By providing a standard interface for retrieving this information, wallets (and other software) and service providers can implement it once, and become immediately interoperable with all other compatible implementations. + +==Backwards compatibility== + +While this new standard is adopted, software and providers can continue to use and provide their current formats until they are no longer needed. + +==Reference implementation== + +TODO From 94a5b5393527a8024d4a96d3eaa0af165c7b342d Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 23:14:10 +0000 Subject: [PATCH 0565/2326] bip-xchgrate: Provide secondary currency code in response to info request --- bip-xchgrate.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 7c78de3c21..e3179c89ab 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -57,7 +57,8 @@ Parameters: Each currency-pair will receive a separate result, a JSON Object, with the following information: * ''cp'' - The currency-pair token. -* ''cc'' - The currency code for the primary currency, if any. +* ''cc'' - The currency code for the primary currency. +* ''alt'' - The currency code for the secondary currency. * ''symbol'' - An Array of prefix and suffix for the primary currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. * ''digits'' - The type of digits to use for the primary currency's numbers. "arabic" should be used for common 0-9 digits. * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] From 125e0cc931e9b8962322a28a045d5d77dcf04313 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 23:15:02 +0000 Subject: [PATCH 0566/2326] bip-xchgrate: Define rate --- bip-xchgrate.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index e3179c89ab..4524f15698 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -35,6 +35,8 @@ Currency code(s) used herein are defined as such: * XBT is defined as 100000000 satoshis (commonly known as 1 BTC). * Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) +Rate is defined as: primaryCurrencyValue / rate = secondaryCurrencyValue + ===Enumerating supported currency-pair tokens=== Parameters: From 8eaad1803f85de7ae36bcd287648092c9daf9c2f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 23:23:17 +0000 Subject: [PATCH 0567/2326] bip-xchgrate: Allow currency-pairs to have arbitrary descriptions --- bip-xchgrate.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 4524f15698..434f3abfb3 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -61,6 +61,8 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''cp'' - The currency-pair token. * ''cc'' - The currency code for the primary currency. * ''alt'' - The currency code for the secondary currency. +* ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. +* ''longdesc'' - Optional description, but may be longer and formatted using HTML. * ''symbol'' - An Array of prefix and suffix for the primary currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. * ''digits'' - The type of digits to use for the primary currency's numbers. "arabic" should be used for common 0-9 digits. * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] From 019d922851260704c460dbe21a312cc52e28d3c2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 23:37:59 +0000 Subject: [PATCH 0568/2326] bip-xchgrate: Limit currency-pair token symbols, and give a little info with enumeration --- bip-xchgrate.mediawiki | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 434f3abfb3..164091d2b4 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -29,6 +29,8 @@ To be BIP compatible, servers MUST support at least one currency-pair co All inquiries for bitcoin amounts MUST be specified in XBT, even if the presentation to the end user is in another unit. (FIXME: or should this be satoshis?) +Currency-pair tokens are arbitrary Strings no longer than 255 characters, which may include any ASCII [https://tools.ietf.org/html/rfc3986#section-2.3 RFC 3986 unreserved characters] (ie, alphanumerics and the hyphen, underscore, period, and tilde symbols). + Currency code(s) used herein are defined as such: * All ISO 4217 codes are valid currency codes. @@ -46,8 +48,12 @@ Parameters: * ''alt'' - If provided, the server MAY limit the results to only currency-pairs describing currency rates compared to the given currency code(s). * ''locale'' - If provided, the server MAY limit the results to only currency-pairs supporting the given locale(s). -There is only one result, which is a JSON Array of Strings, each representing a supported currency-pair. -These Strings are arbitrarily decided by the server. +Each currency-pair will receive a separate result, a JSON Object, with the following information: + +* ''cp'' - The currency-pair token. +* ''cc'' - The currency code for the primary currency. +* ''alt'' - The currency code for the secondary currency. +* ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. ===Currency-pair information=== @@ -61,7 +67,7 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''cp'' - The currency-pair token. * ''cc'' - The currency code for the primary currency. * ''alt'' - The currency code for the secondary currency. -* ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. +* ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. * ''longdesc'' - Optional description, but may be longer and formatted using HTML. * ''symbol'' - An Array of prefix and suffix for the primary currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. * ''digits'' - The type of digits to use for the primary currency's numbers. "arabic" should be used for common 0-9 digits. From 3b29e5d3fafa737eb06a49b59dc09d37c096b1d4 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 4 Mar 2017 23:46:46 +0000 Subject: [PATCH 0569/2326] bip-xchgrate: Begin Rationale section --- bip-xchgrate.mediawiki | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 164091d2b4..ecfa8cc46c 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -117,6 +117,17 @@ There are many independent providers of such information, but they all use diffe By providing a standard interface for retrieving this information, wallets (and other software) and service providers can implement it once, and become immediately interoperable with all other compatible implementations. +==Rationale== + +Why are multiple results separated by a line-feed rather than using a JSON Array? + +* Clients ought to cache historical data, and using a line-feed format allows them to simply append to a cache file. +* Parsing JSON typically requires the entire data parsed together as a single memory object. Using simple lines to separate results, however, allows parsing a single result at a time. + +What if long descriptions require line and paragraph breaks? + +* Long descriptions support HTML, which has entities for paragraphs and line breaks that do not require literal line-feeds in the data. + ==Backwards compatibility== While this new standard is adopted, software and providers can continue to use and provide their current formats until they are no longer needed. From 651de8120e21ba6c644d0fea4bae1524a71015d5 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 5 Mar 2017 00:23:26 +0000 Subject: [PATCH 0570/2326] bip-xchgrate: More sensible rate definition --- bip-xchgrate.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index ecfa8cc46c..bc1dfc8db3 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -37,7 +37,7 @@ Currency code(s) used herein are defined as such: * XBT is defined as 100000000 satoshis (commonly known as 1 BTC). * Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) -Rate is defined as: primaryCurrencyValue / rate = secondaryCurrencyValue +Rate is defined as: 1 primaryCurrency = 1 secondaryCurrency / rate ===Enumerating supported currency-pair tokens=== From 7a324fb947457164e8ec1414125aaf5ed22a0716 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 5 Mar 2017 02:16:22 +0000 Subject: [PATCH 0571/2326] bip-xchgrate: Use standard currency exchange base/quote terminology --- bip-xchgrate.mediawiki | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index bc1dfc8db3..0be070eea3 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -37,22 +37,22 @@ Currency code(s) used herein are defined as such: * XBT is defined as 100000000 satoshis (commonly known as 1 BTC). * Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) -Rate is defined as: 1 primaryCurrency = 1 secondaryCurrency / rate +Rate is defined as: 1 quoteCurrency = 1 baseCurrency * rate ===Enumerating supported currency-pair tokens=== Parameters: * ''mode'' - Always "list" for this request. -* ''cc'' - If provided, the server MAY limit the results to only currency-pairs describing a currency with the given currency code(s). -* ''alt'' - If provided, the server MAY limit the results to only currency-pairs describing currency rates compared to the given currency code(s). +* ''quote'' - If provided, the server MAY limit the results to only currency-pairs describing a currency with the given currency code(s). +* ''base'' - If provided, the server MAY limit the results to only currency-pairs describing currency rates compared to the given currency code(s). * ''locale'' - If provided, the server MAY limit the results to only currency-pairs supporting the given locale(s). Each currency-pair will receive a separate result, a JSON Object, with the following information: * ''cp'' - The currency-pair token. -* ''cc'' - The currency code for the primary currency. -* ''alt'' - The currency code for the secondary currency. +* ''quote'' - The currency code for the quote currency. +* ''base'' - The currency code for the base currency. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. ===Currency-pair information=== @@ -65,12 +65,12 @@ Parameters: Each currency-pair will receive a separate result, a JSON Object, with the following information: * ''cp'' - The currency-pair token. -* ''cc'' - The currency code for the primary currency. -* ''alt'' - The currency code for the secondary currency. +* ''quote'' - The currency code for the quote currency. +* ''base'' - The currency code for the base currency. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. * ''longdesc'' - Optional description, but may be longer and formatted using HTML. -* ''symbol'' - An Array of prefix and suffix for the primary currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. -* ''digits'' - The type of digits to use for the primary currency's numbers. "arabic" should be used for common 0-9 digits. +* ''symbol'' - An Array of prefix and suffix for the quote currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. +* ''digits'' - The type of digits to use for the quote currency's numbers. "arabic" should be used for common 0-9 digits. * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] * ''fraction_sep'' - A String to be placed between whole numbers and a fractional amount. * ''fraction_digits'' - Array of absolute minimum (even for whole numbers) number of fractional digits, minimum fractional digits when a fraction exists, and maximum number of fractional digits when absolute precision is not demanded (below which is to be rounded in an implementation-dependent manner). From 253c7f923b87ab4bd0dc4999953617929e6c96e3 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 5 Mar 2017 03:21:16 +0000 Subject: [PATCH 0572/2326] bip-xchgrate: Use plain English to define rate --- bip-xchgrate.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 0be070eea3..96665c8b32 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -37,7 +37,8 @@ Currency code(s) used herein are defined as such: * XBT is defined as 100000000 satoshis (commonly known as 1 BTC). * Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) -Rate is defined as: 1 quoteCurrency = 1 baseCurrency * rate +Rate is defined as the amount of base-currency to be exchanged for one unit of the quote-currency. +In other words, 1 quoteCurrency = rate baseCurrency. ===Enumerating supported currency-pair tokens=== From f33738655061a0f4a8949ca018b53994ace1a1c1 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 5 Mar 2017 04:32:13 +0000 Subject: [PATCH 0573/2326] bip-xchgrate: Fix --- bip-xchgrate.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 96665c8b32..86f7cfcf60 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -37,8 +37,8 @@ Currency code(s) used herein are defined as such: * XBT is defined as 100000000 satoshis (commonly known as 1 BTC). * Strings longer than 3 characters may be used for currencies without an applicable code. (If a shorter code is desired despite this, it may be padded with space(s) to the left until it is 4 characters. Software MAY strip these spaces.) -Rate is defined as the amount of base-currency to be exchanged for one unit of the quote-currency. -In other words, 1 quoteCurrency = rate baseCurrency. +Rate is defined as the amount of quote-currency to be exchanged for one unit of the base-currency. +In other words, 1 baseCurrency = rate quoteCurrency. ===Enumerating supported currency-pair tokens=== From ee90b8c525311a354257ef03cd8f5bfa7ed4e751 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 5 Mar 2017 05:49:02 +0000 Subject: [PATCH 0574/2326] bip-xchgrate: Drop HTML longdesc --- bip-xchgrate.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 86f7cfcf60..6d79b4cf9f 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -69,7 +69,7 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''quote'' - The currency code for the quote currency. * ''base'' - The currency code for the base currency. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. -* ''longdesc'' - Optional description, but may be longer and formatted using HTML. +* ''longdesc'' - Optional description, but may be longer and include newlines. * ''symbol'' - An Array of prefix and suffix for the quote currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. * ''digits'' - The type of digits to use for the quote currency's numbers. "arabic" should be used for common 0-9 digits. * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] @@ -127,7 +127,7 @@ Why are multiple results separated by a line-feed rather than using a JSON Array What if long descriptions require line and paragraph breaks? -* Long descriptions support HTML, which has entities for paragraphs and line breaks that do not require literal line-feeds in the data. +* Clients should word-wrap long lines, and JSON escapes newlines as "\n" which can be used doubly ("\n\n") for paragraph breaks. ==Backwards compatibility== From 00323d1a8f3b873c340b2f74300822ff8a31dbdf Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 02:19:03 +0000 Subject: [PATCH 0575/2326] bip-xchgrate: Use Unicode CLDR for locales --- bip-xchgrate.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 6d79b4cf9f..9171f24c30 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -47,7 +47,7 @@ Parameters: * ''mode'' - Always "list" for this request. * ''quote'' - If provided, the server MAY limit the results to only currency-pairs describing a currency with the given currency code(s). * ''base'' - If provided, the server MAY limit the results to only currency-pairs describing currency rates compared to the given currency code(s). -* ''locale'' - If provided, the server MAY limit the results to only currency-pairs supporting the given locale(s). +* ''locale'' - If provided, the server MAY limit the results to only currency-pairs supporting the given Unicode CLDR locale(s). Each currency-pair will receive a separate result, a JSON Object, with the following information: @@ -75,7 +75,7 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] * ''fraction_sep'' - A String to be placed between whole numbers and a fractional amount. * ''fraction_digits'' - Array of absolute minimum (even for whole numbers) number of fractional digits, minimum fractional digits when a fraction exists, and maximum number of fractional digits when absolute precision is not demanded (below which is to be rounded in an implementation-dependent manner). -* ''locale'' - If provided, a String with the applicable ISO 15897 locale. +* ''locale'' - If provided, a String with the applicable Unicode CLDR locale. * ''minpoll'' - A Number of seconds indicating a minimum time between polls to the server. Clients should be prudent about not polling too often, even if this number is low. * ''longpoll'' - If provided and true, indicates longpolling is supported by the server. * ''history'' - If provided, indicates the server has historical records going back no earlier than the POSIX timestamp provided as a value. From 12316e3dec63902529d81bb18f4e19fbee6888ce Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 02:21:22 +0000 Subject: [PATCH 0576/2326] bip-xchgrate: Include locale with enumeration --- bip-xchgrate.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 9171f24c30..317d16fc0f 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -54,6 +54,7 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''cp'' - The currency-pair token. * ''quote'' - The currency code for the quote currency. * ''base'' - The currency code for the base currency. +* ''locale'' - If provided, a String with the applicable Unicode CLDR locale. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. ===Currency-pair information=== @@ -68,6 +69,7 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''cp'' - The currency-pair token. * ''quote'' - The currency code for the quote currency. * ''base'' - The currency code for the base currency. +* ''locale'' - If provided, a String with the applicable Unicode CLDR locale. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. * ''longdesc'' - Optional description, but may be longer and include newlines. * ''symbol'' - An Array of prefix and suffix for the quote currency. Each may be either a fixed String, an Array of two Strings (negative and positive), or null. Any positive or negative symbols must be included in this prefix/suffix; it MUST NOT be implied otherwise. @@ -75,7 +77,6 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''grouping'' - An Array alternating between Numbers representing a series of digits, and Strings used as delimiters. If terminated by a zero, the final grouping is to be repeated continually. For example, the common US locale thousands grouping would be [3, ",", 0] * ''fraction_sep'' - A String to be placed between whole numbers and a fractional amount. * ''fraction_digits'' - Array of absolute minimum (even for whole numbers) number of fractional digits, minimum fractional digits when a fraction exists, and maximum number of fractional digits when absolute precision is not demanded (below which is to be rounded in an implementation-dependent manner). -* ''locale'' - If provided, a String with the applicable Unicode CLDR locale. * ''minpoll'' - A Number of seconds indicating a minimum time between polls to the server. Clients should be prudent about not polling too often, even if this number is low. * ''longpoll'' - If provided and true, indicates longpolling is supported by the server. * ''history'' - If provided, indicates the server has historical records going back no earlier than the POSIX timestamp provided as a value. From a361076d49559ea037f685b9a15dd3538f324a60 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 02:41:09 +0000 Subject: [PATCH 0577/2326] bip-xchgrate: Add examples --- bip-xchgrate.mediawiki | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 317d16fc0f..68d1f071dd 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -57,6 +57,14 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''locale'' - If provided, a String with the applicable Unicode CLDR locale. * ''desc'' - Optional description. For example, it could be "Based on Florida BTM prices." or any other short String that provides information useful to the user. SHOULD be shorter than 45 characters. +Example: + + Request: http://api.example.tld/?mode=list"e=USD&base=XBT&locale=en_US,en_GB + Result: + {"cp":"XBTUSD-ver4", "quote":"USD", "base": "XBT", "locale": "en_US", "desc": "Smoothed averages"} + {"cp":"2", "quote":"USD", "base": "XBT", "locale": "en_US", "desc": "Updated per-trade"} + {"cp":"XBTUSD-european", "quote":"USD", "base": "XBT", "locale": "en_GB"} + ===Currency-pair information=== Parameters: @@ -82,6 +90,13 @@ Each currency-pair will receive a separate result, a JSON Object, with the follo * ''history'' - If provided, indicates the server has historical records going back no earlier than the POSIX timestamp provided as a value. * ''archive'' - If provided, indicates the server no longer has current rates, and has no historical rates more recent than the POSIX timestamp provided as a value. +Example: + + Request: http://api.example.tld/?mode=info&cp=XBTUSD-ver4,2 + Result: + {"cp":"XBTUSD-ver4", "quote":"USD", "base": "XBT", "locale": "en_US", "desc": "Smoothed averages", "longdesc": "USD price quotes as compared to Bitcoin value\n\nRecommended for casual usage", "symbol": [["-$", "$"], null], "digits": "arabic", "grouping": [3, ",", 0], "fraction_sep": ".", "fraction_digits": [0, 2, 2], "minpoll": 300, "longpoll": true, "history": 1457231416} + {"cp":"2", "quote":"USD", "base": "XBT", "locale": "en_US", "desc": "Updated per-trade", "longdesc": "Maximum precision USD price quotes as compared to Bitcoin value", "symbol": [["-$", "$"], null], "digits": "arabic", "grouping": [3, ",", 0], "fraction_sep": ".", "fraction_digits": [0, 2, 2], "minpoll": 3600, "longpoll": false, "history": 1467458333.1225} + ===Current exchange rate=== Parameters: @@ -97,6 +112,13 @@ Each currency-pair receives a separate result (a JSON Object) with all requested * ''time'' - The time (as a POSIX timestamp) the rate information is applicable to (should be approximately the request time). * ''rates'' - A JSON Object with each rate type provided as a key, and a Number as the value specifying the rate. +Example: + + Request: http://api.example.tld/?mode=rate&cp=XBTUSD-ver4,2&type=typical,high + Result: + {"cp":"XBTUSD-ver4", "time": 1488767410.5463133, "rates": {"typical": 1349.332215, "high": 1351.2}} + {"cp":"2", "time": 1488767410, "rates": {"typical": 1350.111332}} + ===Historical exchange rates=== Parameters: @@ -111,6 +133,29 @@ Parameters: A result is provided for each currency-pair and timestamp record, in the same format as the current exchange rate request. Records MUST be provided in chronological order, but only within the scope of the applicable currency-pair (ie, it is okay to send the full history for one currency-pair, and then the full history for the next; or to intermix them out of any given order). +Example: + + Request: http://api.example.tld/?mode=history&cp=XBTUSD-ver4,2&type=typical&ratedelta=0.1&timedelta=10&from=1488759998&to=1488760090 + Result: + {"cp":"XBTUSD-ver4", "time": 1488760000, "rates": {"typical": 1300}} + {"cp":"XBTUSD-ver4", "time": 1488760010, "rates": {"typical": 1301.1}} + {"cp":"XBTUSD-ver4", "time": 1488760020, "rates": {"typical": 1320}} + {"cp":"XBTUSD-ver4", "time": 1488760030, "rates": {"typical": 1305}} + {"cp":"2", "time": 1488760000.1, "rates": {"typical": 1300}} + {"cp":"2", "time": 1488760010.2, "rates": {"typical": 1301.1}} + {"cp":"2", "time": 1488760020.2, "rates": {"typical": 1320.111332}} + {"cp":"2", "time": 1488760031, "rates": {"typical": 1305.222311}} + {"cp":"XBTUSD-ver4", "time": 1488760040, "rates": {"typical": 1303.33}} + {"cp":"2", "time": 1488760042, "rates": {"typical": 1303.33}} + {"cp":"XBTUSD-ver4", "time": 1488760050, "rates": {"typical": 1305}} + {"cp":"2", "time": 1488760052, "rates": {"typical": 1307}} + {"cp":"XBTUSD-ver4", "time": 1488760060, "rates": {"typical": 1309}} + {"cp":"XBTUSD-ver4", "time": 1488760072, "rates": {"typical": 1308}} + {"cp":"2", "time": 1488760062, "rates": {"typical": 1309.55555555}} + {"cp":"2", "time": 1488760072, "rates": {"typical": 1308}} + {"cp":"XBTUSD-ver4", "time": 1488760082, "rates": {"typical": 1309}} + {"cp":"2", "time": 1488760082, "rates": {"typical": 1309.1}} + ==Motivation== End users often desire to see fiat currency information in their Bitcoin wallet software. From 43aa6f81901c39db070a685eb28578651c22c7c4 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 02:42:55 +0000 Subject: [PATCH 0578/2326] bip-xchgrate: Note authentication --- bip-xchgrate.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index 68d1f071dd..fbf17cd971 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -25,6 +25,8 @@ Four requests are defined, which are all made by a GET request to a common URI w All matching parameters may be specified with multiple comma-separated values, which are to be interpreted as "any of these". Each result is always in JSON format, with a line-feed (never a carriage-return) separating multiple results. +Authentication for subscription-based services MAY be supported using standard HTTP authentication. + To be BIP compatible, servers MUST support at least one currency-pair compared to XBT. All inquiries for bitcoin amounts MUST be specified in XBT, even if the presentation to the end user is in another unit. (FIXME: or should this be satoshis?) From cea6be598d3ad90e1e439ab05f1bfd695e900431 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 22:08:51 +0000 Subject: [PATCH 0579/2326] bip-xchgrate: history bounds and "nearest" flag --- bip-xchgrate.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index fbf17cd971..d0cf7eeade 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -130,11 +130,15 @@ Parameters: * ''type'' - Type of exchange rate data being requested. May be "high", "low", "average", "typical", or any other arbitrary name. If omitted, the server may provide any rates it deems appropriate. * ''from'' - POSIX timestamp the results should begin with. * ''to'' - POSIX timestamp the results should end with. If omitted, the present time shall be used. +* ''nearest'' - If provided and true, indicates that only the nearest timestamp to "from" must be returned, and a range is not desired. ("to" should be omitted in this case.) * ''ratedelta'', ''timedelta'' - If specified, the server may omit data where the rate or time has not changed since the last provided rate and time. If both are provided, either a significant rate change OR time change should trigger a new record in the results. A result is provided for each currency-pair and timestamp record, in the same format as the current exchange rate request. Records MUST be provided in chronological order, but only within the scope of the applicable currency-pair (ie, it is okay to send the full history for one currency-pair, and then the full history for the next; or to intermix them out of any given order). +If there is no exact record for the times specified by "from" and/or "to", a single record before "from" and/or after "to" should also be included. +This is not necessary when only the nearest record is requested, or when "to" is omitted (ie, ending at the most recent record). + Example: Request: http://api.example.tld/?mode=history&cp=XBTUSD-ver4,2&type=typical&ratedelta=0.1&timedelta=10&from=1488759998&to=1488760090 From d5600c5b748289fab53f87dff089a407602e052b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 6 Mar 2017 22:10:04 +0000 Subject: [PATCH 0580/2326] bip-xchgrate: Recommend HTTPS --- bip-xchgrate.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-xchgrate.mediawiki b/bip-xchgrate.mediawiki index d0cf7eeade..00a96ed9cb 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-xchgrate.mediawiki @@ -26,6 +26,7 @@ All matching parameters may be specified with multiple comma-separated values, w Each result is always in JSON format, with a line-feed (never a carriage-return) separating multiple results. Authentication for subscription-based services MAY be supported using standard HTTP authentication. +It is recommended to use TLS (HTTPS), so that MITM attackers cannot deceive the client. To be BIP compatible, servers MUST support at least one currency-pair compared to XBT. All inquiries for bitcoin amounts MUST be specified in XBT, even if the presentation to the end user is in another unit. From 5ad92f06de1036b650bf0bd40c7f89eb5059cb2d Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Wed, 8 Mar 2017 11:46:12 -0500 Subject: [PATCH 0581/2326] Add BIP 100, as currently implemented. --- bip-0100.mediawiki | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 bip-0100.mediawiki diff --git a/bip-0100.mediawiki b/bip-0100.mediawiki new file mode 100644 index 0000000000..67c2b4c878 --- /dev/null +++ b/bip-0100.mediawiki @@ -0,0 +1,66 @@ +
+  BIP: 100
+  Title: Dynamic maximum block size by miner vote
+  Author: Jeff Garzik 
+          Tom Harding 
+          Dagur Valberg Johannsson 
+  Status: Draft
+  Type: Standards Track
+  Created: 2015-06-11
+  License: BSD-2-Clause
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0100
+
+ +==Abstract== + +Replace the static 1M block size hard limit with a hard limit set by coinbase vote, conducted on the same schedule as difficulty retargeting. + +==Motivation== + +Miners directly feel the effects, both positive and negative, of any maximum block size change imposed by their peers. Larger blocks allow more growth in the on-chain ecosystem, while smaller blocks reduce resource requirements network-wide. Miners also act as an efficient proxy for the rest of the ecosystem, since they are paid in the tokens collected for the blocks they create. + +A simple deterministic system is specified, whereby a 75% mining supermajority may activate a change to the maximum block size each 2016 blocks. Each change is limited to a 5% increase from the previous block size hard limit, or a decrease of similar magnitude. Among adopting nodes, there will be no disagreement on the evolution of the maximum block size. + +The system is compatible with emergent consensus, but whereas under that system a miner may choose to accept any size block, a miner following BIP100 observes the 75% supermajority rule, and the 5% change limit rule. Excessive-block values signaled by emergent consensus blocks are considered in the calculation of the BIP100 block size hard limit, and the BIP100 calculated maximum block size is signaled as an excessive-block value for the benefit of all observers. + +==Specification== + +===Dynamic Maximum Block Size=== +# Initial value of hardLimit is 1000000 bytes, preserving current system. +# Changing hardLimit is accomplished by encoding a proposed value, a vote, within a block's coinbase scriptSig, and by processing the votes contained in the previous retargeting period.

+## Vote encoding +### A vote is represented as a positive megabyte value using the BIP100 pattern

/BIP100/B[0-9]+/

Example: /BIP100/B8/ is a vote for a 8000000-byte hardLimit.

+### If the block height is encoded at the start of the coinbase scriptSig, as per BIP34, it is ignored. +### Only the first BIP100 pattern match is processed in "Maximum block size recalculation" below. +### A valid megabyte value is represented by consecutive base-ten digits. +### If no BIP100 pattern is matched, the first matching emergent consensus pattern /EB[0-9]+/, if any, is accepted as the megabyte vote.

+## Maximum block size recalculation +### A new hardLimit is calculated after each difficulty adjustment period of 2016 blocks, and applies to the next 2016 blocks. +### Absent/invalid votes are counted as votes for the current hardLimit. +### The votes of the previous 2016 blocks are sorted by megabyte vote. +### Raising hardLimit

+#### The raise value is defined as the vote of the 1512th highest block, converted to bytes. +#### If the resultant raise value is greater than (current hardLimit * 1.05) rounded down to the nearest byte, it is set to that value. +#### If the resultant raise value is greater than current hardLimit, the raise value becomes the new hardLimit and the recalculation is complete.

+### Lowering hardlimit

+#### The lower value is defined as the vote of the 1512th lowest block, converted to bytes. +#### If the resultant lower value is less than (current hardLimit / 1.05) rounded down to the nearest byte, it is set to that value. +#### If the resultant lower value is less than current hardLimit, the lower value becomes the new hardLimit and the recalculation is complete.

+### Otherwise, new hardLimit remains the same as current hardLimit. + +===Signature Hashing Operations Limits=== +# The per-block signature hashing operations limit is scaled to (hardLimit rounded up to nearest megabyte)/50. +# A maximum serialized transaction size of 1000000 bytes is imposed. + +===Publication of hardLimit=== +# For the benefit of emergent consensus nodes, hardLimit is published. Example: a complete coinbase string might read

/BIP100/B8/EB2.123456/

which indicates a vote for 8M maximum block size, and an enforced hardLimit of 2.123456 megabytes for the block containing the coinbase string. + +==Deployment== + +This BIP is presumed deployed and activated as of block height 449568 by implementing nodes on the bitcoin mainnet. It has no effect until a raise value different from 1M is observed, which requires at least 1512 of 2016 blocks to vote differently from 1M. + +==Backward compatibility== + +The first block larger than 1M will create a network partition, as nodes with a fixed 1M hard limit reject that block. + From 29584bb19444948c019ecee855e575b0e76d9cbc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 14 Mar 2017 23:15:17 +0000 Subject: [PATCH 0582/2326] Assign BIP 171: Currency/exchange rate information API --- README.mediawiki | 7 +++++++ bip-xchgrate.mediawiki => bip-0171.mediawiki | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) rename bip-xchgrate.mediawiki => bip-0171.mediawiki (98%) diff --git a/README.mediawiki b/README.mediawiki index 1398ca383e..f5f0db3392 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -658,6 +658,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Matt Corallo | Standard | Draft +|- +| [[bip-0171.mediawiki|171]] +| Applications +| Currency/exchange rate information API +| Luke Dashjr +| Standard +| Draft |} diff --git a/bip-xchgrate.mediawiki b/bip-0171.mediawiki similarity index 98% rename from bip-xchgrate.mediawiki rename to bip-0171.mediawiki index 00a96ed9cb..237d233d03 100644 --- a/bip-xchgrate.mediawiki +++ b/bip-0171.mediawiki @@ -1,10 +1,10 @@
-  BIP: ?
+  BIP: 171
   Layer: Applications
   Title: Currency/exchange rate information API
   Author: Luke Dashjr 
   Comments-Summary: No comments yet.
-  Comments-URI: ?
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0171
   Status: Draft
   Type: Standards Track
   Created: 2017-03-04
@@ -28,7 +28,7 @@ Each result is always in JSON format, with a line-feed (never a carriage-return)
 Authentication for subscription-based services MAY be supported using standard HTTP authentication.
 It is recommended to use TLS (HTTPS), so that MITM attackers cannot deceive the client.
 
-To be BIP  compatible, servers MUST support at least one currency-pair compared to XBT.
+To be BIP 171 compatible, servers MUST support at least one currency-pair compared to XBT.
 All inquiries for bitcoin amounts MUST be specified in XBT, even if the presentation to the end user is in another unit.
 (FIXME: or should this be satoshis?)
 

From d9396155350b16b098a0d0b5ec10da80ebd96d5f Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Tue, 14 Mar 2017 23:27:57 +0000
Subject: [PATCH 0583/2326] Propagate summary tone of BIP Comments to their
 applicable BIP preambles

Affects: BIPs 38, 39, 42, 44, 47, 60, 61, 74, 75, 90, 150, 151, 152
---
 bip-0038.mediawiki | 2 +-
 bip-0039.mediawiki | 2 +-
 bip-0042.mediawiki | 2 +-
 bip-0044.mediawiki | 2 +-
 bip-0047.mediawiki | 2 +-
 bip-0060.mediawiki | 2 +-
 bip-0061.mediawiki | 2 +-
 bip-0074.mediawiki | 2 +-
 bip-0075.mediawiki | 2 +-
 bip-0090.mediawiki | 2 +-
 bip-0150.mediawiki | 2 +-
 bip-0151.mediawiki | 2 +-
 bip-0152.mediawiki | 2 +-
 13 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki
index e1e35585ec..bfe1f4ab61 100644
--- a/bip-0038.mediawiki
+++ b/bip-0038.mediawiki
@@ -4,7 +4,7 @@
   Title: Passphrase-protected private key
   Author: Mike Caldwell 
           Aaron Voisine 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Discourage for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0038
   Status: Draft (Some confusion applies: The announcements for this never made it to the list, so it hasn't had public discussion)
   Type: Standards Track
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index 4a6b41e0d2..6ba8af0049 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -6,7 +6,7 @@
           Pavol Rusnak 
           Aaron Voisine 
           Sean Bowe 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Discourage for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0039
   Status: Proposed
   Type: Standards Track
diff --git a/bip-0042.mediawiki b/bip-0042.mediawiki
index 1b80605efd..00ac10c5ef 100644
--- a/bip-0042.mediawiki
+++ b/bip-0042.mediawiki
@@ -3,7 +3,7 @@
   Layer: Consensus (soft fork)
   Title: A finite monetary supply for Bitcoin
   Author: Pieter Wuille 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Recommended for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0042
   Status: Draft
   Type: Standards Track
diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki
index b13ba54ebe..fcafeaeb03 100644
--- a/bip-0044.mediawiki
+++ b/bip-0044.mediawiki
@@ -4,7 +4,7 @@
   Title: Multi-Account Hierarchy for Deterministic Wallets
   Author: Marek Palatinus 
           Pavol Rusnak 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Mixed review (one person)
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0044
   Status: Proposed
   Type: Standards Track
diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki
index e16dd7f9b8..ef680a06f8 100644
--- a/bip-0047.mediawiki
+++ b/bip-0047.mediawiki
@@ -8,7 +8,7 @@ RECENT CHANGES:
   Layer: Applications
   Title: Reusable Payment Codes for Hierarchical Deterministic Wallets
   Author: Justus Ranvier 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Discourage for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0047
   Status: Draft
   Type: Informational
diff --git a/bip-0060.mediawiki b/bip-0060.mediawiki
index 4627dfbef0..8e9f289f05 100644
--- a/bip-0060.mediawiki
+++ b/bip-0060.mediawiki
@@ -3,7 +3,7 @@
   Layer: Peer Services
   Title: Fixed Length "version" Message (Relay-Transactions Field)
   Author: Amir Taaki 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Discouraged for implementation (one person)
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0060
   Status: Draft
   Type: Standards Track
diff --git a/bip-0061.mediawiki b/bip-0061.mediawiki
index 2060658500..1e3d41f857 100644
--- a/bip-0061.mediawiki
+++ b/bip-0061.mediawiki
@@ -3,7 +3,7 @@
   Layer: Peer Services
   Title: Reject P2P message
   Author: Gavin Andresen 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Controversial; some recommendation, and some discouragement
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0061
   Status: Final
   Type: Standards Track
diff --git a/bip-0074.mediawiki b/bip-0074.mediawiki
index d1f1a231ee..01fcf2c388 100644
--- a/bip-0074.mediawiki
+++ b/bip-0074.mediawiki
@@ -3,7 +3,7 @@
   Layer: Applications
   Title: Allow zero value OP_RETURN in Payment Protocol
   Author: Toby Padilla 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Discourage for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0074
   Status: Draft
   Type: Standards Track
diff --git a/bip-0075.mediawiki b/bip-0075.mediawiki
index 2a6fdd580e..1a8474f2d9 100644
--- a/bip-0075.mediawiki
+++ b/bip-0075.mediawiki
@@ -6,7 +6,7 @@
           Matt David 
           Aaron Voisine 
           James MacWhyte 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Recommended for implementation (one person)
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0075
   Status: Draft
   Type: Standards Track
diff --git a/bip-0090.mediawiki b/bip-0090.mediawiki
index 653e40dc19..a2d3456e66 100644
--- a/bip-0090.mediawiki
+++ b/bip-0090.mediawiki
@@ -3,7 +3,7 @@
   Layer: Consensus (hard fork)
   Title: Buried Deployments
   Author: Suhas Daftuar 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Mostly Recommended for implementation, with some Discouragement
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0090
   Status: Draft
   Type: Informational
diff --git a/bip-0150.mediawiki b/bip-0150.mediawiki
index e3f74f5228..1fe4582b85 100644
--- a/bip-0150.mediawiki
+++ b/bip-0150.mediawiki
@@ -3,7 +3,7 @@
   Layer: Peer Services
   Title: Peer Authentication
   Author: Jonas Schnelli 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Discouraged for implementation (one person)
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0150
   Status: Draft
   Type: Standards Track
diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki
index 228f66dc3d..a01a8bbe83 100644
--- a/bip-0151.mediawiki
+++ b/bip-0151.mediawiki
@@ -3,7 +3,7 @@
   Layer: Peer Services
   Title: Peer-to-Peer Communication Encryption
   Author: Jonas Schnelli 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Controversial; some recommendation, and some discouragement
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0151
   Status: Draft
   Type: Standards Track
diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 0d2b65cc29..8ea3701fc0 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -3,7 +3,7 @@
   Layer: Peer Services
   Title: Compact Block Relay
   Author: Matt Corallo 
-  Comments-Summary: No comments yet.
+  Comments-Summary: Unanimously Recommended for implementation
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0152
   Status: Draft
   Type: Standards Track

From 8b4f280c4c18fd603f154bdcd3c3699391cd231e Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 17 Mar 2017 21:52:33 +0000
Subject: [PATCH 0584/2326] bip-sizefp: New BIP for block excess size/weight
 fraud proofs

---
 bip-sizefp.mediawiki | 131 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 131 insertions(+)
 create mode 100644 bip-sizefp.mediawiki

diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki
new file mode 100644
index 0000000000..4ea3b3348d
--- /dev/null
+++ b/bip-sizefp.mediawiki
@@ -0,0 +1,131 @@
+
+  BIP: ?
+  Layer: Peer Services
+  Title: Block size/weight fraud proof
+  Author: Luke Dashjr 
+  Comments-Summary: No comments yet.
+  Comments-URI: ?
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-03-17
+  License: BSD-2-Clause
+
+ +==Abstract== + +A fraud proof that enables light clients to detect oversized (or overweight) blocks. + +==Copyright== + +This BIP is licensed under the BSD 2-clause license. + +==Specification== + +===Proof format=== + +* varint: ceil(log2(number of transactions in block)) +* varint: number of size components in stripped-size proof +* foreach: +** varint: number of transactions represented by this size-component +** if zero: +*** (this indicates a full tx size proof) +*** 256-bit: SHA2 midstate up until just before the final SHA2 chunk +*** varint: total size of tx +*** uint8: size of final SHA2 chunk (0-55) +*** 0-55 bytes: final SHA2 chunk +** if one or more: +*** (this indicates minimal tx size counting) +*** 256-bit: SHA2 hash of merkle link +* varint: number of size components in full-size proof (zero in case of a size-exceeded proof; non-zero for a weight-exceeded proof) +* foreach: (same as with stripped-size proof) + +===Proof verification=== + +To verify an individual size proof: + +#Check that at least one size component is a full tx size proof. (At least one size component MUST be a full tx size proof.) +#Determine the minimum number of transactions in the block (minTxCount). It is either pow(ceil(log2(txcount)) - 1, 2), or the position of the last full tx proof (minus one, if using 0-based positions). +#Calculate the minimum transaction-data size as 60 bytes * minTxCount. +#For each full tx size proof: +##Subtract the minimal 60 bytes it is presumed to consume, and add the claimed total size of tx. +##Take the SHA2 midstate, and update it with the final SHA2 chunk (which needs to be padded, including with the total tx size). The final SHA2 hash is the transaction id. +#Build the merkle root, and compare it to the block header. +#Check that if there are any duplicate merkle links, there are no full tx proofs on the right side of them. +#Add 80 bytes, plus the size of the tx-count varint, to the calculated size. +#The calculated size is returned as the minimum possible size of the block. + +For the full-size proof, each transaction should be assumed to be at a minimum the stripped-size rather than the fixed 60 bytes. + +To verify the complete weight proof: + +# Verify the stripped-size proof. Save the resulting minimum possible size (call it minStrippedSize). +# Verify the full-size proof. Save the resulting minimum possible size (call it minFullSize). +# Calculate minFullSize + (minStrippedSize * 3). This is the minimum possible block weight. +# Compare the minimum possible block weight to the applicable block weight limit. + +===Creation of proofs=== + +Proofs should ideally use the smallest amount of data required to prove excess of the limit. +The most obvious mechanism in doing so, would be to include full tx size proofs for the largest transactions until the limit is exceeded. +However, in some cases, a smaller size may be accomplished by collapsing more merkle links. + +Because optimisation of proof size may be complicated, nodes are not required to implement it in any particular manner, so long as the proofs meet the requirements given above in [[#proof-verification|Proof verification]]. + +===Network protocol=== + +If a light client detects that one or more of its peers do not consider the block it knows to have the most work as their best block, it should inquire with all those peers for a fraud proof by sending a new message getfraud, with a block locator (between the last common block, and the presumed best tip) as the sole parameter (extra parameters should be ignored). + +Compatible nodes will respond with a (new) fraud message, which has 2-3 parameters: + +* uint256: The hash of the most recent block in the locator (or a parent thereof) that it has checked. In the event of an invalid block, this should be the exact invalid block's hash (post-invalid blocks should be treated as unchecked, even if the node has independently checked them for some reason). +* varint: Fraud proof type code +** 0 = Block is valid +** 1 = No fraud proof available +** 2 = Size/weight exceeded +* (For type 2) the fraud proof + +If none of the blocks in the locator are recognised, compatible nodes should send a fraud message with no parameters. +(To avoid this outcome, clients may include a known-common block in the locator.) + +In the event that the peer claims a block earlier than the client's tip is valid, the light client should prepare a new locator between that block and its tip, and rerequest getfraud until it has determined which block the peer rejects and why. + +Once a block is proven to be invalid, the light client should never consider any blockchain including it as a candidate for the best chain. +It should not recheck blocks known to be valid, nor continue proving it from other nodes. +(To avoid doubt: the user MAY be given the opportunity to override any rejections, but should be warned of the implications of doing so.) + +If an invalid fraud proof is provided, the client SHOULD CONSIDER disconnecting and possibly banning the node providing it. +However, if any change has been made to the size/weight limits, that should be taken into consideration (eg, if the limit increases, an innocent node may prove a size smaller than the limit). + +==Motivation== + +Recently, there have been proposals for hardforks to increase the block size limit. +While no consensus has been reached, proponents of these ideas often threaten and attempt to have miners force them through anyway. +As things presently are, light clients cannot detect invalid blocks at all, and could be fooled into accepting an invalid chain created in such a manner. +By supporting block size fraud proofs, light clients can protect their users from this form of unconsensual "hardfork" attempt. + +==Rationale== + +Why must a full tx size proof be included? + +* This is necessary to establish that the claimed block transaction count is correct. + +Why is the number of transactions in the block represented as a log2? + +* To avoid attacks that rely on fooling clients by claiming an amount they cannot verify. + +Why does it matter if a full tx size proof is on the right side of a duplicate merkle link? + +* We assume full tx size proofs show the number of transactions in the block. This assumption doesn't hold if the proof is provided on the right-hand side of duplicate links. + +Why a fraud proof only for oversized/overweight blocks? + +* While it is currently believed to be impossible to prove all invalid (or rather, won't-be-part-of-the-main-chain) blocks, there are regularly active proposals of miners attacking with simply oversized blocks in an attempt to force a hardfork. This specific attack can be proven, and reliably so, since the proof cannot be broken without also breaking the attempted hardfork at the same time. + +==Backwards compatibility== + +These fraud proofs protect only clients which use them. +In non-attack scenarios, they are unnecessary and clients supporting them will otherwise behave as any other. + +==Reference implementation== + +TODO From ccef12cc4226edda0222d98861f2296f6cb9e26d Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sat, 18 Mar 2017 20:09:37 +0000 Subject: [PATCH 0585/2326] Add bip for mandatory activation of segwit deployment --- README.mediawiki | 7 +++++ bip-0148.mediawiki | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 bip-0148.mediawiki diff --git a/README.mediawiki b/README.mediawiki index f5f0db3392..75f9b69a49 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -638,6 +638,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0148.mediawiki|148]] +| Consensus (soft fork) +| Mandatory activation of segwit deployment +| Shaolin Fry +| Standard +| Draft +|- | [[bip-0150.mediawiki|150]] | Peer Services | Peer Authentication diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki new file mode 100644 index 0000000000..82971755f1 --- /dev/null +++ b/bip-0148.mediawiki @@ -0,0 +1,74 @@ +
+  BIP: 148
+  Layer: Consensus (soft fork)
+  Title: Mandatory activation of segwit deployment
+  Author: Shaolin Fry 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0148
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-03-12
+  License: BSD-3-Clause
+           CC0-1.0
+
+ +==Abstract== + +This document specifies a BIP16 like soft fork flag day activation of the segregated witness BIP9 deployment known as "segwit". + +==Definitions== + +"existing segwit deployment" refer to the BIP9 "segwit" deployment using bit 1, between November 15th 2016 and November 15th 2017 to activate BIP141, BIP143 and BIP147. + +==Motivation== + +Segwit increases the blocksize, fixes transaction malleability, and makes scripting easier to upgrade as well as bringing many other [https://bitcoincore.org/en/2016/01/26/segwit-benefits/ benefits]. + +It is hoped that miners will respond to this BIP by activating segwit early, before this BIP takes effect. Otherwise this BIP will cause the mandatory activation of the existing segwit deployment before the end of midnight November 15th 2017. + +==Specification== + +All times are specified according to median past time. + +This BIP will be activate between midnight October 1st 2017 (epoch time 1506816000) and midnight November 15th 2017 (epoch time 1510704000) if the existing segwit deployment is not activated before epoch time 1506816000. This BIP will cease to be active when the existing segwit deployment activates. + +While this BIP is active, all blocks must set the nVersion header top 3 bits to 001 together with bit field (1<<1) (according to the existing segwit deployment). Blocks that do not signal as required will be rejected. + +=== Reference implementation === + +
+// mandatory segwit activation between Oct 1st 2017 and Nov 15th 2017 inclusive
+if (pindex->GetMedianTimePast() >= 1506816000 && pindex->GetMedianTimePast() <= 1510704000 && !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) {
+    if (!((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (pindex->nVersion & VersionBitsMask(params, Consensus::DEPLOYMENT_SEGWIT)) != 0) {
+        return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit");
+    }
+}
+
+ +https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-segwit-flagday + +==Backwards Compatibility== + +This deployment is compatible with the existing "segwit" bit 1 deployment scheduled between midnight November 15th, 2016 and midnight November 15th, 2017. + +==Rationale== + +Historically, the P2SH soft fork (BIP16) was activated using a predetermined flag day where nodes began enforcing the new rules. P2SH was successfully activated with relatively few issues + +By orphaning non-signalling blocks during the last month of the BIP9 bit 1 "segwit" deployment, this BIP can cause the existing "segwit" deployment to activate without needing to release a new deployment. + +==References== + +*[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-March/013714.html Mailing list discussion] +*[https://github.com/bitcoin/bitcoin/blob/v0.6.0/src/main.cpp#L1281-L1283 P2SH flag day activation] +*[[bip-0009.mediawiki|BIP9 Version bits with timeout and delay]] +*[[bip-0016.mediawiki|BIP16 Pay to Script Hash]] +*[[bip-0141.mediawiki|BIP141 Segregated Witness (Consensus layer)]] +*[[bip-0143.mediawiki|BIP143 Transaction Signature Verification for Version 0 Witness Program]] +*[[bip-0147.mediawiki|BIP147 Dealing with dummy stack element malleability]] +*[https://bitcoincore.org/en/2016/01/26/segwit-benefits/ Segwit benefits] + +==Copyright== + +This document dual licensed as BSD-3-Clause and CC0-1.0. + From 44b7b5300e265a82f286edacaa08c6254af5c7e1 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Mon, 20 Mar 2017 11:53:50 +0000 Subject: [PATCH 0586/2326] Grammar fix. --- bip-0148.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki index 82971755f1..601682cd7b 100644 --- a/bip-0148.mediawiki +++ b/bip-0148.mediawiki @@ -70,5 +70,5 @@ By orphaning non-signalling blocks during the last month of the BIP9 bit 1 "segw ==Copyright== -This document dual licensed as BSD-3-Clause and CC0-1.0. +This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal. From 5291558603e58a79b6505ad17e5ee595cb1bb59f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 22 Mar 2017 22:40:49 +0000 Subject: [PATCH 0587/2326] bip-sizefp: Explain how the tx size/weight proofs actually work --- bip-sizefp.mediawiki | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki index 4ea3b3348d..29d1478f82 100644 --- a/bip-sizefp.mediawiki +++ b/bip-sizefp.mediawiki @@ -109,6 +109,14 @@ Why must a full tx size proof be included? * This is necessary to establish that the claimed block transaction count is correct. +How does the full tx size proof actually prove the size? + +* The first step of SHA2 hashing is to transform the input data into chunks. The final chunk is required to include the absolute length of the input data at the end of the final chunk. Therefore, by committing to the midstate prior to the final chunk, and replaying only the final chunk, we can confirm that the claimed size matches the full transaction data being hashed. + +How does this prove the block weight? + +* The block weight defined by BIP 141 is the size of the block stripped of its segwit signatures times 3, plus the full size of the block. By proving minimal sizes of both the stripped block and the full block, a minimal weight can also be calculated. + Why is the number of transactions in the block represented as a log2? * To avoid attacks that rely on fooling clients by claiming an amount they cannot verify. From 50965e76b6441365c9bfa57c9cf7d5b425a29c84 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 22 Mar 2017 22:47:27 +0000 Subject: [PATCH 0588/2326] bip-sizefp: Add links --- bip-sizefp.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki index 29d1478f82..5f5ab643b1 100644 --- a/bip-sizefp.mediawiki +++ b/bip-sizefp.mediawiki @@ -111,11 +111,11 @@ Why must a full tx size proof be included? How does the full tx size proof actually prove the size? -* The first step of SHA2 hashing is to transform the input data into chunks. The final chunk is required to include the absolute length of the input data at the end of the final chunk. Therefore, by committing to the midstate prior to the final chunk, and replaying only the final chunk, we can confirm that the claimed size matches the full transaction data being hashed. +* The first step of SHA2 hashing is to transform the input data into chunks (per [https://tools.ietf.org/html/rfc4634#section-4.1 RFC 4634]). The final chunk is required to include the absolute length of the input data at the end of the final chunk. Therefore, by committing to the midstate prior to the final chunk, and replaying only the final chunk, we can confirm that the claimed size matches the full transaction data being hashed. How does this prove the block weight? -* The block weight defined by BIP 141 is the size of the block stripped of its segwit signatures times 3, plus the full size of the block. By proving minimal sizes of both the stripped block and the full block, a minimal weight can also be calculated. +* The block weight defined by [[bip-0141.mediawiki|BIP 141]] is the size of the block stripped of its segwit signatures times 3, plus the full size of the block. By proving minimal sizes of both the stripped block and the full block, a minimal weight can also be calculated. Why is the number of transactions in the block represented as a log2? From cc67ae995c4df0b0e1040c34f8f68848954de35a Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sat, 25 Mar 2017 03:59:43 +0000 Subject: [PATCH 0589/2326] Update code sample --- bip-0148.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki index 601682cd7b..767c084611 100644 --- a/bip-0148.mediawiki +++ b/bip-0148.mediawiki @@ -39,7 +39,7 @@ While this BIP is active, all blocks must set the nVersion header top 3 bits to
 // mandatory segwit activation between Oct 1st 2017 and Nov 15th 2017 inclusive
 if (pindex->GetMedianTimePast() >= 1506816000 && pindex->GetMedianTimePast() <= 1510704000 && !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) {
-    if (!((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (pindex->nVersion & VersionBitsMask(params, Consensus::DEPLOYMENT_SEGWIT)) != 0) {
+    if (!((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0) {
         return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit");
     }
 }

From ab705800e5e7f5c4e9c8f6c4a7bdea87446d93aa Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 25 Mar 2017 04:10:25 +0000
Subject: [PATCH 0590/2326] bip-sizefp: Minor tweaks

---
 bip-sizefp.mediawiki | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki
index 5f5ab643b1..4d166fd076 100644
--- a/bip-sizefp.mediawiki
+++ b/bip-sizefp.mediawiki
@@ -26,7 +26,7 @@ This BIP is licensed under the BSD 2-clause license.
 * varint: ceil(log2(number of transactions in block))
 * varint: number of size components in stripped-size proof
 * foreach:
-** varint: number of transactions represented by this size-component
+** varint: ceil(log2(number of transactions represented by this size-component)) + 1
 ** if zero:
 *** (this indicates a full tx size proof)
 *** 256-bit: SHA2 midstate up until just before the final SHA2 chunk
@@ -44,12 +44,13 @@ This BIP is licensed under the BSD 2-clause license.
 To verify an individual size proof:
 
 #Check that at least one size component is a full tx size proof. (At least one size component MUST be a full tx size proof.)
-#Determine the minimum number of transactions in the block (minTxCount). It is either pow(ceil(log2(txcount)) - 1, 2), or the position of the last full tx proof (minus one, if using 0-based positions).
+#Determine the minimum number of transactions in the block (minTxCount). It is either pow(ceil(log2(txcount)) - 1, 2), or the position of the last full tx proof (plus one, if using 0-based positions). Note that the last full tx proof from *either* of the size proofs (stripped-size and full-size) should be used here.
 #Calculate the minimum transaction-data size as 60 bytes * minTxCount.
 #For each full tx size proof:
 ##Subtract the minimal 60 bytes it is presumed to consume, and add the claimed total size of tx.
-##Take the SHA2 midstate, and update it with the final SHA2 chunk (which needs to be padded, including with the total tx size). The final SHA2 hash is the transaction id.
-#Build the merkle root, and compare it to the block header.
+##Take the SHA2 midstate, and update it with the final SHA2 chunk (which needs to be padded, including with the total tx size). The final SHA2 hash is the transaction id (stripped-size proof) or hash (full-size proof).
+#For the full-size proof, replace the 60 byte default with any larger sizes proven from the stripped-size proof.
+#Build the merkle root, and compare it to the block header (stripped-size proof) or witness commitment (full-size proof).
 #Check that if there are any duplicate merkle links, there are no full tx proofs on the right side of them.
 #Add 80 bytes, plus the size of the tx-count varint, to the calculated size.
 #The calculated size is returned as the minimum possible size of the block.

From 82d1537ee742be8364a6887e0c0df6cb8ab54a01 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 25 Mar 2017 05:13:52 +0000
Subject: [PATCH 0591/2326] bip-sizefp: Use "lower-bound" rather than "minimum
 possible", and address some of jtimon's suggestions

---
 bip-sizefp.mediawiki | 52 ++++++++++++++++++++++++++------------------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki
index 4d166fd076..f1f0de9093 100644
--- a/bip-sizefp.mediawiki
+++ b/bip-sizefp.mediawiki
@@ -19,6 +19,13 @@ A fraud proof that enables light clients to detect oversized (or overweight) blo
 
 This BIP is licensed under the BSD 2-clause license.
 
+==Definitions==
+
+; full tx size proof : SHA2 midstate and tail data proving the size of the full transaction data being hashed.
+; size component : Either a merkle link and height in the merkle tree thereof, or a full tx size proof.
+; full-size proof : The set of size components proving the lower-bound size of the block.
+; stripped-size proof : The set of size components proving the lower-bound size of the block when stripped of segwit witness data.
+
 ==Specification==
 
 ===Proof format===
@@ -34,7 +41,7 @@ This BIP is licensed under the BSD 2-clause license.
 *** uint8: size of final SHA2 chunk (0-55)
 *** 0-55 bytes: final SHA2 chunk
 ** if one or more:
-*** (this indicates minimal tx size counting)
+*** (this indicates default tx size counting)
 *** 256-bit: SHA2 hash of merkle link
 * varint: number of size components in full-size proof (zero in case of a size-exceeded proof; non-zero for a weight-exceeded proof)
 * foreach: (same as with stripped-size proof)
@@ -44,33 +51,26 @@ This BIP is licensed under the BSD 2-clause license.
 To verify an individual size proof:
 
 #Check that at least one size component is a full tx size proof. (At least one size component MUST be a full tx size proof.)
-#Determine the minimum number of transactions in the block (minTxCount). It is either pow(ceil(log2(txcount)) - 1, 2), or the position of the last full tx proof (plus one, if using 0-based positions). Note that the last full tx proof from *either* of the size proofs (stripped-size and full-size) should be used here.
-#Calculate the minimum transaction-data size as 60 bytes * minTxCount.
+#Determine the lower-bound number of transactions in the block (lowTxCount). It is either pow(ceil(log2(txcount)) - 1, 2), or the position of the last full tx proof (plus one, if using 0-based positions). Note that the last full tx proof from *either* of the size proofs (stripped-size and full-size) should be used here.
+#Calculate the lower-bound transaction-data size as the default size * lowTxCount.
 #For each full tx size proof:
-##Subtract the minimal 60 bytes it is presumed to consume, and add the claimed total size of tx.
+##Subtract the default size it was presumed to consume, and add the claimed total size of tx.
 ##Take the SHA2 midstate, and update it with the final SHA2 chunk (which needs to be padded, including with the total tx size). The final SHA2 hash is the transaction id (stripped-size proof) or hash (full-size proof).
 #For the full-size proof, replace the 60 byte default with any larger sizes proven from the stripped-size proof.
 #Build the merkle root, and compare it to the block header (stripped-size proof) or witness commitment (full-size proof).
 #Check that if there are any duplicate merkle links, there are no full tx proofs on the right side of them.
-#Add 80 bytes, plus the size of the tx-count varint, to the calculated size.
-#The calculated size is returned as the minimum possible size of the block.
+#Add 80 bytes, plus the size of the tx-count varint, to the calculated lower-bound size.
+#The calculated size is returned as the lower-bound possible size of the block.
 
-For the full-size proof, each transaction should be assumed to be at a minimum the stripped-size rather than the fixed 60 bytes.
+For the stripped-size proof, the default size of transactions is 60 bytes.
+For the full-size proof, it is the size established by the stripped-size proof.
 
 To verify the complete weight proof:
 
-# Verify the stripped-size proof. Save the resulting minimum possible size (call it minStrippedSize).
-# Verify the full-size proof. Save the resulting minimum possible size (call it minFullSize).
-# Calculate minFullSize + (minStrippedSize * 3). This is the minimum possible block weight.
-# Compare the minimum possible block weight to the applicable block weight limit.
-
-===Creation of proofs===
-
-Proofs should ideally use the smallest amount of data required to prove excess of the limit.
-The most obvious mechanism in doing so, would be to include full tx size proofs for the largest transactions until the limit is exceeded.
-However, in some cases, a smaller size may be accomplished by collapsing more merkle links.
-
-Because optimisation of proof size may be complicated, nodes are not required to implement it in any particular manner, so long as the proofs meet the requirements given above in [[#proof-verification|Proof verification]].
+# Verify the stripped-size proof. Save the resulting lower-bound size (call it lowStrippedSize).
+# Verify the full-size proof. Save the resulting lower-bound size (call it lowFullSize).
+# Calculate minFullSize + (minStrippedSize * 3). This is the lower-bound block weight.
+# Compare the lower-bound block weight to the applicable block weight limit.
 
 ===Network protocol===
 
@@ -91,12 +91,22 @@ If none of the blocks in the locator are recognised, compatible nodes should sen
 In the event that the peer claims a block earlier than the client's tip is valid, the light client should prepare a new locator between that block and its tip, and rerequest getfraud until it has determined which block the peer rejects and why.
 
 Once a block is proven to be invalid, the light client should never consider any blockchain including it as a candidate for the best chain.
-It should not recheck blocks known to be valid, nor continue proving it from other nodes.
+It should not recheck blocks known to be invalid, nor continue proving it from other nodes.
 (To avoid doubt: the user MAY be given the opportunity to override any rejections, but should be warned of the implications of doing so.)
 
 If an invalid fraud proof is provided, the client SHOULD CONSIDER disconnecting and possibly banning the node providing it.
 However, if any change has been made to the size/weight limits, that should be taken into consideration (eg, if the limit increases, an innocent node may prove a size smaller than the limit).
 
+==Information==
+
+===Creation of proofs===
+
+Proofs should ideally use the smallest amount of data required to prove excess of the limit.
+The most obvious mechanism in doing so, would be to include full tx size proofs for the largest transactions until the limit is exceeded.
+However, in some cases, a smaller size may be accomplished by collapsing more merkle links.
+
+Because optimisation of proof size may be complicated, nodes are not required to implement it in any particular manner, so long as the proofs meet the requirements given above in [[#proof-verification|Proof verification]].
+
 ==Motivation==
 
 Recently, there have been proposals for hardforks to increase the block size limit.
@@ -116,7 +126,7 @@ How does the full tx size proof actually prove the size?
 
 How does this prove the block weight?
 
-* The block weight defined by [[bip-0141.mediawiki|BIP 141]] is the size of the block stripped of its segwit signatures times 3, plus the full size of the block. By proving minimal sizes of both the stripped block and the full block, a minimal weight can also be calculated.
+* The block weight defined by [[bip-0141.mediawiki|BIP 141]] is the size of the block stripped of its segwit signatures times 3, plus the full size of the block. By proving lower-bound sizes of both the stripped block and the full block, a lower-bound weight can also be calculated.
 
 Why is the number of transactions in the block represented as a log2?
 

From 9f366d61f3bd4efabf0337a274db5ea4599d9a9c Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 25 Mar 2017 05:21:57 +0000
Subject: [PATCH 0592/2326] Assign BIP 180: Block size/weight fraud proof

---
 README.mediawiki                           | 7 +++++++
 bip-sizefp.mediawiki => bip-0180.mediawiki | 4 ++--
 2 files changed, 9 insertions(+), 2 deletions(-)
 rename bip-sizefp.mediawiki => bip-0180.mediawiki (99%)

diff --git a/README.mediawiki b/README.mediawiki
index f5f0db3392..c044fc64b5 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -665,6 +665,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Luke Dashjr
 | Standard
 | Draft
+|-
+| [[bip-0180.mediawiki|180]]
+| Peer Services
+| Block size/weight fraud proof
+| Luke Dashjr
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-sizefp.mediawiki b/bip-0180.mediawiki
similarity index 99%
rename from bip-sizefp.mediawiki
rename to bip-0180.mediawiki
index f1f0de9093..74afdb12a0 100644
--- a/bip-sizefp.mediawiki
+++ b/bip-0180.mediawiki
@@ -1,10 +1,10 @@
 
-  BIP: ?
+  BIP: 180
   Layer: Peer Services
   Title: Block size/weight fraud proof
   Author: Luke Dashjr 
   Comments-Summary: No comments yet.
-  Comments-URI: ?
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0180
   Status: Draft
   Type: Standards Track
   Created: 2017-03-17

From c8406d3dd6c3b4e09ff58732f6eb60ef9a222734 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 25 Mar 2017 08:04:36 +0000
Subject: [PATCH 0593/2326] bip-0180: Elaborate more on merkle stuff

---
 bip-sizefp.mediawiki | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/bip-sizefp.mediawiki b/bip-sizefp.mediawiki
index f1f0de9093..e74c602331 100644
--- a/bip-sizefp.mediawiki
+++ b/bip-sizefp.mediawiki
@@ -57,8 +57,7 @@ To verify an individual size proof:
 ##Subtract the default size it was presumed to consume, and add the claimed total size of tx.
 ##Take the SHA2 midstate, and update it with the final SHA2 chunk (which needs to be padded, including with the total tx size). The final SHA2 hash is the transaction id (stripped-size proof) or hash (full-size proof).
 #For the full-size proof, replace the 60 byte default with any larger sizes proven from the stripped-size proof.
-#Build the merkle root, and compare it to the block header (stripped-size proof) or witness commitment (full-size proof).
-#Check that if there are any duplicate merkle links, there are no full tx proofs on the right side of them.
+#Build the merkle root, and compare it to the block header (stripped-size proof) or witness commitment (full-size proof). Ensure when building the merkle root, that there are no duplicate merkle links, and each merkle link claims to represent the correct number of represented transactions.
 #Add 80 bytes, plus the size of the tx-count varint, to the calculated lower-bound size.
 #The calculated size is returned as the lower-bound possible size of the block.
 
@@ -118,7 +117,7 @@ By supporting block size fraud proofs, light clients can protect their users fro
 
 Why must a full tx size proof be included?
 
-* This is necessary to establish that the claimed block transaction count is correct.
+* This is necessary to establish that the claimed block transaction count is not inflated. Otherwise, a prover could claim any number of represented transactions for merkle links, and rely on the default size alone to exceed the limit.
 
 How does the full tx size proof actually prove the size?
 

From 679c5495d2b0e0a6fd7da61411328144322a0253 Mon Sep 17 00:00:00 2001
From: Sean Bowe 
Date: Mon, 27 Mar 2017 10:58:06 -0600
Subject: [PATCH 0594/2326] New BIP (0199) - HTLC transactions

---
 README.mediawiki   |  7 ++++
 bip-0199.mediawiki | 81 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+)
 create mode 100644 bip-0199.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index ace58cbd25..151f03c555 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -679,6 +679,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Luke Dashjr
 | Standard
 | Draft
+|-
+| [[bip-0199.mediawiki|199]]
+| Applications
+| Hashed Time-Locked Contract transactions
+| Sean Bowe, Daira Hopwood
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-0199.mediawiki b/bip-0199.mediawiki
new file mode 100644
index 0000000000..887804a3de
--- /dev/null
+++ b/bip-0199.mediawiki
@@ -0,0 +1,81 @@
+
+  BIP: 199
+  Layer: Applications
+  Title: Hashed Time-Locked Contract transactions
+  Author: Sean Bowe 
+          Daira Hopwood 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0199
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-03-27
+  License: BSD-3-Clause
+           CC0-1.0
+
+ +==Abstract== + +This BIP describes a script for generalized off-chain contract negotiation. + +==Summary== + +A Hashed Time-Locked Contract (HTLC) is a script that permits a designated party (the "seller") to spend funds by disclosing the preimage of a hash. It also permits +a second party (the "buyer") to spend the funds after a timeout is reached, in a refund situation. + +The script takes the following form: + + OP_IF + [HASHOP] OP_EQUALVERIFY OP_DUP OP_HASH160 + OP_ELSE + [TIMEOUTOP] OP_DROP OP_DUP OP_HASH160 + OP_ENDIF + OP_EQUALVERIFY + OP_CHECKSIG + +[HASHOP] is either OP_SHA256 or OP_HASH160. + +[TIMEOUTOP] is either OP_CHECKSEQUENCEVERIFY or OP_CHECKLOCKTIMEVERIFY. + +===Interaction=== + +* Victor (the "buyer") and Peggy (the "seller") exchange public keys and mutually agree upon a timeout threshold. Peggy provides a hash digest. Both parties can now +construct the script and P2SH address for the HTLC. +* Victor sends funds to the P2SH address. +* Either: +** Peggy spends the funds, and in doing so, reveals the preimage to Victor in the transaction; OR +** Victor recovers the funds after the timeout threshold. + +Victor is interested in a lower timeout to reduce the amount of time that his funds are encumbered in the event that Peggy does not reveal the preimage. Peggy is +interested in a higher timeout to reduce the risk that she is unable to spend the funds before the threshold, or worse, that her transaction spending the funds does +not enter the blockchain before Victor's but does reveal the preimage to Victor anyway. + +==Motivation== + +In many off-chain protocols, secret disclosure is used as part of a settlement mechanism. In some others, the secrets themselves are valuable. HTLC transactions are +a safe and cheap method of exchanging secrets for money over the blockchain, due to the ability to recover funds from an uncooperative counterparty, and the +opportunity that the possessor of a secret has to receive the funds before such a refund can occur. + +===Lightning network=== + +In the lightning network, HTLC scripts are used to perform atomic swaps between payment channels. + +Alice constructs K and hashes it to produce L. She sends an HTLC payment to Bob for the preimage of L. Bob sends an HTLC payment to Carol for the same preimage and +amount. Only when Alice releases the preimage K does any exchange of value occur, and because the secret is divulged for each hop, all parties are compensated. If +at any point some parties become uncooperative, the process can be aborted via the refund conditions. + +===Zero-knowledge contingent payments=== + +Various practical zero-knowledge proving systems exist which can be used to guarantee that a hash preimage derives valuable information. As an example, a +zero-knowledge proof can be used to prove that a hash preimage acts as a decryption key for an encrypted sudoku puzzle solution. (See +[https://github.com/zcash/pay-to-sudoku pay-to-sudoku] for a concrete example of such a protocol.) + +HTLC transactions can be used to exchange such decryption keys for money without risk, and they do not require large or expensive-to-validate transactions. + +==Implementation== + +https://github.com/bitcoin/bitcoin/pull/7601 + +==Copyright== + +This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal. + From 60d4b512b8ca9d57b479a5ee63c6825415ac0b20 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Tue, 28 Mar 2017 18:04:22 +0100 Subject: [PATCH 0595/2326] Update BIP148 Adjust start time to Aug 1st 2017 Fix code sample logic. --- bip-0148.mediawiki | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki index 767c084611..13ad4cdc5a 100644 --- a/bip-0148.mediawiki +++ b/bip-0148.mediawiki @@ -30,16 +30,21 @@ It is hoped that miners will respond to this BIP by activating segwit early, bef All times are specified according to median past time. -This BIP will be activate between midnight October 1st 2017 (epoch time 1506816000) and midnight November 15th 2017 (epoch time 1510704000) if the existing segwit deployment is not activated before epoch time 1506816000. This BIP will cease to be active when the existing segwit deployment activates. +This BIP will be activate between midnight August 1st 2017 (epoch time 1501545600) and midnight November 15th 2017 (epoch time 1510704000) if the existing segwit deployment is not activated before epoch time 1501545600. This BIP will cease to be active when the existing segwit deployment activates. While this BIP is active, all blocks must set the nVersion header top 3 bits to 001 together with bit field (1<<1) (according to the existing segwit deployment). Blocks that do not signal as required will be rejected. === Reference implementation ===
-// mandatory segwit activation between Oct 1st 2017 and Nov 15th 2017 inclusive
-if (pindex->GetMedianTimePast() >= 1506816000 && pindex->GetMedianTimePast() <= 1510704000 && !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) {
-    if (!((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0) {
+// BIP148 mandatory segwit signalling.
+if (pindex->GetMedianTimePast() >= 1501545600 && // Tue 1 Aug 2017 00:00:00 UTC
+    pindex->GetMedianTimePast() <= 1510704000 && // Wed 15 Nov 2017 00:00:00 UTC
+    !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus()))
+{
+    // versionbits topbit and segwit flag must be set.
+    if ((pindex->nVersion & VERSIONBITS_TOP_MASK) != VERSIONBITS_TOP_BITS ||
+        (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) == 0) {
         return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit");
     }
 }

From 2a97af80db8e82d77e1d40968f39774319e23868 Mon Sep 17 00:00:00 2001
From: Cameron Garnham 
Date: Tue, 4 Apr 2017 11:38:38 +0200
Subject: [PATCH 0596/2326] Refactor Code-Example with Better Formatting

No-need to calculate the GetMedianTimePast() value twice.
---
 bip-0148.mediawiki | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki
index 13ad4cdc5a..5accfcf212 100644
--- a/bip-0148.mediawiki
+++ b/bip-0148.mediawiki
@@ -38,13 +38,14 @@ While this BIP is active, all blocks must set the nVersion header top 3 bits to
 
 
 // BIP148 mandatory segwit signalling.
-if (pindex->GetMedianTimePast() >= 1501545600 && // Tue 1 Aug 2017 00:00:00 UTC
-    pindex->GetMedianTimePast() <= 1510704000 && // Wed 15 Nov 2017 00:00:00 UTC
-    !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus()))
+int64_t nMedianTimePast = pindex->GetMedianTimePast();
+if ( (nMedianTimePast >= 1501545600) &&  // Tue 01 Aug 2017 00:00:00 UTC
+     (nMedianTimePast <= 1510704000) &&  // Wed 15 Nov 2017 00:00:00 UTC
+     (!IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) )  // Segwit is not active
 {
-    // versionbits topbit and segwit flag must be set.
-    if ((pindex->nVersion & VERSIONBITS_TOP_MASK) != VERSIONBITS_TOP_BITS ||
-        (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) == 0) {
+    bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS; // BIP9 bit set
+    bool fSegbit = (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0; // segwit bit set
+    if (!(fVersionBits && fSegbit)) {
         return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit");
     }
 }

From 1352c367a1431fef1a711edeb239fa822a564c4b Mon Sep 17 00:00:00 2001
From: Cameron Garnham 
Date: Tue, 4 Apr 2017 12:30:31 +0200
Subject: [PATCH 0597/2326] Stop BIP 148 enforced signalling if SegWit is
 Locked-In State

---
 bip-0148.mediawiki | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki
index 5accfcf212..6eb9c42f2f 100644
--- a/bip-0148.mediawiki
+++ b/bip-0148.mediawiki
@@ -37,14 +37,22 @@ While this BIP is active, all blocks must set the nVersion header top 3 bits to
 === Reference implementation ===
 
 
+// Check if Segregated Witness is Locked In
+bool IsWitnessLockedIn(const CBlockIndex* pindexPrev, const Consensus::Params& params)
+{
+    LOCK(cs_main);
+    return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == THRESHOLD_LOCKED_IN);
+}
+
 // BIP148 mandatory segwit signalling.
 int64_t nMedianTimePast = pindex->GetMedianTimePast();
 if ( (nMedianTimePast >= 1501545600) &&  // Tue 01 Aug 2017 00:00:00 UTC
      (nMedianTimePast <= 1510704000) &&  // Wed 15 Nov 2017 00:00:00 UTC
-     (!IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) )  // Segwit is not active
+     (!IsWitnessLockedIn(pindex->pprev, chainparams.GetConsensus()) &&  // Segwit is not locked in
+      !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) )   // and is not active.
 {
-    bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS; // BIP9 bit set
-    bool fSegbit = (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0; // segwit bit set
+    bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS;
+    bool fSegbit = (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0;
     if (!(fVersionBits && fSegbit)) {
         return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit");
     }

From 5f34ed741a68cb4e2aaf0343d6a4ad5f3119a3d2 Mon Sep 17 00:00:00 2001
From: Cameron Garnham 
Date: Tue, 4 Apr 2017 12:55:33 +0200
Subject: [PATCH 0598/2326] update BIP text for locked-in state

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

diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki
index 6eb9c42f2f..4dca9d768a 100644
--- a/bip-0148.mediawiki
+++ b/bip-0148.mediawiki
@@ -30,7 +30,7 @@ It is hoped that miners will respond to this BIP by activating segwit early, bef
 
 All times are specified according to median past time.
 
-This BIP will be activate between midnight August 1st 2017 (epoch time 1501545600) and midnight November 15th 2017 (epoch time 1510704000) if the existing segwit deployment is not activated before epoch time 1501545600. This BIP will cease to be active when the existing segwit deployment activates.
+This BIP will be active between midnight August 1st 2017 (epoch time 1501545600) and midnight November 15th 2017 (epoch time 1510704000) if the existing segwit deployment is not locked-in or activated before epoch time 1501545600. This BIP will cease to be active when segwit is locked-in.
 
 While this BIP is active, all blocks must set the nVersion header top 3 bits to 001 together with bit field (1<<1) (according to the existing segwit deployment). Blocks that do not signal as required will be rejected.
 

From f60bf00957ef8a18690a3269e2b24afddd65dd5b Mon Sep 17 00:00:00 2001
From: blag 
Date: Wed, 12 Apr 2017 13:11:36 -0600
Subject: [PATCH 0599/2326] Properly format so MD renders properly on GitHub

---
 bip-0039/bip-0039-wordlists.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md
index aef1a230a2..b2957cccc1 100644
--- a/bip-0039/bip-0039-wordlists.md
+++ b/bip-0039/bip-0039-wordlists.md
@@ -1,4 +1,4 @@
-#Wordlists
+# Wordlists
 
 * [English](english.txt)
 * [Japanese](japanese.txt)
@@ -8,9 +8,9 @@
 * [French](french.txt)
 * [Italian](italian.txt)
 
-##Wordlists (Special Considerations)
+## Wordlists (Special Considerations)
 
-###Japanese
+### Japanese
 
 1. **Developers implementing phrase generation or checksum verification must separate words using ideographic spaces / accommodate users inputting ideographic spaces.**  
 (UTF-8 bytes: **0xE38080**; C/C+/Java: **"\u3000"**; Python: **u"\u3000"**)  
@@ -23,7 +23,7 @@ separated phrase or tries to split the phrase input by the user, dealing with AS
 ideographic spaces may be a necessary step. As a long word split in two could be mistaken easily  
 for two smaller words (This would be a problem with any of the 3 character sets in Japanese)
 
-###Spanish
+### Spanish
 
 1. Words can be uniquely determined typing the first 4 characters (sometimes less).
 
@@ -31,12 +31,12 @@ for two smaller words (This would be a problem with any of the 3 character sets
 
 3. There are no words in common between the Spanish wordlist and any other language wordlist, therefore it is possible to detect the language with just one word.
 
-###Chinese
+### Chinese
 
 1. Chinese text typically does not use any spaces as word separators. For the sake of
 uniformity, we propose to use normal ASCII spaces (0x20) to separate words as per standard.
 
-###French
+### French
 
 Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
 ([The pull request](https://github.com/bitcoin/bips/issues/152))

From 7ca054213626ae0c1192b39cf827659823e30a17 Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Mon, 27 Mar 2017 18:40:07 +0100
Subject: [PATCH 0600/2326] BIP9 extension to allow optional, guaranteed
 activation

---
 bip-uaversionbits.mediawiki  |  71 +++++++++++++++++++++++++++++++++++
 bip-uaversionbits/states.png | Bin 0 -> 32531 bytes
 2 files changed, 71 insertions(+)
 create mode 100644 bip-uaversionbits.mediawiki
 create mode 100644 bip-uaversionbits/states.png

diff --git a/bip-uaversionbits.mediawiki b/bip-uaversionbits.mediawiki
new file mode 100644
index 0000000000..890c9f1f03
--- /dev/null
+++ b/bip-uaversionbits.mediawiki
@@ -0,0 +1,71 @@
+
+  BIP: ?
+  Title: Version bits extension with guaranteed lock-in
+  Author: Shaolin Fry 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-????
+  Status: Draft
+  Type: Informational
+  Created: 2017-02-01
+  License: BSD-3-Clause
+           CC0-1.0
+
+ +==Abstract== + +This document specifies an extension to [[bip-0009.mediawiki|BIP9]] that introduces an additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks"). + +==Motivation== + +BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and is also subject to veto by a small minority of non-signalling hashrate. + +This specification provides a way to optionally guarantee lock-in at the end of the [[bip-0009.mediawiki|BIP9]] timeout, and therefore activation. + +==Specification== + +This specification adds a new per-chain deployment parameter to the existing [[bip-0009.mediawiki|BIP9]] specification as follows: + +# The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''. + +===State transitions=== + + + +The state transition workflow is exactly the same as in [[bip-0009.mediawiki|BIP9]] with an additional rule: During the STARTED state if the '''lockinontimeout''' is set to true, the state will transition to LOCKED_IN when '''timeout''' is reached. + + case STARTED: + // BIP9 specification follows + if (GetMedianTimePast(block.parent) >= timeout) { + return (fLockInOnTimeout == true) ? THRESHOLD_LOCKED_IN : THRESHOLD_FAILED + } + int count = 0; + walk = block; + for (i = 0; i < 2016; i++) { + walk = walk.parent; + if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) { + count++; + } + } + if (count >= threshold) { + return LOCKED_IN; + } + return STARTED; + +=== Reference implementation === + +https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits + +==Deployments== + +A living list of deployment proposals can be found [[bip-0009/assignments.mediawiki|here]]. + +==References== + +[[bip-0009.mediawiki|BIP9]] + +[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013643.html Mailing list discussion] + +==Copyright== + +This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal. + diff --git a/bip-uaversionbits/states.png b/bip-uaversionbits/states.png new file mode 100644 index 0000000000000000000000000000000000000000..eabae0fd496fcf588905b794e3da2876e700d4c9 GIT binary patch literal 32531 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 literal 0 HcmV?d00001 From 9c4818947b6119226d72b170d72a881547c97055 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sun, 16 Apr 2017 17:09:18 +0100 Subject: [PATCH 0601/2326] Clarify that activation can occur earlier --- bip-uaversionbits.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-uaversionbits.mediawiki b/bip-uaversionbits.mediawiki index 890c9f1f03..2716b2063d 100644 --- a/bip-uaversionbits.mediawiki +++ b/bip-uaversionbits.mediawiki @@ -19,7 +19,7 @@ This document specifies an extension to [[bip-0009.mediawiki|BIP9]] that introdu BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and is also subject to veto by a small minority of non-signalling hashrate. -This specification provides a way to optionally guarantee lock-in at the end of the [[bip-0009.mediawiki|BIP9]] timeout, and therefore activation. +This specification provides a way to optionally guarantee lock-in at the end of the [[bip-0009.mediawiki|BIP9]] timeout, and therefore activation, while still allowing a hashrate super majority to trigger activation earlier. ==Specification== From 3432f44f6cec2f1469c2cc4e2ba23ea62f17ee44 Mon Sep 17 00:00:00 2001 From: Jonathan Cross Date: Thu, 20 Apr 2017 17:39:42 +0200 Subject: [PATCH 0602/2326] [bip-39] Typo, capitalization and trailing whitespace. --- bip-0039/bip-0039-wordlists.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md index aef1a230a2..c6be1405b8 100644 --- a/bip-0039/bip-0039-wordlists.md +++ b/bip-0039/bip-0039-wordlists.md @@ -12,15 +12,15 @@ ###Japanese -1. **Developers implementing phrase generation or checksum verification must separate words using ideographic spaces / accommodate users inputting ideographic spaces.** -(UTF-8 bytes: **0xE38080**; C/C+/Java: **"\u3000"**; Python: **u"\u3000"**) +1. **Developers implementing phrase generation or checksum verification must separate words using ideographic spaces / accommodate users inputting ideographic spaces.** +(UTF-8 bytes: **0xE38080**; C/C+/Java: **"\u3000"**; Python: **u"\u3000"**) However, code that only accepts Japanese phrases but does not generate or verify them should be fine as is. This is because when generating the seed, normalization as per the spec will automatically change the ideographic spaces into normal ASCII spaces, so as long as your code never shows the user an ASCII space separated phrase or tries to split the phrase input by the user, dealing with ASCII or Ideographic space is the same. -2. Word-wrapping doesn't work well, so making sure that words only word-wrap at one of the -ideographic spaces may be a necessary step. As a long word split in two could be mistaken easily +2. Word-wrapping doesn't work well, so making sure that words only word-wrap at one of the +ideographic spaces may be a necessary step. As a long word split in two could be mistaken easily for two smaller words (This would be a problem with any of the 3 character sets in Japanese) ###Spanish @@ -41,9 +41,9 @@ uniformity, we propose to use normal ASCII spaces (0x20) to separate words as pe Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch ([The pull request](https://github.com/bitcoin/bips/issues/152)) -1. High priority on simple and common french words. +1. High priority on simple and common French words. 2. Only words with 5-8 letters. -3. A word is fully recognizable by typing the first 4 letters (special french characters "é-è" are considered equal to "e", for exemple "museau" and "musée" can not be together). +3. A word is fully recognizable by typing the first 4 letters (special French characters "é-è" are considered equal to "e", for example "museau" and "musée" can not be together). 4. Only infinitive verbs, adjectives and nouns. 5. No pronouns, no adverbs, no prepositions, no conjunctions, no interjections (unless a noun/adjective is also popular than its interjection like "mince;chouette"). 6. No numeral adjectives. @@ -65,7 +65,7 @@ Credits: @paoloaga @Polve Words chosen using the following rules: -1. Simple and common italian words. +1. Simple and common Italian words. 2. Length between 4 and 8 characters. 3. First 4 letters must be unique between all words. 4. No accents or special characters. @@ -76,8 +76,8 @@ Words chosen using the following rules: 9. No words with double vocals (like: lineetta). 10. No words already used in other language mnemonic sets. 11. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must be at least other 3 different letters. -12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there not must be the same sequence of 3 or more letters. +12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must not be the same sequence of 3 or more letters. -Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good. +Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good. All the words have been manually selected and automatically checked against the rules. From efbcb70eb20a67cf2eab9540309afcd02556fb44 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Thu, 20 Apr 2017 17:24:17 +0100 Subject: [PATCH 0603/2326] Add backwards compatibility section --- bip-uaversionbits.mediawiki | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bip-uaversionbits.mediawiki b/bip-uaversionbits.mediawiki index 2716b2063d..e54a42fd36 100644 --- a/bip-uaversionbits.mediawiki +++ b/bip-uaversionbits.mediawiki @@ -55,6 +55,10 @@ The state transition workflow is exactly the same as in [[bip-0009.mediawiki|BIP https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits +==Backwards compatibility== + +If '''lockinontimeout''' boolean is set to false this BIP is compatible with nodes that implement BIP9. If '''lockinontimeout''' boolean is set to true, nodes that only implement BIP9 will not activate the soft fork if hashpower threshold is not reached by '''timeout''', however, those nodes will still accept the blocks generated by activated nodes. + ==Deployments== A living list of deployment proposals can be found [[bip-0009/assignments.mediawiki|here]]. From 8421908b2f65d2f64460c67c9a8cffe5c9f5cf52 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Thu, 20 Apr 2017 17:41:37 +0100 Subject: [PATCH 0604/2326] Use allocated BIP number 8 --- README.mediawiki | 7 +++++++ bip-uaversionbits.mediawiki => bip-0008.mediawiki | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) rename bip-uaversionbits.mediawiki => bip-0008.mediawiki (97%) diff --git a/README.mediawiki b/README.mediawiki index ace58cbd25..9a6631f761 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -27,6 +27,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Luke Dashjr | Process | Active +|- +| [[bip-0008.mediawiki|8]] +| +| Version bits extension with guaranteed lock-in +| Shaolin Fry +| Informational +| Draft |- style="background-color: #cfffcf" | [[bip-0009.mediawiki|9]] | diff --git a/bip-uaversionbits.mediawiki b/bip-0008.mediawiki similarity index 97% rename from bip-uaversionbits.mediawiki rename to bip-0008.mediawiki index e54a42fd36..73f0065182 100644 --- a/bip-uaversionbits.mediawiki +++ b/bip-0008.mediawiki @@ -1,5 +1,5 @@
-  BIP: ?
+  BIP: 8
   Title: Version bits extension with guaranteed lock-in
   Author: Shaolin Fry 
   Comments-Summary: No comments yet.
@@ -61,7 +61,7 @@ If '''lockinontimeout''' boolean is set to false this BIP is compatible with nod
 
 ==Deployments==
 
-A living list of deployment proposals can be found [[bip-0009/assignments.mediawiki|here]].
+A living list of deployment proposals can be found [[bip-0008/assignments.mediawiki|here]].
 
 ==References==
 

From 4cc5346ddebe93240fa2cbd7a3f876feb29d8148 Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Thu, 20 Apr 2017 17:54:48 +0100
Subject: [PATCH 0605/2326] Add assignments and move state chart

---
 bip-0008.mediawiki                         |   2 +-
 bip-0008/assignments.mediawiki             |   6 ++++++
 {bip-uaversionbits => bip-0008}/states.png | Bin
 3 files changed, 7 insertions(+), 1 deletion(-)
 create mode 100644 bip-0008/assignments.mediawiki
 rename {bip-uaversionbits => bip-0008}/states.png (100%)

diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index 73f0065182..68a8399505 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -23,7 +23,7 @@ This specification provides a way to optionally guarantee lock-in at the end of
 
 ==Specification==
 
-This specification adds a new per-chain deployment parameter to the existing [[bip-0009.mediawiki|BIP9]] specification as follows:
+This specification adds a new per-chain deployment parameter to the [[bip-0009.mediawiki|BIP9]] specification as follows:
 
 # The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''.
 
diff --git a/bip-0008/assignments.mediawiki b/bip-0008/assignments.mediawiki
new file mode 100644
index 0000000000..c18751b69c
--- /dev/null
+++ b/bip-0008/assignments.mediawiki
@@ -0,0 +1,6 @@
+==Deployments==
+
+List of deployments.
+
+State can be defined, active, failed. Dates are in UTC.
+
diff --git a/bip-uaversionbits/states.png b/bip-0008/states.png
similarity index 100%
rename from bip-uaversionbits/states.png
rename to bip-0008/states.png

From 4792246198ad7720a582d4d885e6a3c1df06f929 Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Thu, 20 Apr 2017 18:29:46 +0100
Subject: [PATCH 0606/2326] Update state workflow to reflect specification

---
 bip-0008/states.png | Bin 32531 -> 16033 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/bip-0008/states.png b/bip-0008/states.png
index eabae0fd496fcf588905b794e3da2876e700d4c9..6120782437da99930cb404c331d38f1fe1f9ee0b 100644
GIT binary patch
literal 16033
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

literal 32531
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


From 43e6486d198b1ff236994292ae565ebc87d101da Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Thu, 20 Apr 2017 18:38:18 +0100
Subject: [PATCH 0607/2326] fixup

---
 README.mediawiki    |   2 +-
 bip-0008.mediawiki  |   4 ++--
 bip-0008/states.png | Bin 16033 -> 63880 bytes
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index 9a6631f761..c07686f72f 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -30,7 +30,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 |-
 | [[bip-0008.mediawiki|8]]
 |
-| Version bits extension with guaranteed lock-in
+| Version bits with optional guaranteed lock-in
 | Shaolin Fry
 | Informational
 | Draft
diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index 68a8399505..69731fe3fd 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -1,9 +1,9 @@
 
   BIP: 8
-  Title: Version bits extension with guaranteed lock-in
+  Title: Version bits with optional guaranteed lock-in
   Author: Shaolin Fry 
   Comments-Summary: No comments yet.
-  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-????
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0008
   Status: Draft
   Type: Informational
   Created: 2017-02-01
diff --git a/bip-0008/states.png b/bip-0008/states.png
index 6120782437da99930cb404c331d38f1fe1f9ee0b..c671e0487be5d4e0726b8a7310b33b25a72fba65 100644
GIT binary patch
literal 63880
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
   BIP: 8
-  Title: Version bits with optional guaranteed lock-in
+  Title: Version bits with guaranteed lock-in
   Author: Shaolin Fry 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0008
@@ -29,7 +29,7 @@ This specification adds a new per-chain deployment parameter to the [[bip-0009.m
 
 ===State transitions===
 
-
+
 
 The state transition workflow is exactly the same as in [[bip-0009.mediawiki|BIP9]] with an additional rule: During the STARTED state if the '''lockinontimeout''' is set to true, the state will transition to LOCKED_IN when '''timeout''' is reached.
 

From 7f6a0f811cf27ab6d77e499afc81b97d6d11ced2 Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Fri, 21 Apr 2017 14:45:16 +0530
Subject: [PATCH 0609/2326] Further simplify BIP8.

There is no material change to the specification
However, lockinontimeout is just an implementation
detail, if not set the workflow is BIP9.
As a result, BIP8 is more concisely represented in the
simplified state.
---
 bip-0008.mediawiki  |  11 ++++++-----
 bip-0008/states.png | Bin 63880 -> 7771 bytes
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index f4b88df004..b5e46a66f8 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -23,19 +23,20 @@ This specification provides a way to optionally guarantee lock-in at the end of
 
 ==Specification==
 
-This specification adds a new per-chain deployment parameter to the [[bip-0009.mediawiki|BIP9]] specification as follows:
+This specification is the same as [[bip-0009.mediawiki|BIP9]] except there is no FAILED condition. The state transition from '''STARTED''' to '''LOCKED_IN''' will occur under two condition:
 
-# The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''.
+The first is when the threshold  of blocks signalling is reached as per BIP9. The second is if the timeout is still '''STARTED'''.
 
 ===State transitions===
 
 
 
-The state transition workflow is exactly the same as in [[bip-0009.mediawiki|BIP9]] with an additional rule: During the STARTED state if the '''lockinontimeout''' is set to true, the state will transition to LOCKED_IN when '''timeout''' is reached.
+During the STARTED state if the '''lockinontimeout''' is set to true, the state will transition to LOCKED_IN when '''timeout''' is reached.
 
         case STARTED:
-            // BIP9 specification follows
+            // BIP8/9 specification follows
             if (GetMedianTimePast(block.parent) >= timeout) {
+                // implementation detail: if flag set, BIP8 workflow, else BIP9 workflow.
                 return (fLockInOnTimeout == true) ? THRESHOLD_LOCKED_IN : THRESHOLD_FAILED
             }
             int count = 0;
@@ -57,7 +58,7 @@ https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits
 
 ==Backwards compatibility==
 
-If '''lockinontimeout''' boolean is set to false this BIP is compatible with nodes that implement BIP9. If '''lockinontimeout''' boolean is set to true, nodes that only implement BIP9 will not activate the soft fork if hashpower threshold is not reached by '''timeout''', however, those nodes will still accept the blocks generated by activated nodes.
+BIP8 and BIP9 deployments should not share concurrent active deployment bits. Nodes that only implement BIP9 will not activate a BIP8 soft fork if hashpower threshold is not reached by '''timeout''', however, those nodes will still accept the blocks generated by activated nodes.
 
 ==Deployments==
 
diff --git a/bip-0008/states.png b/bip-0008/states.png
index c671e0487be5d4e0726b8a7310b33b25a72fba65..0cc9de7229b9a81459b5521c4dae5808de245daa 100644
GIT binary patch
literal 7771
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

literal 63880
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

-_XVbMa&12{#@L!S@0{O-*g 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 From 647cb208b14ad37694be92a0f15a4f72e4d75089 Mon Sep 17 00:00:00 2001 From: Michael Rotarius Date: Fri, 4 Nov 2016 17:59:29 +0100 Subject: [PATCH 0610/2326] BIP44: Updated compatible wallets Typo Fixed github links --- bip-0044.mediawiki | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki index c289887ab3..cafe6e1431 100644 --- a/bip-0044.mediawiki +++ b/bip-0044.mediawiki @@ -262,12 +262,16 @@ is required and a pull request to the above file should be created. ==Compatible wallets== -* [[https://mytrezor.com|myTREZOR web wallet]] ([[https://github.com/trezor/webwallet|source]]) -* [[https://play.google.com/store/apps/details?id=com.bonsai.wallet32|Wallet32 @ Android]] ([[https://github.com/ksedgwic/Wallet32|source]]) * [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]]) * [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]]) -* [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]]) * [[https://www.coinvault.io/|CoinVault]] ([[https://github.com/CoinVault/dotblock|source]]) +* [[https://samouraiwallet.com/|Samourai Wallet]] ([[https://github.com/Samourai-Wallet/samourai-wallet-android|source]]) + +* [[https://trezor.io/|TREZOR]] ([[https://github.com/trezor/|source]]) +* [[https://www.keepkey.com/|KeepKey]] ([[https://github.com/keepkey/|source]]) +* [[https://www.ledgerwallet.com/|Ledger Wallet]] ([[https://github.com/LedgerHQ|source]]) +* [[https://21.co/learn/21-lib-wallet/|21 Machine Wallet]] ([[https://github.com/21dotco|source]]) + ==Reference== * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] From 14973bcb0956614c08b561f844a0b3746fdf5e4b Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Tue, 25 Apr 2017 18:56:21 +0530 Subject: [PATCH 0611/2326] Bug fix --- bip-0008.mediawiki | 2 +- bip-0008/states.png | Bin 7771 -> 9242 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index b5e46a66f8..3a1f2079a9 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -23,7 +23,7 @@ This specification provides a way to optionally guarantee lock-in at the end of ==Specification== -This specification is the same as [[bip-0009.mediawiki|BIP9]] except there is no FAILED condition. The state transition from '''STARTED''' to '''LOCKED_IN''' will occur under two condition: +This specification is the same as [[bip-0009.mediawiki|BIP9]] except from the STARTED state, there is no FAILED condition. The state transition from '''STARTED''' to '''LOCKED_IN''' will occur under two condition: The first is when the threshold of blocks signalling is reached as per BIP9. The second is if the timeout is still '''STARTED'''. diff --git a/bip-0008/states.png b/bip-0008/states.png index 0cc9de7229b9a81459b5521c4dae5808de245daa..6aea51428dc08c709dd616fc76289964a480bb65 100644 GIT binary patch literal 9242 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 From b7ebfb488c669ee22ac3dfdf979616bc8680cfb8 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sat, 29 Apr 2017 10:30:08 +0000 Subject: [PATCH 0612/2326] Simplify chart --- bip-0008/states.png | Bin 9242 -> 6684 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bip-0008/states.png b/bip-0008/states.png index 6aea51428dc08c709dd616fc76289964a480bb65..8d3ca71156cc4b124ae915375251892e724c455b 100644 GIT binary patch literal 6684 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 literal 9242 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 Date: Sat, 29 Apr 2017 10:37:25 +0000 Subject: [PATCH 0613/2326] BIP proposal: segwit-uasf --- bip-segwit-uasf.mediawiki | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 bip-segwit-uasf.mediawiki diff --git a/bip-segwit-uasf.mediawiki b/bip-segwit-uasf.mediawiki new file mode 100644 index 0000000000..36719f337c --- /dev/null +++ b/bip-segwit-uasf.mediawiki @@ -0,0 +1,59 @@ +

+  BIP: ?
+  Layer: Consensus (soft fork)
+  Title: Segwit deployment with versionbits and guaranteed lock-in
+  Author: Shaolin Fry 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-????
+  Status: Draft
+  Type: Standards Track
+  Created: 2017-04-14
+  License: BSD-3-Clause
+           CC0-1.0
+
+ +==Abstract== + +This document specifies a user activated soft fork for [[bip-0141.mediawiki|BIP141]], [[bip-0143.mediawiki|BIP143]] and [[bip-0147.mediawiki|BIP147]] using versionbits with guaranteed lock-in. + +==Motivation== + +Miners have been reluctant to signal the BIP9 segwit deployment despite a large portion of the Bitcoin ecosystem who want the soft fork activated. This BIP specifies a user activated soft fork (UASF) that deploys segwit again using versionbits with guaranteed lock-in on timeout if the BIP is not already locked-in or activated by the timeout. This ensures users have sufficient time to prepare and no longer require a miner supermajority, while still allowing for an earlier miner activated soft fork (MASF). + +==Reference implementation== + +https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:uasegwit-flagday + +==Specification== + +This deployment will set service bit (1<<5) as NODE_UAWITNESS. + +==Deployment== + +This BIP will be deployed by BIP8 with the name "uasegwit" and using bit 2. + +For Bitcoin mainnet, the BIP8 starttime will be midnight 16 November 2017 UTC (Epoch timestamp 1510790400) and BIP8 timeout will be 4 July 2018 UTC (Epoch timestamp 1530662400). + +For Bitcoin testnet, segwit is already activated so no deployment is specified. + +==Rationale== + +This BIP can be deployed well in advance of the BIP8 '''starttime''' so that the '''timeout''' will be sufficiently far in the future to allow Bitcoin users to uprgade in preparation. + +The '''starttime''' of this BIP is after the BIP9 "segwit" timeout to remove compatibility issues with old nodes. + +==References== + +[[bip-0008.mediawiki|BIP8]] + +[[bip-0009.mediawiki|BIP9]] + +[[bip-0141.mediawiki|BIP141]] + +[[bip-0143.mediawiki|BIP143]] + +[[bip-0147.mediawiki|BIP147]] + +==Copyright== + +This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal. From b21b63cbdfec3710071c6da75908f5e70bdd7c2a Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sun, 30 Apr 2017 08:58:03 +0000 Subject: [PATCH 0614/2326] Correct spelling and remove bit --- bip-segwit-uasf.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-segwit-uasf.mediawiki b/bip-segwit-uasf.mediawiki index 36719f337c..988bc2f8ab 100644 --- a/bip-segwit-uasf.mediawiki +++ b/bip-segwit-uasf.mediawiki @@ -30,7 +30,7 @@ This deployment will set service bit (1<<5) as NODE_UAWITNESS. ==Deployment== -This BIP will be deployed by BIP8 with the name "uasegwit" and using bit 2. +This BIP will be deployed by BIP8 with the name "uasegwit" and using bit TBD. For Bitcoin mainnet, the BIP8 starttime will be midnight 16 November 2017 UTC (Epoch timestamp 1510790400) and BIP8 timeout will be 4 July 2018 UTC (Epoch timestamp 1530662400). @@ -38,7 +38,7 @@ For Bitcoin testnet, segwit is already activated so no deployment is specified. ==Rationale== -This BIP can be deployed well in advance of the BIP8 '''starttime''' so that the '''timeout''' will be sufficiently far in the future to allow Bitcoin users to uprgade in preparation. +This BIP can be deployed well in advance of the BIP8 '''starttime''' so that the '''timeout''' will be sufficiently far in the future to allow Bitcoin users to upgrade in preparation. The '''starttime''' of this BIP is after the BIP9 "segwit" timeout to remove compatibility issues with old nodes. From e8e8e1b1e51b09161ac657c4feb488cb055cb894 Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Sun, 30 Apr 2017 09:16:22 +0000 Subject: [PATCH 0615/2326] Add ML discussion --- bip-segwit-uasf.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-segwit-uasf.mediawiki b/bip-segwit-uasf.mediawiki index 988bc2f8ab..572cffd170 100644 --- a/bip-segwit-uasf.mediawiki +++ b/bip-segwit-uasf.mediawiki @@ -44,6 +44,8 @@ The '''starttime''' of this BIP is after the BIP9 "segwit" timeout to remove com ==References== +[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-April/014234.html Mailing list discussion] + [[bip-0008.mediawiki|BIP8]] [[bip-0009.mediawiki|BIP9]] From 117862bfe61344af731a7b2719f3df9a8bc76fbc Mon Sep 17 00:00:00 2001 From: comboy Date: Sun, 30 Apr 2017 16:09:59 +0200 Subject: [PATCH 0616/2326] fix dead link in BIP66 --- bip-0066.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0066.mediawiki b/bip-0066.mediawiki index a47c82dbe7..7cc3cf2bbe 100644 --- a/bip-0066.mediawiki +++ b/bip-0066.mediawiki @@ -37,7 +37,7 @@ These operators all perform ECDSA verifications on pubkey/signature pairs, itera The following code specifies the behaviour of strict DER checking. Note that this function tests a signature byte vector which includes the 1-byte sighash flag that Bitcoin adds, even though that flag falls outside of the DER specification, and is unaffected by this proposal. The function is also not called for cases where the length of sig is 0, in order to provide a simple, short and efficiently-verifiable encoding for deliberately invalid signatures. -DER is specified in http://www.itu.int/rec/T-REC-X.690-200811-I/en . +DER is specified in https://www.itu.int/rec/T-REC-X.690/en .
 bool static IsValidSignatureEncoding(const std::vector &sig) {

From a7a89dc6a0dd27b4717486482adde86db9d7dc05 Mon Sep 17 00:00:00 2001
From: shaolinfry 
Date: Mon, 1 May 2017 01:55:33 +0000
Subject: [PATCH 0617/2326] Add compatibility section and remove bit

---
 bip-segwit-uasf.mediawiki | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/bip-segwit-uasf.mediawiki b/bip-segwit-uasf.mediawiki
index 572cffd170..bc01cb6b86 100644
--- a/bip-segwit-uasf.mediawiki
+++ b/bip-segwit-uasf.mediawiki
@@ -30,12 +30,16 @@ This deployment will set service bit (1<<5) as NODE_UAWITNESS.
 
 ==Deployment==
 
-This BIP will be deployed by BIP8 with the name "uasegwit" and using bit TBD.
+This BIP will be deployed by BIP8 with the name "segwit" and using bit TBD.
 
 For Bitcoin mainnet, the BIP8 starttime will be midnight 16 November 2017 UTC (Epoch timestamp 1510790400) and BIP8 timeout will be 4 July 2018 UTC (Epoch timestamp 1530662400).
 
 For Bitcoin testnet, segwit is already activated so no deployment is specified.
 
+==Backwards Compatibility==
+
+This deployment reuses the GBT deployment name "segwit" to maintain compatibility with existing mining software.
+
 ==Rationale==
 
 This BIP can be deployed well in advance of the BIP8 '''starttime''' so that the '''timeout''' will be sufficiently far in the future to allow Bitcoin users to upgrade in preparation.

From ec8f4b003b7b65797f3eec6488dccde9d88a4bd6 Mon Sep 17 00:00:00 2001
From: azuchi 
Date: Mon, 1 May 2017 11:18:30 +0900
Subject: [PATCH 0618/2326] Add obsolete status to process image

---
 bip-0002/process.png | Bin 15714 -> 10389 bytes
 bip-0002/process.svg |  14 +++++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/bip-0002/process.png b/bip-0002/process.png
index a834947f36aea765ff9bcd0f4efb77695fedcece..b53279901180a4cb13c1905e053790b290703692 100644
GIT binary patch
literal 10389
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
J^TX!X{|6&CbLs#9

diff --git a/bip-0002/process.svg b/bip-0002/process.svg
index efaa02b041..7bfbe7a53e 100644
--- a/bip-0002/process.svg
+++ b/bip-0002/process.svg
@@ -1,4 +1,4 @@
-
+
 	
 		
+		
+			
+		
+	
+
+	
+	DEFINED
+	
+	
+		starttime <= MTP < timeout
+	
+	STARTED
+	
+	
+		(lockinontimeout == false) AND (MTP < timeout) AND (threshold reached)
+		OR
+		(lockinontimeout == true) AND ((MTP >= timeout) OR (threshold reached))
+	
+	LOCKED_IN
+	
+		Always
+	
+	ACTIVE
+	
+
+	
+	FAILED
+	
+	
+		timeout <= MTP
+	
+		(lockinontimeout == false) AND (timeout <= MTP)
+

From 17e158b3c3ccf05505cec60c7408a9968774d15f Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sat, 24 Jun 2017 18:58:12 +0000
Subject: [PATCH 0656/2326] BIP 8: Add a contrast section

---
 bip-0008.mediawiki | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index 1409c63f11..7be8bace87 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -172,6 +172,10 @@ BIP 8 is compatible with and reuses the GBT changes from BIP 9.
 
 https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits
 
+==Contrasted with BIP 9==
+
+* The '''lockinontimeout''' flag is added. BIP 9 would only transition to the FAILED state when timeout was reached.
+
 ==Backwards compatibility==
 
 BIP8 and BIP9 deployments should not share concurrent active deployment bits. Nodes that only implement BIP9 will not activate a BIP8 soft fork if hashpower threshold is not reached by '''timeout''', however, those nodes will still accept the blocks generated by activated nodes.

From ca8e9b87a7e1a51952d4f68dcfc3280758a0a47e Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sun, 25 Jun 2017 05:39:50 +0000
Subject: [PATCH 0657/2326] BIP 8: Use block heights rather than MTP

---
 README.mediawiki    |   2 +-
 bip-0008.mediawiki  |  32 ++++++++++++++++++--------------
 bip-0008/states.png | Bin 20891 -> 21180 bytes
 bip-0008/states.svg |  10 +++++-----
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/README.mediawiki b/README.mediawiki
index d37d6fa024..3b80b33df1 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -31,7 +31,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | [[bip-0008.mediawiki|8]]
 |
 | Version bits 2017
-| Shaolin Fry
+| Shaolin Fry, Luke Dashjr
 | Informational
 | Draft
 |- style="background-color: #cfffcf"
diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index 7be8bace87..b00e447192 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -2,6 +2,7 @@
   BIP: 8
   Title: Version bits 2017
   Author: Shaolin Fry 
+          Luke Dashjr 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0008
   Status: Draft
@@ -13,12 +14,16 @@
 
 ==Abstract==
 
-This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that introduces an additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks").
+This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that corrects for a number of perceived mistakes.
+Block heights are used for start and timeout rather than POSIX timestamps.
+It additionally introduces an additional activation parameter to guarantee activation of backward-compatible changes (further called "soft forks").
 
 ==Motivation==
 
 BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and is also subject to veto by a small minority of non-signalling hashrate.
 
+Due to using timestamps rather than block heights, it was found to be a risk that a sudden loss of siginificant hashrate could interfere with a late activation.
+
 This specification provides a way to optionally guarantee lock-in at the end of the [[bip-0009.mediawiki|BIP9]] timeout, and therefore activation, while still allowing a hashrate super majority to trigger activation earlier.
 
 ==Specification==
@@ -27,8 +32,8 @@ Each soft fork deployment is specified by the following per-chain parameters (fu
 
 # The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number.
 # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}.
-# The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning.
-# The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block.
+# The '''start''' specifies the height of the first block at which the bit gains its meaning.
+# The '''timeout''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is either considered failed on all descendants of the block, or, if '''lockinontimeout'' is true, transitions to the '''LOCKED_IN''' state.
 # The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''.
 
 ===Selection guidelines===
@@ -37,11 +42,11 @@ The following guidelines are suggested for selecting these parameters for a soft
 
 # '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name.
 # '''bit''' should be selected such that no two concurrent softforks use the same bit.
-# '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork.  This allows for some release delays, while preventing triggers as a result of parties running pre-release software.
-# '''timeout''' should be 1 year (31536000 seconds) after starttime.
+# '''start''' should be set to some block height in the future, approximately one month after a software release date including the soft fork.  This allows for some release delays, while preventing triggers as a result of parties running pre-release software, and ensures a reasonable number of full nodes have upgraded prior to activation. It should be rounded up to the next height which begins a retarget period.
+# '''timeout''' should be approximately 1 year after start, and on a block which begins a retarget period. Therefore, '''start''' plus 52416.
 # '''lockinontimeout''' should be set to true for any softfork that isn't exclusively for miner benefit.
 
-A later deployment using the same bit is possible as long as the starttime is after the previous one's
+A later deployment using the same bit is possible as long as the start is after the previous one's
 timeout or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software.
 
 ===States===
@@ -49,10 +54,10 @@ timeout or activation, but it is discouraged until necessary, and even then reco
 With each block and soft fork, we associate a deployment state. The possible states are:
 
 # '''DEFINED''' is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment.
-# '''STARTED''' for blocks past the starttime.
+# '''STARTED''' for blocks at or beyond the start height.
 # '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion, or for one retarget period after the timeout when '''lockinontimeout''' is true.
 # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period.
-# '''FAILED''' for all blocks after the timeout time, if LOCKED_IN was not reached and '''lockinontimeout''' is false.
+# '''FAILED''' for all blocks after the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is false.
 
 ===Bit flags===
 
@@ -97,15 +102,13 @@ Otherwise, the next state depends on the previous state:
 
         switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) {
 
-We remain in the initial state until either we pass the start time or the timeout. GetMedianTimePast in the code below
-refers to the median nTime of a block and its 10 predecessors. The expression GetMedianTimePast(block.parent) is
-referred to as MTP in the diagram above, and is treated as a monotonic clock defined by the chain.
+We remain in the initial state until either we pass the start height or the timeout.
 
         case DEFINED:
-            if (GetMedianTimePast(block.parent) >= timeout) {
+            if (block.height >= timeout) {
                 return (lockinontimeout == true) ? LOCKED_IN : FAILED;
             }
-            if (GetMedianTimePast(block.parent) >= starttime) {
+            if (block.height >= start) {
                 return STARTED;
             }
             return DEFINED;
@@ -120,7 +123,7 @@ other one simultaneously transitions to STARTED, which would mean both would dem
 Note that a block's state never depends on its own nVersion; only on that of its ancestors.
 
         case STARTED:
-            if (GetMedianTimePast(block.parent) >= timeout) {
+            if (block.height >= timeout) {
                 return (lockinontimeout == true) ? LOCKED_IN : FAILED;
             }
             int count = 0;
@@ -175,6 +178,7 @@ https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits
 ==Contrasted with BIP 9==
 
 * The '''lockinontimeout''' flag is added. BIP 9 would only transition to the FAILED state when timeout was reached.
+* Block heights are used for the deployment monotonic clock, rather than median-time-past.
 
 ==Backwards compatibility==
 
diff --git a/bip-0008/states.png b/bip-0008/states.png
index 828757365d9b63398812aba25b54713dd17e9112..de9450188513aadf047a8a573bb166cab12b59a3 100644
GIT binary patch
delta 20674
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

delta 20394
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

diff --git a/bip-0008/states.svg b/bip-0008/states.svg
index 56afd15480..f7d9f9daad 100644
--- a/bip-0008/states.svg
+++ b/bip-0008/states.svg
@@ -25,14 +25,14 @@
 	DEFINED
 	
 	
-		starttime <= MTP < timeout
+		start <= height < timeout
 	
 	STARTED
 	
 	
-		(lockinontimeout == false) AND (MTP < timeout) AND (threshold reached)
+		(lockinontimeout == false) AND (height < timeout) AND (threshold reached)
 		OR
-		(lockinontimeout == true) AND ((MTP >= timeout) OR (threshold reached))
+		(lockinontimeout == true) AND ((height >= timeout) OR (threshold reached))
 	
 	LOCKED_IN
 	
@@ -45,7 +45,7 @@
 	FAILED
 	
 	
-		timeout <= MTP
+		timeout <= height
 	
-		(lockinontimeout == false) AND (timeout <= MTP)
+		(lockinontimeout == false) AND (timeout <= height)
 

From d7662ab88c86551a384be0888f3566181403a5ee Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sun, 25 Jun 2017 05:44:39 +0000
Subject: [PATCH 0658/2326] BIP 8: Require the bit to be set during LOCKED_IN

---
 bip-0008.mediawiki | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index b00e447192..feb932791c 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -72,8 +72,9 @@ for the purposes of this proposal, and support two future upgrades for different
 When a block nVersion does not have top bits 001, it is treated as if all
 bits are 0 for the purposes of deployments.
 
-Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on
-consensus rules.
+Miners must continue setting the bit in LOCKED_IN phase so uptake is visible and acknowledged.
+Blocks without the applicable bit set are invalid during this period.
+For flexibility, this rule does NOT require the top 3 bits to be set any particular way.
 
 ===New consensus rules===
 

From 155ce23c2f78158c92dcde56620e20797c3a3b91 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Sun, 25 Jun 2017 06:29:23 +0000
Subject: [PATCH 0659/2326] BIP 8: Add FAILING state to allow lockinontimeout
 upgrades

---
 bip-0008.mediawiki  |  29 ++++++++++++++++++++++-------
 bip-0008/states.png | Bin 21180 -> 27151 bytes
 bip-0008/states.svg |  22 ++++++++++++++--------
 3 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki
index feb932791c..26e8572813 100644
--- a/bip-0008.mediawiki
+++ b/bip-0008.mediawiki
@@ -33,7 +33,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu
 # The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number.
 # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}.
 # The '''start''' specifies the height of the first block at which the bit gains its meaning.
-# The '''timeout''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is either considered failed on all descendants of the block, or, if '''lockinontimeout'' is true, transitions to the '''LOCKED_IN''' state.
+# The '''timeout''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is either considered failed on all descendants of the block (but see the exception during '''FAILING''' state), or, if '''lockinontimeout'' is true, transitions to the '''LOCKED_IN''' state.
 # The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeout if not already '''LOCKED_IN''' or '''ACTIVE'''.
 
 ===Selection guidelines===
@@ -44,7 +44,7 @@ The following guidelines are suggested for selecting these parameters for a soft
 # '''bit''' should be selected such that no two concurrent softforks use the same bit.
 # '''start''' should be set to some block height in the future, approximately one month after a software release date including the soft fork.  This allows for some release delays, while preventing triggers as a result of parties running pre-release software, and ensures a reasonable number of full nodes have upgraded prior to activation. It should be rounded up to the next height which begins a retarget period.
 # '''timeout''' should be approximately 1 year after start, and on a block which begins a retarget period. Therefore, '''start''' plus 52416.
-# '''lockinontimeout''' should be set to true for any softfork that isn't exclusively for miner benefit.
+# '''lockinontimeout''' should be set to true for any softfork that is expected or found to have political opposition from a non-negligable percent of miners. (It can be set after the initial deployment, but cannot be cleared once set.)
 
 A later deployment using the same bit is possible as long as the start is after the previous one's
 timeout or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software.
@@ -57,7 +57,8 @@ With each block and soft fork, we associate a deployment state. The possible sta
 # '''STARTED''' for blocks at or beyond the start height.
 # '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion, or for one retarget period after the timeout when '''lockinontimeout''' is true.
 # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period.
-# '''FAILED''' for all blocks after the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is false.
+# '''FAILING''' for one retarget period after the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is false.
+# '''FAILED''' for all blocks after the FAILING retarget period.
 
 ===Bit flags===
 
@@ -107,17 +108,17 @@ We remain in the initial state until either we pass the start height or the time
 
         case DEFINED:
             if (block.height >= timeout) {
-                return (lockinontimeout == true) ? LOCKED_IN : FAILED;
+                return (lockinontimeout == true) ? LOCKED_IN : FAILING;
             }
             if (block.height >= start) {
                 return STARTED;
             }
             return DEFINED;
 
-After a period in the STARTED state, if we're past the timeout, we switch to LOCKED_IN or FAILED. If not, we tally the bits set,
+After a period in the STARTED state, if we're past the timeout, we switch to LOCKED_IN or FAILING. If not, we tally the bits set,
 and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their
 version numbers. The threshold is ≥1916 blocks (95% of 2016), or ≥1512 for testnet (75% of 2016).
-The transition to FAILED takes precendence, as otherwise an ambiguity can arise.
+The transition to FAILING takes precendence, as otherwise an ambiguity can arise.
 There could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN while the
 other one simultaneously transitions to STARTED, which would mean both would demand setting the bit.
 
@@ -125,7 +126,7 @@ Note that a block's state never depends on its own nVersion; only on that of its
 
         case STARTED:
             if (block.height >= timeout) {
-                return (lockinontimeout == true) ? LOCKED_IN : FAILED;
+                return (lockinontimeout == true) ? LOCKED_IN : FAILING;
             }
             int count = 0;
             walk = block;
@@ -140,6 +141,19 @@ Note that a block's state never depends on its own nVersion; only on that of its
             }
             return STARTED;
 
+If the deployment is not LOCKED_IN by the timeout (or '''lockinontimeout'''), it has a single retarget period during which it may still become active, only by unanimous signalling in every block.
+This state exists such that if '''lockinontimeout''' is set to true later, it remains compatible with the original deployment.
+
+        case FAILING:
+            walk = block;
+            for (i = 0; i < 2016; i++) {
+                walk = walk.parent;
+                if (walk.nVersion & 0xE0000000 == 0x20000000 && ((walk.nVersion >> bit) & 1) != 1) {
+                    return FAILED;
+                }
+            }
+            return ACTIVE;
+
 After a retarget period of LOCKED_IN, we automatically transition to ACTIVE.
 
         case LOCKED_IN:
@@ -180,6 +194,7 @@ https://github.com/bitcoin/bitcoin/compare/master...shaolinfry:bip-uaversionbits
 
 * The '''lockinontimeout''' flag is added. BIP 9 would only transition to the FAILED state when timeout was reached.
 * Block heights are used for the deployment monotonic clock, rather than median-time-past.
+* The last-ditch effort during a new FAILING state is added to allow '''lockinontimeout''' to be safely set after the initial deployment.
 
 ==Backwards compatibility==
 
diff --git a/bip-0008/states.png b/bip-0008/states.png
index de9450188513aadf047a8a573bb166cab12b59a3..f4acde197f253fd120fa0d193e1599e94e806a20 100644
GIT binary patch
literal 27151
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 + - - - - - - - DEFINED - - - startheight <= height - - STARTED - - - (lockinontimeout == false) AND (height < timeoutheight) AND (threshold reached) - OR - (lockinontimeout == true) AND ((height >= timeoutheight) OR (threshold reached)) - - LOCKED_IN - - Always - - ACTIVE - - - - FAILING - - (lockinontimeout == false) AND (timeoutheight <= height) - - NOT all blocks signal - - all blocks signal - - FAILED - + + + + + + +%3 + + + +DEFINED + +DEFINED + + + +DEFINED:sw->DEFINED:nw + + + + + +STARTED + +STARTED + + + +DEFINED->STARTED + + +height >= start_height + + + +STARTED:sw->STARTED:nw + + + + + +FAILING + +FAILING + + + +STARTED->FAILING + + +height >= timeoutheight AND NOT lockinontimeout + + + +LOCKED_IN + +LOCKED_IN + + + +STARTED->LOCKED_IN + + +(height < timeoutheight AND threshold reached) +OR +(height >= timeoutheight AND lockinontimeout) + + + +ACTIVE + +ACTIVE + + + +FAILING->ACTIVE + + +all blocks signal + + + +FAILED + +FAILED + + + +FAILING->FAILED + + +NOT all blocks signal + + + +LOCKED_IN->ACTIVE + + +always + + + +ACTIVE:sw->ACTIVE:nw + + + + + + +FAILED:sw->FAILED:nw + + + + From da9cdd675931fece248e98eaf04e308f28427f67 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sun, 26 Jul 2020 14:55:16 +1000 Subject: [PATCH 1522/2326] BIP8: replace FAILING with MUST_SIGNAL This removes the FAILING state and adds compulsory signalling during a new MUST_SIGNAL phase during the last retarget period prior to the timeout height. This ensures that if a deployment occurs using bip8 with lockinontimeout=false and timeoutheight=N, that a later deployment using bip8 with lockinontimeout=true and timeoutheight=K, where K 46310 bytes bip-0008/states.svg | 132 ++++++++++++++++++++++---------------------- 4 files changed, 116 insertions(+), 104 deletions(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index 6fa8ceabc1..189d976f37 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -37,8 +37,8 @@ Each soft fork deployment is specified by the following per-chain parameters (fu # The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number. # The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. # The '''startheight''' specifies the height of the first block at which the bit gains its meaning. -# The '''timeoutheight''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is either considered failed on all descendants of the block (but see the exception during '''FAILING''' state), or, if '''lockinontimeout'' is true, transitions to the '''LOCKED_IN''' state. -# The '''lockinontimeout''' boolean if set to true, will transition state to '''LOCKED_IN''' at timeoutheight if not already '''LOCKED_IN''' or '''ACTIVE'''. +# The '''timeoutheight''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is considered failed on all descendants of the block. +# The '''lockinontimeout''' boolean if set to true, blocks are required to signal in the final period, ensuring the soft fork has locked in by timeoutheight. ===Selection guidelines=== @@ -59,10 +59,10 @@ With each block and soft fork, we associate a deployment state. The possible sta # '''DEFINED''' is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment. # '''STARTED''' for blocks at or beyond the startheight. -# '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion, or for one retarget period after the timeout when '''lockinontimeout''' is true. +# '''MUST_SIGNAL''' for one retarget period prior to the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is true. +# '''LOCKED_IN''' for one retarget period after the first retarget period with STARTED (or MUST_SIGNAL) blocks of which at least threshold have the associated bit set in nVersion. # '''ACTIVE''' for all blocks after the LOCKED_IN retarget period. -# '''FAILING''' for one retarget period after the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is false. -# '''FAILED''' for all blocks after the FAILING retarget period. +# '''FAILED''' for all blocks after the timeoutheight if LOCKED_IN is not reached. ===Bit flags=== @@ -77,14 +77,13 @@ for the purposes of this proposal, and support two future upgrades for different When a block nVersion does not have top bits 001, it is treated as if all bits are 0 for the purposes of deployments. -Miners must continue setting the bit in LOCKED_IN phase so uptake is visible and acknowledged. -Blocks without the applicable bit set are invalid during this period. -For flexibility, this rule does NOT require the top 3 bits to be set any particular way. - ===New consensus rules=== The new consensus rules for each soft fork are enforced for each block that has ACTIVE state. +During the MUST_SIGNAL and LOCKED_IN phases, blocks that fail to signal are invalid. +For flexibility, during the LOCKED_IN phase only, this rule does NOT require the top 3 bits to be set any particular way. + ===State transitions=== @@ -121,7 +120,8 @@ We remain in the initial state until we reach the start block height. After a period in the STARTED state, we tally the bits set, and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their version numbers. The threshold is ≥1916 blocks (95% of 2016), or ≥1512 for testnet (75% of 2016). -If the threshold hasn't been met, and we reach the timeout, then we either transition to LOCKED_IN state anyway (if lockinontimeout is true), or we transition to FAILING. +If the threshold hasn't been met, lockinontimeout is true, and we are at the last period before the timeout, then we transition to MUST_SIGNAL. +If the threshold hasn't been met and we reach the timeout, we transition directly to FAILED. Note that a block's state never depends on its own nVersion; only on that of its ancestors. @@ -131,28 +131,22 @@ Note that a block's state never depends on its own nVersion; only on that of its for (i = 0; i < 2016; i++) { walk = walk.parent; if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) { - count++; + ++count; } } if (count >= threshold) { return LOCKED_IN; + } else if (lockinontimeout && block.height + 2016 >= timeoutheight) { + return MUST_SIGNAL; } else if (block.height >= timeoutheight) { - return (lockinontimeout == true) ? LOCKED_IN : FAILING; + return FAILED; } return STARTED; -If the deployment is not LOCKED_IN by the timeout (or '''lockinontimeout'''), it has a single retarget period during which it may still become active, only by unanimous signalling in every block. -This state exists such that if '''lockinontimeout''' is set to true later, it remains compatible with the original deployment. +If we have finished a period of MUST_SIGNAL, we transition directly to LOCKED_IN. - case FAILING: - walk = block; - for (i = 0; i < 2016; i++) { - walk = walk.parent; - if (walk.nVersion & 0xE0000000 == 0x20000000 && ((walk.nVersion >> bit) & 1) != 1) { - return FAILED; - } - } - return ACTIVE; + case MUST_SIGNAL: + return LOCKED_IN; After a retarget period of LOCKED_IN, we automatically transition to ACTIVE. @@ -178,6 +172,23 @@ current retarget period (i.e. up to and including its ancestor with height block it is possible to implement the mechanism above efficiently and safely by caching the resulting state of every multiple-of-2016 block, indexed by its parent. +===Mandatory signalling=== + +Blocks received while in the MUST_SIGNAL and LOCKED_IN phases must be checked to ensure that they signal. For example: + + if (GetStateForBlock(block) == MUST_SIGNAL) { + if ((block.nVersion & 0xE0000000) != 0x20000000 || ((block.nVersion >> bit) & 1) != 1) { + return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal"); + } + } + if (GetStateForBlock(block) == LOCKED_IN) { + if (((block.nVersion >> bit) & 1) != 1) { + return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-locked-in"); + } + } + +Implementations should be careful not to ban peers that send blocks that are invalid due to not signalling (or blocks that build on those blocks), as that would allow an incompatible chain that is only briefly longer than the compliant chain to cause a split of the p2p network. If that occurred, nodes that have not set ''lockinontimeout'' may not see new blocks in the compliant chain, and thus not reorg to it at the point when it has more work, and would thus not be following the valid chain with the most work. + ===Warning mechanism=== To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). @@ -211,7 +222,7 @@ The template Object is also extended: The "version" key of the template is retained, and used to indicate the server's preference of deployments. If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". -Servers MUST set bits in "vbrequired" for deployments in LOCKED_IN state, to ensure blocks produced are valid. +Servers MUST set bits in "vbrequired" for deployments in MUST_SIGNAL and LOCKED_IN states, to ensure blocks produced are valid. Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character. Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs 16, 65, 66, 68, 112, and 113. @@ -225,9 +236,8 @@ https://github.com/bitcoin/bitcoin/compare/master...luke-jr:bip8 ==Contrasted with BIP 9== -* The '''lockinontimeout''' flag is added. BIP 9 would only transition to the FAILED state when timeout was reached. +* The '''lockinontimeout''' flag is added, providing a way to guarantee transition to LOCKED_IN. * Block heights are used for the deployment monotonic clock, rather than median-time-past. -* The last-ditch effort during a new FAILING state is added to allow '''lockinontimeout''' to be safely set after the initial deployment. ==Backwards compatibility== diff --git a/bip-0008/states.dot b/bip-0008/states.dot index 5c5a6712bf..aa919ffc19 100644 --- a/bip-0008/states.dot +++ b/bip-0008/states.dot @@ -1,17 +1,19 @@ digraph { rankdir=TD; - node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"]; + node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.5, fontname="Arial"]; edge [weight = 100]; "DEFINED" -> "STARTED" [label="height >= start_height"]; - "STARTED" -> "FAILING" [label="height >= timeoutheight AND NOT lockinontimeout"]; - "STARTED" -> "LOCKED_IN" [label="(height < timeoutheight AND threshold reached)\nOR\n(height >= timeoutheight AND lockinontimeout)"]; + "STARTED" -> "MUST_SIGNAL" [label="height + 2016 >= timeoutheight AND lockinontimeout"]; + "STARTED" -> "FAILED" [label="height >= timeoutheight\nAND\nNOT lockinontimeout"]; "LOCKED_IN" -> "ACTIVE" [label="always"]; - "FAILING" -> "FAILED" [label="NOT all blocks signal"]; + "MUST_SIGNAL" -> "LOCKED_IN" [label="always"]; edge [weight = 1]; - "FAILING" -> "ACTIVE" [label="all blocks signal"]; + "STARTED" -> "LOCKED_IN" [label="height < timeoutheight\nAND\nthreshold reached"]; + + "FAILED" -> "LOCKED_IN" [style=invis]; "DEFINED":sw -> "DEFINED":nw; "STARTED":sw -> "STARTED":nw; @@ -19,16 +21,14 @@ digraph { "FAILED":sw -> "FAILED":nw; "STARTED" [fillcolor="#a0a0ff"]; - - "FAILING" [fillcolor="#ffffa0"]; + "MUST_SIGNAL" [fillcolor="#a0a0ff"]; "LOCKED_IN" [fillcolor="#ffffa0"]; - "ACTIVE" [fillcolor="#a0ffa0", shape=box]; - "FAILED" [fillcolor="#ffa0a0", shape=box]; - - "ACTIVE" -> "FAILED" [style=invis]; + "ACTIVE" [fillcolor="#a0ffa0"]; + "FAILED" [fillcolor="#ffa0a0"]; - { rank=same; "STARTED" "FAILING" } - { rank=sink; "ACTIVE" "FAILED" } + { rank=same; "STARTED" "MUST_SIGNAL" } + { rank=same; "FAILED" "LOCKED_IN" } + { rank=sink; "ACTIVE" } } diff --git a/bip-0008/states.png b/bip-0008/states.png index b6d73b78d76cd15cdc8a5aaeeefba190872dffeb..6477ed3afbeb8ef95d9429f95220272f2eb6e129 100644 GIT binary patch literal 46310 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 literal 48261 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

-address      = bcrt1qe7nte4zk4ayly5tc53dtdjupgkz0lr8azx3rzz
-scriptpubkey = 0014cfa6bcd456af49f25178a45ab6cb814584ff8cfd
-message      = hello
-preimage     = 0014cfa6bcd456af49f25178a45ab6cb814584ff8cfd426974636f696e205369
-               676e6564204d6573736167653a0a68656c6c6f
-               (scriptpubkey || "Bitcoin Signed Message:\nhello")
-sighash      = 790eef86c204f0bff969ff822121317aa34eff0215dbd30ccf031e7b2f3f0cc1
-               (sha256d(preimage), displayed in big-endian)
-
- -The proof becomes: - -
-HEX:    01000000010002473044022075b4fb40421d55c55462879cb352a85eeb3af2138d3f0290
-        2c9143f12870f5f70220119c2995c1661138142f3899c1fd6d1af7e790e0e081be72db9c
-        e7bf5b5b932901210290beccd02b73eca57467b2b6f1e47161a9b76a5e67586e7c1dee9e
-        a6e2dcd869
-
-Base64: AQAAAAEAAkcwRAIgdbT7QEIdVcVUYoecs1KoXus68hONPwKQLJFD8Shw9fcCIBGcKZXBZhE4
-        FC84mcH9bRr355Dg4IG+ctuc579bW5MpASECkL7M0Ctz7KV0Z7K28eRxYam3al5nWG58He6e
-        puLc2Gk=
-
- -Split into components: - -{|class="wikitable" style="text-align: center;" -|- -!Type -!Length -!Name -!Value -!Comment -|- -|Uint32||4||flags||01000000||proof format version -|- -|Uint8||1||entries||01||1 entry -|- -|VarInt||1-8||scriptsiglen||00||0 byte scriptsig -|- -|VarInt||1-8||wit entries||02||2 witness stack entries -|- -|VarInt||1-8||entry1len||47||71 byte entry -|- -|Uint8[71]||71||entry1||3044022075b4fb40421d55c55462879cb352a85eeb3af213 -8d3f02902c9143f12870f5f70220119c2995c1661138142f -3899c1fd6d1af7e790e0e081be72db9ce7bf5b5b932901||Witness stack item 1 -|- -|VarInt||1-8||entry2len||21||33 byte entry -|- -|Uint8[33]||33||entry2||0290beccd02b73eca57467b2b6f1e47161a9b76a5e67586e -7c1dee9ea6e2dcd869||Witness stack item 2 -|} - -The above test vector is for a bech32 P2WPKH (native segwit) address. (Once BIP solidifies, will add test vector for other types.) +TODO From 8744a4dd11e207953e2544d40fab3c7204434031 Mon Sep 17 00:00:00 2001 From: Rita Kitic Date: Tue, 27 Oct 2020 19:15:49 +0100 Subject: [PATCH 1532/2326] fix typo --- bip-0085.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index 7c4cbcab73..02b1879b85 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -81,7 +81,7 @@ Coldcard Firmware: [https://github.com/Coldcard/firmware/pull/39] Application number define how entropy will be used post processing. Some basic examples follow: -Derivation path uses the format m/83696968/' + /app_no' + /index' where ''app_no'' path for the application, and `index` in the index. +Derivation path uses the format m/83696968' + /app_no' + /index' where ''app_no'' path for the application, and `index` in the index. ===BIP39=== Application number: 39' From 55d37134cf751959839315cb6a2223c376ca8f75 Mon Sep 17 00:00:00 2001 From: rage-proof <47944736+rage-proof@users.noreply.github.com> Date: Thu, 29 Oct 2020 23:58:50 +0100 Subject: [PATCH 1533/2326] Update bip-0078.mediawiki the payjoin proposal has more inputs --- bip-0078.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0078.mediawiki b/bip-0078.mediawiki index c7953438a9..299d20256a 100644 --- a/bip-0078.mediawiki +++ b/bip-0078.mediawiki @@ -272,7 +272,7 @@ The sender should check the payjoin proposal before signing it to prevent a mali ** 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. *** 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(original_psbt_inputs) - count(payjoin_proposal_inputs)). (see [[#fee-output|Fee output]] section) +*** 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. *** Do not make any check ** Else From dfbbe04ddf9644e49eefb3de437d092c8563ef8f Mon Sep 17 00:00:00 2001 From: Meheret Tesfaye Date: Tue, 3 Nov 2020 11:31:20 +0300 Subject: [PATCH 1534/2326] Update bip-0039.mediawiki Add Python-HDWallet on Other Implementation. --- bip-0039.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index c5ab9bb94b..8241da71d5 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -137,6 +137,9 @@ http://github.com/trezor/python-mnemonic Go: * https://github.com/tyler-smith/go-bip39 +Python: +* https://github.com/meherett/python-hdwallet + Elixir: * https://github.com/aerosol/mnemo From b0521f076c0b40208e82208f5476c48071aab785 Mon Sep 17 00:00:00 2001 From: silencer-Tsai <596964113@qq.com> Date: Wed, 4 Nov 2020 16:29:24 +0800 Subject: [PATCH 1535/2326] BIP32: Added new test vectors for hardened derivation with leading zeros --- bip-0032.mediawiki | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index f2f1e48b7e..b8152e7663 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -4,6 +4,7 @@ RECENT CHANGES: * (25 May 2013) Added test vectors * (15 Jan 2014) Rename keys with index ≥ 0x80000000 to hardened keys, and add explicit conversion functions. * (24 Feb 2017) Added test vectors for hardened derivation with leading zeros +* (4 Nov 2020) Added new test vectors for hardened derivation with leading zeros
   BIP: 32
@@ -272,6 +273,21 @@ Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45
 ** ext pub: xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y
 ** ext prv: xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L
 
+===Test vector 4===
+
+These vectors test for the retention of leading zeros. See [https://github.com/btcsuite/btcutil/issues/172 btcsuite/btcutil#172] for more information.
+
+Seed (hex): 3ddd5602285899a946114506157c7997e5444528f3003f6134712147db19b678
+* Chain m
+** ext pub: xpub661MyMwAqRbcGczjuMoRm6dXaLDEhW1u34gKenbeYqAix21mdUKJyuyu5F1rzYGVxyL6tmgBUAEPrEz92mBXjByMRiJdba9wpnN37RLLAXa
+** ext prv: xprv9s21ZrQH143K48vGoLGRPxgo2JNkJ3J3fqkirQC2zVdk5Dgd5w14S7fRDyHH4dWNHUgkvsvNDCkvAwcSHNAQwhwgNMgZhLtQC63zxwhQmRv
+* Chain m/0H
+** ext pub: xpub69AUMk3qDBi3uW1sXgjCmVjJ2G6WQoYSnNHyzkmdCHEhSZ4tBok37xfFEqHd2AddP56Tqp4o56AePAgCjYdvpW2PU2jbUPFKsav5ut6Ch1m
+** ext prv: xprv9vB7xEWwNp9kh1wQRfCCQMnZUEG21LpbR9NPCNN1dwhiZkjjeGRnaALmPXCX7SgjFTiCTT6bXes17boXtjq3xLpcDjzEuGLQBM5ohqkao9G
+* Chain m/0H/1H
+** ext pub: xpub6BJA1jSqiukeaesWfxe6sNK9CCGaujFFSJLomWHprUL9DePQ4JDkM5d88n49sMGJxrhpjazuXYWdMf17C9T5XnxkopaeS7jGk1GyyVziaMt
+** ext prv: xprv9xJocDuwtYCMNAo3Zw76WENQeAS6WGXQ55RCy7tDJ8oALr4FWkuVoHJeHVAcAqiZLE7Je3vZJHxspZdFHfnBEjHqU5hG1Jaj32dVoS6XLT1
+
 
 ==Acknowledgements==
 

From fcd5c5d4ca6cac8027e4c5f4dee864f7743740f7 Mon Sep 17 00:00:00 2001
From: PandaBread2 <72713080+PandaBread2@users.noreply.github.com>
Date: Sat, 7 Nov 2020 22:52:14 +0000
Subject: [PATCH 1536/2326] Update bip-0079.mediawiki

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

diff --git a/bip-0079.mediawiki b/bip-0079.mediawiki
index c8f2104b2e..797c8f145a 100644
--- a/bip-0079.mediawiki
+++ b/bip-0079.mediawiki
@@ -68,7 +68,7 @@ The template transaction should be sent to the receiver via an HTTP POST to the
 
 The receiver is then responsible for validating the template transaction. If there is a problem with the transaction, or the receiver is generally unhappy with the transaction (e.g. fees are too small) the HTTP response code of 422 should be used and a human-readable string containing information on why which can be directly given to the user.
 
-Should the receiver reject a transaction, it should not attempt to propagate it on the network. However it is important for the sender to be aware that the receiver *could* at any time (regardless of which error was given) send this transaction. The client should therefor assume the receiver will, and act accordingly (either retry with adjustments or just propagate the transaction). It is imperative that the sender never finds themselves in a situation where two payments to the sender could be valid.
+Should the receiver reject a transaction, it should not attempt to propagate it on the network. However it is important for the sender to be aware that the receiver *could* at any time (regardless of which error was given) send this transaction. The client should therefore assume the receiver will, and act accordingly (either retry with adjustments or just propagate the transaction). It is imperative that the sender never finds themselves in a situation where two payments to the sender could be valid.
 
 === Contributed Input Choice ===
 
@@ -118,7 +118,7 @@ For anyone wanting to implement bustapay payments, here are some notes for recei
 
 == Backwards Compatibility ==
 
-Bustapay is an optional payment protocol and therefor has no backwards compatibility concerns. It in fact can only be supported in addition to normal transaction processing, as falling back to a normal bitcoin transaction is a required behavior.
+Bustapay is an optional payment protocol and therefore has no backwards compatibility concerns. It in fact can only be supported in addition to normal transaction processing, as falling back to a normal bitcoin transaction is a required behavior.
 
 
 == Credits ==

From 1a7eaa9c7f3c38221e63b6b3b001054e4502fe79 Mon Sep 17 00:00:00 2001
From: Karl-Johan Alm 
Date: Fri, 30 Oct 2020 16:00:54 +0900
Subject: [PATCH 1537/2326] BIP-322: minor clarification

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

diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki
index e515b56c3c..7aca5d1294 100644
--- a/bip-0322.mediawiki
+++ b/bip-0322.mediawiki
@@ -25,7 +25,7 @@ More importantly, it does not prove ownership nor access to any funds, even if t
 
 == Specification ==
 
-This BIP follows the specification of BIP-325 challenges and solutions (see Signet comparison below).
+This BIP follows the specification of BIP-325 challenges and solutions.
 
 Let there be two virtual transactions to_spend and to_sign.
 
@@ -63,7 +63,7 @@ When a proof of funds is being created, additional inputs should be included for
 
 Proofs of funds are the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation, and proofs without additional inputs or time locks (simple proofs) are the base64-encoding of the to_sign script witness.
 
-A validator must verify it is valid and meets the description of virtual transactions as specified above. See "Validation" below.
+A validator must verify the proof is valid and meets the description of virtual transactions as specified above. See "Validation" below.
 
 === Validation ===
 

From c12af49c17b1bcf19cc73703bded3bd6abfa570d Mon Sep 17 00:00:00 2001
From: fametrano 
Date: Sun, 15 Nov 2020 09:53:06 +0100
Subject: [PATCH 1538/2326] fixed typos

---
 bip-0174.mediawiki | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index c424c5d7c5..b2b996e356 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -129,7 +129,7 @@ The currently defined global types are as follows:
 * Type: Version Number PSBT_GLOBAL_VERSION = 0xFB
 ** Key: None. The key must only contain the 1 byte type.
 *** {0xFB}
-** Value: The 32-bit little endian unsigned integer representing the version number of this PSBT. If ommitted, the version number is 0.
+** Value: The 32-bit little endian unsigned integer representing the version number of this PSBT. If omitted, the version number is 0.
 *** {32-bit uint}
 
 * Type: Proprietary Use Type PSBT_GLOBAL_PROPRIETARY = 0xFC
@@ -549,55 +549,55 @@ The following are invalid PSBTs:
 ** Bytes in Hex: 
70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000001003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000000
** Base64 String:
cHNidP8BAHUCAAAAASaBcTce3/KF6Tet7qSze3gADAVmy7OtZGQXE8pCFxv2AAAAAAD+////AtPf9QUAAAAAGXapFNDFmQPFusKGh2DpD9UhpGZap2UgiKwA4fUFAAAAABepFDVF5uM7gyxHBQ8k0+65PJwDlIvHh7MuEwAAAQD9pQEBAAAAAAECiaPHHqtNIOA3G7ukzGmPopXJRjr6Ljl/hTPMti+VZ+UBAAAAFxYAFL4Y0VKpsBIDna89p95PUzSe7LmF/////4b4qkOnHf8USIk6UwpyN+9rRgi7st0tAXHmOuxqSJC0AQAAABcWABT+Pp7xp0XpdNkCxDVZQ6vLNL1TU/////8CAMLrCwAAAAAZdqkUhc/xCX/Z4Ai7NK9wnGIZeziXikiIrHL++E4sAAAAF6kUM5cluiHv1irHU6m80GfWx6ajnQWHAkcwRAIgJxK+IuAnDzlPVoMR3HyppolwuAJf3TskAinwf4pfOiQCIAGLONfc0xTnNMkna9b7QPZzMlvEuqFEyADS8vAtsnZcASED0uFWdJQbrUqZY3LLh+GFbTZSYG2YVi/jnF6efkE/IQUCSDBFAiEA0SuFLYXc2WHS9fSrZgZU327tzHlMDDPOXMMJ/7X85Y0CIGczio4OFyXBl/saiK9Z9R5E5CVbIBZ8hoQDHAXR8lkqASECI7cr7vCWXRC+B3jv7NYfysb3mk6haTkzgHNEZPhPKrMAAAAAAQA/AgAAAAH//////////////////////////////////////////wAAAAAA/////wEAAAAAAAAAAANqAQAAAAAAAAAA
-* Case: PSBT With invalid global transaction typed key +* Case: PSBT with invalid global transaction typed key ** Bytes in Hex:
70736274ff020001550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8CAAFVAgAAAAEnmiMjpd+1H8RfIg+liw/BPh4zQnkqhdfjbNYzO1y8OQAAAAAA/////wGgWuoLAAAAABl2qRT/6cAGEJfMO2NvLLBGD6T8Qn0rRYisAAAAAAABASCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA
-* Case: PSBT With invalid input witness utxo typed key +* Case: PSBT with invalid input witness utxo typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac000000000002010020955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAIBACCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA
-* Case: PSBT With invalid pubkey length for input partial signature typed key +* Case: PSBT with invalid pubkey length for input partial signature typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87210203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd46304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIQIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYwQwIgBCS1jv+qppThVZ6lyTu/1KiQZCJAVc3wcLZ3FGlELQcCH1yOsP6mUW1guKyzOtZO3mDoeFv7OqlLmb34YVHbmpoBAQQiACB3H9GK1FlmbdSfPVZOPbxC9MhHdONgraFoFqjtSI1WgQEFR1IhA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GIQPeVdHh2sgF4/iljB+/m5TALz26r+En/vykmV8m+CCDvVKuIgYDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYQtKa6ZwAAAIAAAACABAAAgCIGA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9ELSmumcAAACAAAAAgAUAAIAAAA==
-* Case: PSBT With invalid redeemscript typed key +* Case: PSBT with invalid redeemscript typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a01020400220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQIEACIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA
-* Case: PSBT With invalid witnessscript typed key +* Case: PSBT with invalid witnessscript typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d568102050047522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQEEIgAgdx/RitRZZm3Unz1WTj28QvTIR3TjYK2haBao7UiNVoECBQBHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA
-* Case: PSBT With invalid bip32 typed key +* Case: PSBT with invalid bip32 typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae210603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd10b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQEEIgAgdx/RitRZZm3Unz1WTj28QvTIR3TjYK2haBao7UiNVoEBBUdSIQOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RiED3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg71SriEGA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb0QtKa6ZwAAAIAAAACABAAAgCIGA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9ELSmumcAAACAAAAAgAUAAIAAAA==
-* Case: PSBT With invalid non-witness utxo typed key +* Case: PSBT with invalid non-witness utxo typed key ** Bytes in Hex:
70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f0000000000020000bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000
** Base64 String:
cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAIAALsCAAAAAarXOTEBi9JfhK5AC2iEi+CdtwbqwqwYKYur7nGrZW+LAAAAAEhHMEQCIFj2/HxqM+GzFUjUgcgmwBW9MBNarULNZ3kNq2bSrSQ7AiBKHO0mBMZzW2OT5bQWkd14sA8MWUL7n3UYVvqpOBV9ugH+////AoDw+gIAAAAAF6kUD7lGNCFpa4LIM68kHHjBfdveSTSH0PIKJwEAAAAXqRQpynT4oI+BmZQoGFyXtdhS5AY/YYdlAAAAAQfaAEcwRAIgdAGK1BgAl7hzMjwAFXILNoTMgSOJEEjn282bVa1nnJkCIHPTabdA4+tT3O+jOCPIBwUUylWn3ZVE8VfBZ5EyYRGMAUgwRQIhAPYQOLMI3B2oZaNIUnRvAVdyk0IIxtJEVDk82ZvfIhd3AiAFbmdaZ1ptCgK4WxTl4pB02KJam1dgvqKBb2YZEKAG6gFHUiEClYO/Oa4KYJdHrRma3dY0+mEIVZ1sXNObTCGD8auW4H8hAtq2H/SaFNtqfQKwzR+7ePxLGDErW05U2uTbovv+9TbXUq4AAQEgAMLrCwAAAAAXqRS39fr0Dj1ApaRZsds1NfK3L6kh6IcBByMiACCMI1MXN0O1ld+0oHtyuo5C43l9p06H/n2ddJfjsgKJAwEI2gQARzBEAiBi63pVYQenxz9FrEq1od3fb3B1+xJ1lpp/OD7/94S8sgIgDAXbt0cNvy8IVX3TVscyXB7TCRPpls04QJRdsSIo2l8BRzBEAiBl9FulmYtZon/+GnvtAWrx8fkNVLOqj3RQql9WolEDvQIgf3JHA60e25ZoCyhLVtT/y4j3+3Weq74IqjDym4UTg9IBR1IhAwidwQx6xttU+RMpr2FzM9s4jOrQwjH3IzedG5kDCwLcIQI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8Oc1KuACICA6mkw39ZltOqJdusa1cK8GUDlEkpQkYLNUdT7Z7spYdxENkMak8AAACAAAAAgAQAAIAAIgICf2OZdX0u/1WhNq0CxoSxg4tlVuXxtrNCgqlLa1AFEJYQ2QxqTwAAAIAAAACABQAAgAA=
-* Case: PSBT With invalid final scriptsig typed key +* Case: PSBT with invalid final scriptsig typed key ** Bytes in Hex:
70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f618765000000020700da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000
** Base64 String:
cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAACBwDaAEcwRAIgdAGK1BgAl7hzMjwAFXILNoTMgSOJEEjn282bVa1nnJkCIHPTabdA4+tT3O+jOCPIBwUUylWn3ZVE8VfBZ5EyYRGMAUgwRQIhAPYQOLMI3B2oZaNIUnRvAVdyk0IIxtJEVDk82ZvfIhd3AiAFbmdaZ1ptCgK4WxTl4pB02KJam1dgvqKBb2YZEKAG6gFHUiEClYO/Oa4KYJdHrRma3dY0+mEIVZ1sXNObTCGD8auW4H8hAtq2H/SaFNtqfQKwzR+7ePxLGDErW05U2uTbovv+9TbXUq4AAQEgAMLrCwAAAAAXqRS39fr0Dj1ApaRZsds1NfK3L6kh6IcBByMiACCMI1MXN0O1ld+0oHtyuo5C43l9p06H/n2ddJfjsgKJAwEI2gQARzBEAiBi63pVYQenxz9FrEq1od3fb3B1+xJ1lpp/OD7/94S8sgIgDAXbt0cNvy8IVX3TVscyXB7TCRPpls04QJRdsSIo2l8BRzBEAiBl9FulmYtZon/+GnvtAWrx8fkNVLOqj3RQql9WolEDvQIgf3JHA60e25ZoCyhLVtT/y4j3+3Weq74IqjDym4UTg9IBR1IhAwidwQx6xttU+RMpr2FzM9s4jOrQwjH3IzedG5kDCwLcIQI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8Oc1KuACICA6mkw39ZltOqJdusa1cK8GUDlEkpQkYLNUdT7Z7spYdxENkMak8AAACAAAAAgAQAAIAAIgICf2OZdX0u/1WhNq0CxoSxg4tlVuXxtrNCgqlLa1AFEJYQ2QxqTwAAAIAAAACABQAAgAA=
-* Case: PSBT With invalid final script witness typed key +* Case: PSBT with invalid final script witness typed key ** Bytes in Hex:
70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903020800da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000
** Base64 String:
cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAABB9oARzBEAiB0AYrUGACXuHMyPAAVcgs2hMyBI4kQSOfbzZtVrWecmQIgc9Npt0Dj61Pc76M4I8gHBRTKVafdlUTxV8FnkTJhEYwBSDBFAiEA9hA4swjcHahlo0hSdG8BV3KTQgjG0kRUOTzZm98iF3cCIAVuZ1pnWm0KArhbFOXikHTYolqbV2C+ooFvZhkQoAbqAUdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSrgABASAAwusLAAAAABepFLf1+vQOPUClpFmx2zU18rcvqSHohwEHIyIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAggA2gQARzBEAiBi63pVYQenxz9FrEq1od3fb3B1+xJ1lpp/OD7/94S8sgIgDAXbt0cNvy8IVX3TVscyXB7TCRPpls04QJRdsSIo2l8BRzBEAiBl9FulmYtZon/+GnvtAWrx8fkNVLOqj3RQql9WolEDvQIgf3JHA60e25ZoCyhLVtT/y4j3+3Weq74IqjDym4UTg9IBR1IhAwidwQx6xttU+RMpr2FzM9s4jOrQwjH3IzedG5kDCwLcIQI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8Oc1KuACICA6mkw39ZltOqJdusa1cK8GUDlEkpQkYLNUdT7Z7spYdxENkMak8AAACAAAAAgAQAAIAAIgICf2OZdX0u/1WhNq0CxoSxg4tlVuXxtrNCgqlLa1AFEJYQ2QxqTwAAAIAAAACABQAAgAA=
-* Case: PSBT With invalid pubkey in output BIP 32 derivation paths typed key +* Case: PSBT with invalid pubkey in output BIP 32 derivation paths typed key ** Bytes in Hex:
70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00210203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca58710d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000
** Base64 String:
cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAABB9oARzBEAiB0AYrUGACXuHMyPAAVcgs2hMyBI4kQSOfbzZtVrWecmQIgc9Npt0Dj61Pc76M4I8gHBRTKVafdlUTxV8FnkTJhEYwBSDBFAiEA9hA4swjcHahlo0hSdG8BV3KTQgjG0kRUOTzZm98iF3cCIAVuZ1pnWm0KArhbFOXikHTYolqbV2C+ooFvZhkQoAbqAUdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSrgABASAAwusLAAAAABepFLf1+vQOPUClpFmx2zU18rcvqSHohwEHIyIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAQjaBABHMEQCIGLrelVhB6fHP0WsSrWh3d9vcHX7EnWWmn84Pv/3hLyyAiAMBdu3Rw2/LwhVfdNWxzJcHtMJE+mWzThAlF2xIijaXwFHMEQCIGX0W6WZi1mif/4ae+0BavHx+Q1Us6qPdFCqX1aiUQO9AiB/ckcDrR7blmgLKEtW1P/LiPf7dZ6rvgiqMPKbhROD0gFHUiEDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwhAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zUq4AIQIDqaTDf1mW06ol26xrVwrwZQOUSSlCRgs1R1PtnuylhxDZDGpPAAAAgAAAAIAEAACAACICAn9jmXV9Lv9VoTatAsaEsYOLZVbl8bazQoKpS2tQBRCWENkMak8AAACAAAAAgAUAAIAA
-* Case: PSBT With invalid input sighash type typed key +* Case: PSBT with invalid input sighash type typed key ** Bytes in Hex:
70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c0203000100000000010016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a65010125512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d2bd57f8a8751ae00
** Base64 String:
cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wCAwABAAAAAAEAFgAUYunpgv/zTdgjlhAxawkM0qO3R8sAAQAiACCHa62DLx0WgBXtQSMqnqZaGBXZ7xPA74dZ9ktbKyeKZQEBJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnSvVf4qHUa4A
-* Case: PSBT With invalid output redeemScript typed key +* Case: PSBT with invalid output redeemScript typed key ** Bytes in Hex:
70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c0002000016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a65010125512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d2bd57f8a8751ae00
** Base64 String:
cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAgAAFgAUYunpgv/zTdgjlhAxawkM0qO3R8sAAQAiACCHa62DLx0WgBXtQSMqnqZaGBXZ7xPA74dZ9ktbKyeKZQEBJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnSvVf4qHUa4A
-* Case: PSBT With invalid output witnessScript typed key +* Case: PSBT with invalid output witnessScript typed key ** Bytes in Hex:
70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c00010016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a6521010025512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d06d57f8a8751ae00
** Base64 String:
cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAQAWABRi6emC//NN2COWEDFrCQzSo7dHywABACIAIIdrrYMvHRaAFe1BIyqeploYFdnvE8Dvh1n2S1srJ4plIQEAJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnQbVf4qHUa4A
From 456c8c50886bbddb7c6e3a36ccc6e8adf330aba1 Mon Sep 17 00:00:00 2001 From: "Ferdinando M. Ametrano" Date: Mon, 16 Nov 2020 21:58:41 +0100 Subject: [PATCH 1539/2326] fixed input test case description as per output test case description --- bip-0174.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index b2b996e356..09b4b7df6d 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -569,7 +569,7 @@ The following are invalid PSBTs: ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d568102050047522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQEEIgAgdx/RitRZZm3Unz1WTj28QvTIR3TjYK2haBao7UiNVoECBQBHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA
-* Case: PSBT with invalid bip32 typed key +* Case: PSBT with invalid pubkey in input BIP 32 derivation paths typed key ** Bytes in Hex:
70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae210603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd10b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000
** Base64 String:
cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQEEIgAgdx/RitRZZm3Unz1WTj28QvTIR3TjYK2haBao7UiNVoEBBUdSIQOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RiED3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg71SriEGA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb0QtKa6ZwAAAIAAAACABAAAgCIGA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9ELSmumcAAACAAAAAgAUAAIAAAA==
From ee2e0598206b8b8a16555a14b8f0c0a70105f93e Mon Sep 17 00:00:00 2001 From: "Ferdinando M. Ametrano" Date: Sat, 16 May 2020 02:58:10 +0200 Subject: [PATCH 1540/2326] added invalid extended keys vectors The BIP32 specification lacks test vectors for invalid extended keys that should not be parsed as valid. Such test vectors are proposed here. --- bip-0032.mediawiki | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki index f2f1e48b7e..bec5fb0f2b 100644 --- a/bip-0032.mediawiki +++ b/bip-0032.mediawiki @@ -272,6 +272,26 @@ Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45 ** ext pub: xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y ** ext prv: xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L +===Test vector 4=== + +This vector tests that invalid extended keys are recognized as invalid. + +* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5fTtTQBm (pubkey version / prvkey mismatch) +* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGTQQD3dC4H2D5GBj7vWvSQaaBv5cxi9gafk7NF3pnBju6dwKvH (prvkey version / pubkey mismatch) +* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Txnt3siSujt9RCVYsx4qHZGc62TG4McvMGcAUjeuwZdduYEvFn (invalid pubkey prefix 04) +* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGpWnsj83BHtEy5Zt8CcDr1UiRXuWCmTQLxEK9vbz5gPstX92JQ (invalid prvkey prefix 04) +* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6N8ZMMXctdiCjxTNq964yKkwrkBJJwpzZS4HS2fxvyYUA4q2Xe4 (invalid pubkey prefix 01) +* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD9y5gkZ6Eq3Rjuahrv17fEQ3Qen6J (invalid prvkey prefix 01) +* xprv9s2SPatNQ9Vc6GTbVMFPFo7jsaZySyzk7L8n2uqKXJen3KUmvQNTuLh3fhZMBoG3G4ZW1N2kZuHEPY53qmbZzCHshoQnNf4GvELZfqTUrcv (zero depth with non-zero parent fingerprint) +* xpub661no6RGEX3uJkY4bNnPcw4URcQTrSibUZ4NqJEw5eBkv7ovTwgiT91XX27VbEXGENhYRCf7hyEbWrR3FewATdCEebj6znwMfQkhRYHRLpJ (zero depth with non-zero parent fingerprint) +* xprv9s21ZrQH4r4TsiLvyLXqM9P7k1K3EYhA1kkD6xuquB5i39AU8KF42acDyL3qsDbU9NmZn6MsGSUYZEsuoePmjzsB3eFKSUEh3Gu1N3cqVUN (zero depth with non-zero index) +* xpub661MyMwAuDcm6CRQ5N4qiHKrJ39Xe1R1NyfouMKTTWcguwVcfrZJaNvhpebzGerh7gucBvzEQWRugZDuDXjNDRmXzSZe4c7mnTK97pTvGS8 (zero depth with non-zero index) +* DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHGMQzT7ayAmfo4z3gY5KfbrZWZ6St24UVf2Qgo6oujFktLHdHY4 (unknown extended key version) +* DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHPmHJiEDXkTiJTVV9rHEBUem2mwVbbNfvT2MTcAqj3nesx8uBf9 (unknown extended key version) +* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF93Y5wvzdUayhgkkFoicQZcP3y52uPPxFnfoLZB21Teqt1VvEHx (private key 0 not in 1..n-1) +* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD5SDKr24z3aiUvKr9bJpdrcLg1y3G (private key n not in 1..n-1) +* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Q5JXayek4PRsn35jii4veMimro1xefsM58PgBMrvdYre8QyULY (invalid pubkey 020000000000000000000000000000000000000000000000000000000000000007) +* xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL (invalid checksum) ==Acknowledgements== From 08844fd6eff55e756c453c6d2e16de40e8f80e73 Mon Sep 17 00:00:00 2001 From: Greg-Griffith Date: Wed, 18 Nov 2020 12:17:04 -0800 Subject: [PATCH 1541/2326] BIP34 specifies it requires minimal encoding. Non minimal encodings are rejected by the bitcoin-core client because it only checks against a specific encoding --- bip-0034.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0034.mediawiki b/bip-0034.mediawiki index a993b7e7ee..88073c5c5d 100644 --- a/bip-0034.mediawiki +++ b/bip-0034.mediawiki @@ -22,7 +22,7 @@ Bitcoin blocks and transactions are versioned binary structures. Both currently ==Specification== # Treat transactions with a version greater than 1 as non-standard (official Satoshi client will not mine or relay them). -# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 150 or so years with 223-1 blocks), following bytes are little-endian representation of the number (including a sign bit). Height is the height of the mined block in the block chain, where the genesis block is height zero (0). +# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "minimally encoded serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 150 or so years with 223-1 blocks), following bytes are little-endian representation of the number (including a sign bit). Height is the height of the mined block in the block chain, where the genesis block is height zero (0). # 75% rule: If 750 of the last 1,000 blocks are version 2 or greater, reject invalid version 2 blocks. (testnet3: 51 of last 100) # 95% rule ("Point of no return"): If 950 of the last 1,000 blocks are version 2 or greater, reject all version 1 blocks. (testnet3: 75 of last 100) From 6fb34f2a510391a80371a4616577b5615e494700 Mon Sep 17 00:00:00 2001 From: Ethan Kosakovsky Date: Fri, 30 Oct 2020 12:47:29 +0000 Subject: [PATCH 1542/2326] Add BIP85-DRNG and other key derivations --- bip-0085.mediawiki | 60 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index 7c4cbcab73..b9bafdba79 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -25,6 +25,8 @@ As HD keychains are essentially derived from initial entropy, this proposal prov ==Definitions== +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + The terminology related to keychains used in the wild varies widely, for example `seed` has various different meanings. In this document we define the terms # '''BIP32 root key''' is the root extended private key that is represented as the top root of the keychain in BIP32. @@ -69,19 +71,41 @@ OUTPUT * DERIVED KEY=503776919131758bb7de7beb6c0ae24894f4ec042c26032890c29359216e21ba * DERIVED ENTROPY=70c6e3e8ebee8dc4c0dbba66076819bb8c09672527c4277ca8729532ad711872218f826919f6b67218adde99018a6df9095ab2b58d803b5b93ec9802085a690e +==BIP85-DRNG== + +BIP85-DRNG-SHAKE256 is a deterministic random number generator for cryptographic functions that require deterministic outputs, but where the input to that function requires more than the 64 bytes provided by BIP85's HMAC output. BIP85-DRNG-SHAKE256 uses BIP85 to seed a SHAKE256 stream (from the SHA-3 standard). The input must be exactly 64 bytes long (from the BIP85 HMAC output). + +RSA key generation is an example of a function that requires orders of magnitude more than 64 bytes of random input. Further, it is not possible to precalculate the amount of random input required until the function has completed. + + drng_reader = BIP85DRNG.new(bip85_entropy) + rsa_key = RSA.generate_key(4096, drng_reader.read()) + +===Test Vectors=== +INPUT: +xprv9s21ZrQH143K2LBWUUQRFXhucrQqBpKdRRxNVq2zBqsx8HVqFk2uYo8kmbaLLHRdqtQpUm98uKfu3vca1LqdGhUtyoFnCNkfmXRyPXLjbKb +* MASTER BIP32 ROOT KEY: m/83696968'/0'/0' + +OUTPUT +* DERIVED KEY=cca20ccb0e9a90feb0912870c3323b24874b0ca3d8018c4b96d0b97c0e82ded0 +* DERIVED ENTROPY=6bea85e51a05e6dbaf2ccee05097758213807997ba936589cef01c8f19c0079f395a0cd045efa3438677f3ef9ad34c9a68506626c5a17e51ed5e177852ee7fdc + +* DRNG(80 bytes)=b78b1ee6b345eae6836c2d53d33c64cdaf9a696487be81b03e822dc84b3f1cd883d7559e53d175f243e4c349e822a957bbff9224bc5dde9492ef54e8a439f6bc8c7355b87a925a37ee405a7502991111 + ==Reference Implementation== -Python library implementation: [https://github.com/ethankosakovsky/bipentropy python-bipentropy] +Python library implementation: [https://github.com/ethankosakovsky/bip85] ===Other Implementations=== -Coldcard Firmware: [https://github.com/Coldcard/firmware/pull/39] +* JavaScript library implementation: [https://github.com/hoganri/bip85-js] + +* Coldcard Firmware: [https://github.com/Coldcard/firmware/pull/39] ==Applications== Application number define how entropy will be used post processing. Some basic examples follow: -Derivation path uses the format m/83696968/' + /app_no' + /index' where ''app_no'' path for the application, and `index` in the index. +Derivation path uses the format m/83696968/{app_no}'/{index}' where ''{app_no}'' path for the application, and ''{index}'' in the index. ===BIP39=== Application number: 39' @@ -231,6 +255,36 @@ INPUT: OUTPUT * DERIVED ENTROPY=492db4698cf3b73a5a24998aa3e9d7fa96275d85724a91e71aa2d645442f878555d078fd1f1f67e368976f04137b1f7a0d19232136ca50c44614af72b5582a5c +===RSA=== + +Application number: 828365' + +The derivation path format is: m/83696968'/828365'/{key_bits}'/{key_index}' + +The RSA key generator should use BIP85-DRNG as the input RNG function. + +===RSA GPG=== + +Keys allocated for RSA-GPG purposes use the following scheme: + + - Main key m/83696968'/828365'/{key_bits}'/{key_index}' + - Sub keys: m/83696968'/828365'/{key_bits}'/{key_index}'/{sub_key}' + + - key_index is the parent key for CERTIFY capability + - sub_key 0' is used as the ENCRYPTION key + - sub_key 1' is used as the AUTHENTICATION key + - sub_key 2' is usually used as SIGNATURE key + +Note on timestamps: + +The resulting RSA key can be used to create a GPG key where the creation date MUST be fixed to unix Epoch timestamp 1231006505 (the Bitcoin genesis block time '2009-01-03 18:05:05' UTC) because the key fingerprint is affected by the creation date (Epoch timestamp 0 was not chosen because of legacy behavior in GNUPG implementations for older keys). Additionally, when importing sub-keys under a key in GNUPG, the system time must be frozen to the same timestamp before importing (e.g. by use of faketime). + +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. + +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 dual purpose. + ==Backwards Compatibility== This specification is not backwards compatible with any other existing specification. From cf32b7bd397607a972eb1e0be311ce919c01cd47 Mon Sep 17 00:00:00 2001 From: Orfeas Litos Date: Mon, 30 Nov 2020 12:31:10 +0000 Subject: [PATCH 1543/2326] Say that public nonce is R and private nonce is s --- bip-0340.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki index f22194f405..97c1db4cf7 100644 --- a/bip-0340.mediawiki +++ b/bip-0340.mediawiki @@ -227,7 +227,7 @@ Moreover, Schnorr signatures are compatible with [https://web.archive.org/web/20 === Adaptor Signatures === -[https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2018-05-18-l2/slides.pdf Adaptor signatures] can be produced by a signer by offsetting his public nonce with a known point ''T = t⋅G'', but not offsetting his secret nonce. +[https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2018-05-18-l2/slides.pdf Adaptor signatures] can be produced by a signer by offsetting his public nonce ''R'' with a known point ''T = t⋅G'', but not offsetting his secret nonce ''s''. A correct signature (or partial signature, as individual signers' contributions to a multisignature are called) on the same message with same nonce will then be equal to the adaptor signature offset by ''t'', meaning that learning ''t'' is equivalent to learning a correct signature. This can be used to enable atomic swaps or even [https://eprint.iacr.org/2018/472 general payment channels] in which the atomicity of disjoint transactions is ensured using the signatures themselves, rather than Bitcoin script support. The resulting transactions will appear to verifiers to be no different from ordinary single-signer transactions, except perhaps for the inclusion of locktime refund logic. From 23782b869342a59340a3d842ddf01a5e5495a91b Mon Sep 17 00:00:00 2001 From: Orfeas Litos Date: Mon, 30 Nov 2020 14:30:47 +0000 Subject: [PATCH 1544/2326] Remove the term "secret nonce", only refer to s --- bip-0340.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki index 97c1db4cf7..1de7faa521 100644 --- a/bip-0340.mediawiki +++ b/bip-0340.mediawiki @@ -227,7 +227,7 @@ Moreover, Schnorr signatures are compatible with [https://web.archive.org/web/20 === Adaptor Signatures === -[https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2018-05-18-l2/slides.pdf Adaptor signatures] can be produced by a signer by offsetting his public nonce ''R'' with a known point ''T = t⋅G'', but not offsetting his secret nonce ''s''. +[https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2018-05-18-l2/slides.pdf Adaptor signatures] can be produced by a signer by offsetting his public nonce ''R'' with a known point ''T = t⋅G'', but not offsetting the signature's ''s'' value. A correct signature (or partial signature, as individual signers' contributions to a multisignature are called) on the same message with same nonce will then be equal to the adaptor signature offset by ''t'', meaning that learning ''t'' is equivalent to learning a correct signature. This can be used to enable atomic swaps or even [https://eprint.iacr.org/2018/472 general payment channels] in which the atomicity of disjoint transactions is ensured using the signatures themselves, rather than Bitcoin script support. The resulting transactions will appear to verifiers to be no different from ordinary single-signer transactions, except perhaps for the inclusion of locktime refund logic. From e549ed36e8bbb0d15b1bd245cc5bb2c5664d5aa2 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 7 Dec 2020 15:57:33 +0100 Subject: [PATCH 1545/2326] BIP155: change when sendaddrv2 is to be sent Mandate to send `sendaddrv2` to the peer before sending our `verack` to them. This way we know that the peer does not support `addrv2` if we did not receive `sendaddrv2` from them before receiving their `verack`. --- bip-0155.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0155.mediawiki b/bip-0155.mediawiki index 71fe3cc0d5..ab3c0fcb29 100644 --- a/bip-0155.mediawiki +++ b/bip-0155.mediawiki @@ -134,7 +134,7 @@ See the appendices for the address encodings to be used for the various networks Introduce a new message type sendaddrv2. Sending such a message indicates that a node can understand and prefers to receive addrv2 messages instead of addr messages. I.e. "Send me addrv2". -sendaddrv2 SHOULD be sent after receiving the verack message from the peer. +The sendaddrv2 message MUST only be sent in response to the version message from a peer and prior to sending the verack message. For older peers, that did not emit sendaddrv2, keep sending the legacy addr message, ignoring addresses with the newly introduced address types. From e6b9822142eb41771dbaaa4dfd39d99432e92d49 Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 19:22:20 +0800 Subject: [PATCH 1546/2326] Create bip-0048.mediawiki --- bip-0048.mediawiki | 253 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 bip-0048.mediawiki diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki new file mode 100644 index 0000000000..7c39823960 --- /dev/null +++ b/bip-0048.mediawiki @@ -0,0 +1,253 @@ +
+  BIP: 48
+  Layer: Applications
+  Title: Multi-Account/Multi-Script Hierarchy for Deterministic Multi Signature Wallets
+  Author: Peter Denton 
+  Comments-Summary: Mixed review (one person)
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0048
+  Status: Proposed
+  Type: Standards Track
+  Created: 2020-12-16
+
+ +==Abstract== + +This BIP defines a logical hierarchy for deterministic multi-sig wallets based on an algorithm +described in BIP-0067 (BIP67 from now on), BIP-0032 (BIP32 from now on) and purpose scheme described in +BIP-0043 (BIP43 from now on). + +This BIP is a particular application of BIP43. + +==Motivation== + +The hierarchy proposed in this paper is quite comprehensive. It allows the handling of +multiple accounts, external and internal chains per account, multiple script types and +millions of addresses per chain. + +==Key sorting== + +Any wallet that supports BIP48 inherently supports deterministic key sorting as per BIP67 so that all possible +multi-signature addresses/scripts are derived from deterministically ordered public keys. + +==Path levels== + +We define the following 6 levels in BIP32 path: + +
+m / purpose' / coin_type' / account' / script_type' / change / address_index
+
+ +`h` in the path indicates that BIP32 hardened derivation is used. + +Each level has a special meaning, described in the chapters below. + +===Purpose=== + +Purpose is a constant set to 48' following the BIP43 recommendation. +It indicates that the subtree of this node is used according to this specification. + +Hardened derivation is used at this level. + +===Coin type=== + +One master node (seed) can be used for either multiple Bitcoin networks. +Sharing the same space for various networks has some disadvantages. + +Avoiding reusing addresses across networks and improving privacy issues. + +Coin type `0` for mainnet and `1` for testnet. + +Hardened derivation is used at this level. + +===Account=== + +This level splits the key space into independent user identities, +so the wallet never mixes the coins across different accounts. + +Users can use these accounts to organize the funds in the same +fashion as bank accounts; for donation purposes (where all +addresses are considered public), for saving purposes, +for common expenses etc. + +Accounts are numbered from index 0 in sequentially increasing manner. +This number is used as child index in BIP32 derivation. + +Hardened derivation is used at this level. + +Software should prevent a creation of an account if a previous account does not +have a transaction history (meaning none of its addresses have been used before). + +Software needs to discover all used accounts after importing the seed from +an external source. Such an algorithm is described in "Account discovery" chapter. + +===Script=== + +This level splits the key space into three separate `script_type`(s). To provide +optimum backward compatibility. + +The recommended default is pay to witness script hash `m/48'/0'/0'/2'`. + +The following represent mainnet, account 0. + +`1'`: Nested Segwit (p2sh-p2wsh) `m/48'/0'/0'/1'`
+`2'`: Native Segwit (p2wsh) `m/48'/0'/0'/2'`
+`3'`: Legacy (p2sh) `m/48'/0'/0'/3'`
+ +===Change=== + +Constant 0 is used for external chain and constant 1 for internal chain (also +known as change addresses). External chain is used for addresses that are meant +to be visible outside of the wallet (e.g. for receiving payments). Internal +chain is used for addresses which are not meant to be visible outside of the +wallet and is used for return transaction change. + +Public derivation is used at this level. + +===Index=== + +Addresses are numbered from index 0 in sequentially increasing manner. +This number is used as child index in BIP32 derivation. + +Public derivation is used at this level. + +==Account discovery== + +When the master seed is imported from an external source the software should +start to discover the accounts in the following manner: + +* derive the first accounts node (index = 0) +* derive the external chain node of this account +* scan addresses of the external chain; respect the gap limit described below +* if no transactions are found on the external chain, stop discovery +* if there are some transactions, increase the account index and go to step 1 + +This algorithm is successful because software should disallow creation of new +accounts if previous one has no transaction history, as described in chapter +"Account" above. + +Please note that the algorithm works with the transaction history, not account +balances, so you can have an account with 0 total coins and the algorithm will +still continue with discovery. + +===Address gap limit=== + +Address gap limit is currently set to 20. If the software hits 20 unused +addresses in a row, it expects there are no used addresses beyond this point +and stops searching the address chain. We scan just the external chains, because +internal chains receive only coins that come from the associated external chains. + +Wallet software should warn when the user is trying to exceed the gap limit on +an external chain by generating a new address. + +==Examples== + +{| +!coin +!account +!script +!chain +!address +!path +|- +|Bitcoin +|first +|external +|first +|m / 48' / 0' / 0' / 2' / 0 / 0 +|- +|Bitcoin +|first +|external +|second +|m / 48' / 0' / 0' / 2' / 0 / 1 +|- +|Bitcoin +|first +|change +|first +|m / 48' / 0' / 0' / 2' / 1 / 0 +|- +|Bitcoin +|first +|change +|second +|m / 48' / 0' / 0' / 2' / 1 / 1 +|- +|Bitcoin +|second +|external +|first +|m / 48' / 0' / 1' / 2' / 0 / 0 +|- +|Bitcoin +|second +|external +|second +|m / 48' / 0' / 1' / 2' / 0 / 1 +|- +|Bitcoin +|second +|change +|first +|m / 48' / 0' / 1' / 2' / 1 / 0 +|- +|Bitcoin +|second +|change +|second +|m / 48' / 1' / 1' / 2' / 1 / 1 +|- +|Bitcoin Testnet +|first +|external +|first +|m / 48' / 1' / 0' / 2' / 0 / 0 +|- +|Bitcoin Testnet +|first +|external +|second +|m / 48' / 1' / 0' / 2' / 0 / 1 +|- +|Bitcoin Testnet +|first +|change +|first +|m / 48' / 1' / 0' / 2' / 1 / 0 +|- +|Bitcoin Testnet +|first +|change +|second +|m / 48' / 1' / 0' / 2' / 1 / 1 +|- +|Bitcoin Testnet +|second +|external +|first +|m / 48' / 1' / 1' / 2' / 0 / 0 +|- +|Bitcoin Testnet +|second +|external +|second +|m / 48' / 1' / 1' / 2' / 0 / 1 +|- +|Bitcoin Testnet +|second +|change +|first +|m / 48' / 1' / 1' / 2' / 1 / 0 +|- +|Bitcoin Testnet +|second +|change +|second +|m / 48 h / 1' / 1' / 2' / 1 / 1 +|} + +==Reference== + +* [[bip-0067.mediawiki|BIP67 - Deterministic Pay-to-script-hash multi-signature addresses through public key sorting]] +* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] +* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] From c9517ecf8708f9745cc9d608b7936dff6c541b57 Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:05:54 +0800 Subject: [PATCH 1547/2326] fixes --- .DS_Store | Bin 0 -> 18436 bytes bip-0048.mediawiki | 90 +++++++++++++++++++++++++++------------------ 2 files changed, 55 insertions(+), 35 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6f80a1ec80f0b10f9fff8b6300c28c0adeff69b9 GIT binary patch literal 18436 zcmeHPJ&znk5Ush-JsSy&jEGGMfZN;q+H5gr2?9$9CnQMr*~qdu%ZM{r1W1<=6Olp& zA|mD|I3^+{CPE@R>eVbqRqaj93yfr$8Edw0XKP;fy!X1MyLZPT(p>-i-b7?BA|u^V zUVBLo>zlEb+q(a=;dAUu+o~REbpKKJH9cSCQ+Y$S_1}T)E=50o2UfI6*tPBQiX6*> z(Ec~&p?oa&^ynRVqOYIGgZEAz-90{ebgc1uu`BP3tUf)rO^=AI>ppTg6J=pHo+BTM zY(BX-=U=`KrMEtuyY~9Uxyx;y^%hRk zz`(!-1IQ0!-BHdLd+SqpYb_{(6;H{IyAOp<3%}NlxJ;er|LO&s+R4k&0>nt zw5RLwF~YT+FUqsFY)_Y_Jzbhb&6v1gYpixH$NEOMW^TpsGB7YOa0vr%=`la|wK*#{ zk970cWsE%nvJuO0LIiR|gRO79v0 zvg2ljF(ELZi^qs-8hf%6*ECE6A0Pds@%?qKK!XZnw;#has4xgmLW9xNX^^jdKVCcd z4)OWg2@f~QcZtDxSo=Z1$n8Fi?FQc=KDV3ne2GDNe)NswJGSFM7{5Y;3S-*u9n-*L zME-O=Gw}z$eSB^=;aAh3!XW$#&zJ2W{AZs3qtJlxg7t$6gYbfB(2a4(f{cXh7rz)1bm2`nhRPVG#Y?`bLF8^mEh2 zV`ML+`<-dvie_a=Nd-kL_J8fwm5S>U=mjMP(R)o7-;U_(S7=%BdOTh5`99NQlt6>^^->Ct9 z@kWh8*DDOdPo_bILHNlus4xgWnFbXGk@rjkkC8P3kN5Y8iLMV2{l@sNFo=Ew4K_Y%L6pk;d&?cRACwqmKPWNC zeo$hN{h+|0Ry?6gi9z_ubor%I7hUn>^3z6zLHGlGqr@QcB>G0ch<#%!m&`3feC!(< z-+%33p|KCu<>Ndyoe>e2GosQ@KEogWd7#J9M zF&Svqj&2=Y*K5Na?6M8d+KqL;tvfcvo#7AN^ly6#|M`P}SPR)^#}(x|1Uaq - Comments-Summary: Mixed review (one person) + Comments-Summary: No comments Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0048 Status: Proposed Type: Standards Track @@ -27,7 +27,7 @@ millions of addresses per chain. ==Key sorting== Any wallet that supports BIP48 inherently supports deterministic key sorting as per BIP67 so that all possible -multi-signature addresses/scripts are derived from deterministically ordered public keys. +multi-signature addresses/scripts are derived from deterministically sorted public keys. ==Path levels== @@ -37,7 +37,7 @@ We define the following 6 levels in BIP32 path: m / purpose' / coin_type' / account' / script_type' / change / address_index
-`h` in the path indicates that BIP32 hardened derivation is used. +h or ' in the path indicates that BIP32 hardened derivation is used. Each level has a special meaning, described in the chapters below. @@ -55,7 +55,7 @@ Sharing the same space for various networks has some disadvantages. Avoiding reusing addresses across networks and improving privacy issues. -Coin type `0` for mainnet and `1` for testnet. +Coin type 0 for mainnet and 1 for testnet. Hardened derivation is used at this level. @@ -82,16 +82,18 @@ an external source. Such an algorithm is described in "Account discovery" chapte ===Script=== -This level splits the key space into three separate `script_type`(s). To provide +This level splits the key space into three separate script_type(s). To provide optimum backward compatibility. -The recommended default is pay to witness script hash `m/48'/0'/0'/2'`. +The recommended default is pay to witness script hash m/48'/0'/0'/2'. The following represent mainnet, account 0. -`1'`: Nested Segwit (p2sh-p2wsh) `m/48'/0'/0'/1'`
-`2'`: Native Segwit (p2wsh) `m/48'/0'/0'/2'`
-`3'`: Legacy (p2sh) `m/48'/0'/0'/3'`
+1': Nested Segwit (p2sh-p2wsh) m/48'/0'/0'/1'
+2': Native Segwit (p2wsh) m/48'/0'/0'/2'
+3': Legacy (p2sh) m/48'/0'/0'/3'
+ +Easily expanded to account for new script types. ===Change=== @@ -142,109 +144,127 @@ an external chain by generating a new address. ==Examples== {| -!coin -!account -!script -!chain -!address -!path +|network +|account +|script +|chain +|address +|path |- -|Bitcoin +|mainnet |first +|p2wsh |external |first |m / 48' / 0' / 0' / 2' / 0 / 0 |- -|Bitcoin +|mainnet |first +|p2wsh |external |second |m / 48' / 0' / 0' / 2' / 0 / 1 |- -|Bitcoin +|mainnet |first +|p2wsh |change |first |m / 48' / 0' / 0' / 2' / 1 / 0 |- -|Bitcoin +|mainnet |first +|p2wsh |change |second |m / 48' / 0' / 0' / 2' / 1 / 1 |- -|Bitcoin +|mainnet |second +|p2wsh |external |first |m / 48' / 0' / 1' / 2' / 0 / 0 |- -|Bitcoin +|mainnet |second +|p2wsh |external |second |m / 48' / 0' / 1' / 2' / 0 / 1 |- -|Bitcoin +|mainnet |second +|p2sh |change |first -|m / 48' / 0' / 1' / 2' / 1 / 0 +|m / 48' / 0' / 1' / 3' / 1 / 0 |- -|Bitcoin +|mainnet |second +|p2sh |change |second -|m / 48' / 1' / 1' / 2' / 1 / 1 +|m / 48' / 1' / 1' / 3' / 1 / 1 |- -|Bitcoin Testnet +|testnet |first +|p2sh-p2wsh |external |first -|m / 48' / 1' / 0' / 2' / 0 / 0 +|m / 48' / 1' / 0' / 1' / 0 / 0 |- -|Bitcoin Testnet +|testnet |first +|p2wsh |external |second |m / 48' / 1' / 0' / 2' / 0 / 1 |- -|Bitcoin Testnet +|testnet |first +|p2wsh |change |first |m / 48' / 1' / 0' / 2' / 1 / 0 |- -|Bitcoin Testnet +|testnet |first +|p2wsh |change |second |m / 48' / 1' / 0' / 2' / 1 / 1 |- -|Bitcoin Testnet +|testnet |second +|p2wsh |external |first |m / 48' / 1' / 1' / 2' / 0 / 0 |- -|Bitcoin Testnet +|testnet |second +|p2wsh |external |second |m / 48' / 1' / 1' / 2' / 0 / 1 |- -|Bitcoin Testnet +|testnet |second +|p2wsh |change |first |m / 48' / 1' / 1' / 2' / 1 / 0 |- -|Bitcoin Testnet +|testnet |second +|p2wsh |change |second |m / 48 h / 1' / 1' / 2' / 1 / 1 -|} +|- +}| + ==Reference== From 23d57cb9ad0378abaeeb3ddeecced87384498eca Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:31:24 +0800 Subject: [PATCH 1548/2326] typo --- bip-0048.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index 386b410e6b..470febf341 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -261,7 +261,7 @@ an external chain by generating a new address. |p2wsh |change |second -|m / 48 h / 1' / 1' / 2' / 1 / 1 +|m / 48' / 1' / 1' / 2' / 1 / 1 |- }| From 42b9148ceaa30f7c7a60b4e29ad07ffb47e31b05 Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:35:09 +0800 Subject: [PATCH 1549/2326] minor --- bip-0048.mediawiki | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index 470febf341..bfea5f0a48 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -83,18 +83,16 @@ an external source. Such an algorithm is described in "Account discovery" chapte ===Script=== This level splits the key space into three separate script_type(s). To provide -optimum backward compatibility. +backward and forward compatibility. -The recommended default is pay to witness script hash m/48'/0'/0'/2'. +The following represent mainnet, account 0: -The following represent mainnet, account 0. +The recommended default is pay to witness script hash m/48'/0'/0'/2'. 1': Nested Segwit (p2sh-p2wsh) m/48'/0'/0'/1'
2': Native Segwit (p2wsh) m/48'/0'/0'/2'
3': Legacy (p2sh) m/48'/0'/0'/3'
-Easily expanded to account for new script types. - ===Change=== Constant 0 is used for external chain and constant 1 for internal chain (also From ff04f6cea417038c8a382c0b141faea2d1dd26fb Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:36:43 +0800 Subject: [PATCH 1550/2326] Update bip-0048.mediawiki --- bip-0048.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index bfea5f0a48..2b0df317a9 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -50,7 +50,7 @@ Hardened derivation is used at this level. ===Coin type=== -One master node (seed) can be used for either multiple Bitcoin networks. +One master node (seed) can be used for multiple Bitcoin networks. Sharing the same space for various networks has some disadvantages. Avoiding reusing addresses across networks and improving privacy issues. From bfebc4b047eac88c86a2cd98fcd37ee110be85b1 Mon Sep 17 00:00:00 2001 From: benk10 Date: Wed, 16 Dec 2020 16:43:21 +0200 Subject: [PATCH 1551/2326] Mention BIP 44 as the Multi-Account standard --- bip-0048.mediawiki | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index 2b0df317a9..b164bea8f0 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -13,8 +13,9 @@ ==Abstract== This BIP defines a logical hierarchy for deterministic multi-sig wallets based on an algorithm -described in BIP-0067 (BIP67 from now on), BIP-0032 (BIP32 from now on) and purpose scheme described in -BIP-0043 (BIP43 from now on). +described in BIP-0067 (BIP67 from now on), BIP-0032 (BIP32 from now on), purpose scheme described in +BIP-0043 (BIP43 from now on), and multi-account hierarchy described in +BIP-0044 (BIP44 from now on). This BIP is a particular application of BIP43. @@ -61,7 +62,7 @@ Hardened derivation is used at this level. ===Account=== -This level splits the key space into independent user identities, +This level splits the key space into independent user identities, following the BIP44 pattern, so the wallet never mixes the coins across different accounts. Users can use these accounts to organize the funds in the same @@ -269,3 +270,4 @@ an external chain by generating a new address. * [[bip-0067.mediawiki|BIP67 - Deterministic Pay-to-script-hash multi-signature addresses through public key sorting]] * [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]] * [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]] +* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]] From 4e81e16224d647c5268e21a2bb280f9678f5f91a Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:54:41 +0800 Subject: [PATCH 1552/2326] Update bip-0048.mediawiki --- bip-0048.mediawiki | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index 2b0df317a9..06d8471e2e 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -18,6 +18,9 @@ BIP-0043 (BIP43 from now on). This BIP is a particular application of BIP43. +Credit to Marek Palatinus and Pavol Rusnak who wrote BIP-0044 +which was used as the basis for this BIP. + ==Motivation== The hierarchy proposed in this paper is quite comprehensive. It allows the handling of From 9ec6bf64b715724ffcc607d156cd99429665d8bd Mon Sep 17 00:00:00 2001 From: benk10 Date: Wed, 16 Dec 2020 16:55:38 +0200 Subject: [PATCH 1553/2326] Fix the table --- bip-0048.mediawiki | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index b164bea8f0..a4dbbccb70 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -261,8 +261,7 @@ an external chain by generating a new address. |change |second |m / 48' / 1' / 1' / 2' / 1 / 1 -|- -}| +|} ==Reference== From eae5288ffdca6866d93c3b6ca99e24afea82cd46 Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 22:59:10 +0800 Subject: [PATCH 1554/2326] Update bip-0048.mediawiki --- bip-0048.mediawiki | 3 --- 1 file changed, 3 deletions(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index 06d8471e2e..2b0df317a9 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -18,9 +18,6 @@ BIP-0043 (BIP43 from now on). This BIP is a particular application of BIP43. -Credit to Marek Palatinus and Pavol Rusnak who wrote BIP-0044 -which was used as the basis for this BIP. - ==Motivation== The hierarchy proposed in this paper is quite comprehensive. It allows the handling of From 38096cedd9863b9fe9f363f0e2127e73609b79b0 Mon Sep 17 00:00:00 2001 From: Fonta1n3 Date: Wed, 16 Dec 2020 23:12:19 +0800 Subject: [PATCH 1555/2326] remove bip44 stuff --- bip-0048.mediawiki | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/bip-0048.mediawiki b/bip-0048.mediawiki index a4dbbccb70..2662404362 100644 --- a/bip-0048.mediawiki +++ b/bip-0048.mediawiki @@ -111,35 +111,6 @@ This number is used as child index in BIP32 derivation. Public derivation is used at this level. -==Account discovery== - -When the master seed is imported from an external source the software should -start to discover the accounts in the following manner: - -* derive the first accounts node (index = 0) -* derive the external chain node of this account -* scan addresses of the external chain; respect the gap limit described below -* if no transactions are found on the external chain, stop discovery -* if there are some transactions, increase the account index and go to step 1 - -This algorithm is successful because software should disallow creation of new -accounts if previous one has no transaction history, as described in chapter -"Account" above. - -Please note that the algorithm works with the transaction history, not account -balances, so you can have an account with 0 total coins and the algorithm will -still continue with discovery. - -===Address gap limit=== - -Address gap limit is currently set to 20. If the software hits 20 unused -addresses in a row, it expects there are no used addresses beyond this point -and stops searching the address chain. We scan just the external chains, because -internal chains receive only coins that come from the associated external chains. - -Wallet software should warn when the user is trying to exceed the gap limit on -an external chain by generating a new address. - ==Examples== {| From e963414eee7ac8f85a5a92f9d170f5f3d38f816d Mon Sep 17 00:00:00 2001 From: koushiro Date: Thu, 17 Dec 2020 22:20:40 +0800 Subject: [PATCH 1556/2326] Add a link of another Rust implmentation of BIP-0039 Signed-off-by: koushiro --- bip-0039.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index c5ab9bb94b..30e02e6340 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -164,6 +164,7 @@ Ruby: Rust: * https://github.com/maciejhirsz/tiny-bip39/ +* https://github.com/koushiro/bip0039-rs Swift: * https://github.com/CikeQiu/CKMnemonic From 518bb8bf4f62ce9f40bff4fb3084cc63b736726c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 18 Dec 2020 03:53:37 +0000 Subject: [PATCH 1557/2326] README: Link BIP 2 for submissions --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index 83120ab82b..294b02f964 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. 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://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. 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 a78b211d23788dd0bcbc57f54abf6a223356b839 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sun, 20 Dec 2020 16:39:42 +0100 Subject: [PATCH 1558/2326] bip39: discourage from using localized wordlists --- bip-0039.mediawiki | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index c5ab9bb94b..08985ac18f 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -113,7 +113,14 @@ will make the desired wallet available. ==Wordlists== -* [[bip-0039/bip-0039-wordlists.md|Moved to separate document]] +Since the vast majority of BIP39 wallets supports only the English wordlist, +it is '''strongly discouraged''' to use non-English wordlists for generating +the mnemonic sentences. + +If you still feel your application really needs to use a localized wordlist, +use one of the following instead of inventing your own. + +* [[bip-0039/bip-0039-wordlists.md|Wordlists]] ==Test vectors== From f778098debfbc31a4c98dc569fc9cd407b65407a Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 23 Dec 2020 15:39:45 +0000 Subject: [PATCH 1559/2326] bip-0322: replace motivation, add myself to the "thanks to" list --- bip-0322.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index e515b56c3c..f13544f2c1 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -17,11 +17,11 @@ A standard for interoperable signed messages based on the Bitcoin Script format, == Motivation == -The current message signing standard only works for P2PKH (1...) invoice addresses. We propose to extend and generalize the standard by using a Bitcoin Script based approach. This approach minimizes the burden for implementers as message signing can be expected to be part of a library or project that includes Bitcoin Script interpreters already. +The current message signing standard only works for P2PKH (1...) invoice addresses. We propose to extend and generalize the standard by using a Bitcoin Script based approach. This ensures that any coins, no matter what script they are controlled by, can in-principle be signed for. For easy interoperability with existing signing hardware, we also define a signature message format which resembles a Bitcoin transaction (except that it contains an invalid input, so it cannot be spent on any real network). -Additionally, the current message signing only proves that the message has been committed to by the recipient of a given invoice address. -It does not prove anything about the invoice address itself, nor that the signer has access to the private keys used to implement this invoice. -More importantly, it does not prove ownership nor access to any funds, even if the same private key would be a valid signer for spending them - and this is a commonly desired use case. +Additionally, the current message signature format uses ECDSA signatures which do not commit to the public key, meaning that they do not actually prove knowledge of any secret keys. (Indeed, valid signatures can be tweaked by 3rd parties to become valid signatures on certain related keys.) + +Ultimately no message signing protocol can actually prove control of funds, both because a signature is obsolete as soon as it is created, and because the possessor of a secret key may be willing to sign messages on others' behalf even if it would not sign actual transactions. No signmessage protocol can fix these limitations. == Specification == @@ -121,7 +121,7 @@ TODO == Acknowledgements == -Thanks to David Harding, Jim Posen, Kalle Rosenbaum, Pieter Wuille, and many others for their feedback on the specification. +Thanks to David Harding, Jim Posen, Kalle Rosenbaum, Pieter Wuille, Andrew Poelstra, and many others for their feedback on the specification. == References == From dbb81b36525aabf4ae5d0ad015b4865494aed33e Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 23 Dec 2020 15:42:41 +0000 Subject: [PATCH 1560/2326] bip-0322: move "legacy" section up, separate "proof of funds", summarize the signature types --- bip-0322.mediawiki | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index f13544f2c1..065eb7bd92 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -23,11 +23,31 @@ Additionally, the current message signature format uses ECDSA signatures which d Ultimately no message signing protocol can actually prove control of funds, both because a signature is obsolete as soon as it is created, and because the possessor of a secret key may be willing to sign messages on others' behalf even if it would not sign actual transactions. No signmessage protocol can fix these limitations. -== Specification == +== Types of Signatures == -This BIP follows the specification of BIP-325 challenges and solutions (see Signet comparison below). +This BIP specifies three formats for signing messages: ''legacy'', ''simple'' and ''full''. Additionally, a variant of the ''full'' format can be used to demonstrate control over a set of UTXOs. -Let there be two virtual transactions to_spend and to_sign. +=== Legacy === + +New proofs should use the new format for all invoice address formats, including P2PKH. + +The legacy format MAY be used, but must be restricted to the legacy P2PKH invoice address format. + +=== Simple === + +A ''simple'' signature consists of a witness stack, consensus encoded as a vector of vectors of bytes, and base64-encoded. Validators should construct to_spend and to_sign as defined below, with default values for all fields except that + +* message_hash is a BIP340-tagged hash of the message, as specified below +* message_challenge in to_spend is set to the scriptPubKey being signed with +* message_signature in to_sign is set to the provided simple signature. + +and then proceed as they would for a full signature. + +=== Full === + +Full signatures follow an analogous specification to the BIP-325 challenges and solutions used by Signet. + +Let there be two virtual transactions to_spend and to_sign. The "to_spend" transaction is: @@ -63,6 +83,16 @@ When a proof of funds is being created, additional inputs should be included for Proofs of funds are the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation, and proofs without additional inputs or time locks (simple proofs) are the base64-encoding of the to_sign script witness. +=== Full (Proof of Funds) === + +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. + A validator must verify it is valid and meets the description of virtual transactions as specified above. See "Validation" below. === Validation === @@ -83,12 +113,6 @@ To validate a proof of funds, the following steps must be taken: # for each proof of fund input, set the corresponding values in the coins map; abort if the input cannot be found # check the signature of each input using consensus rules, then upgradable rules -== Legacy format == - -New proofs should use the new format for all invoice address formats, including P2PKH. - -The legacy format MAY be used, but must be restricted to the legacy P2PKH invoice address format. - === Signing === Given the P2PKH invoice address a and the message m, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): From 9e1beef6acabffd4a53ff1396b4cb453615de19f Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 23 Dec 2020 15:47:27 +0000 Subject: [PATCH 1561/2326] bip-0322: overhaul/rewrite verification rules --- bip-0322.mediawiki | 128 ++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 78 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index 065eb7bd92..4eda7b0b67 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -49,7 +49,7 @@ Full signatures follow an analogous specification to the BIP-325 challenges and Let there be two virtual transactions to_spend and to_sign. -The "to_spend" transaction is: +The to_spend transaction is: nVersion = 0 nLockTime = 0 @@ -61,10 +61,9 @@ The "to_spend" transaction is: vout[0].nValue = 0 vout[0].scriptPubKey = message_challenge -where message_hash is a BIP340-tagged hash of the message, i.e. sha256_tag(m), where tag = "BIP0322-signed-message", and message_challenge is the to be proven (public) key script. -For proving funds, message_challenge shall be simply OP_TRUE. +where message_hash is a BIP340-tagged hash of the message, i.e. sha256_tag(m), where tag = BIP0322-signed-message, and message_challenge is the to be proven (public) key script. -The "to_sign" transaction is: +The to_sign transaction is: nVersion = 0 or as appropriate (e.g. 2, for time locks) nLockTime = 0 or as appropriate (for time locks) @@ -75,13 +74,7 @@ The "to_sign" transaction is: vout[0].nValue = 0 vout[0].scriptPubKey = OP_RETURN -When a proof of funds is being created, additional inputs should be included for virtually spending transaction outputs of desired value. - -* All signatures must use the SIGHASH_ALL flag. -* The proof is considered valid, inconclusive, or invalid based on whether the to_sign transaction is a valid spend of the to_spend transaction or not, according to the rules specified in the "Consensus and standard flags" section below. -* Proofs of funds may be encumbered with the in_future flag, according to the rules specified in the "Locktime and Sequence" section below, in which case we refer to the result in text form as "valid_in_future", "inconclusive_in_future", etc. - -Proofs of funds are the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation, and proofs without additional inputs or time locks (simple proofs) are the base64-encoding of the to_sign script witness. +A full signature consists of the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation. === Full (Proof of Funds) === @@ -93,47 +86,58 @@ A signer may construct a proof of funds, demonstrating control of a set of UTXOs 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. -A validator must verify it is valid and meets the description of virtual transactions as specified above. See "Validation" below. - -=== Validation === - -To validate a simple proof, the following steps must be taken: - -# construct the to_spend and to_sign transactions, based on the specification above -# check the signature using consensus rules, then upgradable rules - -To validate a proof of funds, the following steps must be taken: - -# deserialize the to_spend and to_sign transactions from the proof, and fail if the proof contains extraneous bytes -# verify that the to_sign transaction uses all inputs covered by the proof of funds, exactly once -# reconstruct the to_spend' and to_sign' transactions, based on the specification above, copying the version, lock time, and sequence values -# verify that to_spend = to_spend', that to_sign has at least 1 input, has exactly 1 output, and that to_sign.vin[0] = to_sign'.vin[0] -# set the "in_future" flag if the transaction's lock time is in the future according to consensus rules -# establish a "coins map", a mapping of outpoints (hash, vout) to coins (scriptPubKey, amount), initialized to coins_map(to_spend.txid, 0) = (to_spend.vout[0], 0) -# for each proof of fund input, set the corresponding values in the coins map; abort if the input cannot be found -# check the signature of each input using consensus rules, then upgradable rules +== Detailed Specification == + +For all signature types, except legacy, the to_spend and to_sign transactions must be valid transactions which pass all consensus checks, except of course that the output with prevout 000...000:FFFFFFFF does not exist. + +=== Verification === + +A validator is given as input an address ''A'' (which may be omitted in a proof-of-funds), signature ''s'' and message ''m'', and outputs one of three states +* ''valid at time T and age S'' indicates that the signature has set timelocks but is otherwise valid +* ''inconclusive'' means the validator was unable to check the scripts +* ''invalid'' means that some check failed + +==== Verification Process ==== + +Validation consists of the following steps: + +# Basic validation +## Decode ''s'' as the transactions to_sign and to_spend +## Confirm that message_hash is the correct hash of ''m'' +## Confirm that message_challenge is the scriptPubKey corresponding to ''A'' if ''A'' is present, and otherwise must be OP_TRUE +## Confirm that all other fields are set as specified above; in particular that +##* to_spend has exactly one input and one output +##* to_sign has at least one input and its first input spends the output of to_spend +##* to_sign has exactly one output, as specified above +## Confirm that the two transactions together satisfy all consensus rules, except for to_spend's missing input, and except that ''nSequence'' of to_sign's first input and ''nLockTime'' of to_sign are not checked. +# (Optional) If the validator does not have a full script interpreter, it should check that it understands all scripts being satisfied. If not, it should stop here and output ''inconclusive''. +# Check the **required rules**: +## All signatures must use the SIGHASH_ALL flag. +## The use of CODESEPARATOR or FindAndDelete is forbidden. +## LOW_S, STRICTENC and NULLFAIL: valid ECDSA signatures must be strictly DER-encoded and have a low-S value; invalid ECDSA signature must be the empty push +## MINIMALDATA: all pushes must be minimally encoded +## CLEANSTACK: require that only a single stack element remains after evaluation +## MINIMALIF: the argument of IF/NOTIF must be exactly 0x01 or empty push +## If any of the above steps failed, the validator should stop and output the ''invalid'' state. +# Check the **upgradeable rules** +## The use of NOPs reserved for upgrades is forbidden. +## The use of segwit versions greater than 0 are forbidden. +## If any of the above steps failed, the validator should stop and output the ''inconclusive'' state. +# Let ''T'' by the nLockTime of to_sign and ''S'' be the nSequence of the first input of to_sign. Output the state ''valid at time T and age S''. === Signing === -Given the P2PKH invoice address a and the message m, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): - -# let p be the pubkey-hash pkh(P) for the pubkey P, contained in a -# let x be the private key associated with P so that pkh(xG) = p -# let digest be SHA56d(0x18||"Bitcoin Signed Message:\n"||compactint(len(m))||m) -# create a compact signature sig (aka "recoverable ECDSA signature") using x on digest - -The resulting proof is sig, serialized using the base64 encoding. +Signers who control an address ''A'' who wish to sign a message ''m'' act as follows: -=== Verifying === +# They construct to_spend and to_sign as specified above, using the scriptPubKey of ''A'' for message_challenge and tagged hash of ''m'' as message_hash. +# Optionally, they may set nLockTime of to_sign or nSequence of its first input. +# Optionally, they may add any additional outputs to to_sign that they wish to prove control of. +# They satisfy to_sign as they would any other transaction. -Given the P2PKH invoice address a, the message m, the compact signature sig, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): +They then encode their signature, choosing either ''simple'' or ''full'' as follows: -# let p be the pubkey-hash pkh(P) for the pubkey P, contained in a -# let digest be SHA56d(0x18||"Bitcoin Signed Message:\n"||compactint(len(m))||m) -# attempt pubkey recovery for digest using the signature sig and store the resulting pubkey into Q -## fail verification if pubkey recovery above fails -# let q be the pubkey-hash pkh(Q) for the pubkey Q -# if p == q, the proof is valid, otherwise it is invalid +* If they added no inputs to to_sign, left nSequence and nLockTime at 0, and ''A'' is a Segwit address (either pure or P2SH-wrapped), then they may base64-encode message_signature +* Otherwise they must base64-encode the concatenation of to_spend followed by to_sign. == Compatibility == @@ -155,38 +159,6 @@ Thanks to David Harding, Jim Posen, Kalle Rosenbaum, Pieter Wuille, Andrew Poels This document is licensed under the Creative Commons CC0 1.0 Universal license. -== Consensus and standard flags == - -Each flag is associated with some type of enforced rule (most often a soft fork). There are two sets of flags: consensus flags (which result in a block being rejected, if violated), and upgradable flags (which are typically policy-rejected by nodes specifically for the purpose of future network upgrades). The upgradable flags are a super-set of the consensus flags. - -This BIP specifies that a proof that validates for both rulesets is valid, a proof that validates for consensus rules, but not for upgradable rules, is "inconclusive", and a proof that does not validate for consensus rules is "invalid" (regardless of upgradable rule validation). - -The ruleset sometimes changes. This BIP does not intend to be complete, nor does it indicate enforcement of rules, it simply lists the rules as they stand at the point of writing. - -=== Consensus rules === - -* P2SH: evaluate P2SH ([https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki BIP16]) subscripts -* DERSIG: enforce strict DER ([https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki BIP66]) compliance -* NULLDUMMY: enforce NULLDUMMY ([https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki BIP147]) -* CHECKLOCKTIMEVERIFY: enable CHECKLOCKTIMEVERIFY ([https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP65]) -* CHECKSEQUENCEVERIFY: enable CHECKSEQUENCEVERIFY ([https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP112]) -* WITNESS: enable WITNESS ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) - -=== Upgradable rules === - -All of the above, plus (subject to change): - -* STRICTENC: non-strict DER signature or undefined hashtype -* MINIMALDATA: require minimal encodings for all push operations -* DISCOURAGE_UPGRADABLE_NOPS: discourage use of NOPs reserved for upgrades -* CLEANSTACK: require that only a single stack element remains after evaluation -* MINIMALIF: Segwit script only: require the argument of OP_IF/NOTIF to be exactly 0x01 or empty vector -* NULLFAIL: signature(s) must be empty vector if a CHECK(MULTI)SIG operation failed -* LOW_S: signature with S > order/2 in a checksig operation -* DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM: v1-16 witness programs are non-standard (i.e. forbidden) -* WITNESS_PUBKEYTYPE: public keys in segregated witness scripts must be compressed -* CONST_SCRIPTCODE: OP_CODESEPARATOR and FindAndDelete fail any non-segwit scripts - == Test vectors == TODO From c624414119573e41466dcf407b3c53507624678f Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 23 Dec 2020 15:35:47 +0000 Subject: [PATCH 1562/2326] bip-0322: remove the 'to_spend' transaction from serialization --- bip-0322.mediawiki | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index 4eda7b0b67..5f4704d099 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -74,7 +74,7 @@ The to_sign transaction is: vout[0].nValue = 0 vout[0].scriptPubKey = OP_RETURN -A full signature consists of the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation. +A full signature consists of the base64-encoding of the to_sign transaction in standard network serialisation. === Full (Proof of Funds) === @@ -102,11 +102,9 @@ A validator is given as input an address ''A'' (which may be omitted in a proof- Validation consists of the following steps: # Basic validation -## Decode ''s'' as the transactions to_sign and to_spend -## Confirm that message_hash is the correct hash of ''m'' -## Confirm that message_challenge is the scriptPubKey corresponding to ''A'' if ''A'' is present, and otherwise must be OP_TRUE -## Confirm that all other fields are set as specified above; in particular that -##* to_spend has exactly one input and one output +## Compute the transaction to_spend from ''m'' and ''A'' +## Decode ''s'' as the transaction to_sign +## If ''s'' was a full transaction, confirm all fields are set as specified above; in particular that ##* to_sign has at least one input and its first input spends the output of to_spend ##* to_sign has exactly one output, as specified above ## Confirm that the two transactions together satisfy all consensus rules, except for to_spend's missing input, and except that ''nSequence'' of to_sign's first input and ''nLockTime'' of to_sign are not checked. @@ -120,6 +118,7 @@ Validation consists of the following steps: ## MINIMALIF: the argument of IF/NOTIF must be exactly 0x01 or empty push ## If any of the above steps failed, the validator should stop and output the ''invalid'' state. # Check the **upgradeable rules** +## The version of to_sign must be 0 or 2. ## The use of NOPs reserved for upgrades is forbidden. ## The use of segwit versions greater than 0 are forbidden. ## If any of the above steps failed, the validator should stop and output the ''inconclusive'' state. @@ -137,7 +136,7 @@ Signers who control an address ''A'' who wish to sign a message ''m'' act as fol They then encode their signature, choosing either ''simple'' or ''full'' as follows: * If they added no inputs to to_sign, left nSequence and nLockTime at 0, and ''A'' is a Segwit address (either pure or P2SH-wrapped), then they may base64-encode message_signature -* Otherwise they must base64-encode the concatenation of to_spend followed by to_sign. +* Otherwise they must base64-encode to_sign. == Compatibility == From e1e7b77c027b3d40d07d306cc75c2b5859c91db2 Mon Sep 17 00:00:00 2001 From: Matthew Zipkin Date: Tue, 5 Jan 2021 10:10:50 -0500 Subject: [PATCH 1563/2326] BIP173: segwit address witness version is one 5-bit char not one byte --- bip-0173.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0173.mediawiki b/bip-0173.mediawiki index c3ee0605aa..1fdd8bed3c 100644 --- a/bip-0173.mediawiki +++ b/bip-0173.mediawiki @@ -208,7 +208,7 @@ be of the same length as the mainnet counterpart (to simplify implementations' assumptions about lengths), but still be visually distinct. for testnet. * The data-part values: -** 1 byte: the witness version +** 1 character (representing 5 bits of data): the witness version ** A conversion of the 2-to-40-byte witness program (as defined by [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) to base32: *** Start with the bits of the witness program, most significant bit per byte first. *** Re-arrange those bits into groups of 5, and pad with zeroes at the end if needed. From 5f18700477e2c09653591b940caa40d285a21d95 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 3 Sep 2020 16:51:17 -0400 Subject: [PATCH 1564/2326] p2p: Add disabletx message This message, valid between version/verack for peers with version >= 70017, would allow establishing at the time of connection that no transactions will be announced/requested between those peers. --- bip-disable-tx.mediawiki | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 bip-disable-tx.mediawiki diff --git a/bip-disable-tx.mediawiki b/bip-disable-tx.mediawiki new file mode 100644 index 0000000000..c2bca25556 --- /dev/null +++ b/bip-disable-tx.mediawiki @@ -0,0 +1,100 @@ +
+  BIP: XXX
+  Layer: Peer Services
+  Title: Disable transaction relay message
+  Author: Suhas Daftuar 
+  Comments-Summary: No comments yet.
+  Comments-URI:
+  Status: Draft
+  Type: Standards Track
+  Created: 2020-09-03
+  License: BSD-2-Clause
+
+ +==Abstract== + +This BIP describes a change to the p2p protocol to allow a node to tell a peer +that a connection will not be used for transaction relay, to support +block-relay-only connections that are currently in use on the network. + +==Motivation== + +For nearly the past year, software has been deployed[1] which initiates +connections on the Bitcoin network and sets the transaction relay field +(introduced by BIP 37 and also defined in BIP 60) to false, to prevent +transaction relay from occurring on the connection. Additionally, addr messages +received from the peer are ignored by this software. + +The purpose of these connections is two-fold: by making additional +low-bandwidth connections on which blocks can propagate, the robustness of a +node to network partitioning attacks is strengthened. Additionally, by not +relaying transactions and ignoring received addresses, the ability of an +adversary to learn the complete network graph (or a subgraph) is reduced[2], +which in turn increases the cost or difficulty to an attacker seeking to carry +out a network partitioning attack (when compared with having such knowledge). + +The low-bandwidth / minimal-resource nature of these connections is currently +known only by the initiator of the connection; this is because the transaction +relay field in the version message is not a permanent setting for the lifetime +of the connection. Consequently, a node receiving an inbound connection with +transaction relay disabled cannot distinguish between a peer that will never +enable transaction relay (as described in BIP 37) and one that will. Moreover, +the node also cannot determine that the incoming connection will ignore relayed +addresses; with that knowledge a node would likely choose other peers to +receive announced addresses instead. + +This proposal adds a new, optional message that a node can send a peer when +initiating a connection to that peer, to indicate that connection should not be +used for transaction-relay for the connection's lifetime. In addition, without +a current mechanism to negotiate whether addresses should be relayed on a +connection, this BIP suggests that address messages not be sent on links where +tx-relay has been disabled. + +==Specification== + +# A new disabletx message is added, which is defined as an empty message where pchCommand == "disabletx". +# The protocol version of nodes implementing this BIP must be set to 70017 or higher. +# If a node sets the transaction relay field in the version message to a peer to false, then the disabletx message MAY also be sent in response to a version message from that peer if the peer's protocol version is >= 70017. If sent, the disabletx message MUST be sent prior to sending a verack. +# A node that has sent or received a disabletx message to/from a peer MUST NOT send any of these messages to the peer: +## inv messages for transactions +## getdata messages for transactions +## getdata messages for merkleblock (BIP 37) +## filteradd/filterload/filterclear (BIP 37) +## mempool (BIP 35) +# It is RECOMMENDED that a node that has sent or received a disabletx message to/from a peer not send any of these messages to the peer: +## addr/getaddr +## addrv2 (BIP 155) +# The behavior regarding sending or processing other message types is not specified by this BIP. +# Nodes MAY decide to not remain connected to peers that send this message (for example, if trying to find a peer that will relay transactions). + +==Compatibility== + +Nodes with protocol version >= 70017 that do not implement this BIP, and nodes +with protocol version < 70017, will continue to remain compatible with +implementing software: transactions would not be relayed to peers sending the +disabletx message (provided that BIP 37 or BIP 60 has been implemented), and while +periodic address relay may still take place, software implementing this BIP +should not be disconnecting such peers solely for that reason. + +Disabling address relay is suggested but not required by this BIP, to allow for +future protocol extensions that might specify more carefully how address relay +is to be negotiated. This BIP's recommendations for software to not relay +addresses is intended to be interpreted as guidance in the absence of any such +future protocol extension, to accommodate existing software behavior. + +Note that all messages specified in BIP 152, including blocktxn and +getblocktxn, are permitted between peers that have sent/received a disabletx +message, subject to the feature negotiation of BIP 152. + +==Implementation== + +TBD + +==References== + +# Bitcoin Core has [https://github.com/bitcoin/bitcoin/pull/15759 implemented this functionality] since version 0.19.0.1, released in November 2019. +# For example, see https://www.cs.umd.edu/projects/coinscope/coinscope.pdf and https://arxiv.org/pdf/1812.00942.pdf. + +==Copyright== + +This BIP is licensed under the 2-clause BSD license. From 644610f7b87e3e5f4757fb9e80d24f8e6e75d93e Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Sun, 10 Jan 2021 12:41:05 +0100 Subject: [PATCH 1565/2326] bip-0141: clarify the sigop count calculation for CHECKMULTISIG Since the sigOpCount calculation was copied from P2SH, and P2SH restricts the use of CHECKMULTISIG with pushed integers the reference implementation would not take into account the number of public keys for 17 to 20 keys (not representable with an OP_N) even for P2WSH. Therefore it fallbacks to accounting for 20 sigops in this case, which this sentence seemed to mismatch with. Btcd and Libbitcoin use the same calculation as in Bitcoin Core. Signed-off-by: Antoine Poinsot --- bip-0141.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki index 82f6abdc89..8528729693 100644 --- a/bip-0141.mediawiki +++ b/bip-0141.mediawiki @@ -127,7 +127,7 @@ Sigops per block is currently limited to 20,000. We change this restriction as f Sigops in the current pubkey script, signature script, and P2SH check script are counted at 4 times their previous value. The sigop limit is likewise quadrupled to ≤ 80,000. -Each P2WPKH input is counted as 1 sigop. In addition, opcodes within a P2WSH witnessScript are counted identically as previously within the P2SH redeemScript. That is, CHECKSIG is counted as only 1 sigop, and CHECKMULTISIG is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program. +Each P2WPKH input is counted as 1 sigop. In addition, opcodes within a P2WSH witnessScript are counted identically as previously within the P2SH redeemScript. That is, CHECKSIG is counted as only 1 sigop. When preceded by OP_1 to OP_16 CHECKMULTISIG is counted as 1 to 16 sigops respectively, otherwise it is counted as 20 sigops. This rule applies to both native witness program and P2SH witness program. === Additional definitions === From 6057fede052900d442e8fe826f789263769b002d Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 28 Jul 2020 11:33:06 +0930 Subject: [PATCH 1566/2326] BIP 174: clarify format of proprietary extensions. "Variable length string identifier" is not defined anywhere, and the suggestion to use "0x00" is also deeply unclear. I assumed it meant a nul-terminated string! Be explicit: you mean it must be a compact siz1\e unsigned int length, followed by that many identifier bytes, followed by a compact size unsigned int subtype, followed by optional keydata. Signed-off-by: Rusty Russell --- bip-0174.mediawiki | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index c424c5d7c5..30a2bc2531 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -133,8 +133,8 @@ The currently defined global types are as follows: *** {32-bit uint} * Type: Proprietary Use Type PSBT_GLOBAL_PROPRIETARY = 0xFC -** Key: Variable length identifier prefix, followed by a subtype, followed by the key data itself. -*** {0xFC}||{subtype}|{key data} +** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. +*** {0xFC}|{prefixlen}||{subtype}|{key data} ** Value: Any value data as defined by the proprietary type user. *** @@ -225,8 +225,8 @@ The currently defined per-input types are defined as follows: *** {preimage} * Type: Proprietary Use Type PSBT_IN_PROPRIETARY = 0xFC -** Key: Variable length identifier prefix, followed by a subtype, followed by the key data itself. -*** {0xFC}||{subtype}|{key data} +** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. +*** {0xFC}|{prefixlen}||{subtype}|{key data} ** Value: Any value data as defined by the proprietary type user. *** @@ -253,8 +253,8 @@ determine which outputs are change outputs and verify that the change is returni *** {master key fingerprint}|{32-bit uint}|...|{32-bit uint} * Type: Proprietary Use Type PSBT_OUT_PROPRIETARY = 0xFC -** Key: Variable length identifier prefix, followed by a subtype, followed by the key data itself. -*** {0xFC}||{subtype}|{key data} +** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. +*** {0xFC}|{prefixlen}||{subtype}|{key data} ** Value: Any value data as defined by the proprietary type user. *** @@ -336,10 +336,10 @@ 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 types 0xFC is reserved for proprietary use. -The proprietary use type requires keys that follow the type with a variable length string identifer, then a subtype. +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 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 and just be a single 0x00 byte although this is not recommended. +It can also be the empty string although this is not recommended. The subtype is defined by the proprietary type user and can mean whatever they want it to mean. The subtype must also be a compact size unsigned integer in the same form as the normal types. From 50fdf5435ebbc2e9dfb98b74b2ff4a835ef94034 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Wed, 13 Jan 2021 17:09:35 -0500 Subject: [PATCH 1567/2326] Reformat BIP 174 --- bip-0174.mediawiki | 463 +++++++++++++++++++++------------------------ 1 file changed, 212 insertions(+), 251 deletions(-) diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index 30a2bc2531..a20432a134 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -48,272 +48,233 @@ is the separator here 0x00 instead of 0xff?''' The separator here is used to distinguish between each chunk of data. A separator of 0x00 would mean that the unserializer can read it as a key length of 0, which would never occur with actual keys. It can thus be used as a separator and allow for easier unserializer implementation.. -Each key-value pair must have a unique key within its scope; duplicates are not allowed. The format -of a record is as follows: -Note: <..> indicates that the data is prefixed by a compact size unsigned integer representing -the length of that data. {..} indicates the raw data itself. -
-|
-
- -{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" -!Name -!Type -!Description -|- -| Key Length -| Compact Size Unsigned Integer -| Specify how long the key is -|- -| Key -| byte[] -| The Key itself -|- -| Value Length -| Compact Size Unsigned Integer -| Specify how long the value is -|- -| Value -| byte[] -| The Value itself -|} - -The format of each key-value map is as follows: - -
-{key-value pair}|{key-value pair}|...|{0x00}
-
- -{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" -!Field Size -!Name -!Type -!Value -!Description -|- -| 1+ -| Key-value pairs -| Array of key-value pairs -| varies -| The key-value pairs. -|- -| 1 -| separator -| char -| 0x00 -| Must be 0x00 at the end of the map. -|} - -At the beginning of each key is a compact size unsigned integer representing the type. -This compact size unsigned integer must be minimally encoded, i.e. if the value can be represented using one byte, it must be represented as one byte. -For convenience, this BIP will specify types using their full serialization, so a multi-byte type will have it's full prefix and zero padding as necessary. -There are global types, per-input types, and per-output types. + := * * + := 0x70 0x73 0x62 0x74 0xFF + := * 0x00 + := * 0x00 + := * 0x00 + := + := + := + +Where: + +; +: A compact size unsigned integer representing the type. This compact size unsigned integer must be minimally encoded, i.e. if the value can be represented using one byte, it must be represented as one byte. This must be unique within a specific . +; +: The compact size unsigned integer containing the combined length of and +; +: The compact size unsigned integer containing the length of . +; +: Magic bytes which are ASCII for psbt '''Why use 4 bytes for psbt?''' The +transaction format needed to start with a 5 byte header which uniquely identifies +it. The first bytes were chosen to be the ASCII for psbt because that stands for +Partially Signed Bitcoin Transaction. followed by a separator of 0xFF +'''Why Use a separator after the magic bytes?''' The separator +is part of the 5 byte header for PSBT. This byte is a separator of 0xff because +this will cause any non-PSBT unserializer to fail to properly unserialize the PSBT +as a normal transaction. Likewise, since the 5 byte header is fixed, no transaction +in the non-PSBT format will be able to be unserialized by a PSBT unserializer.. This integer must be serialized +in most significant byte order. The currently defined global types are as follows: -* Type: Unsigned Transaction PSBT_GLOBAL_UNSIGNED_TX = 0x00 -** Key: None. The key must only contain the 1 byte type. -*** {0x00} -** Value: The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses). A PSBT must have a transaction, otherwise it is invalid. -*** {transaction} -** Note: Every PSBT must have a field with this type. - -* Type: Extended Public Key PSBT_GLOBAL_XPUB = 0x01 -** Key: The type followed by the 78 byte serialized extended public key as defined by BIP 32. Extended public keys are those that can be used to derive public keys used in the inputs and outputs of this transaction. It should be the public key at the highest hardened derivation index so that the unhardened child keys used in the transaction can be derived. -*** {0x01}|{xpub} -** Value: The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. The number of 32 bit unsigned integer indexes must match the depth provided in the extended public key. -*** {master key fingerprint}|{32-bit uint}|...|{32-bit uint} - -* Type: Version Number PSBT_GLOBAL_VERSION = 0xFB -** Key: None. The key must only contain the 1 byte type. -*** {0xFB} -** Value: The 32-bit little endian unsigned integer representing the version number of this PSBT. If ommitted, the version number is 0. -*** {32-bit uint} - -* Type: Proprietary Use Type PSBT_GLOBAL_PROPRIETARY = 0xFC -** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. -*** {0xFC}|{prefixlen}||{subtype}|{key data} -** Value: Any value data as defined by the proprietary type user. -*** +{| +! Name +! +! +! Description +! +! Description +|- +| Unsigned Transaction +| PSBT_GLOBAL_UNSIGNED_TX = 0x00 +| None +| No key data +| +| The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses). A PSBT must have a transaction, otherwise it is invalid. +|- +| Extended Public Key +| PSBT_GLOBAL_XPUB = 0x01 +| +| The 78 byte serialized extended public key as defined by BIP 32. Extended public keys are those that can be used to derive public keys used in the inputs and outputs of this transaction. It should be the public key at the highest hardened derivation index so that the unhardened child keys used in the transaction can be derived. +| <32-bit uint> <32-bit uint>* +| The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. The number of 32 bit unsigned integer indexes must match the depth provided in the extended public key. +|- +| PSBT Version Number +| PSBT_GLOBAL_VERSION = 0xFB +| None +| No key data +| <32-bit uint> +| The 32-bit little endian unsigned integer representing the version number of this PSBT. If ommitted, the version number is 0. +|- +| Proprietary Use Type +| PSBT_GLOBAL_PROPRIETARY = 0xFC +| +| Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself . +| +| Any value data as defined by the proprietary type user. +|} The currently defined per-input types are defined as follows: -* Type: Non-Witness UTXO PSBT_IN_NON_WITNESS_UTXO = 0x00 -** Key: None. The key must only contain the 1 byte type. -***{0x00} -** Value: The transaction in network serialization format the current input spends from. This should be present for inputs that spend non-segwit outputs and can be present for inputs that spend segwit outputs. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO. '''Why can both UTXO types be provided?''' Many wallets began requiring the full previous transaction (i.e. PSBT_IN_NON_WITNESS_UTXO) for segwit inputs when PSBT was already in use. In order to be compatible with software which were expecting PSBT_IN_WITNESS_UTXO, both UTXO types must be allowed. -*** {transaction} - -* Type: Witness UTXO PSBT_IN_WITNESS_UTXO = 0x01 -** Key: None. The key must only contain the 1 byte type. -*** {0x01} -** Value: The entire transaction output in network serialization which the current input spends from. This should only be present for inputs which spend segwit outputs, including P2SH embedded ones. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO -*** {serialized transaction output({output value}|)} - -* Type: Partial Signature PSBT_IN_PARTIAL_SIG = 0x02 -** Key: The public key which corresponds to this signature. -*** {0x02}|{public key} -** Value: The signature as would be pushed to the stack from a scriptSig or witness. -*** {signature} - -* Type: Sighash Type PSBT_IN_SIGHASH_TYPE = 0x03 -** Key: None. The key must only contain the 1 byte type. -*** {0x03} -** Value: The 32-bit unsigned integer specifying the sighash type to be used for this input. Signatures for this input must use the sighash type, finalizers must fail to finalize inputs which have signatures that do not match the specified sighash type. Signers who cannot produce signatures with the sighash type must not provide a signature. -*** {sighash type} - -* Type: Redeem Script PSBT_IN_REDEEM_SCRIPT = 0x04 -** Key: None. The key must only contain the 1 byte type. -*** {0x04} -** Value: The redeemScript for this input if it has one. -*** {redeemScript} - -* Type: Witness Script PSBT_IN_WITNESS_SCRIPT = 0x05 -** Key: None. The key must only contain the 1 byte type. -*** {0x05} -** Value: The witnessScript for this input if it has one. -*** {witnessScript} - -* Type: BIP 32 Derivation Path PSBT_IN_BIP32_DERIVATION = 0x06 -** Key: The public key -*** {0x06}|{public key} -** Value: The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. Public keys are those that will be needed to sign this input. -*** {master key fingerprint}|{32-bit uint}|...|{32-bit uint} - -* Type: Finalized scriptSig PSBT_IN_FINAL_SCRIPTSIG = 0x07 -** Key: None. The key must only contain the 1 byte type. -*** {0x07} -** Value: The Finalized scriptSig contains a fully constructed scriptSig with signatures and any other scripts necessary for the input to pass validation. -*** {scriptSig} - -* Type: Finalized scriptWitness PSBT_IN_FINAL_SCRIPTWITNESS = 0x08 -** Key: None. The key must only contain the 1 byte type. -*** {0x08} -** Value: The Finalized scriptWitness contains a fully constructed scriptWitness with signatures and any other scripts necessary for the input to pass validation. -*** {scriptWitness} - -* Type: Proof-of-reserves commitment PSBT_IN_POR_COMMITMENT = 0x09 -** Key: None. The key must only contain the 1 byte type. -*** {0x09} -** Value: The UTF-8 encoded commitment message string for the proof-of-reserves. See [[bip-0127.mediawiki|BIP 127]] for more information. -*** {porCommitment} - -* Type: RIPEMD160 preimage PSBT_IN_RIPEMD160 = 0x0a -** Key: The resulting hash of the preimage -*** {0x0a}|{20-byte hash} -** Value: The hash preimage, encoded as a byte vector, which must equal the key when run through the `RIPEMD160` algorithm -*** {preimage} - -* Type: SHA256 preimage PSBT_IN_SHA256 = 0x0b -** Key: The resulting hash of the preimage -*** {0x0b}|{32-byte hash} -** Value: The hash preimage, encoded as a byte vector, which must equal the key when run through the `SHA256` algorithm -*** {preimage} - -* Type: HASH160 preimage PSBT_IN_HASH160 = 0x0c -** Key: The resulting hash of the preimage -*** {0x0c}|{20-byte hash} -** Value: The hash preimage, encoded as a byte vector, which must equal the key when run through the `SHA256` algorithm followed by the `RIPEMD160` algorithm -*** {preimage} - -* Type: HASH256 preimage PSBT_IN_HASH256 = 0x0d -** Key: The resulting hash of the preimage -*** {0x0d}|{32-byte hash} -** Value: The hash preimage, encoded as a byte vector, which must equal the key when run through the `SHA256` algorithm twice -*** {preimage} - -* Type: Proprietary Use Type PSBT_IN_PROPRIETARY = 0xFC -** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. -*** {0xFC}|{prefixlen}||{subtype}|{key data} -** Value: Any value data as defined by the proprietary type user. -*** +{| +! Name +! +! +! Description +! +! Description +|- +| Non-Witness UTXO +| PSBT_IN_NON_WITNESS_UTXO = 0x00 +| None +| No key data +| +| The transaction in network serialization format the current input spends from. This should be present for inputs that spend non-segwit outputs and can be present for inputs that spend segwit outputs. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO. '''Why can both UTXO types be provided?''' Many wallets began requiring the full previous transaction (i.e. PSBT_IN_NON_WITNESS_UTXO) for segwit inputs when PSBT was already in use. In order to be compatible with software which were expecting PSBT_IN_WITNESS_UTXO, both UTXO types must be allowed. +|- +| Witness UTXO +| PSBT_IN_WITNESS_UTXO = 0x01 +| None +| No key data +| <64-bit uint> +| The entire transaction output in network serialization which the current input spends from. This should only be present for inputs which spend segwit outputs, including P2SH embedded ones. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO +|- +| Partial Signature +| PSBT_IN_PARTIAL_SIG = 0x02 +| +| The public key which corresponds to this signature. +| +| The signature as would be pushed to the stack from a scriptSig or witness. +|- +| Sighash Type +| PSBT_IN_SIGHASH_TYPE = 0x03 +| None +| No key data +| <32-bit uint> +| The 32-bit unsigned integer specifying the sighash type to be used for this input. Signatures for this input must use the sighash type, finalizers must fail to finalize inputs which have signatures that do not match the specified sighash type. Signers who cannot produce signatures with the sighash type must not provide a signature. +|- +| Redeem Script +| PSBT_IN_REDEEM_SCRIPT = 0x04 +| None +| No key data +| +| The redeemScript for this input if it has one. +|- +| Witness Script +| PSBT_IN_WITNESS_SCRIPT = 0x05 +| None +| No key data +| +| The witnessScript for this input if it has one. +|- +| BIP 32 Derivation Path +| PSBT_IN_BIP32_DERIVATION = 0x06 +| +| The public key +| <32-bit uint> <32-bit uint>* +| The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. Public keys are those that will be needed to sign this input. +|- +| Finalized scriptSig +| PSBT_IN_FINAL_SCRIPTSIG = 0x07 +| None +| No key data +| +| The Finalized scriptSig contains a fully constructed scriptSig with signatures and any other scripts necessary for the input to pass validation. +|- +| Finalized scriptWitness +| PSBT_IN_FINAL_SCRIPTWITNESS = 0x08 +| None +| No key data +| +| The Finalized scriptWitness contains a fully constructed scriptWitness with signatures and any other scripts necessary for the input to pass validation. +|- +| Proof-of-reserves commitment +| PSBT_IN_POR_COMMITMENT = 0x09 +| None +| No key data +| +| The UTF-8 encoded commitment message string for the proof-of-reserves. See [[bip-0127.mediawiki|BIP 127]] for more information. +|- +| RIPEMD160 preimage +| PSBT_IN_RIPEMD160 = 0x0a +| <20-byte hash> +| The resulting hash of the preimage +| +| The hash preimage, encoded as a byte vector, which must equal the key when run through the RIPEMD160 algorithm +|- +| SHA256 preimage +| PSBT_IN_SHA256 = 0x0b +| <32-byte hash> +| The resulting hash of the preimage +| +| The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm +|- +| HASH160 preimage +| PSBT_IN_HASH160 = 0x0c +| <20-byte hash> +| The resulting hash of the preimage +| +| The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm followed by the RIPEMD160 algorithm +|- +| HASH256 preimage +| PSBT_IN_HASH256 = 0x0d +| <32-byte hash> +| The resulting hash of the preimage +| +| The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm twice +|- +| Proprietary Use Type +| PSBT_IN_PROPRIETARY = 0xFC +| +| Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself . +| +| Any value data as defined by the proprietary type user. +|} The currently defined per-output '''Why do we need per-output data?''' Per-output data allows signers to verify that the outputs are going to the intended recipient. The output data can also be use by signers to determine which outputs are change outputs and verify that the change is returning to the correct place. types are defined as follows: -* Type: Redeem Script PSBT_OUT_REDEEM_SCRIPT = 0x00 -** Key: None. The key must only contain the 1 byte type. -*** {0x00} -** Value: The redeemScript for this output if it has one. -*** {redeemScript} - -* Type: Witness Script PSBT_OUT_WITNESS_SCRIPT = 0x01 -** Key: None. The key must only contain the 1 byte type. -*** {0x01} -** Value: The witnessScript for this output if it has one. -*** {witnessScript} - -* Type: BIP 32 Derivation Path PSBT_OUT_BIP32_DERIVATION = 0x02 -** Key: The public key -*** {0x02}|{public key} -** Value: The master key fingerprint concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. Public keys are those needed to spend this output. -*** {master key fingerprint}|{32-bit uint}|...|{32-bit uint} - -* Type: Proprietary Use Type PSBT_OUT_PROPRIETARY = 0xFC -** Key: Compact size unsigned integer, followed by identifier prefix of that length, followed by a subtype, followed by the key data itself. -*** {0xFC}|{prefixlen}||{subtype}|{key data} -** Value: Any value data as defined by the proprietary type user. -*** - -The transaction format is specified as follows: - - -
-    {0x70736274}|{0xff}|{global key-value map}|{input key-value map}|...|{input key-value map}|{output key-value map}|...|{output key-value map}|
-
- -{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" -!Field Size -!Name -!Type -!Value -!Description -|- -| 4 -| Magic Bytes -| int32_t -| 0x70736274 -| Magic bytes which are ASCII for psbt. '''Why use 4 bytes for psbt?''' The -transaction format needed to start with a 5 byte header which uniquely identifies -it. The first bytes were chosen to be the ASCII for psbt because that stands for -Partially Signed Bitcoin Transaction. This integer should be serialized -in most significant byte order. -|- -| 1 -| separator -| char -| 0xff -| Must be 0xff '''Why Use a separator after the magic bytes?''' The separator -is part of the 5 byte header for PSBT. This byte is a separator of 0xff because -this will cause any non-PSBT unserializer to fail to properly unserialize the PSBT -as a normal transaction. Likewise, since the 5 byte header is fixed, no transaction -in the non-PSBT format will be able to be unserialized by a PSBT unserializer. -|- -| 1+ -| Global data -| Key-value Map -| varies -| The key-value pairs for all global data. -|- -| 1+ -| Inputs -| Array of key-value maps -| varies -| The key-value pairs for each input as described above. Every input in the unsigned transaction must have a corresponding input map. -|- -| 1+ -| Outputs -| Array of key-value maps -| varies -| The key-value pairs for each output as described above. Every output in the unsigned transaction must have a corresponding output map. +{| +! Name +! +! +! Description +! +! Description +|- +| Redeem Script +| PSBT_OUT_REDEEM_SCRIPT = 0x00 +| None +| No key data +| +| The redeemScript for this output if it has one. +|- +| Witness Script +| PSBT_OUT_WITNESS_SCRIPT = 0x01 +| None +| No key data +| +| The witnessScript for this output if it has one. +|- +| BIP 32 Derivation Path +| PSBT_OUT_BIP32_DERIVATION = 0x02 +| +| The public key +| <{32-bit uint> <32-bit uint>* +| The master key fingerprint concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. Public keys are those needed to spend this output. +|- +| Proprietary Use Type +| PSBT_OUT_PROPRIETARY = 0xFC +| +| Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself . +| +| Any value data as defined by the proprietary type user. |} -Each block of data between separators can be viewed as a scope, and all separators -are required'''Why are all separators required?''' The separators are required -so that the unserializer knows which input it is unserializing data for.. Types can be skipped when they are unnecessary. For example, if an input is a witness input, then it should not have a Non-Witness UTXO key-value pair. From c0991047e25a35d1ddf241f304a079e9893eed69 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Thu, 14 Jan 2021 13:31:15 -0500 Subject: [PATCH 1568/2326] Explicitly specify PSBTv0 --- README.mediawiki | 2 +- bip-0174.mediawiki | 13 +++++++++++-- scripts/buildtable.pl | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 83120ab82b..e9fe70524c 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -850,7 +850,7 @@ Those proposing changes should consider that ultimately consent may rest with th |- style="background-color: #ffffcf" | [[bip-0174.mediawiki|174]] | Applications -| Partially Signed Bitcoin Transaction Format +| Partially Signed Bitcoin Transaction Format and Version 0 | Andrew Chow | Standard | Proposed diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index a20432a134..a1beaef744 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -1,7 +1,7 @@
   BIP: 174
   Layer: Applications
-  Title: Partially Signed Bitcoin Transaction Format
+  Title: Partially Signed Bitcoin Transaction Format and Version 0
   Author: Andrew Chow 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174
@@ -21,6 +21,9 @@ signatures for an input while the input does not have a complete set of signatur
 The signer can be offline as all necessary information will be provided in the
 transaction.
 
+The generic format is described here in addition to the specification for version 0
+of this format.
+
 ===Copyright===
 
 This BIP is licensed under the 2-clause BSD license.
@@ -94,7 +97,7 @@ The currently defined global types are as follows:
 | None
 | No key data
 | 
-| The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses). A PSBT must have a transaction, otherwise it is invalid.
+| The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses).
 |-
 | Extended Public Key
 | PSBT_GLOBAL_XPUB = 0x01
@@ -311,6 +314,12 @@ It is useful when there are additional data that they need attached to a PSBT bu
 The proprietary use type is not to be used by any public specification and there is no expectation that any publicly available software be able to understand any specific meanings of it and the subtypes.
 This type must be used for internal processes only.
 
+==Version 0==
+
+Partially Signed Bitcoin Transactions version 0 is the first version of the PSBT format.
+Version 0 PSBTs must either omit PSBT_GLOBAL_VERSION or include it and set it to 0.
+Version 0 PSBTs must include PSBT_GLOBAL_UNSIGNED_TX, if omitted, the PSBT is invalid.
+
 ==Roles==
 
 Using the transaction format involves many different roles. Multiple roles can be handled by a single entity, but each role is specialized in what it should be capable of doing.
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index 1edd8c0dcf..ed71f7c40b 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -89,7 +89,7 @@
 );
 my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 67 69 74 80 81 83 90 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152);
 my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 31 33 34 35 39 43 44 45 47 61 64 68 70 71 72 73 101 102 106 120 121);
-my %TolerateTitleTooLong = map { $_ => undef } qw(39 44 45 47 49 60 67 68 69 73 74 75 80 81 99 105 106 109 113 122 126 131 143 145 147 173);
+my %TolerateTitleTooLong = map { $_ => undef } qw(39 44 45 47 49 60 67 68 69 73 74 75 80 81 99 105 106 109 113 122 126 131 143 145 147 173 174);
 
 my %emails;
 

From a4fb1b9de0997ef5f47cca6e684353a89ad0b440 Mon Sep 17 00:00:00 2001
From: Andrew Chow 
Date: Thu, 14 Jan 2021 13:50:00 -0500
Subject: [PATCH 1569/2326] Specify procedure for new fields and versions

---
 bip-0174.mediawiki | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index a1beaef744..3ea95d5b41 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -479,6 +479,18 @@ Updaters and combiners that need to add a version number to a PSBT should use th
 For example, if a combiner sees two PSBTs for the same transaction, one with version 0, and the other with version 1, then it should combine them and produce a PSBT with version 1.
 If an updater is updating a PSBT and needs to add a field that is only available in version 1, then it should set the PSBT version number to 1 unless a version higher than that is already specified.
 
+===Procedure For New Fields===
+
+New fields should first be proposed on the bitcoin-dev mailing list.
+If a field requires significatn description as to its usage, it should be accompanied by a separate BIP.
+The field must be added to the field listing tables in the Specification section.
+
+===Procedure For New Versions===
+
+New PSBT versions must be described in a separate BIP.
+The BIP may reference this BIP and any components of PSBT version 0 that are retained in the new version.
+Any new fields described in the new version must be added to the field listing tables in the Specification section.
+
 ==Compatibility==
 
 This transaction format is designed so that it is unable to be properly unserialized

From 80df41818ecbd2a16f351513da8e33e0ac17a4fd Mon Sep 17 00:00:00 2001
From: Andrew Chow 
Date: Thu, 14 Jan 2021 13:52:07 -0500
Subject: [PATCH 1570/2326] Include PSBT versions that can or must include
 field

---
 bip-0174.mediawiki | 78 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index 3ea95d5b41..9e1de13559 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -91,6 +91,9 @@ The currently defined global types are as follows:
 !  Description
 ! 
 !  Description
+! Versions Requiring Inclusion
+! Versions Requiring Exclusion
+! Versions Allowing Inclusion
 |-
 | Unsigned Transaction
 | PSBT_GLOBAL_UNSIGNED_TX = 0x00
@@ -98,6 +101,9 @@ The currently defined global types are as follows:
 | No key data
 | 
 | The transaction in network serialization. The scriptSigs and witnesses for each input must be empty. The transaction must be in the old serialization format (without witnesses).
+| 0
+|
+| 0
 |-
 | Extended Public Key
 | PSBT_GLOBAL_XPUB = 0x01
@@ -105,6 +111,9 @@ The currently defined global types are as follows:
 | The 78 byte serialized extended public key as defined by BIP 32. Extended public keys are those that can be used to derive public keys used in the inputs and outputs of this transaction. It should be the public key at the highest hardened derivation index so that the unhardened child keys used in the transaction can be derived.
 | <32-bit uint> <32-bit uint>*
 | The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. The number of 32 bit unsigned integer indexes must match the depth provided in the extended public key.
+|
+|
+| 0
 |-
 | PSBT Version Number
 | PSBT_GLOBAL_VERSION = 0xFB
@@ -112,6 +121,9 @@ The currently defined global types are as follows:
 | No key data
 | <32-bit uint>
 | The 32-bit little endian unsigned integer representing the version number of this PSBT. If ommitted, the version number is 0.
+|
+|
+| 0
 |-
 | Proprietary Use Type
 | PSBT_GLOBAL_PROPRIETARY = 0xFC
@@ -119,6 +131,9 @@ The currently defined global types are as follows:
 | Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself .
 | 
 | Any value data as defined by the proprietary type user.
+|
+|
+| 0
 |}
 
 The currently defined per-input types are defined as follows:
@@ -130,6 +145,9 @@ The currently defined per-input types are defined as follows:
 !  Description
 ! 
 !  Description
+! Versions Requiring Inclusion
+! Versions Requiring Exclusion
+! Versions Allowing Inclusion
 |-
 | Non-Witness UTXO
 | PSBT_IN_NON_WITNESS_UTXO = 0x00
@@ -137,6 +155,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The transaction in network serialization format the current input spends from. This should be present for inputs that spend non-segwit outputs and can be present for inputs that spend segwit outputs. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO. '''Why can both UTXO types be provided?''' Many wallets began requiring the full previous transaction (i.e. PSBT_IN_NON_WITNESS_UTXO) for segwit inputs when PSBT was already in use. In order to be compatible with software which were expecting PSBT_IN_WITNESS_UTXO, both UTXO types must be allowed.
+|
+|
+| 0
 |-
 | Witness UTXO
 | PSBT_IN_WITNESS_UTXO = 0x01
@@ -144,6 +165,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | <64-bit uint>  
 | The entire transaction output in network serialization which the current input spends from. This should only be present for inputs which spend segwit outputs, including P2SH embedded ones. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO
+|
+|
+| 0
 |-
 | Partial Signature
 | PSBT_IN_PARTIAL_SIG = 0x02
@@ -151,6 +175,9 @@ The currently defined per-input types are defined as follows:
 | The public key which corresponds to this signature.
 | 
 | The signature as would be pushed to the stack from a scriptSig or witness.
+|
+|
+| 0
 |-
 | Sighash Type
 | PSBT_IN_SIGHASH_TYPE = 0x03
@@ -158,6 +185,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | <32-bit uint>
 | The 32-bit unsigned integer specifying the sighash type to be used for this input. Signatures for this input must use the sighash type, finalizers must fail to finalize inputs which have signatures that do not match the specified sighash type. Signers who cannot produce signatures with the sighash type must not provide a signature.
+|
+|
+| 0
 |-
 | Redeem Script
 | PSBT_IN_REDEEM_SCRIPT = 0x04
@@ -165,6 +195,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The redeemScript for this input if it has one.
+|
+|
+| 0
 |-
 | Witness Script
 | PSBT_IN_WITNESS_SCRIPT = 0x05
@@ -172,6 +205,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The witnessScript for this input if it has one.
+|
+|
+| 0
 |-
 | BIP 32 Derivation Path
 | PSBT_IN_BIP32_DERIVATION = 0x06
@@ -179,6 +215,9 @@ The currently defined per-input types are defined as follows:
 | The public key
 | <32-bit uint> <32-bit uint>*
 | The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. Public keys are those that will be needed to sign this input.
+|
+|
+| 0
 |-
 | Finalized scriptSig
 | PSBT_IN_FINAL_SCRIPTSIG = 0x07
@@ -186,6 +225,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The Finalized scriptSig contains a fully constructed scriptSig with signatures and any other scripts necessary for the input to pass validation.
+|
+|
+| 0
 |-
 | Finalized scriptWitness
 | PSBT_IN_FINAL_SCRIPTWITNESS = 0x08
@@ -193,6 +235,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The Finalized scriptWitness contains a fully constructed scriptWitness with signatures and any other scripts necessary for the input to pass validation.
+|
+|
+| 0
 |-
 | Proof-of-reserves commitment
 | PSBT_IN_POR_COMMITMENT = 0x09
@@ -200,6 +245,9 @@ The currently defined per-input types are defined as follows:
 | No key data
 | 
 | The UTF-8 encoded commitment message string for the proof-of-reserves.  See [[bip-0127.mediawiki|BIP 127]] for more information.
+|
+|
+| 0
 |-
 | RIPEMD160 preimage
 | PSBT_IN_RIPEMD160 = 0x0a
@@ -207,6 +255,9 @@ The currently defined per-input types are defined as follows:
 | The resulting hash of the preimage
 | 
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the RIPEMD160 algorithm
+|
+|
+| 0
 |-
 | SHA256 preimage
 | PSBT_IN_SHA256 = 0x0b
@@ -214,6 +265,9 @@ The currently defined per-input types are defined as follows:
 | The resulting hash of the preimage
 | 
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm
+|
+|
+| 0
 |-
 | HASH160 preimage
 | PSBT_IN_HASH160 = 0x0c
@@ -221,6 +275,9 @@ The currently defined per-input types are defined as follows:
 | The resulting hash of the preimage
 | 
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm followed by the RIPEMD160 algorithm
+|
+|
+| 0
 |-
 | HASH256 preimage
 | PSBT_IN_HASH256 = 0x0d
@@ -228,6 +285,9 @@ The currently defined per-input types are defined as follows:
 | The resulting hash of the preimage
 | 
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm twice
+|
+|
+| 0
 |-
 | Proprietary Use Type
 | PSBT_IN_PROPRIETARY = 0xFC
@@ -235,6 +295,9 @@ The currently defined per-input types are defined as follows:
 | Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself .
 | 
 | Any value data as defined by the proprietary type user.
+|
+|
+| 0
 |}
 
 The currently defined per-output '''Why do we need per-output data?''' Per-output data allows signers
@@ -248,6 +311,9 @@ determine which outputs are change outputs and verify that the change is returni
 !  Description
 ! 
 !  Description
+! Versions Requiring Inclusion
+! Versions Requiring Exclusion
+! Versions Allowing Inclusion
 |-
 | Redeem Script
 | PSBT_OUT_REDEEM_SCRIPT = 0x00
@@ -255,6 +321,9 @@ determine which outputs are change outputs and verify that the change is returni
 | No key data
 | 
 | The redeemScript for this output if it has one.
+|
+|
+| 0
 |-
 | Witness Script
 | PSBT_OUT_WITNESS_SCRIPT = 0x01
@@ -262,6 +331,9 @@ determine which outputs are change outputs and verify that the change is returni
 | No key data
 | 
 | The witnessScript for this output if it has one.
+|
+|
+| 0
 |-
 | BIP 32 Derivation Path
 | PSBT_OUT_BIP32_DERIVATION = 0x02
@@ -269,6 +341,9 @@ determine which outputs are change outputs and verify that the change is returni
 | The public key
 | <{32-bit uint> <32-bit uint>*
 | The master key fingerprint concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. Public keys are those needed to spend this output.
+|
+|
+| 0
 |-
 | Proprietary Use Type
 | PSBT_OUT_PROPRIETARY = 0xFC
@@ -276,6 +351,9 @@ determine which outputs are change outputs and verify that the change is returni
 | Compact size unsigned integer , followed by identifier prefix of that length , followed by a subtype , followed by the key data itself .
 | 
 | Any value data as defined by the proprietary type user.
+|
+|
+| 0
 |}
 
 Types can be skipped when they are unnecessary. For example, if an input is a witness

From c27d5e8b9643a478ed7b6fd4e7cda15238f418fe Mon Sep 17 00:00:00 2001
From: Andrew Chow 
Date: Thu, 14 Jan 2021 14:38:36 -0500
Subject: [PATCH 1571/2326] Mark BIP 174 as final

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

diff --git a/README.mediawiki b/README.mediawiki
index e9fe70524c..f77ce56fad 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -847,13 +847,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Pieter Wuille, Greg Maxwell
 | Informational
 | Final
-|- style="background-color: #ffffcf"
+|- style="background-color: #cfffcf"
 | [[bip-0174.mediawiki|174]]
 | Applications
 | Partially Signed Bitcoin Transaction Format and Version 0
 | Andrew Chow
 | Standard
-| Proposed
+| Final
 |-
 | [[bip-0175.mediawiki|175]]
 | Applications
diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index 9e1de13559..303c0013d4 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -5,7 +5,7 @@
   Author: Andrew Chow 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174
-  Status: Proposed
+  Status: Final
   Type: Standards Track
   Created: 2017-07-12
   License: BSD-2-Clause

From 88fb2052647f5f7a73127dad7ad6f4d46149cf79 Mon Sep 17 00:00:00 2001
From: Andrew Chow 
Date: Thu, 14 Jan 2021 16:09:52 -0500
Subject: [PATCH 1572/2326] Combine Appendix with field listing tables

---
 bip-0174.mediawiki | 152 ++++++++-------------------------------------
 1 file changed, 26 insertions(+), 126 deletions(-)

diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index 303c0013d4..81958fdda6 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -94,6 +94,7 @@ The currently defined global types are as follows:
 ! Versions Requiring Inclusion
 ! Versions Requiring Exclusion
 ! Versions Allowing Inclusion
+! Parent BIP
 |-
 | Unsigned Transaction
 | PSBT_GLOBAL_UNSIGNED_TX = 0x00
@@ -104,6 +105,7 @@ The currently defined global types are as follows:
 | 0
 |
 | 0
+| 174
 |-
 | Extended Public Key
 | PSBT_GLOBAL_XPUB = 0x01
@@ -114,6 +116,7 @@ The currently defined global types are as follows:
 |
 |
 | 0
+| 174
 |-
 | PSBT Version Number
 | PSBT_GLOBAL_VERSION = 0xFB
@@ -124,6 +127,7 @@ The currently defined global types are as follows:
 |
 |
 | 0
+| 174
 |-
 | Proprietary Use Type
 | PSBT_GLOBAL_PROPRIETARY = 0xFC
@@ -134,6 +138,7 @@ The currently defined global types are as follows:
 |
 |
 | 0
+| 174
 |}
 
 The currently defined per-input types are defined as follows:
@@ -148,6 +153,7 @@ The currently defined per-input types are defined as follows:
 ! Versions Requiring Inclusion
 ! Versions Requiring Exclusion
 ! Versions Allowing Inclusion
+! Parent BIP
 |-
 | Non-Witness UTXO
 | PSBT_IN_NON_WITNESS_UTXO = 0x00
@@ -158,6 +164,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Witness UTXO
 | PSBT_IN_WITNESS_UTXO = 0x01
@@ -168,6 +175,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Partial Signature
 | PSBT_IN_PARTIAL_SIG = 0x02
@@ -178,6 +186,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Sighash Type
 | PSBT_IN_SIGHASH_TYPE = 0x03
@@ -188,6 +197,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Redeem Script
 | PSBT_IN_REDEEM_SCRIPT = 0x04
@@ -198,6 +208,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Witness Script
 | PSBT_IN_WITNESS_SCRIPT = 0x05
@@ -208,6 +219,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | BIP 32 Derivation Path
 | PSBT_IN_BIP32_DERIVATION = 0x06
@@ -218,6 +230,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Finalized scriptSig
 | PSBT_IN_FINAL_SCRIPTSIG = 0x07
@@ -228,6 +241,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Finalized scriptWitness
 | PSBT_IN_FINAL_SCRIPTWITNESS = 0x08
@@ -238,6 +252,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Proof-of-reserves commitment
 | PSBT_IN_POR_COMMITMENT = 0x09
@@ -248,6 +263,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| [[bip-0127.mediawiki|127]]
 |-
 | RIPEMD160 preimage
 | PSBT_IN_RIPEMD160 = 0x0a
@@ -258,6 +274,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | SHA256 preimage
 | PSBT_IN_SHA256 = 0x0b
@@ -268,6 +285,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | HASH160 preimage
 | PSBT_IN_HASH160 = 0x0c
@@ -278,6 +296,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | HASH256 preimage
 | PSBT_IN_HASH256 = 0x0d
@@ -288,6 +307,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |-
 | Proprietary Use Type
 | PSBT_IN_PROPRIETARY = 0xFC
@@ -298,6 +318,7 @@ The currently defined per-input types are defined as follows:
 |
 |
 | 0
+| 174
 |}
 
 The currently defined per-output '''Why do we need per-output data?''' Per-output data allows signers
@@ -314,6 +335,7 @@ determine which outputs are change outputs and verify that the change is returni
 ! Versions Requiring Inclusion
 ! Versions Requiring Exclusion
 ! Versions Allowing Inclusion
+! Parent BIP
 |-
 | Redeem Script
 | PSBT_OUT_REDEEM_SCRIPT = 0x00
@@ -324,6 +346,7 @@ determine which outputs are change outputs and verify that the change is returni
 |
 |
 | 0
+| 174
 |-
 | Witness Script
 | PSBT_OUT_WITNESS_SCRIPT = 0x01
@@ -334,6 +357,7 @@ determine which outputs are change outputs and verify that the change is returni
 |
 |
 | 0
+| 174
 |-
 | BIP 32 Derivation Path
 | PSBT_OUT_BIP32_DERIVATION = 0x02
@@ -344,6 +368,7 @@ determine which outputs are change outputs and verify that the change is returni
 |
 |
 | 0
+| 174
 |-
 | Proprietary Use Type
 | PSBT_OUT_PROPRIETARY = 0xFC
@@ -354,6 +379,7 @@ determine which outputs are change outputs and verify that the change is returni
 |
 |
 | 0
+| 174
 |}
 
 Types can be skipped when they are unnecessary. For example, if an input is a witness
@@ -817,129 +843,3 @@ and for coming up with the name and abbreviation of PSBT.
 
 Thanks to Pieter Wuille, Gregory Maxwell, Jonathan Underwood, Daniel Cousens and those who commented on the bitcoin-dev mailing list for additional comments
 and suggestions for improving this proposal.
-
-==Appendix A: Data types and their specifications==
-
-Any data types, their associated scope and BIP number must be defined here
-
-{| class="wikitable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;"
-!Scope
-!Type values
-!Name
-!BIP Number
-|-
-| Global
-| 0
-| PSBT_GLOBAL_UNSIGNED_TX
-| BIP 174
-|-
-| Global
-| 1
-| PSBT_GLOBAL_XPUB
-| BIP 174
-|-
-| Global
-| 251
-| PSBT_GLOBAL_VERSION
-| BIP 174
-|-
-| Global
-| 252
-| PSBT_GLOBAL_PROPRIETARY
-| BIP 174
-|-
-| Input
-| 0
-| PSBT_IN_NON_WITNESS_UTXO
-| BIP 174
-|-
-| Input
-| 1
-| PSBT_IN_WITNESS_UTXO
-| BIP 174
-|-
-| Input
-| 2
-| PSBT_IN_PARTIAL_SIG
-| BIP 174
-|-
-| Input
-| 3
-| PSBT_IN_SIGHASH_TYPE
-| BIP 174
-|-
-| Input
-| 4
-| PSBT_IN_REDEEM_SCRIPT
-| BIP 174
-|-
-| Input
-| 5
-| PSBT_IN_WITNESS_SCRIPT
-| BIP 174
-|-
-| Input
-| 6
-| PSBT_IN_BIP32_DERIVATION
-| BIP 174
-|-
-| Input
-| 7
-| PSBT_IN_FINAL_SCRIPTSIG
-| BIP 174
-|-
-| Input
-| 8
-| PSBT_IN_FINAL_SCRIPTWITNESS
-| BIP 174
-|-
-| Input
-| 9
-| PSBT_IN_POR_COMMITMENT
-| [[bip-0127.mediawiki|BIP 127]]
-|-
-| Input
-| 10
-| PSBT_IN_RIPEMD160
-| BIP 174
-|-
-| Input
-| 11
-| PSBT_IN_SHA256
-| BIP 174
-|-
-| Input
-| 12
-| PSBT_IN_HASH160
-| BIP 174
-|-
-| Input
-| 13
-| PSBT_IN_HASH256
-| BIP 174
-|-
-| Input
-| 252
-| PSBT_IN_PROPRIETARY
-| BIP 174
-|-
-| Output
-| 0
-| PSBT_OUT_REDEEM_SCRIPT
-| BIP 174
-|-
-| Output
-| 1
-| PSBT_OUT_WITNESS_SCRIPT
-| BIP 174
-|-
-| Output
-| 2
-| PSBT_OUT_BIP32_DERIVATION
-| BIP 174
-|-
-| Output
-| 252
-| PSBT_OUT_PROPRIETARY
-| BIP 174
-|}

From 794f20a13148536e7627451adaf0534e5862f7fa Mon Sep 17 00:00:00 2001
From: Suhas Daftuar 
Date: Tue, 26 Jan 2021 11:46:35 -0500
Subject: [PATCH 1573/2326] Add link to implementation

Also change the phrasing to more clearly indicate when block-relay-only peering
was deployed.
---
 bip-disable-tx.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bip-disable-tx.mediawiki b/bip-disable-tx.mediawiki
index c2bca25556..a5f2f77c68 100644
--- a/bip-disable-tx.mediawiki
+++ b/bip-disable-tx.mediawiki
@@ -19,7 +19,7 @@ block-relay-only connections that are currently in use on the network.
 
 ==Motivation==
 
-For nearly the past year, software has been deployed[1] which initiates
+Since 2019, software has been deployed[1] which initiates
 connections on the Bitcoin network and sets the transaction relay field
 (introduced by BIP 37 and also defined in BIP 60) to false, to prevent
 transaction relay from occurring on the connection. Additionally, addr messages
@@ -88,7 +88,7 @@ message, subject to the feature negotiation of BIP 152.
 
 ==Implementation==
 
-TBD
+https://github.com/bitcoin/bitcoin/pull/20726
 
 ==References==
 

From 6128a7bcb60ae2eca2461ccb17d29b5186d13820 Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Thu, 24 Dec 2020 14:37:19 -0800
Subject: [PATCH 1574/2326] Add BIP 350 (bech32m)

---
 README.mediawiki   |   7 +
 bip-0350.mediawiki | 333 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 340 insertions(+)
 create mode 100644 bip-0350.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index 83120ab82b..e83769ba90 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -980,6 +980,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Pieter Wuille, Jonas Nick, Anthony Towns
 | Standard
 | Draft
+|-
+| [[bip-0350.mediawiki|350]]
+| Applications
+| Bech32m format for v1+ witness addresses
+| Pieter Wuille
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki
new file mode 100644
index 0000000000..a7b50470d5
--- /dev/null
+++ b/bip-0350.mediawiki
@@ -0,0 +1,333 @@
+
+  BIP: 350
+  Layer: Applications
+  Title: Bech32m format for v1+ witness addresses
+  Author: Pieter Wuille 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0350
+  Status: Draft
+  Type: Standards Track
+  Created: 2020-12-16
+  License: BSD-2-Clause
+  Replaces: 173
+  Post-History: 2021-01-05: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-January/018338.html [bitcoin-dev] Bech32m BIP: new checksum, and usage for segwit address
+
+ +==Introduction== + +===Abstract=== + +This document defines an improved variant of Bech32 called '''Bech32m''', and amends BIP173 to use Bech32m for native segregated witness outputs of version 1 and later. Bech32 remains in use for segregated witness outputs of version 0. + +===Copyright=== + +This BIP is licensed under the 2-clause BSD license. + +===Motivation=== + +[[bip-0173.mediawiki|BIP173]] defined a generic checksummed base 32 encoded format called Bech32. It is in use for segregated witness outputs of version 0 (P2WPKH and P2WSH, see [[bip-0141.mediawiki|BIP141]]), and other applications. + +Bech32 has an unexpected [https://github.com/sipa/bech32/issues/51 weakness]: whenever the final character is a 'p', inserting or deleting any number of 'q' characters immediately preceding it does not invalidate the checksum. This does not affect existing uses of witness version 0 BIP173 addresses due to their restriction to two specific lengths, but may affect future uses and/or other applications using the Bech32 encoding. + +This document addresses that by specifying Bech32m, a variant of Bech32 that mitigates this insertion weakness and related issues. + +==Specification== + +We first specify the new checksum algorithm, and then document how it should be used for future Bitcoin addresses. + +===Bech32m=== + +Bech32m modifies the checksum of the Bech32 specification, replacing the constant ''1'' that is xored into the checksum at the end with ''0x2bc830a3''. The resulting checksum verification and creation algorithm (in Python, cf. the code in [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#Bech32|BIP173 Bech32 section]): + +
+BECH32M_CONST = 0x2bc830a3
+
+def bech32m_polymod(values):
+  GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
+  chk = 1
+  for v in values:
+    b = (chk >> 25)
+    chk = (chk & 0x1ffffff) << 5 ^ v
+    for i in range(5):
+      chk ^= GEN[i] if ((b >> i) & 1) else 0
+  return chk
+
+def bech32m_hrp_expand(s):
+  return [ord(x) >> 5 for x in s] + [0] + [ord(x) & 31 for x in s]
+
+def bech32m_verify_checksum(hrp, data):
+  return bech32m_polymod(bech32m_hrp_expand(hrp) + data) == BECH32M_CONST
+
+def bech32m_create_checksum(hrp, data):
+  values = bech32m_hrp_expand(hrp) + data
+  polymod = bech32m_polymod(values + [0,0,0,0,0,0]) ^ BECH32M_CONST
+  return [(polymod >> 5 * (5 - i)) & 31 for i in range(6)]
+
+ +All other aspects of Bech32 remain unchanged, including its human-readable parts (HRPs). + +A combined function to decode both Bech32 and Bech32m simultaneously could be written using: + +
+class Encoding(Enum):
+    BECH32 = 1
+    BECH32M = 2
+
+def bech32_bech32m_verify_checksum(hrp, data):
+    check = bech32_polymod(bech32_hrp_expand(hrp) + data)
+    if check == 1:
+        return Encoding.BECH32
+    if const == BECH32M_CONST:
+        return Encoding.BECH32M
+    return None
+
+ +which returns either None for failure, or one of the BECH32 / BECH32M enumeration values to indicate successful decoding according to the respective standard. + +===Addresses for segregated witness outputs=== + +Version 0 outputs (specifically, P2WPKH and P2WSH addresses) continue to use Bech32'''Why not permit both Bech32 and Bech32m for v0 addresses?''' Permitting both encodings reduces the error detection capabilities (it makes it equivalent to only have 29 bits of checksum). as specified in BIP173. Addresses for segregated witness outputs version 1 through 16 use Bech32m. Again, all other aspects of the encoding remain the same, including the 'bc' HRP. + +To generate an address for a segregated witness output: + +* If its witness version is 0, encode it using Bech32. +* If its witness version is 1 or higher, encode it using Bech32m. + +To decode an address, client software should either decode with both a Bech32 and a Bech32m decoder'''Can a single string simultaneously be valid as Bech32 and Bech32m?''' No, a valid Bech32 and Bech32m string will always differ by at least 3 characters if they are the same length., or use a decoder that supports both simultaneously. In both cases, the address decoder has to verify that the encoding matches what is expected for the decoded witness version (Bech32 for version 0, Bech32m for others). + +The following code demonstrates the checks that need to be performed. Refer to the Python code linked in the reference implementation section below for full details of the called functions. + +
+def decode(hrp, addr):
+    hrpgot, data, spec = bech32_decode(addr)
+    if hrpgot != hrp:
+        return (None, None)
+    decoded = convertbits(data[1:], 5, 8, False)
+    # Witness programs are between 2 and 40 bytes in length.
+    if decoded is None or len(decoded) < 2 or len(decoded) > 40:
+        return (None, None)
+    # Witness versions are in range 0..16.
+    if data[0] > 16:
+        return (None, None)
+    # Witness v0 programs must be exactly length 20 or 32.
+    if data[0] == 0 and len(decoded) != 20 and len(decoded) != 32:
+        return (None, None)
+    # Witness v0 uses Bech32; v1 through v16 use Bech32m.
+    if data[0] == 0 and spec != Encoding.BECH32 or data[0] != 0 and spec != Encoding.BECH32M:
+        return (None, None)
+    # Success.
+    return (data[0], decoded)
+
+ +'''Error locating''' + +Bech32m, like Bech32m, does support locating'''What about error correction?''' As explained in BIP173, introducing error correction reduces the ability to detect errors. While it is technically possible to correct a small number of errors due to Bech32(m)'s nature as a BCH code, implementations should refrain from using this for more than indicating where an error may be present. the positions of a few substitution errors. To combine this functionality with +the segregated witness addresses proposed by this document, simply try locating errors for both Bech32 and Bech32m. If only one finds error locations, report that one. If both do (which should be very rare), +there are a number of options: +* Report the one that needs fewer corrections (if they differ). +* Eliminate the response(s) that are inconsistent. Any symbol that isn't on an error location can be checked. For example, if the witness version symbol is not an error location, and it doesn't correspond to the specification used (0 for Bech32, 1+ for Bech32m), that response can be eliminated. + +See the fancy Javascript decoder below for example of the above. + +==Compatibility== + +This document introduces a new encoding for v1 segregated witness outputs and higher versions. There should not be any compatibility issues on the receiver side; no wallets are creating v1 segregated witness addresses yet, as the output type is not usable on mainnet. + +On the other hand, the Bech32m proposal breaks forward-compatibility for sending to v1 and higher version segregated witness addresses. This incompatibility is [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-October/018236.html intentional]. An alternative design was [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-November/017460.html considered] where Bech32 remained in use for certain subsets of future addresses, but ultimately [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-December/018293.html discarded]. By introducing a clean break, we protect not only new software but also existing senders from the mutation issue, as new addresses will be incompatible with the existing Bech32 address validation. [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-November/018268.html Experiments] by Taproot proponents had shown that hardly any wallets and services supported sending to higher segregated witness output versions, so little is lost by [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-December/018298.html breaking] forward-compatibility. Furthermore, those experiments identified cases in which segregated witness implementations would have caused wallets to burn funds when sending to version 1 addresses. In case it is still in use, the chosen approach will prevent such software from destroying funds when attempting to send to a Bech32m address. + +==Reference implementations== + +* Reference encoder and decoder: +** [https://github.com/sipa/bech32/tree/bech32m/ref/python Reference Python implementation] +** [https://github.com/sipa/bech32/tree/bech32m/ref/c Reference C implementation] +** [https://github.com/sipa/bech32/tree/bech32m/ref/c++ Reference C++ implementation] +** [https://github.com/bitcoin/bitcoin/pull/20861 Bitcoin Core C++ implementation] +** [https://github.com/sipa/bech32/tree/bech32m/ref/javascript Reference Javascript implementation] + +* Fancy decoder that localizes errors: +** [https://github.com/sipa/bech32/tree/bech32m/ecc/javascript For JavaScript] ([http://bitcoin.sipa.be/bech32/demo/demo.html demo website]) + +==Test vectors== + +'''Implementation advice''' Experiments testing BIP173 implementations found that many wallets and services did not support sending to higher version segregated witness outputs. In anticipation of the proposed [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki Taproot] soft fork introducing v1 segregated witness outputs on the network, we emphatically recommend employing the complete set of test vectors provided below as well as ensuring that your implementation supports sending to v1 '''and higher versions'''. All higher versions of native segregated witness outputs should be recognized as valid recipients. As higher versions are not defined on the network, no wallet should ever create them and no recipient should ever provide them to a sender. Nor should a recipient ever want to falsely provide them as the recipient would simply see a payment intended to themselves burned instead. However, by defining higher versions as valid recipients now, future soft forks introducing higher versions of native segwit outputs will be forward-compatible to all wallets correctly implementing the Bech32m specification. + +===Test vectors for Bech32m=== + +The following strings are valid Bech32m: +* A1LQFN3A +* a1lqfn3a +* an83characterlonghumanreadablepartthatcontainsthetheexcludedcharactersbioandnumber11sg7hg6 +* abcdef1l7aum6echk45nj3s0wdvt2fg8x9yrzpqzd3ryx +* 11llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllludsr8 +* split1checkupstagehandshakeupstreamerranterredcaperredlc445v +* ?1v759aa + +No string can be simultaneously valid Bech32 and Bech32m, so the above examples also serve as invalid test vectors for Bech32. + +The following string are not valid Bech32m (with reason for invalidity): +* 0x20 + 1xj0phk: HRP character out of range +* 0x7F + 1g6xzxy: HRP character out of range +* 0x80 + 1vctc34: HRP character out of range +* an84characterslonghumanreadablepartthatcontainsthetheexcludedcharactersbioandnumber11d6pts4: overall max length exceeded +* qyrz8wqd2c9m: No separator character +* 1qyrz8wqd2c9m: Empty HRP +* y1b0jsk6g: Invalid data character +* lt1igcx5c0: Invalid data character +* in1muywd: Too short checksum +* mm1crxm3i: Invalid character in checksum +* au1s5cgom: Invalid character in checksum +* M1VUXWEZ: checksum calculated with uppercase form of HRP +* 16plkw9: empty HRP +* 1p2gdwpf: empty HRP + +===Test vectors for v0-v16 native segregated witness addresses=== + +The following list gives valid segwit addresses and the scriptPubKey that they +translate to in hex. +* BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4: 0014751e76e8199196d454941c45d1b3a323f1433bd6 +* tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7: 00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262 +* bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kt5nd6y: 5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6 +* BC1SW50QGDZ25J: 6002751e +* bc1zw508d6qejxtdg4y5r3zarvaryvaxxpcs: 5210751e76e8199196d454941c45d1b3a323 +* tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy: 0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433 +* tb1pqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesf3hn0c: 5120000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433 +* bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0: 512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 + +The following list gives invalid segwit addresses and the reason for +their invalidity. +* tc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq5zuyut: Invalid human-readable part +* bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqh2y7hd: Invalid checksum (Bech32 instead of Bech32m) +* tb1z0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqglt7rf: Invalid checksum (Bech32 instead of Bech32m) +* BC1S0XLXVLHEMJA6C4DQV22UAPCTQUPFHLXM9H8Z3K2E72Q4K9HCZ7VQ54WELL: Invalid checksum (Bech32 instead of Bech32m) +* bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kemeawh: Invalid checksum (Bech32m instead of Bech32) +* tb1q0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq24jc47: Invalid checksum (Bech32m instead of Bech32) +* bc1p38j9r5y49hruaue7wxjce0updqjuyyx0kh56v8s25huc6995vvpql3jow4: Invalid character in checksum +* BC130XLXVLHEMJA6C4DQV22UAPCTQUPFHLXM9H8Z3K2E72Q4K9HCZ7VQ7ZWS8R: Invalid witness version +* bc1pw5dgrnzv: Invalid program length (1 byte) +* bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7v8n0nx0muaewav253zgeav: Invalid program length (41 bytes) +* BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P: Invalid program length for witness version 0 (per BIP141) +* tb1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq47Zagq: Mixed case +* bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7v07qwwzcrf: zero padding of more than 4 bits +* tb1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vpggkg4j: Non-zero padding in 8-to-5 conversion +* bc1gmk9yu: Empty data section + + +==Appendix: checksum design & properties== + +Checksums are used to detect errors introduced into data during transfer. A hash function-based checksum such as Base58Check detects any type of error uniformly, but not all classes of errors are equally likely to occur in practice. Bech32 prioritizes detection of substitution errors, but improving detection of one error class inevitably worsens detection of other error classes. During the design of Bech32, it was assumed that other simple error patterns beside substitutions would have a similar detection rate as in a hash function-based design, and detection would only be worse for complex, impractical errors. The discovered insertion weakness shows that this is not the case. + +For Bech32m, we aim to retain Bech32's guarantees for substitution errors, but make sure that other common errors don't perform worse than a hash function-based checksum would. To make sure the new standard is easy to implement, we restrict the design space to only amending the final constant that is xored in, as it was [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-December/017521.html observed] that that is sufficient to mitigate the 'q' insertion issue while retaining the intended substitution error detection. In what follows, we explain how the new constant ''0x2bc830a3'' was chosen. + +===Error patterns & detection probability=== + +We define an error pattern as a sequence of first one or more deletions, then swaps of adjacent characters, followed by substitutions, insertions, and duplications, in that order, all in specific positions, applied to a string with valid checksum that is otherwise randomly chosen. For insertions and substitutions we assume a uniformly random new character. For example, "delete the 17th character, swap the 11th character with the 12th character, and insert a random character in the 24th position" is an error pattern. "Replace the 43th through 48th character with 'aardvark'" is not a valid error pattern, because the new characters are not random and there is no reason why this particular string is more likely than any other to be substituted. + +A hash function-based checksum design with a 30-bit hash would have a probability of incorrectly accepting equal to ''2-30'', for every error pattern. Bech32 has a probability of 0 to incorrectly accept error patterns consisting of up to 4 substitutions—they are always detected. The 'q'-insertion issue shows that for Bech32 a simple error pattern ("insert a random character in the penultimate position") with probability ''2-10'' exists: it requires the final character to be 'p' (leaving only 1 in 32 strings), and requires the inserted character to be 'q' (permitting only 1 of 32 possible inserted characters). + +Note that the choice of ''what'' the error pattern is (which types of errors, and where) isn't part of our probabilities: we try to make sure that ''every'' pattern behaves well, not just randomly chosen ones, because presumably humans +make some kinds of errors more than others, and we cannot easily model which ones. + +===Detection properties of Bech32m=== + +The table below shows the error detection properties of Bech32m, and a comparison with Bech32. The code used for this analysis can be found [https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e#file-const_analysis-cpp here]. Every row specifies one error pattern via the constraints in the left four columns. The remaining columns report what percentage of those patterns have certain probabilities of not being detected. The columns are: + +* '''errors''' The maximum number of individual errors considered +* '''of type''' What type of errors are considered (either "subst. only" for just substitutions, or "any" to also include deletions, swaps, insertions, and duplications) +* '''window''' The maximum size of the window in which the errors have to occur'''What is an error pattern’s window size?''' The window size of an error pattern is the length of the smallest consecutive range of characters that contains all modified characters (on input or output; whichever is larger). For example, an error pattern that turns "abcdef" into "accdbef" has a window size of 4, as it is replacing "bcd" with "ccdb", a 4 character string. Window size is only meaningful when the pattern consists of two or more errors. +* '''code/verifier''' Whether it about Bech32 or Bech32m encoded strings, and whether they are evaluated regarding their probability of being accepted by either a Bech32 or a Bech32m verifier.'''Why do we care about probability of accepting Bech32m strings in Bech32 verifiers?''' For applications where Bech32m replaces an existing use of Bech32 (such as segregated witness addresses), we want to make sure that a Bech32m string created by new software won’t be erroneously accepted by old software that assumes Bech32 - even when a small number of errors were introduced as well.'''Should we also take into account failures that occur due to taking a valid Bech32m string, and after errors it becoming acceptable to a Bech32 verifier?''' This situation may in theory occur for segregated witness addresses when errors occur that change the version number in a v1+ address to v0. Due to the specificity of this type of error, plus the additional constraints that apply for v0 addresses, this is both unlikely and hard to analyze. +* '''error patterns with failure probability''' For each probability (''0'', ''2-30'', ''2-25'', ''2-20'', ''2-15'', and ''2-10'') this reports what percentage of error patterns restricted by the constraints in the previous columns have those probabilities of being incorrectly accepted. + +The properties are divided into two classes: those that hold over all strings when averaged over all possible HRPs (human readable parts), and those specific to the "bc1" HRP with the length restrictions imposed by segregated witness addresses'''What restrictions were taken into account for the "bc1"-specific analysis?''' The minimum length (due to witness programs being at least 2 bytes), the maximum length (due to witness programs being at most 40 bytes), and the fact that the witness programs are a multiple of 8 bits. The fact that the first data symbol cannot be over 16, or that the padding has to be 0, is not taken into account.. + +{| class="wikitable" +! rowspan="2" | errors +! rowspan="2" | of type +! rowspan="2" | window +! rowspan="2" | code/verifier +! colspan="6" | error patterns with failure probability +|- +! ''0'' !! ''2-30'' !! ''2-25'' !! ''2-20'' !! ''2-15'' !! ''2-10'' +|- +! colspan="10" | Properties averaged over all HRPs +|- +| ≤ 4 || only subst. || any || rowspan="6" | Bech32m/Bech32m || 100.00%|| colspan="5" | none(a) +|- +| any || any || ≤ 4 || 56.16%|| 43.84%|| colspan="4" | none(b) +|- +| ≤ 2 || any || ≤ 68 || 7.71%|| 92.28%|| colspan="4" | none(b) +|- +| ≤ 2 || any || any || 7.79%|| 92.20%|| 0.004%|| colspan="3" | none(b) +|- +| ≤ 3 || any || ≤ 69 || 7.73%|| 92.23%|| 0.033%(d) || colspan="3" | none(b) +|- +| ≤ 3 || any || any || 7.77%|| 92.19%|| 0.034%|| 0.000065% || colspan="2" | none(b) +|- +| ≤ 4 || only subst. || any || rowspan="6" | Bech32/Bech32 || 100.00%|| colspan="5" | none +|- +| any || any || ≤ 4 || 54.00%|| 43.84%|| 1.08%|| 0.90%|| 0.17%|| 0.0091% +|- +| ≤ 2 || any || ≤ 68 || 4.59%|| 92.29%|| 1.09%|| 1.01%|| 0.99%|| 0.039% +|- +| ≤ 2 || any || any || 4.58%|| 92.21%|| 1.11%|| 1.04%|| 1.02%|| 0.038% +|- +| ≤ 3 || any || ≤ 69 || 6.69%|| 92.23%|| 0.56%|| 0.48%|| 0.041%|| 0.00055% +|- +| ≤ 3 || any || any || 6.66%|| 92.19%|| 0.59%|| 0.52%|| 0.041%|| 0.00053% +|- +| ≤ 1 || any || - || rowspan="3" | Bech32m/Bech32 || 46.53%|| 53.46%|| colspan="4" | none(b) +|- +| 0 || - || - || 100.00%|| colspan="5" | none(a) +|- +| ≤ 2 || any || any || 22.18%|| 77.77%|| 0.048%|| colspan="3" | none(b) +|- +! colspan="10" | Properties for segregated witness addresses with HRP "bc" +|- +| ≤ 4 || only subst. || any || rowspan="6" | Bech32m/Bech32m || 100.00%|| colspan="5" | none(a) +|- +| ≤ 1 || any || - || 24.34%|| 75.66%|| colspan="4" | none(c) +|- +| ≤ 2 || any || ≤ 28 || 16.85%|| 83.15%|| colspan="4" | none(c) +|- +| ≤ 2 || any || any || 15.72%|| 84.23%|| 0.038%|| 0.0053%|| colspan="2" | none(c) +|- +| any || any || ≤ 4 || 74.74%|| 25.25%|| 0.0015%|| colspan="3" | none(c) +|- +| ≤ 3 || any || any || 13.98%|| 85.94%|| 0.078%|| 0.00063%|| colspan="2" | none(c) +|- +| ≤ 4 || only subst. || any || rowspan="6" | Bech32/Bech32 || 100.00%|| colspan="5" | none +|- +| ≤ 1 || any || - || 14.63%|| 75.71%|| 2.43%|| 2.43%|| 2.43%|| 2.38% +|- +| ≤ 2 || any || ≤ 28 || 14.22%|| 83.15%|| 0.94%|| 0.84%|| 0.79%|| 0.054% +|- +| ≤ 2 || any || any || 12.79%|| 84.24%|| 1.06%|| 0.95%|| 0.92%|| 0.041% +|- +| any || any || ≤ 4 || 73.23%|| 25.26%|| 0.76%|| 0.63%|| 0.12%|| 0.0064% +|- +| ≤ 3 || any || any || 13.00%|| 85.94%|| 0.57%|| 0.45%|| 0.044%|| 0.00067% +|- +| ≤ 3 || only subst. || any || rowspan="3" | Bech32m/Bech32 || 100.00%|| colspan="5" | none(c) +|- +| ≤ 1 || any || - || 70.89%|| 29.11%|| colspan="4" | none(c) +|- +| ≤ 2 || any || any || 36.12%|| 63.79%|| 0.092%|| 0.00049%|| colspan="2" | none(c) +|} + +The numbers in this table, as well as a comparison with the numbers for the ‘’1’’ constant and earlier proposed improved constants, can be found [https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e#file-results_final-txt here]. + + +===Selection process=== + +The details of the selection process can be found [https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e here], but in short: +* Start with the set of all ''230-1'' constants different from Bech32's ''1''. All of these satisfy the properties marked (a) in the table above. +* Through exhaustive analysis, reject all constants that do not exhibit the properties'''How were the properties to select for chosen?''' All these properties are as strong as they can be without rejecting every constant: rejecting constants with lower probabilities, or more errors, or wider windows all result in nothing left. marked (b) in the table above (e.g. all constants that permit any error pattern of 2 errors or less in a window of 68 characters or less with a detection probability ''≥ 2-20''). This selection leaves us with 12054 candidates. +* Reject all constants that do not exhibit the (c) properties in the table above'''Why optimize for segregated witness addresses (with HRP "bc1") specifically?''' Our analysis for generic HRP has limitations (see the detailed description [https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e#file-bech32m_mail-txt here], under "Technical details"). We optimize for generic usage first, but optimize for segregated witness addresses as a tiebreaker.. This leaves us with 79 candidates. +* Finally, select the candidate that minimizes the number of error classes matching (d) in the table above as a final tiebreaker. The result is the single constant ''0x2bc830a3''. + +==Footnotes== + + + +==Acknowledgements== + +Thanks to Rusty Russell for starting the discussion around intentionally breaking compatibility with existing senders, which is used in this specification. Thanks to Greg Maxwell for doing most of the computation for code selection and analysis. From e192983f5b1fc7a2a0739906103fd6ed8f383c8d Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 29 Jan 2021 11:33:20 -0800 Subject: [PATCH 1575/2326] Update bip-0350.mediawiki Co-authored-by: andrewtoth --- bip-0350.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki index a7b50470d5..3ad41c8101 100644 --- a/bip-0350.mediawiki +++ b/bip-0350.mediawiki @@ -234,7 +234,7 @@ The table below shows the error detection properties of Bech32m, and a compariso * '''errors''' The maximum number of individual errors considered * '''of type''' What type of errors are considered (either "subst. only" for just substitutions, or "any" to also include deletions, swaps, insertions, and duplications) * '''window''' The maximum size of the window in which the errors have to occur'''What is an error pattern’s window size?''' The window size of an error pattern is the length of the smallest consecutive range of characters that contains all modified characters (on input or output; whichever is larger). For example, an error pattern that turns "abcdef" into "accdbef" has a window size of 4, as it is replacing "bcd" with "ccdb", a 4 character string. Window size is only meaningful when the pattern consists of two or more errors. -* '''code/verifier''' Whether it about Bech32 or Bech32m encoded strings, and whether they are evaluated regarding their probability of being accepted by either a Bech32 or a Bech32m verifier.'''Why do we care about probability of accepting Bech32m strings in Bech32 verifiers?''' For applications where Bech32m replaces an existing use of Bech32 (such as segregated witness addresses), we want to make sure that a Bech32m string created by new software won’t be erroneously accepted by old software that assumes Bech32 - even when a small number of errors were introduced as well.'''Should we also take into account failures that occur due to taking a valid Bech32m string, and after errors it becoming acceptable to a Bech32 verifier?''' This situation may in theory occur for segregated witness addresses when errors occur that change the version number in a v1+ address to v0. Due to the specificity of this type of error, plus the additional constraints that apply for v0 addresses, this is both unlikely and hard to analyze. +* '''code/verifier''' Whether it is about Bech32 or Bech32m encoded strings, and whether they are evaluated regarding their probability of being accepted by either a Bech32 or a Bech32m verifier.'''Why do we care about probability of accepting Bech32m strings in Bech32 verifiers?''' For applications where Bech32m replaces an existing use of Bech32 (such as segregated witness addresses), we want to make sure that a Bech32m string created by new software won’t be erroneously accepted by old software that assumes Bech32 - even when a small number of errors were introduced as well.'''Should we also take into account failures that occur due to taking a valid Bech32m string, and after errors it becoming acceptable to a Bech32 verifier?''' This situation may in theory occur for segregated witness addresses when errors occur that change the version number in a v1+ address to v0. Due to the specificity of this type of error, plus the additional constraints that apply for v0 addresses, this is both unlikely and hard to analyze. * '''error patterns with failure probability''' For each probability (''0'', ''2-30'', ''2-25'', ''2-20'', ''2-15'', and ''2-10'') this reports what percentage of error patterns restricted by the constraints in the previous columns have those probabilities of being incorrectly accepted. The properties are divided into two classes: those that hold over all strings when averaged over all possible HRPs (human readable parts), and those specific to the "bc1" HRP with the length restrictions imposed by segregated witness addresses'''What restrictions were taken into account for the "bc1"-specific analysis?''' The minimum length (due to witness programs being at least 2 bytes), the maximum length (due to witness programs being at most 40 bytes), and the fact that the witness programs are a multiple of 8 bits. The fact that the first data symbol cannot be over 16, or that the padding has to be 0, is not taken into account.. From d3874ff3ec0ca090a12a0f48560f3d819d9bee10 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 29 Jan 2021 11:33:27 -0800 Subject: [PATCH 1576/2326] Update bip-0350.mediawiki Co-authored-by: andrewtoth --- bip-0350.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki index 3ad41c8101..d09ae6b33a 100644 --- a/bip-0350.mediawiki +++ b/bip-0350.mediawiki @@ -220,7 +220,7 @@ For Bech32m, we aim to retain Bech32's guarantees for substitution errors, but m ===Error patterns & detection probability=== -We define an error pattern as a sequence of first one or more deletions, then swaps of adjacent characters, followed by substitutions, insertions, and duplications, in that order, all in specific positions, applied to a string with valid checksum that is otherwise randomly chosen. For insertions and substitutions we assume a uniformly random new character. For example, "delete the 17th character, swap the 11th character with the 12th character, and insert a random character in the 24th position" is an error pattern. "Replace the 43th through 48th character with 'aardvark'" is not a valid error pattern, because the new characters are not random and there is no reason why this particular string is more likely than any other to be substituted. +We define an error pattern as a sequence of first one or more deletions, then swaps of adjacent characters, followed by substitutions, insertions, and duplications, in that order, all in specific positions, applied to a string with valid checksum that is otherwise randomly chosen. For insertions and substitutions we assume a uniformly random new character. For example, "delete the 17th character, swap the 11th character with the 12th character, and insert a random character in the 24th position" is an error pattern. "Replace the 43rd through 48th character with 'aardvark'" is not a valid error pattern, because the new characters are not random and there is no reason why this particular string is more likely than any other to be substituted. A hash function-based checksum design with a 30-bit hash would have a probability of incorrectly accepting equal to ''2-30'', for every error pattern. Bech32 has a probability of 0 to incorrectly accept error patterns consisting of up to 4 substitutions—they are always detected. The 'q'-insertion issue shows that for Bech32 a simple error pattern ("insert a random character in the penultimate position") with probability ''2-10'' exists: it requires the final character to be 'p' (leaving only 1 in 32 strings), and requires the inserted character to be 'q' (permitting only 1 of 32 possible inserted characters). From 6446f2af0a75e513a0c4bad0ddaad8d798bd5e2d Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 29 Jan 2021 11:33:33 -0800 Subject: [PATCH 1577/2326] Update bip-0350.mediawiki Co-authored-by: andrewtoth --- bip-0350.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki index d09ae6b33a..f34da56a7b 100644 --- a/bip-0350.mediawiki +++ b/bip-0350.mediawiki @@ -121,7 +121,7 @@ def decode(hrp, addr): '''Error locating''' -Bech32m, like Bech32m, does support locating'''What about error correction?''' As explained in BIP173, introducing error correction reduces the ability to detect errors. While it is technically possible to correct a small number of errors due to Bech32(m)'s nature as a BCH code, implementations should refrain from using this for more than indicating where an error may be present. the positions of a few substitution errors. To combine this functionality with +Bech32m, like Bech32, does support locating'''What about error correction?''' As explained in BIP173, introducing error correction reduces the ability to detect errors. While it is technically possible to correct a small number of errors due to Bech32(m)'s nature as a BCH code, implementations should refrain from using this for more than indicating where an error may be present. the positions of a few substitution errors. To combine this functionality with the segregated witness addresses proposed by this document, simply try locating errors for both Bech32 and Bech32m. If only one finds error locations, report that one. If both do (which should be very rare), there are a number of options: * Report the one that needs fewer corrections (if they differ). From e2cfb55f2fa1c1dbac55ae3ccf0994d3e10aa375 Mon Sep 17 00:00:00 2001 From: omar shibli Date: Sun, 31 Jan 2021 21:38:39 +0200 Subject: [PATCH 1578/2326] reject BIP175 --- README.mediawiki | 4 ++-- bip-0175.mediawiki | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 83120ab82b..d3a4bdd0ed 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -854,13 +854,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Andrew Chow | Standard | Proposed -|- +|- style="background-color: #ffcfcf" | [[bip-0175.mediawiki|175]] | Applications | Pay to Contract Protocol | Omar Shibli, Nicholas Gregory | Informational -| Draft +| Rejected |- | [[bip-0176.mediawiki|176]] | diff --git a/bip-0175.mediawiki b/bip-0175.mediawiki index a3ffd1c959..30c79858ba 100644 --- a/bip-0175.mediawiki +++ b/bip-0175.mediawiki @@ -6,7 +6,7 @@ Nicholas Gregory Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0175 - Status: Draft + Status: Rejected Type: Informational Created: 2017-07-17 License: BSD-2-Clause From f70132e58bce9ad88844d0b5c5500f3a6c98557b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 3 Feb 2021 22:33:18 +0000 Subject: [PATCH 1579/2326] BIP 174: Revert title change to fit length limit This partially reverts c0991047e25a35d1ddf241f304a079e9893eed69. --- README.mediawiki | 2 +- bip-0174.mediawiki | 2 +- scripts/buildtable.pl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index da943d9d90..b8f971b59c 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -850,7 +850,7 @@ Those proposing changes should consider that ultimately consent may rest with th |- style="background-color: #cfffcf" | [[bip-0174.mediawiki|174]] | Applications -| Partially Signed Bitcoin Transaction Format and Version 0 +| Partially Signed Bitcoin Transaction Format | Andrew Chow | Standard | Final diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki index 81958fdda6..235d01a579 100644 --- a/bip-0174.mediawiki +++ b/bip-0174.mediawiki @@ -1,7 +1,7 @@
   BIP: 174
   Layer: Applications
-  Title: Partially Signed Bitcoin Transaction Format and Version 0
+  Title: Partially Signed Bitcoin Transaction Format
   Author: Andrew Chow 
   Comments-Summary: No comments yet.
   Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index ed71f7c40b..1edd8c0dcf 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -89,7 +89,7 @@
 );
 my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 67 69 74 80 81 83 90 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152);
 my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 31 33 34 35 39 43 44 45 47 61 64 68 70 71 72 73 101 102 106 120 121);
-my %TolerateTitleTooLong = map { $_ => undef } qw(39 44 45 47 49 60 67 68 69 73 74 75 80 81 99 105 106 109 113 122 126 131 143 145 147 173 174);
+my %TolerateTitleTooLong = map { $_ => undef } qw(39 44 45 47 49 60 67 68 69 73 74 75 80 81 99 105 106 109 113 122 126 131 143 145 147 173);
 
 my %emails;
 

From c5b392cce1990134763d0b7604f51b8d5af057d4 Mon Sep 17 00:00:00 2001
From: Pieter Wuille 
Date: Wed, 3 Feb 2021 16:15:31 -0800
Subject: [PATCH 1580/2326] Add back a few lost improvements

---
 bip-0350.mediawiki | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki
index f34da56a7b..d70bc205f4 100644
--- a/bip-0350.mediawiki
+++ b/bip-0350.mediawiki
@@ -77,9 +77,10 @@ def bech32_bech32m_verify_checksum(hrp, data):
     check = bech32_polymod(bech32_hrp_expand(hrp) + data)
     if check == 1:
         return Encoding.BECH32
-    if const == BECH32M_CONST:
+    elif check == BECH32M_CONST:
         return Encoding.BECH32M
-    return None
+    else:
+        return None
 
which returns either None for failure, or one of the BECH32 / BECH32M enumeration values to indicate successful decoding according to the respective standard. @@ -234,7 +235,7 @@ The table below shows the error detection properties of Bech32m, and a compariso * '''errors''' The maximum number of individual errors considered * '''of type''' What type of errors are considered (either "subst. only" for just substitutions, or "any" to also include deletions, swaps, insertions, and duplications) * '''window''' The maximum size of the window in which the errors have to occur'''What is an error pattern’s window size?''' The window size of an error pattern is the length of the smallest consecutive range of characters that contains all modified characters (on input or output; whichever is larger). For example, an error pattern that turns "abcdef" into "accdbef" has a window size of 4, as it is replacing "bcd" with "ccdb", a 4 character string. Window size is only meaningful when the pattern consists of two or more errors. -* '''code/verifier''' Whether it is about Bech32 or Bech32m encoded strings, and whether they are evaluated regarding their probability of being accepted by either a Bech32 or a Bech32m verifier.'''Why do we care about probability of accepting Bech32m strings in Bech32 verifiers?''' For applications where Bech32m replaces an existing use of Bech32 (such as segregated witness addresses), we want to make sure that a Bech32m string created by new software won’t be erroneously accepted by old software that assumes Bech32 - even when a small number of errors were introduced as well.'''Should we also take into account failures that occur due to taking a valid Bech32m string, and after errors it becoming acceptable to a Bech32 verifier?''' This situation may in theory occur for segregated witness addresses when errors occur that change the version number in a v1+ address to v0. Due to the specificity of this type of error, plus the additional constraints that apply for v0 addresses, this is both unlikely and hard to analyze. +* '''code/verifier''' Whether this line is about Bech32 or Bech32m encoded strings, and whether those are evaluated regarding their probability of being accepted by either a Bech32 or a Bech32m verifier.'''Why do we care about probability of accepting Bech32m strings in Bech32 verifiers?''' For applications where Bech32m replaces an existing use of Bech32 (such as segregated witness addresses), we want to make sure that a Bech32m string created by new software won’t be erroneously accepted by old software that assumes Bech32 - even when a small number of errors were introduced as well.'''Should we also take into account failures that occur due to taking a valid Bech32m string, and after errors it becoming acceptable to a Bech32 verifier?''' This situation may in theory occur for segregated witness addresses when errors occur that change the version number in a v1+ address to v0. Due to the specificity of this type of error, plus the additional constraints that apply for v0 addresses, this is both unlikely and hard to analyze. * '''error patterns with failure probability''' For each probability (''0'', ''2-30'', ''2-25'', ''2-20'', ''2-15'', and ''2-10'') this reports what percentage of error patterns restricted by the constraints in the previous columns have those probabilities of being incorrectly accepted. The properties are divided into two classes: those that hold over all strings when averaged over all possible HRPs (human readable parts), and those specific to the "bc1" HRP with the length restrictions imposed by segregated witness addresses'''What restrictions were taken into account for the "bc1"-specific analysis?''' The minimum length (due to witness programs being at least 2 bytes), the maximum length (due to witness programs being at most 40 bytes), and the fact that the witness programs are a multiple of 8 bits. The fact that the first data symbol cannot be over 16, or that the padding has to be 0, is not taken into account.. @@ -274,9 +275,9 @@ The properties are divided into two classes: those that hold over all strings wh |- | ≤ 3 || any || any || 6.66%|| 92.19%|| 0.59%|| 0.52%|| 0.041%|| 0.00053% |- -| ≤ 1 || any || - || rowspan="3" | Bech32m/Bech32 || 46.53%|| 53.46%|| colspan="4" | none(b) +| 0 || - || - || rowspan="3" | Bech32m/Bech32 || 100.00%|| colspan="5" | none(a) |- -| 0 || - || - || 100.00%|| colspan="5" | none(a) +| 1 || any || - || 46.53%|| 53.46%|| colspan="4" | none(b) |- | ≤ 2 || any || any || 22.18%|| 77.77%|| 0.048%|| colspan="3" | none(b) |- @@ -284,31 +285,31 @@ The properties are divided into two classes: those that hold over all strings wh |- | ≤ 4 || only subst. || any || rowspan="6" | Bech32m/Bech32m || 100.00%|| colspan="5" | none(a) |- -| ≤ 1 || any || - || 24.34%|| 75.66%|| colspan="4" | none(c) +| 1 || any || - || 24.34%|| 75.66%|| colspan="4" | none(c) |- | ≤ 2 || any || ≤ 28 || 16.85%|| 83.15%|| colspan="4" | none(c) |- -| ≤ 2 || any || any || 15.72%|| 84.23%|| 0.038%|| 0.0053%|| colspan="2" | none(c) +| any || any || ≤ 4 || 74.74%|| 25.25%|| 0.0016%|| colspan="3" | none(c) |- -| any || any || ≤ 4 || 74.74%|| 25.25%|| 0.0015%|| colspan="3" | none(c) +| ≤ 2 || any || any || 15.72%|| 84.23%|| 0.039%|| 0.0053%|| colspan="2" | none(c) |- | ≤ 3 || any || any || 13.98%|| 85.94%|| 0.078%|| 0.00063%|| colspan="2" | none(c) |- | ≤ 4 || only subst. || any || rowspan="6" | Bech32/Bech32 || 100.00%|| colspan="5" | none |- -| ≤ 1 || any || - || 14.63%|| 75.71%|| 2.43%|| 2.43%|| 2.43%|| 2.38% +| 1 || any || - || 14.63%|| 75.71%|| 2.43%|| 2.43%|| 2.43%|| 2.38% |- | ≤ 2 || any || ≤ 28 || 14.22%|| 83.15%|| 0.94%|| 0.84%|| 0.79%|| 0.054% |- -| ≤ 2 || any || any || 12.79%|| 84.24%|| 1.06%|| 0.95%|| 0.92%|| 0.041% -|- | any || any || ≤ 4 || 73.23%|| 25.26%|| 0.76%|| 0.63%|| 0.12%|| 0.0064% |- +| ≤ 2 || any || any || 12.79%|| 84.24%|| 1.06%|| 0.95%|| 0.92%|| 0.041% +|- | ≤ 3 || any || any || 13.00%|| 85.94%|| 0.57%|| 0.45%|| 0.044%|| 0.00067% |- | ≤ 3 || only subst. || any || rowspan="3" | Bech32m/Bech32 || 100.00%|| colspan="5" | none(c) |- -| ≤ 1 || any || - || 70.89%|| 29.11%|| colspan="4" | none(c) +| 1 || any || - || 70.89%|| 29.11%|| colspan="4" | none(c) |- | ≤ 2 || any || any || 36.12%|| 63.79%|| 0.092%|| 0.00049%|| colspan="2" | none(c) |} @@ -330,4 +331,6 @@ The details of the selection process can be found [https://gist.github.com/sipa/ ==Acknowledgements== -Thanks to Rusty Russell for starting the discussion around intentionally breaking compatibility with existing senders, which is used in this specification. Thanks to Greg Maxwell for doing most of the computation for code selection and analysis. +Thanks to Greg Maxwell for doing most of the computation for code selection and analysis, and comments. +Thanks to Mark Erhardt for help with writing and editing this document. +Thanks to Rusty Russell and others on the bitcoin-dev list for the discussion around intentionally breaking compatibility with existing senders, which is used in this specification. From 63d2800fabe4393382f699ba1e41260ab7b01727 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Thu, 4 Feb 2021 12:25:25 +1000 Subject: [PATCH 1581/2326] bip 8: simplify MUST_SIGNAL check --- bip-0008.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index d5cb19123d..8800b437d8 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -181,16 +181,16 @@ Blocks received while in the MUST_SIGNAL phase must be checked to ensure that th if (GetStateForBlock(block) == MUST_SIGNAL) { int nonsignal = 0; - int count = 1 + (block.nHeight % 2016); walk = block; - while (count > 0) { - --count; + while (true) { if ((walk.nVersion & 0xE0000000) != 0x20000000 || ((walk.nVersion >> bit) & 1) != 1) { ++nonsignal; - if (nonsignal + threshold > 2016) { + if (nonsignal > 2016 - threshold) { return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal"); } - } else if (nonsignal == 0) { + } + if (walk.nHeight % 2016 == 0) { + // checked every block in this retarget period break; } walk = walk.parent; From b58dd7bc1a15d91c979e1fa2ebbf1f1a83784547 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 5 Feb 2021 18:36:34 +0100 Subject: [PATCH 1582/2326] bip-0350: fix links for reference implementations --- bip-0350.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0350.mediawiki b/bip-0350.mediawiki index f34da56a7b..a18438075f 100644 --- a/bip-0350.mediawiki +++ b/bip-0350.mediawiki @@ -138,14 +138,14 @@ On the other hand, the Bech32m proposal breaks forward-compatibility for sending ==Reference implementations== * Reference encoder and decoder: -** [https://github.com/sipa/bech32/tree/bech32m/ref/python Reference Python implementation] -** [https://github.com/sipa/bech32/tree/bech32m/ref/c Reference C implementation] -** [https://github.com/sipa/bech32/tree/bech32m/ref/c++ Reference C++ implementation] +** [https://github.com/sipa/bech32/blob/master/ref/python Reference Python implementation] +** [https://github.com/sipa/bech32/blob/master/ref/c Reference C implementation] +** [https://github.com/sipa/bech32/blob/master/ref/c++ Reference C++ implementation] ** [https://github.com/bitcoin/bitcoin/pull/20861 Bitcoin Core C++ implementation] -** [https://github.com/sipa/bech32/tree/bech32m/ref/javascript Reference Javascript implementation] +** [https://github.com/sipa/bech32/blob/master/ref/javascript Reference Javascript implementation] * Fancy decoder that localizes errors: -** [https://github.com/sipa/bech32/tree/bech32m/ecc/javascript For JavaScript] ([http://bitcoin.sipa.be/bech32/demo/demo.html demo website]) +** [https://github.com/sipa/bech32/blob/master/ecc/javascript For JavaScript] ([http://bitcoin.sipa.be/bech32/demo/demo.html demo website]) ==Test vectors== From cd1f225a0bd008efe1be5a1d60af3f68573b0ff4 Mon Sep 17 00:00:00 2001 From: kiminuo <58662979+kiminuo@users.noreply.github.com> Date: Tue, 15 Dec 2020 10:02:17 +0100 Subject: [PATCH 1583/2326] BIP 155: Remove bitcoin.org link. --- bip-0155.mediawiki | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bip-0155.mediawiki b/bip-0155.mediawiki index ab3c0fcb29..19f92f24e5 100644 --- a/bip-0155.mediawiki +++ b/bip-0155.mediawiki @@ -44,8 +44,7 @@ interpreted as described in RFC 2119[https://tools.ietf.org/html/rfc2119 RF The addrv2 message is defined as a message where pchCommand == "addrv2". It is serialized in the standard encoding for P2P messages. -Its format is similar to the current addr message format -[https://bitcoin.org/en/developer-reference#addr Bitcoin Developer Reference: addr message], with the difference that the +Its format is similar to the current addr message format, with the difference that the fixed 16-byte IP address is replaced by a network ID and a variable-length address, and the services format has been changed to [https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer CompactSize]. This means that the message contains a serialized std::vector of the following structure: From 55a31eb8ee304984534e6de8a9ef18691defa983 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 11 Feb 2021 13:45:26 -0500 Subject: [PATCH 1584/2326] Add more language in hope of BIP number assignment --- bip-disable-tx.mediawiki | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bip-disable-tx.mediawiki b/bip-disable-tx.mediawiki index a5f2f77c68..98789aebd6 100644 --- a/bip-disable-tx.mediawiki +++ b/bip-disable-tx.mediawiki @@ -19,6 +19,10 @@ block-relay-only connections that are currently in use on the network. ==Motivation== +This proposal is part of an effort to increase the number of inbound +connections that a peer can service, by distinguishing peers which will not +relay transactions from those that do. + Since 2019, software has been deployed[1] which initiates connections on the Bitcoin network and sets the transaction relay field (introduced by BIP 37 and also defined in BIP 60) to false, to prevent @@ -45,10 +49,15 @@ receive announced addresses instead. This proposal adds a new, optional message that a node can send a peer when initiating a connection to that peer, to indicate that connection should not be -used for transaction-relay for the connection's lifetime. In addition, without +used for transaction relay for the connection's lifetime. In addition, without a current mechanism to negotiate whether addresses should be relayed on a connection, this BIP suggests that address messages not be sent on links where -tx-relay has been disabled. +transaction relay has been disabled. + +After this BIP is deployed, nodes could more easily implement inbound +connection limiting that differentiates low-resource nodes (such as those +sending disabletx) from full-relay peers, potentially allowing for an increase +in the number of block-relay-only connections that can be made on the network. ==Specification== From 332b9a4854963e8afa8ab89682b9686b79956b95 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Fri, 12 Feb 2021 08:20:07 -0500 Subject: [PATCH 1585/2326] Note that tx messages are never allowed on disabletx links --- bip-disable-tx.mediawiki | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bip-disable-tx.mediawiki b/bip-disable-tx.mediawiki index 98789aebd6..12baf4322a 100644 --- a/bip-disable-tx.mediawiki +++ b/bip-disable-tx.mediawiki @@ -61,7 +61,7 @@ in the number of block-relay-only connections that can be made on the network. ==Specification== -# A new disabletx message is added, which is defined as an empty message where pchCommand == "disabletx". +# A new disabletx message is added, which is defined as an empty message with message type set to "disabletx". # The protocol version of nodes implementing this BIP must be set to 70017 or higher. # If a node sets the transaction relay field in the version message to a peer to false, then the disabletx message MAY also be sent in response to a version message from that peer if the peer's protocol version is >= 70017. If sent, the disabletx message MUST be sent prior to sending a verack. # A node that has sent or received a disabletx message to/from a peer MUST NOT send any of these messages to the peer: @@ -70,6 +70,7 @@ in the number of block-relay-only connections that can be made on the network. ## getdata messages for merkleblock (BIP 37) ## filteradd/filterload/filterclear (BIP 37) ## mempool (BIP 35) +## tx message # It is RECOMMENDED that a node that has sent or received a disabletx message to/from a peer not send any of these messages to the peer: ## addr/getaddr ## addrv2 (BIP 155) From 31f61e71759c8c205294b2065a8383a91c60b436 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Fri, 12 Feb 2021 08:46:49 -0500 Subject: [PATCH 1586/2326] Mention compatibility with bip 37 --- bip-disable-tx.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-disable-tx.mediawiki b/bip-disable-tx.mediawiki index 12baf4322a..ace7da17d0 100644 --- a/bip-disable-tx.mediawiki +++ b/bip-disable-tx.mediawiki @@ -96,6 +96,8 @@ Note that all messages specified in BIP 152, including blocktxn and getblocktxn, are permitted between peers that have sent/received a disabletx message, subject to the feature negotiation of BIP 152. +This proposal is compatible with, but independent of, BIP 37. + ==Implementation== https://github.com/bitcoin/bitcoin/pull/20726 From d2853bcc511989d2ba96c0e3cffe51dd8b042879 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Fri, 12 Feb 2021 21:02:49 +0000 Subject: [PATCH 1587/2326] Assign BIP 338 for Disable transaction relay message --- README.mediawiki | 7 +++++++ bip-disable-tx.mediawiki => bip-0338.mediawiki | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) rename bip-disable-tx.mediawiki => bip-0338.mediawiki (98%) diff --git a/README.mediawiki b/README.mediawiki index ca2833941a..374556cca5 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -953,6 +953,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Standard | Draft |- +| [[bip-0338.mediawiki|338]] +| Peer Services +| Disable transaction relay message +| Suhas Daftuar +| Standard +| Draft +|- | [[bip-0339.mediawiki|339]] | Peer Services | WTXID-based transaction relay diff --git a/bip-disable-tx.mediawiki b/bip-0338.mediawiki similarity index 98% rename from bip-disable-tx.mediawiki rename to bip-0338.mediawiki index ace7da17d0..4e2c220519 100644 --- a/bip-disable-tx.mediawiki +++ b/bip-0338.mediawiki @@ -1,10 +1,10 @@
-  BIP: XXX
+  BIP: 338
   Layer: Peer Services
   Title: Disable transaction relay message
   Author: Suhas Daftuar 
   Comments-Summary: No comments yet.
-  Comments-URI:
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0338
   Status: Draft
   Type: Standards Track
   Created: 2020-09-03

From bb9af2ac042961ceb0b2c573bff23aeaa5ba56e8 Mon Sep 17 00:00:00 2001
From: Luke Dashjr 
Date: Fri, 12 Feb 2021 21:04:33 +0000
Subject: [PATCH 1588/2326] README: Fix colour for BIP 79

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

diff --git a/README.mediawiki b/README.mediawiki
index dd7065305c..366e1fa476 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -392,7 +392,7 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Nicolas Dorier
 | Standard
 | Draft
-|- style="background-color: #ffffcf"
+|- style="background-color: #ffcfcf"
 | [[bip-0079.mediawiki|79]]
 | Applications
 | Bustapay :: a practical coinjoin protocol

From b3d224f384f3bae6e38d4fcf0028b046b414784b Mon Sep 17 00:00:00 2001
From: Andrew Chow 
Date: Thu, 14 Jan 2021 15:04:06 -0500
Subject: [PATCH 1589/2326] Specify BIP 370 PSBTv2

---
 README.mediawiki   |   7 ++
 bip-0174.mediawiki | 189 ++++++++++++++++++++++++----
 bip-0370.mediawiki | 305 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 478 insertions(+), 23 deletions(-)
 create mode 100644 bip-0370.mediawiki

diff --git a/README.mediawiki b/README.mediawiki
index dd7065305c..32b7f68f62 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -987,6 +987,13 @@ Those proposing changes should consider that ultimately consent may rest with th
 | Pieter Wuille
 | Standard
 | Draft
+|-
+| [[bip-0370.mediawiki|370]]
+| Applications
+| PSBT Version 2
+| Andrew Chow
+| Standard
+| Draft
 |}
 
 
diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index c034f05bbe..6f50891a8c 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -115,9 +115,75 @@ The currently defined global types are as follows:
 | The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. The number of 32 bit unsigned integer indexes must match the depth provided in the extended public key.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
+| Transaction Version
+| PSBT_GLOBAL_TX_VERSION = 0x02
+| None
+| No key data
+| <32-bit uint>
+| The 32-bit little endian signed integer representing the version number of the transaction being created. Note that this is not the same as the PSBT version number specified by the PSBT_GLOBAL_VERSION field.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Fallback Locktime
+| PSBT_GLOBAL_FALLBACK_LOCKTIME = 0x03
+| None
+| No key data
+| <32-bit uint>
+| The 32-bit little endian unsigned integer representing the transaction locktime to use if no inputs specify a required locktime.
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Input Count
+| PSBT_GLOBAL_INPUT_COUNT = 0x04
+| None
+| No key data
+| 
+| Compact size unsigned integer representing the number of inputs in this PSBT.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Output Count
+| PSBT_GLOBAL_OUTPUT_COUNT = 0x05
+| None
+| No key data
+| 
+| Compact size unsigned integer representing the number of outputs in this PSBT.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Transaction Modifiable Flags
+| PSBT_GLOBAL_TX_MODIFIABLE = 0x06
+| None
+| No key data
+|   
+| A single byte boolean (0 for False, 1 for True) representing whether inputs can be modified, followed by a single byte boolean representing whether outputs can be modified.
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| SIGHASH_SINGLE Inputs
+| PSBT_GLOBAL_SIGHASH_SINGLE_INPUTS = 0x07
+| None
+| No key data
+| 
+| A bit vector representing which input indexes use SIGHASH_SINGLE. If the bit for an index is set to 1, then the input and output pair at that index are tied together with SIGHASH_SINGLE and must be moved together.
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
 | PSBT Version Number
 | PSBT_GLOBAL_VERSION = 0xFB
 | None
@@ -126,7 +192,7 @@ The currently defined global types are as follows:
 | The 32-bit little endian unsigned integer representing the version number of this PSBT. If ommitted, the version number is 0.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Proprietary Use Type
@@ -137,7 +203,7 @@ The currently defined global types are as follows:
 | Any value data as defined by the proprietary type user.
 |
 |
-| 0
+| 0, 2
 | 174
 |}
 
@@ -163,18 +229,18 @@ The currently defined per-input types are defined as follows:
 | The transaction in network serialization format the current input spends from. This should be present for inputs that spend non-segwit outputs and can be present for inputs that spend segwit outputs. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO. '''Why can both UTXO types be provided?''' Many wallets began requiring the full previous transaction (i.e. PSBT_IN_NON_WITNESS_UTXO) for segwit inputs when PSBT was already in use. In order to be compatible with software which were expecting PSBT_IN_WITNESS_UTXO, both UTXO types must be allowed.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Witness UTXO
 | PSBT_IN_WITNESS_UTXO = 0x01
 | None
 | No key data
-| <64-bit uint>  
+| <64-bit int>  
 | The entire transaction output in network serialization which the current input spends from. This should only be present for inputs which spend segwit outputs, including P2SH embedded ones. An input can have both PSBT_IN_NON_WITNESS_UTXO and PSBT_IN_WITNESS_UTXO
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Partial Signature
@@ -185,7 +251,7 @@ The currently defined per-input types are defined as follows:
 | The signature as would be pushed to the stack from a scriptSig or witness.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Sighash Type
@@ -196,7 +262,7 @@ The currently defined per-input types are defined as follows:
 | The 32-bit unsigned integer specifying the sighash type to be used for this input. Signatures for this input must use the sighash type, finalizers must fail to finalize inputs which have signatures that do not match the specified sighash type. Signers who cannot produce signatures with the sighash type must not provide a signature.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Redeem Script
@@ -207,7 +273,7 @@ The currently defined per-input types are defined as follows:
 | The redeemScript for this input if it has one.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Witness Script
@@ -218,7 +284,7 @@ The currently defined per-input types are defined as follows:
 | The witnessScript for this input if it has one.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | BIP 32 Derivation Path
@@ -229,7 +295,7 @@ The currently defined per-input types are defined as follows:
 | The master key fingerprint as defined by BIP 32 concatenated with the derivation path of the public key. The derivation path is represented as 32 bit unsigned integer indexes concatenated with each other. Public keys are those that will be needed to sign this input.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Finalized scriptSig
@@ -240,7 +306,7 @@ The currently defined per-input types are defined as follows:
 | The Finalized scriptSig contains a fully constructed scriptSig with signatures and any other scripts necessary for the input to pass validation.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Finalized scriptWitness
@@ -251,7 +317,7 @@ The currently defined per-input types are defined as follows:
 | The Finalized scriptWitness contains a fully constructed scriptWitness with signatures and any other scripts necessary for the input to pass validation.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Proof-of-reserves commitment
@@ -262,7 +328,7 @@ The currently defined per-input types are defined as follows:
 | The UTF-8 encoded commitment message string for the proof-of-reserves.  See [[bip-0127.mediawiki|BIP 127]] for more information.
 |
 |
-| 0
+| 0, 2
 | [[bip-0127.mediawiki|127]]
 |-
 | RIPEMD160 preimage
@@ -273,7 +339,7 @@ The currently defined per-input types are defined as follows:
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the RIPEMD160 algorithm
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | SHA256 preimage
@@ -284,7 +350,7 @@ The currently defined per-input types are defined as follows:
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | HASH160 preimage
@@ -295,7 +361,7 @@ The currently defined per-input types are defined as follows:
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm followed by the RIPEMD160 algorithm
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | HASH256 preimage
@@ -306,9 +372,64 @@ The currently defined per-input types are defined as follows:
 | The hash preimage, encoded as a byte vector, which must equal the key when run through the SHA256 algorithm twice
 |
 |
-| 0
+| 0, 2
 | 174
 |-
+| Previous TXID
+| PSBT_IN_PREVIOUS_TXID = 0x0e
+| None
+| No key data
+| 
+| 32 byte txid of the previous transaction whose output at PSBT_IN_OUTPUT_INDEX is being spent.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Spent Output Index
+| PSBT_IN_OUTPUT_INDEX = 0x0f
+| None
+| No key data
+| <32-bit uint>
+| 32 bit little endian integer representing the index of the output being spent in the transaction with the txid of PSBT_IN_PREVIOUS_TXID.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Sequence Number
+| PSBT_IN_SEQUENCE = 0x10
+| None
+| No key data
+| <32-bit uint>
+| The 32 bit unsigned little endian integer for the sequence number of this input. If omitted, the sequence number is assumed to be the final sequence number (0xffffffff).
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Required Time-based Locktime
+| PSBT_IN_REQUIRED_TIME_LOCKTIME = 0x11
+| None
+| No key data
+| <32-bit uint>
+| 32 bit unsigned little endian integer greater than or equal to 500000000 representing the minimum Unix timestamp that this input requires to be set as the transaction's lock time.
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Required Height-based Locktime
+| PSBT_IN_REQUIRED_HEIGHT_LOCKTIME = 0x12
+| None
+| No key data
+| <32-bit uiht>
+| 32 bit unsigned little endian integer less than 500000000 representing the minimum block height that this input requires to be set as the transaction's lock time.
+|
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
 | Proprietary Use Type
 | PSBT_IN_PROPRIETARY = 0xFC
 |    
@@ -317,7 +438,7 @@ The currently defined per-input types are defined as follows:
 | Any value data as defined by the proprietary type user.
 |
 |
-| 0
+| 0, 2
 | 174
 |}
 
@@ -345,7 +466,7 @@ determine which outputs are change outputs and verify that the change is returni
 | The redeemScript for this output if it has one.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | Witness Script
@@ -356,7 +477,7 @@ determine which outputs are change outputs and verify that the change is returni
 | The witnessScript for this output if it has one.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
 | BIP 32 Derivation Path
@@ -367,9 +488,31 @@ determine which outputs are change outputs and verify that the change is returni
 | The master key fingerprint concatenated with the derivation path of the public key. The derivation path is represented as 32-bit little endian unsigned integer indexes concatenated with each other. Public keys are those needed to spend this output.
 |
 |
-| 0
+| 0, 2
 | 174
 |-
+| Output Amount
+| PSBT_OUT_AMOUNT = 0x03
+| None
+| No key data
+| <64-bit int>
+| 64 bit signed little endian integer representing the output's amount in satoshis.
+| 2
+| 0
+| 2
+| [[bip-psb2.mediawiki|psbt2]]
+|-
+| Output Script
+| PSBT_OUT_SCRIPT = 0x03
+| None
+| No key data
+| 

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 F`ad`#ta< - + %3 - + DEFINED - -DEFINED + +DEFINED - + DEFINED:sw->DEFINED:nw @@ -24,95 +24,97 @@ STARTED - -STARTED + +STARTED DEFINED->STARTED - - -height >= start_height + + +height >= start_height - + STARTED:sw->STARTED:nw - + -FAILING - -FAILING +MUST_SIGNAL + +MUST_SIGNAL - + -STARTED->FAILING - - -height >= timeoutheight AND NOT lockinontimeout +STARTED->MUST_SIGNAL + + +height + 2016 >= timeoutheight AND lockinontimeout - + -LOCKED_IN - -LOCKED_IN +FAILED + +FAILED - + -STARTED->LOCKED_IN - - -(height < timeoutheight AND threshold reached) -OR -(height >= timeoutheight AND lockinontimeout) +STARTED->FAILED + + +height >= timeoutheight +AND +NOT lockinontimeout - + -ACTIVE - -ACTIVE +LOCKED_IN + +LOCKED_IN - + -FAILING->ACTIVE - - -all blocks signal - - - -FAILED - -FAILED +STARTED->LOCKED_IN + + +height < timeoutheight +AND +threshold reached - + -FAILING->FAILED - - -NOT all blocks signal +MUST_SIGNAL->LOCKED_IN + + +always + + + +FAILED:sw->FAILED:nw + + + + + + +ACTIVE + +ACTIVE LOCKED_IN->ACTIVE - - -always + + +always - -ACTIVE:sw->ACTIVE:nw - - - - - -FAILED:sw->FAILED:nw - - +ACTIVE:sw->ACTIVE:nw + + From 0f683f71f58f05d314cf943700558a82aba63102 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Thu, 6 Aug 2020 22:45:07 +1000 Subject: [PATCH 1523/2326] BIP8: add note about keeping lockinontimeout=true peers connected to each other --- bip-0008.mediawiki | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index 189d976f37..dc2291a1c0 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -189,6 +189,8 @@ Blocks received while in the MUST_SIGNAL and LOCKED_IN phases must be checked to Implementations should be careful not to ban peers that send blocks that are invalid due to not signalling (or blocks that build on those blocks), as that would allow an incompatible chain that is only briefly longer than the compliant chain to cause a split of the p2p network. If that occurred, nodes that have not set ''lockinontimeout'' may not see new blocks in the compliant chain, and thus not reorg to it at the point when it has more work, and would thus not be following the valid chain with the most work. +Implementations with ''lockinontimeout'' set to true may potentially follow a lower work chain than nodes with ''lockinontimeout'' set to false for an extended period. In order for this not to result in a net split nodes with ''lockinontimeout'' set to true, those nodes may need to preferentially connect to each other. Deployments proposing that implementations set ''lockinontimeout'' to true should either use parameters that do not risk there being a higher work alternative chain, or specify a mechanism for implementations that support the deployment to preferentially peer with each other. + ===Warning mechanism=== To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state). From dfa5042dc57bde230dea7a74f151efe58c632586 Mon Sep 17 00:00:00 2001 From: richard <36215881+hoganri@users.noreply.github.com> Date: Fri, 16 Oct 2020 21:18:20 -0400 Subject: [PATCH 1524/2326] Update bip-0085.mediawiki --- bip-0085.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index 7c4cbcab73..659d5fc2ac 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -72,6 +72,7 @@ OUTPUT ==Reference Implementation== Python library implementation: [https://github.com/ethankosakovsky/bipentropy python-bipentropy] +JavaScript library implementation: [https://github.com/hoganri/bip85-js] ===Other Implementations=== From b6b5b923374299ac1535f90749b879b7dc39883f Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sat, 17 Oct 2020 17:24:10 +1000 Subject: [PATCH 1525/2326] BIP8: clarify timeoutheight behaviour and requirements When lockinontimeout is true, we don't transition directly from STARTED to LOCKED_IN, so don't imply that we do. If startheight or timeoutheight are not on a retarget boundary, they behave as if they had been rounded up to the next retarget boundary, so to keep things simple, require them to be at a boundary. If timeoutheight is less than two retarget periods later than startheight, behaviour when lockinontimeout is true (one retarget period of STARTED, one of MUST_SIGNAL, one of LOCKED_IN, then ACTIVE) will not match behaviour when lockinontimeout is false (one retarget period of STARTED, then either LOCKED_IN or FAILED), so disallow that as well. --- bip-0008.mediawiki | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index dc2291a1c0..7030a20b8b 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -53,6 +53,8 @@ The following guidelines are suggested for selecting these parameters for a soft A later deployment using the same bit is possible as long as the startheight is after the previous one's timeoutheight or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software. +'''startheight''' and '''timeoutheight''' must be an exact multiple of 2016 (ie, at a retarget boundary), and '''timeoutheight''' must be at least 4096 blocks (2 retarget intervals) after '''startheight'''. + ===States=== With each block and soft fork, we associate a deployment state. The possible states are: @@ -88,7 +90,7 @@ For flexibility, during the LOCKED_IN phase only, this rule does NOT require the -During the STARTED state if the '''lockinontimeout''' is set to true, the state will transition to LOCKED_IN when '''timeoutheight''' is reached. +Note that when '''lockinontimeout''' is true, the LOCKED_IN state will be reached no later than at a height of '''timeoutheight''', and ACTIVE will be reached no later than at a height of '''timeoutheight + 2016'''. The genesis block has state DEFINED for each deployment, by definition. From 9a119ce46af235a7711c137f8683e5c499cca026 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sat, 17 Oct 2020 17:47:19 +1000 Subject: [PATCH 1526/2326] BIP8: Make signalling during LOCKED_IN recommended rather than mandatory --- bip-0008.mediawiki | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index dc2291a1c0..565331b0f1 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -77,12 +77,13 @@ for the purposes of this proposal, and support two future upgrades for different When a block nVersion does not have top bits 001, it is treated as if all bits are 0 for the purposes of deployments. +Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on consensus rules. + ===New consensus rules=== The new consensus rules for each soft fork are enforced for each block that has ACTIVE state. -During the MUST_SIGNAL and LOCKED_IN phases, blocks that fail to signal are invalid. -For flexibility, during the LOCKED_IN phase only, this rule does NOT require the top 3 bits to be set any particular way. +During the MUST_SIGNAL phase, blocks that fail to signal are invalid. ===State transitions=== @@ -174,18 +175,13 @@ block, indexed by its parent. ===Mandatory signalling=== -Blocks received while in the MUST_SIGNAL and LOCKED_IN phases must be checked to ensure that they signal. For example: +Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal. For example: if (GetStateForBlock(block) == MUST_SIGNAL) { if ((block.nVersion & 0xE0000000) != 0x20000000 || ((block.nVersion >> bit) & 1) != 1) { return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal"); } } - if (GetStateForBlock(block) == LOCKED_IN) { - if (((block.nVersion >> bit) & 1) != 1) { - return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-locked-in"); - } - } Implementations should be careful not to ban peers that send blocks that are invalid due to not signalling (or blocks that build on those blocks), as that would allow an incompatible chain that is only briefly longer than the compliant chain to cause a split of the p2p network. If that occurred, nodes that have not set ''lockinontimeout'' may not see new blocks in the compliant chain, and thus not reorg to it at the point when it has more work, and would thus not be following the valid chain with the most work. @@ -224,7 +220,7 @@ The template Object is also extended: The "version" key of the template is retained, and used to indicate the server's preference of deployments. If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF]. Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired". -Servers MUST set bits in "vbrequired" for deployments in MUST_SIGNAL and LOCKED_IN states, to ensure blocks produced are valid. +Servers MUST set bits in "vbrequired" for deployments in MUST_SIGNAL state, to ensure blocks produced are valid. Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character. Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs 16, 65, 66, 68, 112, and 113. From afe97b2eeeeaf8cd1a0658bb191da15b36a4dd3a Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sat, 17 Oct 2020 18:18:27 +1000 Subject: [PATCH 1527/2326] BIP8: allow some MUST_SIGNAL blocks to not signal Using the same threshold for MUST_SIGNAL as STARTED means that any chain that would have resulted in activation with lockinontimeout=false will also result in activation with lockinontimeout=true (and vice-versa). This reduces the ways in which a consensus split can occur, and avoids a way in which miners could attempt to discourage users from setting lockinontimeout=true. --- bip-0008.mediawiki | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index 565331b0f1..394b80d219 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -83,7 +83,7 @@ Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, The new consensus rules for each soft fork are enforced for each block that has ACTIVE state. -During the MUST_SIGNAL phase, blocks that fail to signal are invalid. +During the MUST_SIGNAL phase, if '''(2016 - threshold)''' blocks in the retarget period have already failed to signal, any further blocks that fail to signal are invalid. ===State transitions=== @@ -175,11 +175,23 @@ block, indexed by its parent. ===Mandatory signalling=== -Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal. For example: +Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal as required. For example: if (GetStateForBlock(block) == MUST_SIGNAL) { - if ((block.nVersion & 0xE0000000) != 0x20000000 || ((block.nVersion >> bit) & 1) != 1) { - return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal"); + int nonsignal = 0; + int count = 1 + (block.nHeight % 2016); + walk = block; + while (count > 0) { + --count; + if ((walk.nVersion & 0xE0000000) != 0x20000000 || ((walk.nVersion >> bit) & 1) != 1) { + ++nonsignal; + if (nonsignal + threshold > 2016) { + return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal"); + } + } else if (nonsignal == 0) { + break; + } + walk = walk.parent; } } From 1fbcd28584f6b295a1d8a735e265415c1b3eb7e8 Mon Sep 17 00:00:00 2001 From: Adam Gibson Date: Sun, 18 Oct 2020 13:37:50 +0100 Subject: [PATCH 1528/2326] update Joinmarket BIP78 status --- bip-0078.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0078.mediawiki b/bip-0078.mediawiki index c7953438a9..b775191bb6 100644 --- a/bip-0078.mediawiki +++ b/bip-0078.mediawiki @@ -249,7 +249,7 @@ The receiver needs to do some check on the original PSBT before proceeding: ===Sender's payjoin proposal checklist=== The sender should check the payjoin proposal before signing it to prevent a malicious receiver from stealing money. - + * Verify that the absolute fee of the payjoin proposal is equals or higher than the original PSBT. * If the receiver's BIP21 signalled pjos=0, disable payment output substitution. * Verify that the transaction version, and the nLockTime are unchanged. @@ -325,7 +325,7 @@ Because the receiver needs to bump the fee to keep the same fee rate as the orig The validation (policy and consensus) of the original transaction is optional: a receiver without a full node can decide to create the payjoin transaction and automatically broadcast the original transaction after a timeout of 1 minute, and only verify that it has been propagated in the network. -However, non-interactive receivers (like a payment processor) need to verify the transaction to prevent UTXO probing attacks. +However, non-interactive receivers (like a payment processor) need to verify the transaction to prevent UTXO probing attacks. This is not a concern for interactive receivers like Wasabi Wallet, because those receivers can just limit the number of original PSBT proposals of a specific address to one. With such wallets, the attacker has no way to generate new deposit addresses to probe the UTXOs. @@ -498,7 +498,7 @@ public async Task RequestPayjoin( if (proposedPSBTInput.NonWitnessUtxo != null || proposedPSBTInput.WitnessUtxo != null) throw new PayjoinSenderException("The receiver added non_witness_utxo or witness_utxo to one of our inputs"); sequences.Add(proposedTxIn.Sequence); - + // Fill up the info from the original PSBT input so we can sign and get fees. proposedPSBTInput.NonWitnessUtxo = input.SignedPSBTInput.NonWitnessUtxo; proposedPSBTInput.WitnessUtxo = input.SignedPSBTInput.WitnessUtxo; @@ -660,7 +660,7 @@ A successful exchange with: * [[https://github.com/BlueWallet/BlueWallet|BlueWallet]] is in the process of implementing the protocol. * [[https://github.com/btcpayserver/btcpayserver|BTCPay Server]] has implemented sender and receiver side of this protocol. * [[https://github.com/zkSNACKs/WalletWasabi/|Wasabi Wallet]] has merged sender's support. -* [[https://github.com/JoinMarket-Org/joinmarket-clientserver|Join Market]] is in the process of implementing the protocol. +* [[https://github.com/JoinMarket-Org/joinmarket-clientserver|Join Market]] has implemented sender and receiver side of this protocol. * [[https://github.com/bitcoinjs/payjoin-client|JavaScript sender implementation]]. ==Backward compatibility== From 77ed66afd5331414ee0d46611d612bb24eb78693 Mon Sep 17 00:00:00 2001 From: richard <36215881+hoganri@users.noreply.github.com> Date: Wed, 21 Oct 2020 20:31:29 -0400 Subject: [PATCH 1529/2326] Update bip-0085.mediawiki --- bip-0085.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index 659d5fc2ac..b6c13332d7 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -71,7 +71,7 @@ OUTPUT ==Reference Implementation== -Python library implementation: [https://github.com/ethankosakovsky/bipentropy python-bipentropy] +Python library implementation: [https://github.com/ethankosakovsky/bip85] JavaScript library implementation: [https://github.com/hoganri/bip85-js] ===Other Implementations=== From d771818c9e96b1d9bfa62efdee3a24ae903a7a03 Mon Sep 17 00:00:00 2001 From: richard <36215881+hoganri@users.noreply.github.com> Date: Wed, 21 Oct 2020 21:41:59 -0400 Subject: [PATCH 1530/2326] Update formatting --- bip-0085.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki index b6c13332d7..40cff9b3bf 100644 --- a/bip-0085.mediawiki +++ b/bip-0085.mediawiki @@ -71,12 +71,12 @@ OUTPUT ==Reference Implementation== -Python library implementation: [https://github.com/ethankosakovsky/bip85] -JavaScript library implementation: [https://github.com/hoganri/bip85-js] +* Python library implementation: [https://github.com/ethankosakovsky/bip85] +* JavaScript library implementation: [https://github.com/hoganri/bip85-js] ===Other Implementations=== -Coldcard Firmware: [https://github.com/Coldcard/firmware/pull/39] +* Coldcard Firmware: [https://github.com/Coldcard/firmware/pull/39] ==Applications== From 75ec9631effc524364cded5c3eff02e4e27ebf9c Mon Sep 17 00:00:00 2001 From: Karl-Johan Alm Date: Sat, 3 Oct 2020 15:29:00 +0900 Subject: [PATCH 1531/2326] BIP-322: switch to tx based approach Co-authored-by: Stepan Snigirev Co-authored-by: Luke Dashjr --- bip-0322.mediawiki | 196 ++++++++++++++------------------------------- 1 file changed, 59 insertions(+), 137 deletions(-) diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki index 95991e6172..e515b56c3c 100644 --- a/bip-0322.mediawiki +++ b/bip-0322.mediawiki @@ -13,119 +13,99 @@ == Abstract == -A standard for interoperable generic signed messages based on the Bitcoin Script format. - -== Background == - -* Assume two actors, a prover P and a verifier V. -* P wants to prove that they own the private key k associated with a given address A (which in turn is derived from the pubkey kG). -* Let V generate a message M and hand this to P. -* P generates a signature S by signing the message M using k. Given S, V can prove that P has the private key associated with A. - -The astute reader will notice that the above is missing a critical part, namely the pubkey kG, without which the verifier cannot actually verify the message. The current message signing standard solves this via a cryptographic trick, wherein the signature S above is a special "recoverable signature" type. Given the message M and the signature S, it is then possible to recover the pubkey kG. The system thus derives the address for the pubkey kG, and if it does not match A, the proof is deemed invalid. - -While this is a neat trick, it unnecessarily restricts and complicates the message signing mechanism; for instance, it is currently not possible to sign a message for a P2SH address, because there is no pubkey to recover from the resulting signature. +A standard for interoperable signed messages based on the Bitcoin Script format, either for proving fund availability, or committing to a message as the intended recipient of funds sent to the invoice address. == Motivation == -The current message signing standard only works for P2PKH (1...) addresses. By extending it to use a Bitcoin Script based approach, it could be made more generic without causing a too big burden on implementers, who most likely have access to Bitcoin Script interpreters already. - -== Specification == +The current message signing standard only works for P2PKH (1...) invoice addresses. We propose to extend and generalize the standard by using a Bitcoin Script based approach. This approach minimizes the burden for implementers as message signing can be expected to be part of a library or project that includes Bitcoin Script interpreters already. -A new structure SignatureProof is added, which is a simple serializable scriptSig & witness container. +Additionally, the current message signing only proves that the message has been committed to by the recipient of a given invoice address. +It does not prove anything about the invoice address itself, nor that the signer has access to the private keys used to implement this invoice. +More importantly, it does not prove ownership nor access to any funds, even if the same private key would be a valid signer for spending them - and this is a commonly desired use case. -=== SignatureProof container === +== Specification == -{|class="wikitable" style="text-align: center;" -|- -!Type -!Length -!Name -!Comment -|- -|VarInt||1-8||scriptsiglen||Number of bytes in scriptSig data -|- -|Uint8*||[scriptsiglen]||scriptsig||ScriptSig data -|- -|VarInt||1-8||witlen||Number of entries in witness stack -|- -|Uint8[]*||[witlen]||wit||Witness stack, as [witlen] uint8* vectors, each one prepended with a varint of its size -|} +This BIP follows the specification of BIP-325 challenges and solutions (see Signet comparison below). -In some cases, the scriptsig or wit may be empty. If both are empty, the proof is incomplete. +Let there be two virtual transactions to_spend and to_sign. -=== Result Codes === +The "to_spend" transaction is: -A verification call will return a result code according to the table below. + nVersion = 0 + nLockTime = 0 + vin[0].prevout.hash = 0000...000 + vin[0].prevout.n = 0xFFFFFFFF + vin[0].nSequence = 0 + vin[0].scriptSig = OP_0 PUSH32[ message_hash ] + vin[0].scriptWitness = [] + vout[0].nValue = 0 + vout[0].scriptPubKey = message_challenge -{|class="wikitable" style="text-align: center;" -|- -!Code -!Description -|- -|INCOMPLETE||Empty proof. -|- -|INCONCLUSIVE||The given proof was consensus-valid but policy-invalid. -|- -|VALID||The proof was valid. -|- -|INVALID||The proof was invalid -|- -|ERROR||An error was encountered -|} +where message_hash is a BIP340-tagged hash of the message, i.e. sha256_tag(m), where tag = "BIP0322-signed-message", and message_challenge is the to be proven (public) key script. +For proving funds, message_challenge shall be simply OP_TRUE. -== Signing and Verifying == +The "to_sign" transaction is: -If the challenge consists of an address is in the P2PKH (legacy) format, sign using the legacy format (further information below). Otherwise continue as stated below. + nVersion = 0 or as appropriate (e.g. 2, for time locks) + nLockTime = 0 or as appropriate (for time locks) + vin[0].prevout.hash = to_spend.txid + vin[0].prevout.n = 0 + vin[0].nSequence = 0 or as appropriate (for time locks) + vin[0].scriptWitness = message_signature + vout[0].nValue = 0 + vout[0].scriptPubKey = OP_RETURN -For both cases, generate a sighash based on the given scriptPubKey and message as follows: +When a proof of funds is being created, additional inputs should be included for virtually spending transaction outputs of desired value. -# Define the message pre-image as the sequence "Bitcoin Signed Message:\n" concatenated with the message, encoded in UTF-8 using Normalization Form Compatibility Decomposition (NFKD) -# Let sighash = sha256(sha256(scriptPubKey || pre-image)) +* All signatures must use the SIGHASH_ALL flag. +* The proof is considered valid, inconclusive, or invalid based on whether the to_sign transaction is a valid spend of the to_spend transaction or not, according to the rules specified in the "Consensus and standard flags" section below. +* Proofs of funds may be encumbered with the in_future flag, according to the rules specified in the "Locktime and Sequence" section below, in which case we refer to the result in text form as "valid_in_future", "inconclusive_in_future", etc. -A private key may be used directly to sign a message. In this case, its P2WPKH bech32 address shall be derived, and used as the input. +Proofs of funds are the base64-encoding of the to_spend and to_sign transactions concatenated in standard network serialisation, and proofs without additional inputs or time locks (simple proofs) are the base64-encoding of the to_sign script witness. -=== Signing === +A validator must verify it is valid and meets the description of virtual transactions as specified above. See "Validation" below. -The signature is generated as follows: +=== Validation === -# Derive the private key privkey for the scriptPubKey; FAIL if not VALID -# Generate and return a signature sig with privkey=privkey, sighash=sighash - -=== Verifying === +To validate a simple proof, the following steps must be taken: -Verify a proof, given a standard flags value, a script sig, an optional witness, and a derived sighash as described above. +# construct the to_spend and to_sign transactions, based on the specification above +# check the signature using consensus rules, then upgradable rules -While omitted below, ERROR is returned if an unforeseen error occurs at any point in the process. A concrete example of this is if a legacy proof is given as input to a non-legacy address; the deserialization of the proof will fail in this case, and this should result in an ERROR result. +To validate a proof of funds, the following steps must be taken: -# Verify Script with flags=consensus flags (currently P2SH, DERSIG, NULLDUMMY, CLTV, CSV, WITNESS), scriptSig=script sig, scriptPubKey=scriptPubKey, witness=witness, and sighash=sighash -# Return INVALID if verification fails -# Verify Script with flags=standard flags (above plus STRICTENC, MINIMALDATA, etc.), scriptSig=script sig, scriptPubKey=scriptPubKey, witness=witness, and sighash=sighash -# Return VALID if verification succeeds, otherwise return INCONCLUSIVE +# deserialize the to_spend and to_sign transactions from the proof, and fail if the proof contains extraneous bytes +# verify that the to_sign transaction uses all inputs covered by the proof of funds, exactly once +# reconstruct the to_spend' and to_sign' transactions, based on the specification above, copying the version, lock time, and sequence values +# verify that to_spend = to_spend', that to_sign has at least 1 input, has exactly 1 output, and that to_sign.vin[0] = to_sign'.vin[0] +# set the "in_future" flag if the transaction's lock time is in the future according to consensus rules +# establish a "coins map", a mapping of outpoints (hash, vout) to coins (scriptPubKey, amount), initialized to coins_map(to_spend.txid, 0) = (to_spend.vout[0], 0) +# for each proof of fund input, set the corresponding values in the coins map; abort if the input cannot be found +# check the signature of each input using consensus rules, then upgradable rules == Legacy format == -The legacy format is restricted to the legacy P2PKH address format. +New proofs should use the new format for all invoice address formats, including P2PKH. -Any other input (i.e. non-P2PKH address format) must be signed using the new format described above. +The legacy format MAY be used, but must be restricted to the legacy P2PKH invoice address format. === Signing === -Given the P2PKH address a and the message m, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): +Given the P2PKH invoice address a and the message m, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): # let p be the pubkey-hash pkh(P) for the pubkey P, contained in a # let x be the private key associated with P so that pkh(xG) = p -# let digest be SHA56d("Bitcoin Signed Message:\n"||m) +# let digest be SHA56d(0x18||"Bitcoin Signed Message:\n"||compactint(len(m))||m) # create a compact signature sig (aka "recoverable ECDSA signature") using x on digest The resulting proof is sig, serialized using the base64 encoding. === Verifying === -Given the P2PKH address a, the message m, the compact signature sig, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): +Given the P2PKH invoice address a, the message m, the compact signature sig, and the pubkey-hash function pkh(P) = ripemd160(sha256(P)): # let p be the pubkey-hash pkh(P) for the pubkey P, contained in a -# let digest be SHA56d("Bitcoin Signed Message:\n"||m) +# let digest be SHA56d(0x18||"Bitcoin Signed Message:\n"||compactint(len(m))||m) # attempt pubkey recovery for digest using the signature sig and store the resulting pubkey into Q ## fail verification if pubkey recovery above fails # let q be the pubkey-hash pkh(Q) for the pubkey Q @@ -137,7 +117,7 @@ This specification is backwards compatible with the legacy signmessage/verifymes == Reference implementation == -# Pull request to Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/16440 +TODO == Acknowledgements == @@ -153,9 +133,9 @@ This document is licensed under the Creative Commons CC0 1.0 Universal license. == Consensus and standard flags == -Each flag is associated with some type of enforced rule (most often a soft fork). There are two sets of flags: consensus flags (which result in a block being rejected, if violated), and policy flags (which result in a transaction being accepted only if it is contained within an actual block, and rejected otherwise, if violated). The policy flags are a super-set of the consensus flags. +Each flag is associated with some type of enforced rule (most often a soft fork). There are two sets of flags: consensus flags (which result in a block being rejected, if violated), and upgradable flags (which are typically policy-rejected by nodes specifically for the purpose of future network upgrades). The upgradable flags are a super-set of the consensus flags. -BIP322 specifies that a proof that validates for both rulesets is valid, a proof that validates for consensus rules, but not for policy rules, is "inconclusive", and a proof that does not validate for consensus rules is "invalid" (regardless of policy rule validation). +This BIP specifies that a proof that validates for both rulesets is valid, a proof that validates for consensus rules, but not for upgradable rules, is "inconclusive", and a proof that does not validate for consensus rules is "invalid" (regardless of upgradable rule validation). The ruleset sometimes changes. This BIP does not intend to be complete, nor does it indicate enforcement of rules, it simply lists the rules as they stand at the point of writing. @@ -168,7 +148,7 @@ The ruleset sometimes changes. This BIP does not intend to be complete, nor does * CHECKSEQUENCEVERIFY: enable CHECKSEQUENCEVERIFY ([https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP112]) * WITNESS: enable WITNESS ([https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) -=== Policy rules === +=== Upgradable rules === All of the above, plus (subject to change): @@ -185,62 +165,4 @@ All of the above, plus (subject to change): == Test vectors == -(TODO: update test vectors, which are based on previous iteration where signature proofs contained additional data) - -== Native segwit test vector == - -

-_XVbMa&12{#@L!S@0{O-*g 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 literal 16033 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 From eb88f8dd1ad624ba1c308988bcc1ff57f2146a5c Mon Sep 17 00:00:00 2001 From: shaolinfry Date: Fri, 21 Apr 2017 12:59:17 +0530 Subject: [PATCH 0608/2326] Fix broken link and title --- README.mediawiki | 2 +- bip-0008.mediawiki | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mediawiki b/README.mediawiki index 118136de9c..4f6b8bca2b 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -30,7 +30,7 @@ Those proposing changes should consider that ultimately consent may rest with th |- | [[bip-0008.mediawiki|8]] | -| Version bits with optional guaranteed lock-in +| Version bits with guaranteed lock-in | Shaolin Fry | Informational | Draft diff --git a/bip-0008.mediawiki b/bip-0008.mediawiki index 69731fe3fd..f4b88df004 100644 --- a/bip-0008.mediawiki +++ b/bip-0008.mediawiki @@ -1,6 +1,6 @@