交易鎖定時間 nLockTime

nLockTime 是 Bitcoin 最早的時間鎖定機制,屬於絕對時間鎖定 Absolute Lock-Time。用來設定交易最早可以被納入區塊的區塊高度或時間。

交易鎖定時間 nLockTime

 

nLockTime,交易鎖定時間,是 Bitcoin 交易中的一個 32 位元欄位,用來設定交易最早可以被納入區塊的區塊高度或時間。

nLockTime 是 Bitcoin 最早的時間鎖定機制,屬於絕對時間鎖定 Absolute Lock-Time。隨著 Bitcoin 協議發展,nLockTime 與 BIP 65 的 OP_CHECKLOCKTIMEVERIFY 結合,進一步成為腳本層時間鎖定與 Lightning Network 等機制的重要基礎。

因此,nLockTime 是 Bitcoin 交易中的重要控制欄位,連結了交易生效時間、區塊高度、Median Time Past 與 nSequence 等機制。


交易鎖定時間 基本概念

  • 延後交易生效
    一般交易建立完成後,只要符合共識規則,就能立即被廣播並等待礦工打包。 若設定 nLockTime,交易即使已經完成簽章,也必須等到指定條件達成後,才能被節點接受並由礦工納入區塊。

 

  • 32 位元交易欄位
    每一筆 Bitcoin Transaction 都包含一個 32 位元的 nLockTime 欄位。 在 Bitcoin 交易結構中,一筆交易主要包含:

    • Version
    • Inputs
    • Outputs
    • nLockTime

    其中 nLockTime 固定為 32 bits,位於交易結構的最後。 nLockTime 的數值範圍為

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

    一般情況下使用 0 表示交易沒有設定鎖定時間。

 

  • 交易層級欄位
    與 nSequence 不同,nLockTime 並不是每一個交易輸入各自擁有一個,而是整筆交易只有一個 nLockTime。

    因此,一筆交易無論具有多少個輸入,都共用同一個 nLockTime 條件。

 

  • 絕對時間鎖定
    nLockTime 所表示的是絕對時間點,而不是相對於某個 UTXO 的等待時間。 因此,nLockTime 可以表示:
    • Absolute Block Height
    • Absolute Time

 

  • LOCKTIME_THRESHOLD
    nLockTime 使用數值大小區分鎖定類型,分界值為 500,000,000。 Bitcoin Core 將這個分界值定義為 LOCKTIME_THRESHOLD。
    • 小於該值時,數值代表區塊高度。
    • 大於或等於該值時,數值代表 Unix Timestamp。

 

  • Median Time Past
    BIP 113 定義時間模式的比較基準,不是區塊標頭的時間戳記,而是前 11 個區塊時間的中位數 Median Time Past。 這可以避免礦工透過調整區塊時間戳記,提早讓時間鎖定交易生效。

 

  • 與 nSequence 的關係
    nLockTime 是否生效,取決於交易輸入的 nSequence。

    當所有輸入的 nSequence 都等於:0xffffffff, 也就是 SEQUENCE_FINAL 時,

    nLockTime 會被忽略。只要至少一個輸入的 nSequence 小於 0xffffffff,nLockTime 才會生效。


交易鎖定時間 運作方式

  • 建立交易
    當使用者建立 Bitcoin Transaction 時,可以在交易結構的最後設定 nLockTime。 設定 nLockTime 後,交易仍然可以正常完成簽章,但交易何時能被納入區塊,取決於 nLockTime 的條件。

 

  • 判斷是否為 0
    節點驗證交易時,首先檢查 nLockTime 的值。 當 nLockTime = 0 時,代表交易沒有設定鎖定時間,可以立即被納入區塊。

 

  • 判斷 nSequence
    如果 nLockTime 不為 0,節點會檢查交易中所有輸入的 nSequence。 當所有輸入的 nSequence 都等於 0xffffffff 時,交易視為已經 Final,nLockTime 不生效。

 

  • 判斷鎖定類型
    如果 nLockTime 生效,節點會將 nLockTime 與 LOCKTIME_THRESHOLD 比較。 當 nLockTime < 500,000,000,表示使用區塊高度模式。 當 nLockTime >= 500,000,000,表示使用時間模式。

 

  • 絕對區塊高度
    區塊高度模式中,交易只能被納入高度大於 nLockTime 的區塊。 如 nLockTime = 900000,交易最早可以出現在區塊 900001 中。 如果區塊鏈尚未達到該高度,該交易就不能被有效納入區塊。

 

  • 絕對時間
    時間模式中,nLockTime 的數值代表 Unix Timestamp,以秒為單位。 節點會將 nLockTime 與 Median Time Past 比較。 只有當 Median Time Past 大於 nLockTime 時,交易才可以被納入區塊。

 

  • 節點驗證
    節點根據 nLockTime 所表示的條件,判斷交易是否已經 Final。使用區塊模式,會比較區塊高度。使用時間模式,會比較 Median Time Past。 只有在鎖定條件符合後,交易才可以繼續按照其他交易驗證規則進行處理。

 


