🎯 什麼情境該想到我
當你想理解「一群互不信任、沒有老大的節點,如何對帳本達成一致且難以竄改」時。
⚙️ 怎麼用(理解機制)
- 每個節點各自驗證交易與區塊,不信任他人結果。
- 工作量證明(PoW):礦工競賽解一道難算易驗的雜湊謎題,勝者有權打包區塊;算力=話語權。
- 最長鏈為準:誠實節點延續最長鏈,竄改歷史需重算其後所有區塊 → 成本極高(需掌握多數算力)。
- 確認數:交易被越多後續區塊覆蓋,被推翻的機率越低(故大額交易等多個確認)。
- 誘因:區塊獎勵 + 手續費讓「誠實挖礦」比作弊更有利。
★ 「難算易驗」的謎題到底是什麼
礦工要找一個 nonce,使得區塊頭的雙重 SHA-256 雜湊值小於目標值:
- 難算:雜湊輸出無法預測,只能一個一個 nonce 試。目標值越小,符合的比例越低,平均要試的次數越多。
- 易驗:任何節點拿到區塊,只要算一次雜湊,和目標值比較就知道是否合法。
這個不對稱性是整個設計的基礎:產生證明很貴,檢查證明幾乎免費。
★ 難度調整:讓出塊時間維持在 10 分鐘
全網算力會變動,所以目標值要定期調整。《精通比特幣》給出的公式:
- 2016 個區塊 × 10 分鐘 = 20160 分鐘 ≈ 兩週。
- 實際花的時間比預期短(算力上升)→ 難度提高;比預期長 → 難度降低。
- 實作上單次調整幅度有上下限(最多 4 倍),避免劇烈變動。
★ 為什麼要等「6 個確認」:可以自己算
比特幣白皮書第 11 節計算了攻擊者從落後 z 個區塊追上誠實鏈的機率。設攻擊者掌握的算力比例為 q(誠實節點為 p = 1 − q):
用這個公式算出的數值(與白皮書的表格一致):
| 確認數 z | 攻擊者 q = 10% | 攻擊者 q = 30% |
|---|---|---|
| 1 | 20.5% | 62.8% |
| 2 | 5.1% | 44.6% |
| 3 | 1.3% | 32.5% |
| 5 | 0.09% | 17.7% |
| 6 | 0.02% | 13.2% |
| 10 | 0.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 等機制用不同方式達成共識。
🔗 相關工具
- 工具-線性一致性與共識(分散式共識的另一種脈絡)、工具-UTXO交易模型