Transactions

交易輸入中的序列是什麼意思?

  • October 20, 2021

在交易輸入之後:在此處輸入圖像描述

序號的含義是什麼?4294967295 告訴我什麼?

交易中nSequence的本義

nSequence是一個 4 字節的輸入電平特性。的原意nSequence是允許修改記憶體池中的交易。因此,如果輸入的 nSequence 值小於0xFFFFFFFF4294967295十進制),則表明交易尚未完成。這樣的交易將被保存在記憶體池中,直到它被另一個花費相同輸入且具有更高 nSequence 值的交易替換。一旦收到輸入具有 nSequence 值的交易0xFFFFFFFF,將被視為已完成並探勘。

在該實施中,替換交易不必支付額外費用,因此礦工沒有直接的動機來包含替換。此外,沒有內置的速率限制可以防止中繼節點頻寬的過度使用。因此,此功能後來被禁用,因為攻擊者有可能以很小的成本耗盡所有節點之間的所有頻寬,從而產生拒絕服務漏洞。這使得消費者很難調整他們之前發送的交易來處理意外的確認延遲或執行其他有用的替換。

選擇加入完全按費用替換的信號

然後提出了選擇加入完全按費用替換信號的提案。如果任何輸入的 nSequence 數小於 ,則它認為交易已選擇允許替換自身0xFFFFFFFE。它還需要比以前的中繼交易更高的費用。

絕對和相對鎖定時間

Transaction withnLockTime用於防止在某個日期(在塊號或時間中指定)之前探勘交易。BIP 68啟動定義了帶有nVersion >=2. nSequence被重新用作相對鎖定時間。這意味著它會阻止交易的探勘,直到交易花費的輸入達到塊或時間跨度的特定年齡。如果nSequence > 0xEFFFFFFF那時我們對序列號沒有一致的意義,它可以在所有目前可能的情況下包含在任何塊中。如果nSequence <= 0xEFFFFFFF,則表示相對鎖定時間。

如果nSequence <=0xEFFFFFFF,則序列的第 22 位確定相對鎖定時間是基於時間的還是基於塊的。如果該位為 1,則相對鎖定時間以 512 秒粒度為單位指定時間跨度。如果該位未設置(即為 0),則相對鎖定時間指定塊數。相對鎖定時間的值,然後從nSequence. 下圖顯示瞭如何評估 nSequence。

在此處輸入圖像描述

將 nSequence 與 CHECKSEQUENCEVERIFY (CSV) 操作碼一起使用

CSV 是一個腳本級別的操作碼,用於鎖定交易的特定輸出的支出,直到包含輸出的交易被探勘後的某些塊/時間。當使用者在交易輸入中花費此 UTXO 時,他必須nSequence將該輸入中的值設置為大於或等於 CSV 參數。CSV 中的值必須與相應 nSequence 值中的格式匹配。如果 CSV 是按塊指定的,那麼 nSequence 也必須如此。

其他雜項

  1. 目前,如果nSequence = 0xFFFFFFFF,序列號對事務沒有影響。
  2. 如果nSequence = 0xFFFFFFFE,則意味著事務使用鎖定時間但不使用opt-in replace-by-fee
  3. 從比特幣核心創建的普通交易使用nSequence=0xFFFFFFFE,因為它們想用來nLocktime防止礦工將交易向前推進。在nLocktime此類交易中使用的設置為最後開采的塊。

有關鎖定時間的更多資訊,請參閱此處

nSequence 的未來潛力

從上面的描述可以看出,in 中的許多位nSequence仍未定義。這允許通過軟分叉增加其粒度,或在未來增加最大可能的相對鎖定時間。例如:

  1. 如果nSequence &gt; 0xEFFFFFFF那麼剩下的 31 位沒有意義,因為這個條件可以通過設置位 (1<<31) 來滿足。
  2. 如果nSequence &lt;= 0xEFFFFFFF那麼位 23 到 30 沒有意義。
  3. 此外,只有前 16 位用於實際編碼相對鎖定時間,這意味著另外 6 位未使用(1 << 16 到 1 << 21 包括在內)。

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