在第9课 Transaction数据结构、UTXO、钱包 – 详解中,我们对Transaction的数据结构进行了深入剖析,其中最关键的部分就是UTXO。
这节课,我们讲详细说明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所在的块,后面追加了多少个块。
遗留问题:
讲了这么多,这2个字段有什么用呢,干嘛要单独讲这2个东西?
非常重要!!! 后面要讲的《微支付通道》和《闪电网络》,将要用到这2个字段,敬请期待。