交易序列號 nSequence

交易序列號,主要與交易更新及替換機制有關。隨著 Bitcoin 協議發展,其功能逐漸擴展,現代 Bitcoin 中主要應用於相對時間鎖定 Relative Lock-Time 與交易替換 Replace-by-Fee(RBF)訊號。

交易序列號 nSequence

 

nSequence,交易序列號,是 Bitcoin 交易輸入中的一個 32 位元欄位,用來表示該交易輸入的序號,以及特定的交易控制條件。

nSequence 最初設計時,主要與交易更新及替換機制有關。隨著 Bitcoin 協議發展,其功能逐漸擴展,現代 Bitcoin 中主要應用於相對時間鎖定 Relative Lock-Time 與交易替換 Replace-by-Fee(RBF)訊號。

因此,nSequence 是 Bitcoin 交易輸入中的重要控制欄位,連結了交易輸入、UTXO、相對時間鎖定與交易替換等機制。


交易序列號 基本概念

  • 32 位元交易輸入欄位 每一個 Bitcoin 交易輸入 TxIn 都包含一個 32 位元的 nSequence 欄位。 在 Bitcoin 交易結構中,一個普通交易輸入主要包含:

    • Previous Output
    • ScriptSig
    • nSequence
    • Witness

    其中 nSequence 固定為 32 bits。一筆 Bitcoin Transaction 有多少個輸入,就會有多少個獨立的 nSequence。 nSequence 的數值範圍為

    0 → 2³² − 1 = 4,294,967,295

    一般情況下使用 0xffffffff 作為預設的 nSequence 值。


  • 交易輸入序號 nSequence 最初的設計概念,是讓交易輸入具有一個可以更新的序號。 早期 Bitcoin 協議中,nSequence 與交易更新及替換機制有關,使較新的交易可以在特定條件下取代尚未確認的舊交易。 隨著 Bitcoin 協議發展,原本的 nSequence 功能逐漸被新的交易控制機制取代,但這個 32 位元欄位仍保留在 Bitcoin 交易格式中。

    • BIP 68 定義 nSequence 的相對鎖定規則
    • BIP 112 透過 Script 中的 OP_CHECKSEQUENCEVERIFY,驗證相對鎖定條件
    • BIP 125 利用 nSequence 發出 opt-in RBF 訊號

    使 nSequence 成為具有多種協議用途的交易輸入欄位。


  • 相對時間鎖定 BIP 68 將 nSequence 的部分位元重新定義為相對鎖定條件。相對時間鎖定 Relative Lock-Time,是指交易輸入所花費的 UTXO 必須先經過指定的區塊數量或時間後,該交易輸入才能符合 Bitcoin 的共識規則。 與交易中的 nLockTime 不同,nSequence 的相對鎖定條件是針對個別交易輸入設定。

    因此,一筆交易可以具有多個輸入,而每一個輸入可以設定不同的 nSequence 與相對鎖定條件。 BIP 68 的相對鎖定規則適用於交易版本 2 或以上。


  • 交易替換 RBF nSequence 也可以用於表示 Replace-by-Fee(RBF)訊號。 BIP 125 定義 opt-in RBF 訊號

    當交易至少一個輸入的 nSequence

    小於:0xffffffff - 1, 也就是 0xfffffffe 時,

    可以表示該交易訊號化允許被替換。


交易序列號 運作方式

  • 建立交易輸入
    當使用者建立 Bitcoin Transaction 時,每一個交易輸入都會指向一個先前存在的 UTXO。 一個交易輸入主要包含:

    • Previous Transaction ID
    • Previous Output Index
    • ScriptSig
    • nSequence
    • Witness

    其中 Previous Transaction ID 與 Previous Output Index 用來定位要花費的 UTXO,而 nSequence 則提供交易輸入的序列與控制資訊。


  • 設定 nSequence 建立交易時,可以為每一個交易輸入設定不同的 nSequence 值。如:

    Input 0 → nSequence = 0xffffffff Input 1 → nSequence = 0x0000000a

    代表兩個交易輸入具有不同的 nSequence。

    因此,nSequence 並不是整筆交易只有一個,而是每一個交易輸入各自擁有一個 nSequence。


  • 判斷交易版本 如果 nSequence 用於 BIP 68 的相對鎖定,節點首先需要判斷交易版本。 當交易版本為 Version >= 2 時,BIP 68 的相對鎖定規則才適用。

  • 判斷 Disable Flag BIP 68 將 nSequence 的最高位元 Bit 31 定義為 Disable Flag。 當 Bit 31 = 1 時,該 nSequence 不會被解讀為 BIP 68 的相對鎖定條件。

    因此 0xffffffff 雖然數值非常大,但並不代表需要等待 4,294,967,295 個區塊。 它的最高位元已經設定,因此 BIP 68 的相對鎖定被停用。


  • 判斷鎖定類型 如果 Disable Flag 沒有被設定,節點會進一步判斷 Bit 22 的 Type Flag。 當 Bit 22 = 0,表示使用區塊高度模式。 當 Bit 22 = 1,表示使用時間模式。

    因此,nSequence 可以表示:

    • Relative Block Height
    • Relative Time

  • 取得相對鎖定值
    BIP 68 使用 nSequence 的低 16 bits 作為相對鎖定值。 也就是 nSequence & 0x0000ffff 取得的結果。
    • 區塊高度模式中,該數值代表相對區塊數量。
    • 時間模式中,該數值代表以 512 秒為單位的相對時間。

  • 相對區塊高度
    當 Type Flag 為 0 時,nSequence 使用區塊高度模式。 如 nSequence = 10,表示該輸入需要滿足相對於所花費 UTXO 的區塊數量條件。 節點會根據該 UTXO 所在區塊的高度與目前區塊鏈狀態進行計算。 如果尚未滿足指定的相對區塊條件,該交易就不能被有效納入區塊。

  • 相對時間
    當 Type Flag 為 1 時,nSequence 使用時間模式。 以 512 秒作為一個時間單位的相對時間條件。 因此,BIP 68 的時間模式並不是任意精度的秒數,而是使用固定的 512 秒單位。

  • 節點驗證
    節點取得交易輸入所引用的 UTXO 後,會根據 nSequence 所表示的條件,判斷相對鎖定是否已經滿足。使用區塊模式,會檢查相對區塊高度。使用時間模式,會檢查相對時間。 只有在相對鎖定條件符合後,交易才可以繼續按照其他交易驗證規則進行處理。


