Published: 2018-12-16

BIP65(CHECKLOCKTIMEVERIFY)

1 BIP地址

BIP65

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

  1. the stack is empty;
  2. the top stack item is negative;
  3. the top stack item is greater than or equal to 500000000 while the transaction's nLockTime field is less than 500000000, or vice versa;
  4. the input's nSequence field is equal to 0xffffffff.

The precise semantics are described in BIP 0065

4 例子

参见这里

5 END

Author: Nisen

Email: imnisen@163.com