Informational Draft
BIP-8: Version Bits 改進
改進的軟分叉部署機制,支持強制啟用(LOT)選項。
Shaolin Fry 2017年2月1日
BIP 編號
8
類型
Informational
狀態
Draft
創建日期
2017-02-01
摘要
BIP-8 是 BIP-9 的改進版本,增加了在超時後強制啟用(lock-in on timeout)的選項。 這解決了 BIP-9 中礦工可能無限期阻止升級的問題。
BIP-9 的問題
為什麼需要改進?
- • BIP-9 給予礦工事實上的否決權
- • 超時後升級自動失敗,必須重新部署
- • 礦工可能出於商業利益而非技術原因阻止升級
- • 這與比特幣「用戶主導」的精神相悖
BIP-8 的解決方案
LOT 參數
BIP-8 引入了 lockinontimeout(LOT)參數:
LOT = false
與 BIP-9 行為相同。超時後如果未達閾值,升級失敗。
礦工主導
LOT = true
超時後自動鎖定(MUST_SIGNAL),強制啟用。礦工必須發送信號否則區塊無效。
用戶主導
改進的狀態機
DEFINED
│
│ start_height 到達
↓
STARTED ──────────────────────┐
│ │
┌────────────┼────────────┐ │
│ │ │ │
│ 達到閾值 │ 超時 │ 超時 │
│ │ (LOT=true) │ (LOT=false) │
↓ ↓ │ ↓
LOCKED_IN MUST_SIGNAL │ FAILED
│ │ │
│ │ 下一週期 │
│ ↓ │
│ LOCKED_IN ────────┘
│ │
└────────────┤
│ 下一週期
↓
ACTIVE MUST_SIGNAL 狀態
當 LOT=true 且超時到達時,進入 MUST_SIGNAL 狀態:
- • 所有區塊必須設置對應的信號位元
- • 不設置信號的區塊被視為無效
- • 這確保升級必定啟用
部署參數
| 參數 | 說明 | 對比 BIP-9 |
|---|---|---|
| bit | 信號位元位置 | 相同 |
| start_height | 開始高度(區塊高度而非時間) | 改用高度 |
| timeout_height | 超時高度 | 改用高度 |
| threshold | 啟用閾值 | 相同 |
| min_activation_height | 最早啟用高度 | 新增 |
| lockinontimeout | 超時後是否強制啟用 | 新增 |
使用高度而非時間
BIP-8 使用區塊高度而非 MTP(中位時間)的原因:
- • 更可預測:高度是確定的,時間可能因難度調整而變化
- • 避免時間戳攻擊:礦工可以操縱時間戳來影響啟用
- • 更容易驗證:輕客戶端可以輕鬆驗證高度
Taproot 啟用案例
Taproot(BIP-341)使用修改版的 BIP-8 進行部署,稱為「Speedy Trial」:
Taproot 部署參數
bit
2
start_height
681,408
timeout_height
693,504
min_activation_height
709,632
threshold
90% (1815/2016)
結果
鎖定於區塊 687,284
LOT 爭議
社群辯論
LOT 參數引發了激烈的社群辯論:
LOT=true 支持者
- • 用戶應該控制協議規則
- • 防止礦工否決權
- • 更快達成共識
LOT=false 支持者
- • 避免鏈分裂風險
- • 給予更多協調時間
- • 更保守的升級方式
總結
BIP-8 提供了更靈活的軟分叉部署機制,特別是 LOT=true 選項讓社群可以 確保升級不被少數礦工阻止。Taproot 的成功啟用證明了這種機制的可行性。
延伸閱讀: 查看 GitHub 上的完整 BIP-8 文件
已複製連結