中位時間 Median Time Past

Median Time Past,中位時間,是 Bitcoin 以前 11 個區塊的時間戳記中位數,作為區塊鏈時間基準的計算方式。

中位時間 Median Time Past

 

Median Time Past,中位時間,是 Bitcoin 以前 11 個區塊的時間戳記中位數,作為區塊鏈時間基準的計算方式。

Median Time Past 最初用於限制區塊時間戳記的合法範圍。隨著 Bitcoin 協議發展,BIP 113 將其定義為時間鎖定的比較基準,使 nLockTime、OP_CHECKLOCKTIMEVERIFY 與 BIP 68 的相對時間鎖定,都使用 Median Time Past 判斷時間條件。

因此,Median Time Past 是 Bitcoin 時間系統中的重要基準,連結了區塊時間戳記、時間鎖定、礦工行為與軟分叉啟用等機制。


中位時間 基本概念

  • 區塊時間戳記
    每一個 Bitcoin 區塊標頭都包含一個 32 位元的 Timestamp 欄位。 在 Bitcoin 區塊標頭中,主要包含:

    • Version
    • Previous Block Hash
    • Merkle Root
    • Timestamp
    • Bits
    • Nonce

    其中 Timestamp 由礦工在建立區塊時自行設定,數值代表 Unix Timestamp,以秒為單位。 由於礦工可以自行設定,區塊時間戳記並不一定精確,也不一定隨區塊高度遞增。

 

  • 中位數計算
    Median Time Past 取前 11 個區塊的時間戳記,由小到大排序後,取第 6 個數值作為結果。 使用中位數而不是平均值,可以避免單一區塊的極端時間戳記影響結果。

    因此,少數礦工即使設定偏離實際的時間戳記,也難以改變 Median Time Past。

 

  • 單調不遞減
    由於新區塊的時間戳記必須大於 Median Time Past,Median Time Past 隨著新區塊產生只會維持不變或增加,不會倒退。

    因此,Median Time Past 比單一區塊時間戳記更適合作為穩定的時間基準。

 

  • 落後實際時間
    Median Time Past 取的是前 11 個區塊的中位數,概念上大約對應 6 個區塊之前的時間。 以平均每 10 分鐘一個區塊計算,Median Time Past 通常比實際時間落後約 1 小時。

 

  • 時間鎖定基準
    BIP 113 定義時間鎖定的比較基準,不再使用區塊標頭的時間戳記,而是使用 Median Time Past。 適用的時間鎖定包含:

    • nLockTime 時間模式
    • OP_CHECKLOCKTIMEVERIFY
    • BIP 68 相對時間鎖定

    BIP 113 與 BIP 68、BIP 112 一同透過軟分叉部署,於 2016 年啟用。


中位時間 運作方式

  • 取得前 11 個區塊
    當節點驗證一個新區塊時,會取得該區塊之前的 11 個區塊。 也就是新區塊的父區塊,以及父區塊之前的 10 個區塊。

 

  • 排序時間戳記
    節點取得這 11 個區塊的時間戳記後,將其由小到大排序。 排序依據的是時間戳記的數值,而不是區塊高度的順序。

 

  • 取得中位數
    排序完成後,取第 6 個時間戳記,作為 Median Time Past。 Bitcoin Core 透過 GetMedianTimePast() 計算這個數值。

 

  • 檢查區塊時間戳記
    新區塊的時間戳記必須大於 Median Time Past,否則該區塊無效。 此外,節點也不接受時間戳記超過節點本地網路時間 2 小時以上的區塊。

    因此,區塊時間戳記的合法範圍為:

    • 下限:大於 Median Time Past
    • 上限:不超過網路時間 + 2 小時

 

  • 檢查時間鎖定
    節點驗證區塊中的交易時,會使用 Median Time Past 判斷時間鎖定條件。
    • nLockTime 時間模式中,Median Time Past 必須大於 nLockTime。
    • BIP 68 時間模式中,會比較 UTXO 所在區塊與目前區塊的 Median Time Past 差距。

 

  • 節點驗證
    節點根據 Median Time Past 判斷區塊時間戳記是否合法,以及區塊中的時間鎖定交易是否已經可以生效。 只有在這些條件符合後,區塊才可以繼續按照其他共識規則進行處理。

 


