什麼是交易“最終性”?
在這裡
IsFinalTx()
看到的bitcoind按以下順序檢查交易的屬性:
- 究竟是
nLockTime
什麼0
?那是最終的。返回。- 如果不是
0
,是否低於目前區塊高度/時間?如果是這樣,它是最終的。返回。- 確保每個 tx 輸入都是
0xffffffff
. 如果是這樣,它是最終的。
return
因為這些是用語句按順序檢查的,nSequence
所以甚至不會檢查 ifnLockTime == 0
。nLockTime
此外,只要所有nSequence
值都未超過其價值,交易仍可能是“最終”0xffffffff
非最終交易在 blocks 中無效,所以我的問題是:
- 為什麼只要所有序列都是最終的,“壞”的鎖定時間就可以了?無論如何,tx 都無法開採,對吧?
- 費用替換和檢查序列驗證交易(使用非最終
nSequence
值時)有何影響?這是否意味著要使用這些功能,nLockTime
必須以某種方式進行設置?- 或者,也許,因為
nLockTime
無論如何都必須低於目前時間/高度,這一切都只是沒有實際意義,實際上nSequence
根本不會影響交易的最終確定性。
為什麼只要所有序列都是最終的,“壞”的鎖定時間就可以了?無論如何,tx 都無法開採,對吧?
根據BIP 68,將
nSequence
禁用事務中的每個輸入的值設置為 0xFFFFFFFFnLocktime
。因此,無論 的值是多少nLocktime
,只要nSequence
值為 0xFFFFFFFF,它就不會對事務產生影響。費用替換和檢查序列驗證交易(使用非最終 nSequence 值時)有何影響?這是否意味著要使用這些功能,必須以某種方式設置 nLockTime?
如果其任何輸入的 nSequence 編號小於 0xFFFFFFFE,則它認為交易已選擇允許替換自身。要使用
CSV
您的nSequence
值必須是 <= 0xEFFFFFFF。如果nSequence
value > 0xEFFFFFFF,那麼我們對序列號沒有一致的意義,它可以在所有目前可能的情況下包含在任何塊中。因此,要nLocktime
與 Opt-in RBF 一起使用,您的nSequence
值必須介於 0xF0000000 到 0xFFFFFFFD 之間。請參閱此nSequence
以獲取有關它在過去幾年中如何發展的更多資訊。或者,也許,因為 nLockTime 無論如何都必須低於目前時間/高度,這只是沒有實際意義,實際上,nSequence 根本不會影響事務的最終確定性。
nLocktime
是事務級特徵,而nSequence
是輸入級特徵。因此,該程序基本上已經過優化,因此如果交易本身由於nLocktime
. 如果您檢查下面的功能IsFinalTx
,它會通過驗證nSequence
數字是否有效來檢查每個交易輸入的有效性。