From 32bde7b58dbe6a43c836d76cd476aa666413fadc Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Fri, 29 Jan 2016 11:13:17 +1100 Subject: [PATCH 1/9] 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 da59124..40e73a4 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 a5f03bbccc7e004b07a97522945de893c5173172 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Mon, 13 Jun 2016 20:53:08 +0800 Subject: [PATCH 2/9] 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 309dfab..c88483f 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 fbfcdd4ce38841ba1dad2712a4bceaf24f355396 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Tue, 14 Jun 2016 23:43:40 +0800 Subject: [PATCH 3/9] 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 c88483f..892c027 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 4/9] 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 036ba31..0e99373 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 5e6dc77d6bfd53b7a6c2d350c9f7d59d70f0d85a Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Mon, 20 Jun 2016 01:47:03 +0800 Subject: [PATCH 5/9] 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 2e4da43..7270abd 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 6/9] 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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 X1MPO1lrM9Y0jcwJ^>bP0l+XkK3IW|u From 7478ee3260c0d3c0cef39233931b307691764edc Mon Sep 17 00:00:00 2001 From: jl2012 Date: Fri, 24 Jun 2016 01:59:25 +0800 Subject: [PATCH 7/9] 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 19f74b6..e19e0e9 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 2d16084..aee8646 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 8/9] 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 0e99373..cfae0c0 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 8d40b6ef02d89565228e63d4a0e1194d523b783c Mon Sep 17 00:00:00 2001 From: jl2012 Date: Tue, 5 Jul 2016 17:28:14 +0800 Subject: [PATCH 9/9] 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 0082db3..0303924 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 7497f50..8290c13 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: