mirror of
				https://github.com/bitcoin/bips.git
				synced 2025-10-27 14:09:10 +00:00 
			
		
		
		
	Add constant definitions for clarity
Formatting Fix typos Update with BIP 112 assignment Update references to BIP113 Update deployment methodology Add references
This commit is contained in:
		
							parent
							
								
									6150b3a857
								
							
						
					
					
						commit
						6902f790f1
					
				| @ -1,5 +1,5 @@ | |||||||
| <pre> | <pre> | ||||||
|   BIP: XX |   BIP: 112 | ||||||
|   Title: CHECKSEQUENCEVERIFY |   Title: CHECKSEQUENCEVERIFY | ||||||
|   Authors: BtcDrak <btcdrak@gmail.com> |   Authors: BtcDrak <btcdrak@gmail.com> | ||||||
|            Mark Friedenbach <mark@friedenbach.org>	 |            Mark Friedenbach <mark@friedenbach.org>	 | ||||||
| @ -29,7 +29,7 @@ the script fails immediately. | |||||||
| 
 | 
 | ||||||
| BIP 68's redefinition of nSequence prevents a non-final transaction | BIP 68's redefinition of nSequence prevents a non-final transaction | ||||||
| from being selected for inclusion in a block until the corresponding | from being selected for inclusion in a block until the corresponding | ||||||
| input has reached the specified age, as measured in block heiht or | input has reached the specified age, as measured in block height or | ||||||
| block time. By comparing the argument to CHECKSEQUENCEVERIFY against | block time. By comparing the argument to CHECKSEQUENCEVERIFY against | ||||||
| the nSequence field, we indirectly verify a desired minimum age of the | the nSequence field, we indirectly verify a desired minimum age of the | ||||||
| the output being spent; until that relative age has been reached any | the output being spent; until that relative age has been reached any | ||||||
| @ -58,6 +58,14 @@ Refer to the reference implementation, reproduced below, for the precise | |||||||
| semantics and detailed rationale for those semantics. | semantics and detailed rationale for those semantics. | ||||||
| 
 | 
 | ||||||
