Bitcoin-Core

CLTV 與 nLockTime

  • June 30, 2020

nLockTime 和 CLTV 有什麼區別?比特幣維基說:

當呼叫 CLTV 操作碼時,會導致腳本失敗,除非交易上的 nLockTime 等於或大於提供給 CLTV 操作碼的時間參數。由於只有 nLockTime 是過去的交易才可能包含在有效塊中,這確保了基於 CLTV 的時間鎖在交易可能包含在有效塊中之前已經過期。

根據上面的描述,我不清楚 CLTV 的參數是如何使用的。例如,對於 nLockTime=400,CLTV=300 的事務 T,上面的描述基本上是說,由於 T 在 400 之前仍然無效(由於 nLockTime),所以高度 400 必須滿足 CLTV=300。沒錯,但有什麼意義呢?如果 T 的 CTLV=200 會有什麼不同?

設置交易的nLockTime欄位會限制目前交易的確認,直到某個區塊高度。在目前交易的輸出的鎖定腳本中

使用操作將通過強制下一個交易等於傳遞給操作碼的值來限制下一個交易(即花費此輸出的交易)的確認。CLTV``nLockTime``CLTV

假設您在兩個場景中有兩個事務。撰寫本文時的塊高度為637028.

  • A是一個(一個輸入,一個輸出)事務,其nLockTime欄位設置為637100B是一個(一個輸入,一個輸出)交易,花費A.
  • C是一個(一個輸入,一個輸出)事務,其nLockTime欄位設置為0,但它指定637100 CLTV DROP為其單個輸出的“鎖定”腳本的一部分。D是一個(一個輸入,一個輸出)交易,花費C.
          A                            B
_____________________        ______________________
|   nLockTime=637100  |----->|     nLockTime=0      |
|_____________________|      |______________________|


          C                            D
_____________________        ______________________
|   CLTV=637100       |----->|     nLockTime=637100 |
|____________\________|      |_________________/|\__|
             \                                 |
              \________this forces_____________|

在 height 之前,這兩個包都不能作為一個整體被探勘637028,但是在第二種情況下C 可以被探勘:這個間接是CLTV操作碼的點。有關bip-0065 中的詳細資訊和案例的更多資訊。

nLockTime 欄位和 CLTV 操作碼都指定了絕對時間鎖定。不同之處在於 nLockTime 適用於整個交易,而 CLTV 適用於單個交易輸出的支出。在 nLockTime 中指定的塊高度或時間過去之前,無法探勘啟用了 nLockTime 的事務。除非支出交易的 nLockTime 大於或等於 CLTV 參數,否則無法花費帶有 CLTV 操作碼的交易輸出。

在您的範例中,您是正確的,直到時間 400 才能開採 T。但是,CLTV 值適用於 T 正在花費的單個交易輸出。這兩個值可以由不同的人設置。如果 CLTV 值為 200,則交易輸出可能已被 nLockTime 為 200 的交易花費。類似地,如果 CLTV 值為 300,則交易輸出可能已被 nLockTime 為 300 的交易花費,但不是200. 當然,nLockTime 為 400 的交易在任何一種情況下都可以花費交易輸出。

引用自:https://bitcoin.stackexchange.com/questions/71916