BIP65(CHECKLOCKTIMEVERIFY)
1 BIP地址
BIP: 65 Layer: Consensus (soft fork) Title: OP_CHECKLOCKTIMEVERIFY Author: Peter Todd <pete@petertodd.org> 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
2 原因和目的
BIP65向比特币脚本引入了一个新操作符( OP_CHECKLOCKTIMEVERIFY
),用来提供将交易的输出(transaction.output) 冻结(不能被花费)一定时间的能力。
如何提供这个能力的呢? 通过比较 [some-time] OP_CHECKLOCKTIMEVERIFY
的参数时间 和 transaction 的 nLockTime 字段,限制 nLockTime > some-time
该脚本才有效。
因为交易的nLockTime字段保证了该交易被挖出的时间,所以限制了拥有 OP_CHECKLOCKTIMEVERIFY
签名的output在一定时间后才会被验证有效才能花费。
nLockTime提供了一种用来在未来某一时间花费 某output 的能力
但它(nLockTime)不能保证在在这个时间点之前不能花费该 output, 对该output可花费的时限没有限制,该output可以在其他transaction里被有效的签名给花费了。
简单来说,nLockTime是限制自身Transacrion的,并不能限制该transaction的inputs所指向的之前的output的使用,所以引入了 OP_CHECKLOCKTIMEVERIFY
来达到这个目的。
3 细节
OP_CHECKLOCKTIMEVERIFY
重新定义了 OP_NOP2
操作符。
Word | Opcode | Hex | Input | Output |
---|---|---|---|---|
OP_CHECKLOCKTIMEVERIFY |
177 | 0xb1 | x | x / fail |
描述:
Marks transaction as invalid if the top stack item is greater than the transaction's nLockTime field, otherwise script evaluation continues as though an
OP_NOP
was executed.Transaction is also invalid if
- the stack is empty;
- the top stack item is negative;
- the top stack item is greater than or equal to 500000000 while the transaction's nLockTime field is less than 500000000, or vice versa;
- the input's nSequence field is equal to 0xffffffff.
The precise semantics are described in BIP 0065
4 例子
参见这里