Transactions

什麼是交易“最終性”?

  • July 5, 2020

在這裡IsFinalTx()看到的bitcoind按以下順序檢查交易的屬性:

  1. 究竟是nLockTime什麼0?那是最終的。返回。
  2. 如果不是0,是否低於目前區塊高度/時間?如果是這樣,它是最終的。返回。
  3. 確保每個 tx 輸入都是0xffffffff. 如果是這樣,它是最終的。

return因為這些是用語句按順序檢查的,nSequence所以甚至不會檢查 if nLockTime == 0nLockTime此外,只要所有nSequence值都未超過其價值,交易仍可能是“最終”0xffffffff

非最終交易在 blocks 中無效,所以我的問題是:

  • 為什麼只要所有序列都是最終的,“壞”的鎖定時間就可以了?無論如何,tx 都無法開採,對吧?
  • 費用替換和檢查序列驗證交易(使用非最終nSequence值時)有何影響?這是否意味著要使用這些功能,nLockTime必須以某種方式進行設置?
  • 或者,也許,因為nLockTime無論如何都必須低於目前時間/高度,這一切都只是沒有實際意義,實際上nSequence根本不會影響交易的最終確定性。

為什麼只要所有序列都是最終的,“壞”的鎖定時間就可以了?無論如何,tx 都無法開採,對吧?

根據BIP 68,將nSequence禁用事務中的每個輸入的值設置為 0xFFFFFFFF nLocktime。因此,無論 的值是多少nLocktime,只要nSequence值為 0xFFFFFFFF,它就不會對事務產生影響。

費用替換和檢查序列驗證交易(使用非最終 nSequence 值時)有何影響?這是否意味著要使用這些功能,必須以某種方式設置 nLockTime?

如果其任何輸入的 nSequence 編號小於 0xFFFFFFFE,則它認為交易已選擇允許替換自身。要使用CSV您的nSequence值必須是 <= 0xEFFFFFFF。如果nSequencevalue > 0xEFFFFFFF,那麼我們對序列號沒有一致的意義,它可以在所有目前可能的情況下包含在任何塊中。因此,要nLocktime與 Opt-in RBF 一起使用,您的nSequence值必須介於 0xF0000000 到 0xFFFFFFFD 之間。請參閱nSequence以獲取有關它在過去幾年中如何發展的更多資訊。

或者,也許,因為 nLockTime 無論如何都必須低於目前時間/高度,這只是沒有實際意義,實際上,nSequence 根本不會影響事務的最終確定性。

nLocktime是事務級特徵,而nSequence是輸入級特徵。因此,該程序基本上已經過優化,因此如果交易本身由於nLocktime. 如果您檢查下面的功能IsFinalTx,它會通過驗證nSequence數字是否有效來檢查每個交易輸入的有效性。

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