Checksequenceverify
為什麼 OP_CSV 的時間間隔需要在 nSequence 欄位中,而它已經在腳本中?
BIP68 規定瞭如何將時間間隔放入
nSequence
欄位中,但是 BIP112 告訴您可以在腳本中使用“30d”之類的符號來指定它。為什麼有兩種方法可以做同樣的事情?它們都是必要的,還是在驗證階段只是兩者之一?
它們不具有相同的功能。
在 nSequence 值中放置一個相對鎖定時間意味著“在其輸入至少那麼舊之前,無法探勘此事務”。
在腳本中使用 OP_CSV 設置相對鎖定時間意味著“要求花費此時間的事務至少設置此值的 nSequence”。
將它們分開的原因是為了使交易驗證與時間無關。如果將傳遞給 OP_CSV 的值直接與時間進行比較,但它失敗了,則無法區分事務是完全無效還是由於臨時鎖定時間/序列約束。
換句話說:將它們分開可以讓我們看到支出交易,驗證一次,並確定它是有效的。我們永遠不需要再次評估它,因為這種有效性永遠不會改變;如果一次有效,則永遠有效。何時可以開採它的問題與此無關,只需查看 nSequence 值並將其與區塊鏈的時間進行比較即可輕鬆檢查。
沒有必要同時支持這兩種格式。這只是一個方便的問題,為使用者提供兩種選擇。兩種格式的工作方式完全相同。並將轉換如下:
“Locktime 本身是一個無符號的 4 字節整數,可以通過兩種方式解析:
如果小於 5 億,則將 locktime 解析為塊高度。可以將交易添加到具有此高度或更高的任何塊中。
如果大於或等於 5 億,則使用 Unix 紀元時間格式(自 1970-01-01T00:00 UTC 以來經過的秒數 - 目前超過 13.95 億)解析鎖定時間。交易可以添加到任何塊時間大於鎖定時間的塊中。”
<https://bitcoin.org/en/developer-guide#term-sequence-number>