時間鎖機制
時間鎖讓你可以鎖定比特幣直到未來某個時間點,是閃電網路和智能合約的核心技術。
時間鎖概述
比特幣有多種時間鎖機制,讓交易或輸出在特定條件下才能被花費。 這些機制是構建複雜智能合約的基礎。
絕對時間鎖
nLockTime
nLockTime 是交易欄位,指定交易在特定區塊高度或時間之前不能被包含在區塊中。
- • 值 < 500,000,000:解釋為區塊高度
- • 值 ≥ 500,000,000:解釋為 UNIX 時間戳
- • 可被繞過:收款人可以簽署新交易忽略鎖定
OP_CHECKLOCKTIMEVERIFY (CLTV)
CLTV 是腳本操作碼,在腳本層面強制執行時間鎖。與 nLockTime 不同,它無法被繞過。
# 資金在區塊 800000 之後才能被花費
<800000> OP_CHECKLOCKTIMEVERIFY OP_DROP
<pubkey> OP_CHECKSIG
相對時間鎖
nSequence (BIP-68)
nSequence 欄位被重新定義,可以指定輸入必須等待其父輸出被確認後的一段時間。
區塊計數模式
位元 22 = 0
值 = 區塊數(最大 65535)
時間計數模式
位元 22 = 1
值 × 512 秒
OP_CHECKSEQUENCEVERIFY (CSV)
CSV 在腳本中驗證 nSequence,使相對時間鎖成為強制性的花費條件。
# 輸出確認後等待 144 區塊才能花費
<144> OP_CHECKSEQUENCEVERIFY OP_DROP
<pubkey> OP_CHECKSIG
實際應用
閃電網路
閃電網路大量使用時間鎖:
- • CSV:撤銷機制中的懲罰窗口
- • CLTV:HTLC 的超時退款
HTLC(哈希時間鎖定合約)
HTLC 結合哈希鎖和時間鎖,是原子交換和閃電網路支付的核心。
OP_IF
# 接收者用原像領取
OP_HASH160 <hash> OP_EQUALVERIFY
<receiver_pubkey> OP_CHECKSIG
OP_ELSE
# 超時後發送者可退款
<timeout> OP_CHECKLOCKTIMEVERIFY OP_DROP
<sender_pubkey> OP_CHECKSIG
OP_ENDIF
繼承規劃
使用時間鎖可以創建「死人開關」:
- • 正常情況:你可以隨時花費
- • 1 年不活動後:繼承人可以花費
- • 定期「心跳」交易重置計時器
儲蓄鎖定
鎖定比特幣直到未來日期,防止衝動消費:
# 鎖定到 2030 年
<1893456000> OP_CHECKLOCKTIMEVERIFY OP_DROP
CLTV vs CSV
| 特性 | CLTV | CSV |
|---|---|---|
| 時間類型 | 絕對(固定點) | 相對(等待期) |
| 參考點 | 區塊高度/時間戳 | 輸入確認時間 |
| 用途 | 到期日、HTLC 超時 | 懲罰窗口、冷卻期 |
| 閃電網路 | 退款路徑 | 撤銷機制 |
注意事項
- △ 區塊時間不精確:比特幣區塊平均 10 分鐘,但可能有較大波動
- △ 時間戳使用 MTP:Median Time Past,過去 11 個區塊的中位數時間
- △ 鎖定後無法提前:時間鎖是不可逆的