精通比特币(42):相对时间锁

  • A+
所属分类:学习笔记
nLocktime和CLTV都是绝对时间锁定,它们指定绝对时间点。下面的两个时间锁定功能是相对时间锁定,它们将消耗输出的条件指定为从块链接中的输出确认起的经过时间。

 

相对时间锁是有用的,因为它们允许将两个或多个相互依赖的交易链接在一起,同时对依赖于从先前交易的确认所经过的时间的一个交易施加时间约束。换句话说,在UTXO被记录在块状块之前,时钟不开始计数。这个功能在双向状态通道和闪电网络中特别有用。

 

相对时间锁,如绝对时间锁定,同时具有交易级功能和脚本级操作码。
交易级相对时间锁定是作为对每个交易输入中设置的交易字段nSequence的值的共识规则实现的。
脚本级相对时间锁定使用CHECKSEQUENCEVERIFY(CSV)操作码实现。

 

相对时间锁是根据BIP-68与BIP-112的规范共同实现的,其中BIP-68通过与相对时间锁运用一致性增强的数字序列实现,BIP-112中是运用到了CHECKSEQUENCEVERIFY这个操作码实现。
BIP-68和BIP-112是在2016年5月作为软分叉升级时被激活的一个共识规则。

 

nSequence相对时间锁

相对时间锁定可以在每个输入中设置好,其方法是在每个输入中加多一个nSequence字段。

 

nSequence的本义--验证交易是否“确认”
nSequence字段的设计初心是想让交易能在在内存中修改,可惜后面从未运用过,使用nSequence这个字段时,如果输入的交易的序列值小于2^32 (0xFFFFFFFF),就表示尚未“确定”的交易。
这样的交易将在内存池中保存,直到被另一个交易消耗相同输入并具有较大nSequence值的代替。一旦收到一个交易,其投入的nSequence值为2^32,那么它将被视为“最终确定”并开采。 nSequence的原始含义从未被正确实现,并且在不利用时间锁定的交易中nSequence的值通常设置为2^32。对于具有nLocktime或CHECKLOCKTIMEVERIFY的交易,nSequence值必须设置为小于2^32,以使时间锁定器有效。通常设置为2^32 - 1(0xFFFFFFFE)

 

nSequence作为一个共同执行的相对时间锁定
由于BIP-68的激活,新的共识规则适用于任何包含nSequence值小于2^31的输入的交易(bit 1<<31 is not set)。以编程方式,这意味着如果没有设置最高有效(bit 1<<31),它是一个表示“相对锁定时间”的标志。否则(bit 1<<31set),nSequence值被保留用于其他用途,例如启用CHECKLOCKTIMEVERIFY,nLocktime,Opt-In-Replace-By-Fee以及其他未来的新产品。
一笔输入交易,当输入脚本中的nSequence值小于2^31时,就是相对时间锁定的输入交易。这种交易只有到了相对锁定时间后才生效。例如,具有30个区块的nSequence相对时间锁的一个输入的交易只有在从输入中引用的UTXO开始的时间起至少有30个块时才有效。由于nSequence是每个输入字段,因此交易可能包含任何数量的时间锁定输入,所有这些都必须具有足够的时间以使交易有效。
交易可以包括时间锁定输入(nSequence <2^31)和没有相对时间锁定(nsequence> = 2^31)的输入。 nSequence值以块或秒为单位指定,但与nLocktime中使用的格式略有不同。类型标志用于区分计数块和计数时间(以秒为单位)的值。类型标志设置在第23个最低有效位(即值1 << 22)。如果设置了类型标志,则nSequence值将被解释为512秒的倍数。如果未设置类型标志,则nSequence值被解释为块数。

 

当将nSequence解释为相对时间锁定时,只考虑16个最低有效位。一旦评估了标志(位32和23),nSequence值通常用16位掩码(例如nSequence&0x0000FFFF)“屏蔽”。 下图显示由BIP-68定义的nSequence值的二进制布局。

精通比特币(42):相对时间锁

基于nSequence值的一致执行的相对时间锁定在BIP-68中。

 

带CSV的相对时间锁——闪电网络中使用

就像CLTV和nLocktime一样,有一个脚本操作码用于相对时间锁定,它利用脚本中的nSequence值。该操作码是CHECKSEQUENCEVERIFY,通常简称为CSV。 在UTXO的赎回脚本中评估时,CSV操作码仅允许在输入nSequence值大于或等于CSV参数的交易中进行消耗。实质上,这限制了UTXO的消耗,直到UTXO开采时间过了一定数量的块或秒。
与CLTV一样,CSV中的值必须与相应nSequence值中的格式相匹配。如果CSV是根据块指定的,那么nSequence也是如此。如果以秒为单位指定CSV,那么nSequence也是如此。

当几个(已经形成链)交易被保留为“脱链”时,创建和签名这几个(已经形成链)交易但不传播时,CSV的相对时间锁特别有用。在父交易已被传播,直到消耗完相对锁定时间,才能使用子交易。

发表评论

您必须才能发表评论!