中位時間 使用示例

  • 計算 Median Time Past
    假設前 11 個區塊的時間戳記依區塊高度順序為:

    1767225000、1767225600、1767225300、1767226200、1767225900、1767226800、 1767226500、1767227400、1767227100、1767228000、1767227700

    由小到大排序後:

    1767225000、1767225300、1767225600、1767225900、1767226200、1767226500、 1767226800、1767227100、1767227400、1767227700、1767228000

    第 6 個數值為 1767226500,因此 Median Time Past = 1767226500。

 

  • 區塊時間戳記限制
    延續上例,Median Time Past = 1767226500

    下一個區塊的時間戳記必須大於 1767226500。 如果礦工將時間戳記設定為 1767226000,該區塊會被節點視為無效。

    即使前一個區塊的時間戳記為 1767227700,下一個區塊仍然可以設定為 1767227000。 因為區塊時間戳記只需要大於 Median Time Past,不需要大於前一個區塊。

 

  • nLockTime 時間鎖定
    假設交易設定:

    nLockTime = 1767226800 Input 0 → nSequence = 0xfffffffe

    目前 Median Time Past = 1767226500,並未大於 nLockTime。

    因此,即使礦工將新區塊的時間戳記設定為 1767230000,該交易仍然不能被納入區塊。 必須等到 Median Time Past 超過 1767226800 後,交易才可以被納入區塊。

 

  • 防止礦工提前時間
    假設在 BIP 113 之前,時間鎖定使用區塊標頭的時間戳記判斷。

    礦工可以將區塊時間戳記設定在網路時間 2 小時內的未來時間,提前納入尚未到期的時間鎖定交易,並收取其手續費。

    使用 Median Time Past 後,單一礦工無法透過調整自己區塊的時間戳記,讓時間鎖定交易提前生效。

 

  • 相對時間鎖定
    假設一個 UTXO 所在區塊對應的 Median Time Past 為 1767226500 並在花費該 UTXO 的交易輸入中,設定 BIP 68 時間模式,低 16 位元的值為 10

    則 10 × 512 = 5,120 秒

    因此,必須等到 Median Time Past 達到 1767226500 + 5120 = 1767231620 之後,該交易輸入的相對時間鎖定條件才會滿足。


Median Time Past 應用

  • 時間鎖定驗證
    Median Time Past 最重要的現代用途,是作為 Bitcoin 時間鎖定的比較基準。 nLockTime、CLTV 與 BIP 68 的時間模式,都使用 Median Time Past 判斷條件是否滿足。 這讓時間鎖定的生效時間,不會受到單一礦工設定的時間戳記影響。

 

  • 區塊時間戳記驗證
    Median Time Past 作為區塊時間戳記的下限,限制礦工不能任意設定過去的時間。 搭配節點的未來時間上限,使區塊時間戳記維持在合理範圍內。

 

  • 軟分叉啟用 Version Bits
    BIP 9 的 Version Bits 軟分叉部署機制,使用 Median Time Past 判斷部署的開始時間與逾時時間。 這讓軟分叉的啟用流程,可以使用網路共同認定的時間基準。

 

  • 閃電網路 Lightning Network
    Lightning Network 依賴時間鎖定建立延遲、撤銷與安全結算機制。 當使用時間模式的時間鎖定時,條件是否滿足取決於 Median Time Past。 因此,Median Time Past 是時間鎖定可預期性的重要基礎。

Median Time Past 相關 BIP

  • BIP 9:Version bits with timeout and delay
  • BIP 65:OP_CHECKLOCKTIMEVERIFY
  • BIP 68:Relative lock-time using consensus-enforced sequence numbers
  • BIP 112:CHECKSEQUENCEVERIFY
  • BIP 113:Median time-past as endpoint for lock-time calculations
2026/10/28 10:17 AM


更多文章