|      |      | ||||||
|  |     // Threshold for nLockTime: below this value it is interpreted as block number, | ||||||
|  |     // otherwise as UNIX timestamp (already defined in Bitcoin Core). | ||||||
|  |     static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov  5 00:53:20 1985 UTC | ||||||
|  |      | ||||||
|  |     // Threshold for inverted nSequence: below this value it is interpreted | ||||||
|  |     // as a relative lock-time, otherwise ignored. | ||||||
|  |     static const uint32_t SEQUENCE_THRESHOLD = (1 << 31); | ||||||
|  |      | ||||||
|     case OP_NOP3: |     case OP_NOP3: | ||||||
|     { |     { | ||||||
|         if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) { |         if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) { | ||||||
| @ -107,19 +115,19 @@ semantics and detailed rationale for those semantics. | |||||||
|         // number rules. |         // number rules. | ||||||
|         if (txTo->nVersion < 2) |         if (txTo->nVersion < 2) | ||||||
|             return false; |             return false; | ||||||
| 
 |          | ||||||
|         // Sequence number must be inverted to convert it into a |         // Sequence number must be inverted to convert it into a | ||||||
|         // relative lock-time. |         // relative lock-time. | ||||||
| 	txToInvSequence = (int64_t)~txTo->vin[nIn].nSequence; |         txToInvSequence = (int64_t)~txTo->vin[nIn].nSequence; | ||||||
|          |          | ||||||
|         // Sequence numbers under SEQUENCE_THRESHOLD are not consensus |         // Sequence numbers under SEQUENCE_THRESHOLD are not consensus | ||||||
| 	// constrained. |         // constrained. | ||||||
| 	if (txToInvSequence >= SEQUENCE_THRESHOLD) |         if (txToInvSequence >= SEQUENCE_THRESHOLD) | ||||||
|             return false; |             return false; | ||||||
|          |          | ||||||
|         // There are two types of relative lock-time: lock-by- |         // There are two types of relative lock-time: lock-by- | ||||||
|         // blockheight and lock-by-blocktime, distinguished by |         // blockheight and lock-by-blocktime, distinguished by | ||||||
| 	// whether txToInvSequence < LOCKTIME_THRESHOLD. |         // whether txToInvSequence < LOCKTIME_THRESHOLD. | ||||||
|         // |         // | ||||||
|         // We want to compare apples to apples, so fail the script |         // We want to compare apples to apples, so fail the script | ||||||
|         // unless the type of lock-time being tested is the same as |         // unless the type of lock-time being tested is the same as | ||||||
| @ -132,9 +140,9 @@ semantics and detailed rationale for those semantics. | |||||||
|          |          | ||||||
|         // Now that we know we're comparing apples-to-apples, the |         // Now that we know we're comparing apples-to-apples, the | ||||||
|         // comparison is a simple numeric one. |         // comparison is a simple numeric one. | ||||||
|         if (nInvSequence > txInvToSequence) |         if (nInvSequence > txToInvSequence) | ||||||
|             return false; |             return false; | ||||||
|      |          | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -173,13 +181,21 @@ https://github.com/maaku/bitcoin/tree/checksequenceverify | |||||||
| ==Deployment== | ==Deployment== | ||||||
| 
 | 
 | ||||||
| We reuse the double-threshold switchover mechanism from BIPs 34 and | We reuse the double-threshold switchover mechanism from BIPs 34 and | ||||||
| 66, with the same thresholds, but for nVersion = 4. The new rules are | 66, with the same thresholds, but for nVersion = 8. The new rules are | ||||||
| in effect for every block (at height H) with nVersion = 4 and at least | 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 | 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 | have nVersion = 8. Furthermore, when 950 out of the 1000 blocks | ||||||
| preceding a block do have nVersion = 4, nVersion = 3 blocks become | preceding a block do have nVersion = 8, nVersion = 3 blocks become | ||||||
| invalid, and all further blocks enforce the new rules. | invalid, and all further blocks enforce the new rules. | ||||||
| 
 | 
 | ||||||
|  | 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  | It is recommended that this soft-fork deployment trigger include other  | ||||||
| related proposals for improving Bitcoin's lock-time capabilities, including: | related proposals for improving Bitcoin's lock-time capabilities, including: | ||||||
| 
 | 
 | ||||||
| @ -189,10 +205,9 @@ OP_CHECKLOCKTIMEVERIFY, | |||||||
| [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP 68]:  | [https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki BIP 68]:  | ||||||
| Consensus-enforced transaction replacement signalled via sequence numbers, | Consensus-enforced transaction replacement signalled via sequence numbers, | ||||||
| 
 | 
 | ||||||
| and [https://github.com/bitcoin/bips/blob/master/bip-00XX.mediawiki BIP XX]:  | and [https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki BIP 113]:  | ||||||
| Median-Past-Time-Lock. | Median-Past-Time-Lock. | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| ==Credits== | ==Credits== | ||||||
| 
 | 
 | ||||||
| Mark Friedenbach invented the application of sequence numbers to | Mark Friedenbach invented the application of sequence numbers to | ||||||
| @ -202,7 +217,7 @@ CHECKSEQUENCEVERIFY. | |||||||
| The reference implementation and this BIP was based heavily on work | The reference implementation and this BIP was based heavily on work | ||||||
| done by Peter Todd for the closely related BIP 65. | done by Peter Todd for the closely related BIP 65. | ||||||
| 
 | 
 | ||||||
| BtcDrak edited this BIP document. | BtcDrak authored this BIP document. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ==References== | ==References== | ||||||
| @ -214,13 +229,17 @@ https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki | |||||||
| BIP 65: OP_CHECKLOCKTIMEVERIFY | BIP 65: OP_CHECKLOCKTIMEVERIFY | ||||||
| https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki | https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki | ||||||
| 
 | 
 | ||||||
| BIP XX: Median past block time for time-lock constraints | BIP 113: Median past block time for time-lock constraints | ||||||
| https://github.com/bitcoin/bips/blob/master/bip-00XX.mediawiki | https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki | ||||||
| 
 | 
 | ||||||
| HTLCs using OP_CHECKSEQUENCEVERIFY/OP_LOCKTIMEVERIFY and | HTLCs using OP_CHECKSEQUENCEVERIFY/OP_LOCKTIMEVERIFY and | ||||||
| revocation hashes | revocation hashes | ||||||
| http://lists.linuxfoundation.org/pipermail/lightning-dev/2015-July/000021.html | http://lists.linuxfoundation.org/pipermail/lightning-dev/2015-July/000021.html | ||||||
| 
 | 
 | ||||||
|  | [http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010396.html Softfork deployment considerations] | ||||||
|  | 
 | ||||||
|  | [https://gist.github.com/sipa/bf69659f43e763540550 Version bits] | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ==Copyright== | ==Copyright== | ||||||
| 
 | 
 | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user