跳至主要內容
Informational Final

BIP-9: Version Bits

使用區塊版本號位元進行軟分叉部署的標準機制。

Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell 2015年10月4日
BIP 編號

9

類型

Informational

狀態

Final

創建日期

2015-10-04

摘要

BIP-9 定義了一種使用區塊版本號的位元(bits)來協調軟分叉部署的機制。 它允許礦工通過設置特定位元來表示對新規則的支持,當達到閾值時自動啟用新規則。

動機

舊方法的問題

在 BIP-9 之前,軟分叉通過遞增區塊版本號來部署(如 v2、v3、v4 區塊)。這種方法有幾個問題:

  • 順序限制:多個軟分叉必須按順序部署,不能並行
  • 版本號耗盡:版本號是有限資源
  • 協調困難:難以同時追蹤多個提案的進度

BIP-9 的解決方案

BIP-9 使用版本號的單個位元而非整個版本號,允許最多 29 個軟分叉同時部署。

技術規範

版本號結構

區塊版本號(32 bits):
┌────────────────────────────────────────────────────────┐
│ 31 30 29 │ 28 27 26 25 24 23 22 21 20 ... 3 2 1 0      │
│──────────│─────────────────────────────────────────────│
│  0  0  1 │ bit28 bit27 bit26 ... bit3 bit2 bit1 bit0   │
│──────────│─────────────────────────────────────────────│
│  前綴    │ 可用於軟分叉信號的 29 個位元                │
└────────────────────────────────────────────────────────┘

版本號必須以 001 開頭(前 3 bits),其餘 29 bits 用於信號。
這意味著 BIP-9 區塊版本號範圍:0x20000000 - 0x3FFFFFFF

部署參數

每個軟分叉部署需要定義以下參數:

參數 說明
name 部署的名稱(如 "csv", "segwit")
bit 使用的位元位置(0-28)
starttime 開始時間(MTP,中位時間)
timeout 超時時間(MTP)
threshold 啟用閾值(通常 95%,即 1916/2016 區塊)

狀態機

每個軟分叉在每個難度調整週期(2016 區塊)會處於以下狀態之一:

      DEFINED ─────────────────→ FAILED
         │                          ↑
         │ starttime 到達           │ timeout 到達
         ↓                          │
      STARTED ──────────────────────┤
         │                          │
         │ 達到 threshold           │
         ↓                          │
      LOCKED_IN ────────────────────┘
         │
         │ 下一個週期
         ↓
      ACTIVE(永久)
DEFINED — 初始狀態,尚未開始信號
STARTED — starttime 已過,礦工可以開始信號
LOCKED_IN — 達到閾值,等待下一週期啟用
ACTIVE — 新規則已啟用並強制執行
FAILED — 超時未達閾值,部署失敗

使用案例

以下軟分叉使用 BIP-9 部署:

名稱 位元 BIP 啟用區塊
csv 0 BIP-68, 112, 113 419,328
segwit 1 BIP-141, 143, 147 481,824

限制與改進

BIP-9 的局限性

  • 礦工否決權:礦工可以無限期阻止啟用
  • 超時後失敗:超時後唯一選項是失敗
  • 信號 ≠ 支持:礦工可能設置信號但實際不支持

這些問題促使了 BIP-8 的提出,BIP-8 加入了「強制啟用」選項, 讓社群可以選擇在超時後強制啟用而非失敗。

總結

BIP-9 提供了一個優雅的機制來協調軟分叉部署,允許多個升級並行進行, 並讓礦工通過簡單的區塊頭信號來表達支持。雖然有其局限性, 但它成功部署了多個重要的比特幣升級。

延伸閱讀: 查看 GitHub 上的完整 BIP-9 文件

已複製連結
已複製到剪貼簿