🎯 什麼情境該想到我

當你想理解「一群互不信任、沒有老大的節點,如何對帳本達成一致且難以竄改」時。

⚙️ 怎麼用(理解機制)

  1. 每個節點各自驗證交易與區塊,不信任他人結果。
  2. 工作量證明(PoW):礦工競賽解一道難算易驗的雜湊謎題,勝者有權打包區塊;算力=話語權。
  3. 最長鏈為準:誠實節點延續最長鏈,竄改歷史需重算其後所有區塊 → 成本極高(需掌握多數算力)。
  4. 確認數:交易被越多後續區塊覆蓋,被推翻的機率越低(故大額交易等多個確認)。
  5. 誘因:區塊獎勵 + 手續費讓「誠實挖礦」比作弊更有利。

★ 「難算易驗」的謎題到底是什麼

礦工要找一個 nonce,使得區塊頭的雙重 SHA-256 雜湊值小於目標值:

  • 難算:雜湊輸出無法預測,只能一個一個 nonce 試。目標值越小,符合的比例越低,平均要試的次數越多。
  • 易驗:任何節點拿到區塊,只要算一次雜湊,和目標值比較就知道是否合法。

這個不對稱性是整個設計的基礎:產生證明很貴,檢查證明幾乎免費。

★ 難度調整:讓出塊時間維持在 10 分鐘

全網算力會變動,所以目標值要定期調整。《精通比特幣》給出的公式:

  • 2016 個區塊 × 10 分鐘 = 20160 分鐘 ≈ 兩週。
  • 實際花的時間比預期短(算力上升)→ 難度提高;比預期長 → 難度降低。
  • 實作上單次調整幅度有上下限(最多 4 倍),避免劇烈變動。

★ 為什麼要等「6 個確認」:可以自己算

比特幣白皮書第 11 節計算了攻擊者從落後 z 個區塊追上誠實鏈的機率。設攻擊者掌握的算力比例為 q(誠實節點為 p = 1 − q):

用這個公式算出的數值(與白皮書的表格一致):

確認數 z攻擊者 q = 10%攻擊者 q = 30%
120.5%62.8%
25.1%44.6%
31.3%32.5%
50.09%17.7%
60.02%13.2%
100.0001%4.2%

要讓攻擊成功機率低於 0.1%,需要的確認數:q = 10% → 5 個;15% → 8;20% → 11;25% → 15;30% → 24;35% → 41;40% → 89。

讀法:

  • 「6 個確認」是在攻擊者算力約 10% 的假設下,把風險壓到萬分之幾。
  • 攻擊者算力越接近 50%,需要的確認數急遽增加;到 50% 以上,攻擊者必然能追上(這就是「51% 攻擊」)。
  • 所以確認數應該依金額調整:小額交易 1 個確認可能就夠,大額交易等更多。

★ 誘因:為什麼誠實比作弊划算

  • 區塊獎勵:新區塊的第一筆交易(coinbase)可以憑空產生新幣給礦工。依書中程式碼,獎勵每 210,000 個區塊(約 4 年)減半:50 → 25 → 12.5 → …;2024 年 4 月的減半後為 3.125 BTC。
  • 成熟期:coinbase 產生的幣要等 100 個區塊(書中的 COINBASE_MATURITY)才能花用——礦工如果挖的是會被推翻的分叉,獎勵也會一起消失。
  • 手續費:交易的輸入總額減去輸出總額,由打包的礦工收取。隨著區塊獎勵遞減,手續費會成為主要誘因。

掌握大量算力的人,把算力用在誠實挖礦賺的比攻擊網路多——攻擊成功會讓幣值暴跌,損害的正是攻擊者自己的資產。

★ 和分散式系統的共識演算法比較

PoW(比特幣)Raft/Paxos
參與者任何人,不需要許可,身分未知固定且已知的節點
容忍的錯誤惡意節點(拜占庭),只要算力 < 50%當機(非拜占庭),多數節點存活
最終性機率性:確認越多越安全,但永遠不是 100%確定性:提交了就不會被推翻
吞吐量與延遲低(每 10 分鐘一個區塊)高(毫秒級)

PoW 用效能換到了「無需許可」:在不知道誰是誰的開放網路中達成共識。如果參與者是已知的(公司內部的服務),用 Raft 就好(見 工具-線性一致性與共識)。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意

  • PoW 安全來自「攻擊成本 > 收益」的經濟假設,且極耗能;PoS 等機制用不同方式達成共識。

🔗 相關工具