nLockTime(CLTV)与Sequence number(CSV)

区块链 比特币

我们讲详细说明Transaction里面另外2个关键字段:nLockTime 与sequence number,同时也介绍2个常用专业术语:CLTV, CSV。

nLockTime 与 CLTV 
在前面第10课,介绍Transaction的详细结构时,可以看到最前面有1个lockTime字段,也就是我们说的nLockTime。

通常情况下,nLockTime = 0,代表这笔交易不会积压,节点收到这笔交易之后,立即会进入Memory Pool,之后开始打包,挖矿的过程。

但当nLockTime > 0 时,这笔交易会被节点Hold在那,不会打包,不会进入区块链网络。

具体来说: 
nLockTime < 5亿 ,其值代表Block height,是说整个区块链的高度达到nLockTime指定的值,才将该交易打包到区块链里面。在此之前,该交易一直Hold在那。 //代表Block height到达这个值,再打包

nLockTime >= 5亿,其值代表一个未来的时间戳,是说时间超过了该时间戳,该交易才被打包,进入区块链。在此之前,该交易一直Hold在那。

为了验证nLockTime属性,在script language里面,也就有一个对应的操作符,叫做OP_CHECKLOCKTIMEVERIFY(简称CLTV)。

Sequence Number 与 CSV 
nLockTime是Transaction级别的,每个Transaction有1个nLockTime字段;

Sequence Number呢,是Input级别的,1个Transaction里面多个Input,每个都对应1个Sequence Number,所以它的粒度比nLockTime要细。

Sequence Number是个整数,什么意思呢? 
原理和nLockTime类似,也是把交易Hold在那,等到该Input所引用的交易(也就是上1个交易的UTXO)所在的Block,其后面跟随了sequence number个Block之后,该交易才能被打包,被广播进区块链网络。

说通俗点,就是上1个Block要足够成熟,后面跟了很多个块之后,该Block里面的UTXO才能被花出去。

绝对时间 与 相对时间 
从上面的解释可以看出,nLockTime和sequence number,都是一个Time Lock。要把当前的交易Hold在那,等到时间成熟了再能打包进区块链。 
2者都是关于时间的,但有1个很大差别: 
nLockTime :绝对时间,用的是整个区块链的长度,或者 时间戳来表达的。 
sequence number : 相对时间,当前交易所引用的UTXO所在的块,后面追加了多少个块。

发表评论