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

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

更多文章