Standards Track Final
BIP-112: 相對時間鎖操作碼
在腳本中驗證相對時間鎖,是閃電網路撤銷機制的核心組件。
BtcDrak, Mark Friedenbach, Eric Lombrozo 2015年8月10日
BIP 編號
112
類型
Standards Track
狀態
Final
創建日期
2015-08-10
摘要
OP_CHECKSEQUENCEVERIFY (CSV) 是一個操作碼,允許腳本驗證輸入的 nSequence 值符合相對時間鎖要求。 它與 BIP-68 配合使用,使相對時間鎖成為花費條件的強制部分。
與 BIP-68 的關係
BIP-68
定義 nSequence 的語意
共識層面的相對鎖定
BIP-112
腳本層面的驗證
使時間鎖成為花費條件
運作方式
執行邏輯
CSV 重新定義了之前未使用的 OP_NOP3 操作碼:
- 從堆疊讀取一個值(不彈出)
- 檢查該值的停用位元(位元 31)
- 如果未停用,與輸入的 nSequence 比較
- 驗證類型(區塊/時間)必須匹配
- 驗證 nSequence 值 ≥ 腳本中的值
腳本範例
# 資金必須等待 144 區塊後才能被 Alice 花費
<144> OP_CHECKSEQUENCEVERIFY OP_DROP
<Alice's pubkey> OP_CHECKSIG
閃電網路撤銷機制
閃電網路使用 CSV 來實現懲罰機制:
# 典型的閃電網路承諾交易輸出腳本
OP_IF
# 撤銷路徑 - Bob 可以立即用撤銷密鑰花費
<revocation_pubkey>
OP_ELSE
# 正常路徑 - Alice 等待後可以花費
<144> OP_CHECKSEQUENCEVERIFY OP_DROP
<alice_delayed_pubkey>
OP_ENDIF
OP_CHECKSIG
驗證規則
CSV 驗證失敗的情況:
- ✗ 堆疊為空
- ✗ 堆疊頂部值為負數
- ✗ 類型標誌不匹配(一個是區塊,另一個是時間)
- ✗ nSequence 值小於腳本要求
- ✗ nSequence 的停用位元被設置但腳本值未設置
CLTV vs CSV 對比
| 特性 | CLTV (OP_CLTV) | CSV (OP_CSV) |
|---|---|---|
| BIP | BIP-65 | BIP-112 |
| 驗證對象 | nLockTime | nSequence |
| 時間類型 | 絕對時間 | 相對時間 |
| 應用 | 到期日、HTLC | 懲罰機制、等待期 |
相關 BIP
延伸閱讀: 查看 GitHub 上的完整 BIP-112 文件
已複製連結