9 - 1 TimeLock 選項
nLockTime
鎖定交易一段時間,直到滿足時間條件,或是區塊高度的條件才讓交易可以進行。
nLockTime
有一些限制:
- 不能分割:
nLockTime
鎖定整個交易 - 無法散播:現在的節點幾乎都會等到條件快滿足時才會把交易放進 mempool
- 沒有腳本:不允許用在腳本裡
- 沒有保護:
nLockTime
允許在一種「非鎖定」的交易裡進行
最後一個是一種權衡,nLockTime
讓交易在滿足條件前無法執行,但卻沒有保護交易,需要雙方的信任。
了解 Timelock 腳本
最近幾年,Bitcoin core允許在 op code 層級操作時間鎖,可以用 OP_CHECKTIMEVERIFY
, OP_CHECKSEQUENCEVERIFY
,
兩個分別是不同方法,都讓比特幣更強大。
這兩個是 OP codes,操作碼。因為他們是操作碼,CLTV 和 CSV 可以用來作為履行腳本的條件。他們會跟一些條件綁在一起
(下節詳述)。這兩個操作碼「鎖住 output」,因為他們是放在 scriptPubKey
裡,它們僅僅鎖住那個 output,CLTV 和 CSV
會不斷的讓交易失敗,直到時間條件被滿足。
時間鎖是單向的,一但被解鎖,交易就維持可以使用的狀態。
CLTV
OP_CHECKLOCKTIMEVERIFY, 是基本的 nLockTime 功能的操作碼,這個操作碼讓 UTXO 在某個時刻,或是
達到某個區塊高度後才能使用。(BIP 65)
CSV
OP_CHECKSEQUENCEVERIFY
, CSV 是新的「鎖定相對時間」,是在 nSequence
這個欄位設定。它一樣是
設定到某個時間或是達到某個區塊高度的限制,如果是設定時間,那麼一個「鎖定相對時間的交易」要在
被挖出 "n * 512" 秒之後才能使用,如果是設定區塊高度,那麼一個「鎖定相對時間的交易」要在被挖出 n 個區
塊之後才能使用。(nSequence
詳細在 BIP 68, CSV 在 BIP112)
小總結
nLockTime
讓交易在指定時間才能在區塊鏈上使用
nSequence
讓交易在相對時間之後才能在區塊鏈上使用
CLTV 鎖定 UTXO 直到某個時刻
CSV 鎖定 UTXO 直到某個相對時刻