交易序列號 使用示例

  • 一般交易 假設一筆 Bitcoin Transaction 有一個輸入:

    nSequence = 0xffffffff

    因為 Bit 31 被設定,BIP 68 的相對鎖定不會啟用。

    因此它不代表需要等待大量區塊,而是一般交易中常見的最終序列值。 Bitcoin Core 的交易結構也將 0xffffffff 定義為 SEQUENCE_FINAL。


  • 相對區塊鎖定 假設交易版本為 Version = 2 並設定 nSequence = 10 由於最高位元沒有被設定,且沒有啟用時間模式,因此可以將低 16 位元解讀為相對區塊鎖定值。

    概念上代表 Relative Lock-Time = 10 blocks 節點會根據該交易輸入所花費的 UTXO 所在區塊,判斷是否已經滿足相對區塊條件。


  • 相對時間鎖定 假設交易版本為 Version = 2 並使用時間模式,低 16 位元的值為 10 則 10 × 512 = 5,120 秒

    因此該交易輸入具有約 85.3 分鐘,的相對時間鎖定條件。 實際驗證仍須依照 Bitcoin 的區塊時間規則進行,而不是單純比較兩個 Unix Timestamp。


  • RBF 訊號 假設一筆交易其中一個輸入設定 nSequence = 0xfffffffd 因為 0xfffffffd < 0xfffffffe

    因此符合 BIP 125 所定義的 opt-in RBF 訊號條件。 這表示該交易可以向支援該訊號規則的節點表示,這筆尚未確認的交易可以透過替代交易進行費用調整。


  • 多輸入交易 假設一筆交易具有兩個輸入

    Input 0 → nSequence = 0xffffffff Input 1 → nSequence = 20

    由於 nSequence 是每一個輸入獨立存在的欄位,因此兩個輸入可以具有不同條件。

    Input 0 不使用 BIP 68 相對鎖定。 Input 1 則可以使用 BIP 68 的相對區塊鎖定。

    因此,一筆交易可以同時包含不同 nSequence 條件的交易輸入。 這也是 nSequence 與單一 nLockTime 的重要差異之一。


nSequence 應用

  • 相對時間鎖定 Relative Lock-Time
    nSequence 最重要的現代用途之一,是實現 Bitcoin 的相對時間鎖定。 它可以讓交易根據所花費 UTXO 的存在時間或確認區塊數量,限制交易何時才能有效。 這種機制是 Bitcoin 時間鎖定系統的重要基礎。

  • 閃電網路 Lightning Network
    nSequence 所提供的相對時間鎖定能力,也是 Lightning Network 等 Bitcoin Layer 2 協議的重要基礎之一。 Lightning Channel 中的交易需要利用時間鎖定與交易條件,建立延遲、撤銷與安全結算機制。 因此,nSequence 與 BIP 68、BIP 112 所提供的相對時間鎖定能力,構成 Lightning Network 部分交易機制的重要底層基礎。

  • RBF 交易替換
    nSequence 可以作為 RBF 訊號,使使用者能夠在交易尚未確認時,建立替代交易調整交易費用。 BIP 125 的 opt-in RBF 使用 nSequence 進行訊號。 RBF 的實際交易替換行為屬於 Bitcoin 節點的交易轉送與 Mempool 政策,而不是單純由 nSequence 一個欄位決定所有替換結果。

  • 多輸入交易控制
    由於每一個交易輸入都有自己的 nSequence,因此交易可以針對不同 UTXO 設定不同的相對鎖定條件。 這讓 Bitcoin 可以建立比單一交易鎖定條件更加細緻的交易控制方式。

nSequence 相關 BIP

  • BIP 68:Relative lock-time using consensus-enforced sequence numbers
  • BIP 112:CHECKSEQUENCEVERIFY
  • BIP 125:Opt-in Full Replace-by-Fee Signaling
2026/9/19 7:18 AM


更多文章