交易鎖定時間 使用示例

  • 一般交易 假設一筆 Bitcoin Transaction 設定:

    nLockTime = 0

    由於 nLockTime 為 0,交易沒有鎖定條件,可以立即被納入區塊。

 

  • nLockTime 被忽略 假設交易設定:

    nLockTime = 900000 Input 0 → nSequence = 0xffffffff

    nLockTime 不為 0,節點接著檢查 nSequence。 由於所有輸入的 nSequence 都是 0xffffffff,因此 nLockTime 不會生效。

    即使目前區塊高度尚未到達 900000,交易仍然可以被納入區塊。

 

  • 絕對區塊鎖定 假設交易設定:

    nLockTime = 900000 Input 0 → nSequence = 0xfffffffe

    由於輸入的 nSequence 不是 0xffffffff,因此 nLockTime 生效。 且 900000 < 500,000,000,因此使用區塊高度模式。

    概念上代表 Absolute Lock-Time = Block 900000 該交易最早可以被納入區塊 900001。

 

  • 絕對時間鎖定 假設交易設定:

    nLockTime = 1767225600 Input 0 → nSequence = 0xfffffffe

    由於 1767225600 >= 500,000,000,因此使用時間模式。 1767225600 對應的時間為 2026-01-01 00:00:00 UTC。

    因此該交易必須等到 Median Time Past 超過該時間後,才可以被納入區塊。 實際驗證依照 Median Time Past 進行,而不是單純比較目前的現實時間。

 

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

    nLockTime = 900000 Input 0 → nSequence = 0xffffffff Input 1 → nSequence = 0xfffffffe

    雖然 Input 0 的 nSequence 為 0xffffffff,但 Input 1 不是,因此並非所有輸入都是 SEQUENCE_FINAL。

    nLockTime 對整筆交易生效,交易最早可以被納入區塊 900001。 因此,只要任何一個輸入啟用,nLockTime 就會限制整筆交易。 這也是 nLockTime 與每個輸入獨立的 nSequence 的重要差異之一。


nLockTime 應用

  • 延遲交易 Time-Locked Transaction
    交易可以事先簽署並交給對方保存,作為遺產規劃、預先安排的付款或備用的退款交易。 在鎖定條件滿足之前,即使對方持有已簽署的交易,也無法提前將其納入區塊。

 

  • 腳本層鎖定 CHECKLOCKTIMEVERIFY
    nLockTime 本身只限制交易何時可以被納入區塊,並不限制 UTXO 何時可以被花費。 BIP 65 引入的 OP_CHECKLOCKTIMEVERIFY,讓鎖定腳本可以要求花費交易的 nLockTime 必須達到指定值。 因此,nLockTime 與 CLTV 結合後,可以實現「某個 UTXO 在指定時間之前無法被花費」的條件。

 

  • 閃電網路 Lightning Network
    Lightning Network 的 HTLC 使用 CLTV 設定付款的逾時條件,而 CLTV 的驗證依賴交易的 nLockTime。 因此,nLockTime 與 BIP 65 所提供的絕對時間鎖定能力,構成 Lightning Network 部分交易機制的重要底層基礎。

 

  • 防止手續費狙擊 Anti Fee Sniping
    錢包可以將 nLockTime 設定為目前區塊高度,使交易只能被納入下一個區塊或之後的區塊。 這讓礦工較難透過重組舊區塊的方式,搶奪原本屬於其他區塊的交易手續費。 Bitcoin Core 錢包預設會使用這種方式設定 nLockTime。

nLockTime 相關 BIP

  • BIP 65:OP_CHECKLOCKTIMEVERIFY
  • BIP 113:Median time-past as endpoint for lock-time calculations
  • BIP 68:Relative lock-time using consensus-enforced sequence numbers
2026/10/28 9:48 AM


更多文章