与OP_CLTV和锁定时间一样,有一个用于相对时间锁定的脚本操作码,利用了脚本中的序列值。这个操作码称为OP_CHECKSEQUENCEVERIFY,简称为OP_CSV。
当在UTXO的脚本中评估OP_CSV操作码时,只允许在输入序列值大于或等于OP_CSV参数的交易中花费。基本上,这限制了在相对于UTXO被挖掘的时间已经过去一定数量的区块或秒数之前花费UTXO。
与CLTV一样,OP_CSV中的值必须与相应序列值的格式匹配。如果OP_CSV以区块为单位指定,那么序列值也必须是这样。如果OP_CSV以秒为单位指定,那么序列值也必须是这样。
{% hint style="danger" %} 执行多个OP_CSV操作码的脚本必须只使用相同的类型,即基于时间或基于高度。混合类型将产生一个无法花费的无效脚本,这与我们在“时间锁定冲突”中看到的OP_CLTV的问题相同。 然而,OP_CSV允许将任意两个有效的输入包含在同一笔交易中,因此在输入之间发生交互的问题,这在OP_CLTV中出现,不会影响OP_CSV。 {% endhint %}
使用OP_CSV的相对时间锁定在创建并签名但未传播的多个(链式)交易时特别有用,即它们被保存在区块链之外(离线)。在父交易传播、被挖掘并按照相对时间锁定中指定的时间经过一段时间后,子交易才能被使用。这种用例的一个应用显示在“支付通道和状态通道”中以及“路由支付通道(闪电网络)”中。
OP_CSV在BIP112,CHECKSEQUENCEVERIFY中有详细定义。