Standards Track Final
BIP-65: 絕對時間鎖操作碼
引入絕對時間鎖操作碼,允許資金在特定區塊高度或時間之前被鎖定。
Peter Todd 2014年10月1日
BIP 編號
65
類型
Standards Track
狀態
Final
創建日期
2014-10-01
摘要
OP_CHECKLOCKTIMEVERIFY (CLTV) 是一個新的操作碼,允許在腳本中驗證交易的 nLockTime 欄位。 這使得「絕對時間鎖」成為可能,資金在特定區塊高度或 UNIX 時間戳之前無法被花費。
動機
在 CLTV 之前,nLockTime 只能用於延遲整個交易的廣播時間。但這無法強制執行, 接收者可以簽署一個沒有 nLockTime 的新交易來提前花費資金。CLTV 將時間鎖嵌入到腳本中, 使其成為花費條件的一部分,從而不可繞過。
運作方式
語意
CLTV 重新定義了之前未使用的 OP_NOP2 操作碼。執行時:
- 從堆疊頂部讀取一個值(不彈出)
- 將該值與交易的 nLockTime 比較
- 如果 nLockTime < 堆疊值,腳本失敗
- 如果 nSequence = 0xFFFFFFFF,腳本失敗
腳本範例
# 資金在區塊 500000 之後才能被 Alice 花費
<500000> OP_CHECKLOCKTIMEVERIFY OP_DROP
<Alice's pubkey> OP_CHECKSIG
時間格式
CLTV 支援兩種時間格式:
區塊高度
值 < 500,000,000
例:500000 = 區塊 #500000
UNIX 時間戳
值 ≥ 500,000,000
例:1700000000 = 2023-11-14
應用場景
- ✓ 支付通道:閃電網路的退款機制
- ✓ 託管服務:在特定時間後資金自動返還
- ✓ 遺囑合約:如果一段時間內沒有活動,資金轉移給繼承人
- ✓ 原子交換:跨鏈交換的超時退款
- ✓ HTLC:哈希時間鎖定合約
CLTV vs nLockTime
| 特性 | nLockTime | CLTV |
|---|---|---|
| 強制執行 | 否(可繞過) | 是(腳本級別) |
| 位置 | 交易欄位 | 腳本內 |
| 靈活性 | 整個交易 | 單個輸出 |
相關 BIP
相關 BIP
延伸閱讀: 查看 GitHub 上的完整 BIP-65 文件
已複製連結