跳至主要內容
進階

共識機制

深入理解比特幣的工作量證明共識機制、難度調整算法和分叉處理。

20 分鐘

什麼是共識?

在分散式系統中,共識是指所有參與者對某個狀態達成一致的過程。 比特幣網路沒有中央權威,卻能讓全球數萬個節點對「誰擁有多少比特幣」達成一致。 這是通過工作量證明(Proof of Work, PoW)機制實現的。

核心問題: 在沒有中央機構的情況下,如何防止同一筆比特幣被花費兩次(雙重支付)? 答案是:讓所有人同意一個統一的交易順序。

工作量證明 (PoW)

工作量證明是一種讓礦工證明他們付出了計算資源的機制。 礦工需要找到一個特殊的數字(nonce),使得區塊頭的雜湊值小於目標值。

挖礦過程

1

收集交易

從 mempool 選擇交易,構建候選區塊

2

構建區塊頭

包含前區塊雜湊、Merkle 根、時間戳等

3

嘗試 nonce

不斷改變 nonce 值,計算區塊頭雜湊

4

檢查結果

如果雜湊 < 目標值,找到有效區塊;否則繼續

5

廣播區塊

找到有效區塊後,立即廣播到網路

雜湊函數特性

比特幣使用 SHA-256 雜湊函數。它有以下關鍵特性:

  • 單向性:從輸出無法反推輸入
  • 雪崩效應:輸入微小變化導致輸出完全不同
  • 確定性:相同輸入永遠產生相同輸出
  • 抗碰撞:找到兩個相同雜湊的輸入極其困難

難度調整

比特幣設計為平均每 10 分鐘產生一個區塊。為了維持這個節奏, 網路每 2016 個區塊(約兩週)自動調整一次難度。

# 難度調整公式
新難度 = 舊難度 × (實際時間 / 目標時間)

# 目標時間
目標時間 = 2016 區塊 × 10 分鐘 = 20160 分鐘 ≈ 2 週

# 調整限制:最多 4 倍,最少 1/4 倍
if 調整係數 > 4: 調整係數 = 4
if 調整係數 < 0.25: 調整係數 = 0.25

為什麼是 10 分鐘?

10 分鐘是安全性和使用便利性之間的平衡:

  • • 足夠長,讓新區塊有時間傳播到全網
  • • 減少「孤塊」(orphan blocks)的產生
  • • 防止礦池過度中心化
  • • 同時不會讓用戶等待太久

最長鏈規則

當網路中出現多個有效區塊時,節點遵循「最長鏈規則」(實際上是累計工作量最大的鏈):

情況 處理方式
收到更長的鏈 切換到新鏈(重組)
收到相同長度的鏈 保留先收到的,等待下一個區塊
收到較短的鏈 忽略

分叉類型

臨時分叉

當兩個礦工幾乎同時找到有效區塊時,網路會暫時分裂。 這是正常現象,通常在 1-2 個區塊後自動解決。

軟分叉 (Soft Fork)

軟分叉是向後相容的升級。舊節點仍能驗證新規則產生的區塊, 但可能無法使用新功能。例如:SegWit、Taproot。

硬分叉 (Hard Fork)

硬分叉是不向後相容的變更。未升級的節點會拒絕新規則的區塊, 可能導致永久性網路分裂。比特幣社群通常避免硬分叉。

特性 軟分叉 硬分叉
向後相容
升級強制性 可選 必須
分裂風險
範例 SegWit, Taproot BCH 分裂

共識規則類型

Bitcoin Core 實現了多層共識規則:

區塊級規則

  • • 區塊大小 ≤ 4MB (weight)
  • • 時間戳在合理範圍內
  • • 難度值正確
  • • Merkle 根正確
  • • Coinbase 獎勵正確

交易級規則

  • • 輸入 UTXO 存在且未花費
  • • 簽名有效
  • • 輸出 ≤ 輸入
  • • 不是雙重支付
  • • 腳本執行成功

相關 BIP

  • BIP-9: Version bits 軟分叉激活機制
  • BIP-8: 帶強制激活的軟分叉部署

延伸閱讀: 《精通比特幣》 第 10 章深入講解了挖礦和共識機制。

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