📌 30 秒摘要(Layer 3)
從技術層面把比特幣拆解清楚:它如何在沒有中央機構的情況下,靠密碼學與經濟誘因讓一群互不信任的節點對「誰擁有什麼」達成一致。核心三塊——用金鑰證明所有權、用 UTXO 模型記帳、用**工作量證明(PoW)**達成去中心化共識。理解比特幣,就理解了區塊鏈的信任機器如何運作。
🗺 心智圖(Canvas)
精通比特幣
Link to original 精通比特幣
Mastering Bitcoin
🔑 所有權:金鑰與地址
🎯 什麼情境該想到我
當你想理解「加密資產的『所有權』是怎麼用密碼學表達、錢包到底在保管什麼」時。
⚙️ 怎麼用(理解鏈條)
- 私鑰 → 公鑰 → 地址(單向推導,不可逆):私鑰是唯一祕密,公鑰/地址可公開。
- 所有權=能用私鑰簽章:花費某 UTXO 需出示對應私鑰的簽章,證明你有權動用。
- 錢包保管的是「金鑰」,不是「幣」:幣在鏈上,錢包管私鑰。Not your keys, not your coins.
- HD 錢包 + 助記詞(種子):一組助記詞可推導出一整棵金鑰樹;備份助記詞=備份整個錢包。
- 冷/熱錢包:離線保管(冷)較安全、線上(熱)較方便,按金額分層。
★ 從私鑰到地址:每一步都是單向的
步驟 運算 結果 1. 私鑰 隨機產生的 256 位元數字 k(祕密) 2. 公鑰 在橢圓曲線 secp256k1 上計算 K=k⋅G(G 是曲線上的固定點) 曲線上的一個點 3. 公鑰雜湊 RIPEMD160(SHA256(K)) 160 位元(20 bytes) 4. 地址 加上版本前綴與檢查碼,用 Base58Check 編碼 以 1開頭的傳統地址
- 第 2 步是單向的:從 K 反推 k 是橢圓曲線離散對數問題,目前沒有有效的解法。
- 第 3 步也是單向的,而且多了一層保護:在花費之前,鏈上只有公鑰的雜湊,連公鑰本身都沒有公開。
- Base58Check 的檢查碼能抓出打錯的地址;Base58 去掉了容易混淆的字元(0、O、I、l)。
- 較新的地址格式:隔離見證的
bc1q…(Bech32)、Taproot 的bc1p…(Bech32m)。256 位元有多大:2256≈1.16×1077。兩個人隨機產生到同一把私鑰的機率可以忽略——前提是隨機數真的夠隨機。歷史上的私鑰被盜事件,很多是出在隨機數產生器有缺陷,而不是密碼學被破解。
★ 助記詞:12 個單字怎麼算出來的
BIP-39 把隨機的熵轉成單字,單字表有 2048 個字(211,每個字代表 11 位元):
熵 檢查碼(熵 ÷ 32) 總位元 單字數(÷ 11) 128 位元 4 位元 132 12 個字 256 位元 8 位元 264 24 個字 然後用 PBKDF2(HMAC-SHA512,2048 輪)把助記詞加上可選的密碼短語,算出 512 位元的種子。
密碼短語(passphrase)是一個很少人用、但很重要的功能:同樣的 12 個字 + 不同的密碼短語 = 完全不同的錢包。助記詞被偷看到,沒有密碼短語仍然拿不到錢。
★ HD 錢包:一個種子推出無限把金鑰
BIP-32 從種子推導出一棵金鑰樹,路徑像
m/84'/0'/0'/0/5(BIP-84 的第一個帳戶、第 6 個收款地址):
- 每筆收款用新地址:提升隱私,別人無法輕易把你的所有交易連在一起。
- 擴充公鑰(xpub):可以只推導出公鑰與地址、推不出私鑰。適合給網店伺服器產生收款地址——伺服器被入侵也偷不到錢。
- 強化推導(路徑中的
'):一般推導有一個危險性質——xpub 加上任何一把子私鑰洩漏,就能算出父私鑰,進而算出所有子私鑰。強化推導切斷了這個關係,所以帳戶層級都用強化推導。★ 冷熱錢包的實際配置
類型 私鑰在哪 用途 風險 熱錢包 連網的手機或電腦 日常小額支付 惡意軟體、手機遺失 硬體錢包 專用裝置,私鑰不離開裝置,交易在裝置上簽署 中大額 裝置遺失(有助記詞可以復原) 多重簽章 分散在 N 個地方,需要其中 M 把簽章(例如 2-of-3) 大額、公司資金 設定複雜;任何一把遺失都還能動用 原則:像管理現金一樣分層——皮夾裡只放當天要用的錢。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
私鑰/助記詞遺失=資產永久無法動用;外洩=資產可被任何人取走。無法找回、無客服。
助記詞絕對不能數位化保存:拍照、存雲端、貼在密碼管理器的備註,都會讓它暴露在網路攻擊之下。寫在紙上或刻在金屬板上,放在安全的實體位置。
任何要求你輸入助記詞的網站或「客服」都是詐騙:正常的操作永遠不需要把助記詞交給別人。
🔗 相關工具
- 工具-UTXO交易模型 —— 下一層,私鑰簽章的用途就是解鎖 UTXO 完成一筆交易
- 工具-智能合約 —— 對照組,以太坊改用帳戶模型,同一把金鑰的角色跟比特幣不同
私鑰簽章證明所有權 → 公鑰 → 地址
「Not your keys, not your coins」
🧾 記帳:UTXO 模型
🎯 什麼情境該想到我
當你想理解「比特幣帳本到底怎麼記帳、一筆交易如何構成與驗證」時。
⚙️ 怎麼用(理解模型)
- 帳本不存餘額,存 UTXO:Unspent Transaction Output——一堆「還沒被花掉的輸出」。你的「餘額」=你能花的所有 UTXO 總和。
- 交易 = 消耗舊 UTXO(輸入)+ 產生新 UTXO(輸出):輸入引用之前的輸出並用簽章解鎖。
- 找零:輸入通常大於支付額,多的部分轉回自己的新 UTXO(找零)。
- 驗證:節點檢查輸入的 UTXO 存在、未被花、簽章有效、輸入 ≥ 輸出(差額為手續費)。
對照:以太坊用「帳戶餘額模型」(見 精通以太坊),與 UTXO 是兩種記帳哲學。
★ 走一遍:一筆有找零的交易
Alice 的錢包裡有兩個 UTXO:0.5 BTC 和 0.3 BTC。她要付 Bob 0.7 BTC:
輸入 輸出 ───────────────────── ───────────────────────── UTXO #1 0.5 BTC (Alice 簽章) ─┐ ┌─ 0.7 BTC → Bob 的地址 ├──┤ UTXO #2 0.3 BTC (Alice 簽章) ─┘ └─ 0.099 BTC → Alice 的新地址(找零) 輸入總額 0.8 − 輸出總額 0.799 = 0.001 BTC → 手續費(給礦工)
- UTXO 只能整個花掉:0.5 不夠付 0.7,所以兩個都要用,多出來的 0.1 要自己找零。
- 手續費是隱含的:交易裡沒有「手續費」欄位,它就是「輸入 − 輸出」的差額。忘記寫找零輸出,差額會全部變成手續費——這是真實發生過的昂貴錯誤。
- 交易完成後,UTXO #1、#2 消失(被花掉),產生兩個新的 UTXO:Bob 的 0.7 和 Alice 的 0.099。
★ 節點怎麼驗證一筆交易
- 每個輸入引用的 UTXO 存在於目前的 UTXO 集合中(沒有被花過)→ 防雙花。
- 每個輸入的簽章能通過該 UTXO 的鎖定條件(通常是:用對應地址的私鑰簽章)。
- 輸入總額 ≥ 輸出總額。
- 格式、大小等規則都符合。
節點維護的是UTXO 集合,而不是每個地址的餘額。驗證一筆交易只需要查 UTXO 集合,不需要回頭掃描整條鏈的歷史。
★ UTXO 模型 vs 帳戶模型
UTXO(比特幣) 帳戶(以太坊) 狀態 一堆未花費的輸出 每個地址一個餘額 餘額 錢包計算出來(加總自己的 UTXO) 直接存在鏈上 防雙花 天然:一個 UTXO 只能被花一次 靠每個帳戶的 nonce(交易序號) 平行驗證 容易:不同 UTXO 的交易互不影響 較難:同一帳戶的交易有先後順序 隱私 較好:可以每次用新地址 較差:一個地址累積所有活動 複雜狀態(智能合約) 困難 自然 以太坊帳戶模型的細節 → 工具-以太坊帳戶與交易。
★ 對軟體設計的啟發:不可變的帳本
UTXO 模型的核心是只新增、不修改:從不「修改餘額」,只「消耗舊的輸出、產生新的輸出」。這個思路在一般系統中也很有用:
- 複式簿記的帳務系統:不直接更新餘額欄位,而是新增分錄;餘額是分錄的加總。好處是可稽核,任何時間點的餘額都能重算。
- 事件溯源:狀態由事件序列推導,事件本身不可變(和領域事件的關係見 領域事件)。
- 冪等與併發:「這個 UTXO 已被花掉」是一個清楚的狀態轉換,天然防止重複處理——和用條件更新做狀態機的思路相同(見 工具-用條件更新做狀態機冪等)。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
UTXO 天然防雙花(一個 UTXO 只能被花一次)、利於平行驗證,但表達複雜狀態較麻煩。
UTXO 太碎會讓交易變貴:手續費按交易大小計算,而每個輸入都會增加大小。錢包裡有一百個小額 UTXO,一次付款可能要帶上幾十個輸入。手續費低的時候可以先把小額 UTXO 合併。
🔗 相關工具
- 工具-金鑰地址與錢包 —— 前一層:UTXO 的「解鎖」靠的就是這張講的私鑰簽章,所有權怎麼表達先看它
- 工具-去中心化共識與PoW —— 後一層:交易構造好之後,靠 PoW 共識決定它進不進得了帳本、能不能防雙花
帳本不是餘額 而是一堆「未花費交易輸出」
花錢=消耗舊 UTXO、產生新 UTXO
⛏️ 共識:PoW 與最長鏈
🎯 什麼情境該想到我
當你想理解「一群互不信任、沒有老大的節點,如何對帳本達成一致且難以竄改」時。
⚙️ 怎麼用(理解機制)
- 每個節點各自驗證交易與區塊,不信任他人結果。
- 工作量證明(PoW):礦工競賽解一道難算易驗的雜湊謎題,勝者有權打包區塊;算力=話語權。
- 最長鏈為準:誠實節點延續最長鏈,竄改歷史需重算其後所有區塊 → 成本極高(需掌握多數算力)。
- 確認數:交易被越多後續區塊覆蓋,被推翻的機率越低(故大額交易等多個確認)。
- 誘因:區塊獎勵 + 手續費讓「誠實挖礦」比作弊更有利。
★ 「難算易驗」的謎題到底是什麼
礦工要找一個 nonce,使得區塊頭的雙重 SHA-256 雜湊值小於目標值:
SHA256(SHA256(區塊頭))<目標值
- 難算:雜湊輸出無法預測,只能一個一個 nonce 試。目標值越小,符合的比例越低,平均要試的次數越多。
- 易驗:任何節點拿到區塊,只要算一次雜湊,和目標值比較就知道是否合法。
這個不對稱性是整個設計的基礎:產生證明很貴,檢查證明幾乎免費。
★ 難度調整:讓出塊時間維持在 10 分鐘
全網算力會變動,所以目標值要定期調整。《精通比特幣》給出的公式:
新難度=舊難度×20160 分鐘最近 2016 個區塊實際花的時間
- 2016 個區塊 × 10 分鐘 = 20160 分鐘 ≈ 兩週。
- 實際花的時間比預期短(算力上升)→ 難度提高;比預期長 → 難度降低。
- 實作上單次調整幅度有上下限(最多 4 倍),避免劇烈變動。
★ 為什麼要等「6 個確認」:可以自己算
比特幣白皮書第 11 節計算了攻擊者從落後 z 個區塊追上誠實鏈的機率。設攻擊者掌握的算力比例為 q(誠實節點為 p = 1 − q):
λ=z⋅pq,P=1−∑k=0zk!λke−λ(1−(pq)z−k)
用這個公式算出的數值(與白皮書的表格一致):
確認數 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交易模型
節點各自驗證,最長鏈為準 無需中央機構
工作量證明讓竄改成本極高
🌳 驗證與誘因設計
默克爾樹 讓輕節點高效驗證交易是否在區塊中
誘因設計 區塊獎勵+手續費,誠實挖礦才有利可圖
🧰 這本書給我的工具
- 工具-去中心化共識與PoW — 想理解「沒有中央機構怎麼達成一致」時
- 工具-UTXO交易模型 — 想理解比特幣如何記帳/驗證交易時
- 工具-金鑰地址與錢包 — 想理解「所有權」如何用密碼學表達時
✨ 關鍵重點(Layer 1–2)
- 去中心化共識:節點各自驗證、最長鏈為準;靠 PoW 讓竄改成本極高。
- UTXO:帳本不是餘額,而是一堆「未花費交易輸出」;花錢=消耗舊 UTXO、產生新 UTXO。
- 金鑰體系:私鑰簽章證明所有權 → 公鑰 → 地址;「Not your keys, not your coins」。
- 默克爾樹讓輕節點能高效驗證交易是否在區塊中。
- 誘因設計:礦工的區塊獎勵 + 手續費,讓誠實挖礦有利可圖。
💬 金句原文(Layer 0)
- 「比特幣是一套讓互不信任的參與者,也能達成共識的系統。」
🔗 相關
- 共識概念對照 工具-線性一致性與共識;智能合約延伸見 精通以太坊