發電廠關機的那一夜
2022 年 9 月 15 日,以太坊做了一件沒有任何主流區塊鏈做過的事:它停止挖礦。在一場代號為「合併(the Merge)」的計畫性事件中,網路把共識引擎從 工作量證明 換成 權益證明——耗電量隨之下降約 99.95%,從一個小國的胃口縮到幾千戶家庭的用量。鏈依舊每十二秒產出一個區塊,餘額沒有變動,合約照常執行。實質上,燈被關掉了,卻沒有人察覺。
這帶出一個誠實、甚至有點可疑的問題。十年來我們一直被告知:挖礦的「重點」就是燃燒真實能源,好讓攻擊鏈得花上真金白銀。如果你可以關掉發電廠、鏈卻依舊難以被改寫,那這些電到底買到了什麼——又是什麼取代了它?回答這個問題,正是本階要做的事。這第一篇談的是「為什麼」:共識 究竟解決了什麼問題、工作量證明與權益證明各自如何解決它,以及說某條鏈「比較安全」到底是什麼意思。
共識真正的工作:女巫抗性
區塊鏈是一個沒有老闆的 點對點 網路。成千上萬台匿名機器必須對「同一份交易歷史」達成一致,即使其中有些會說謊、會離線、甚至會主動作弊。最直覺的解法——「大家投票、多數決」——會立刻失敗,因為網路上的「身分」是免費的。我可以用一台筆電開出一百萬個假節點,把整個誠實網路投到輸。這就是 女巫攻擊(Sybil attack),而擊敗它正是每一條區塊鏈的核心戲法。
解藥是 女巫抗性:不再「一身分一票」,而是把投票權綁到「某種稀缺且昂貴、無法靠複製自己來偽造的東西」上。工作量證明把它綁到「運算」——想投票,就得燒電。權益證明把它綁到「資本」——想投票,就得鎖住錢。兩者回答的是同一個問題,只是選了不同的稀缺資源來錨定誠實。
工作量證明:一個迴圈、一個數字
在 工作量證明 裡,稀缺資源是雜湊運算。要提出一個區塊,礦工 會反覆對區塊標頭做雜湊、同時不斷變動 nonce,尋找一個低於某個極小目標值(由網路的 難度 決定)的雜湊值。沒有捷徑、也沒有任何巧思能幫上忙——你就只能一試、再試、又試。第一個碰運氣成功的礦工會發布區塊,領走獎勵。
# Proof of work: keep hashing until the block's hash clears the target
target = 2**256 // difficulty # smaller target = harder to hit
nonce = 0
while True:
header = block_header(prev_hash, merkle_root, timestamp, nonce)
h = sha256(sha256(header)) # Bitcoin uses double SHA-256
if int(h) < target:
broadcast(header) # found it -> this is the new block
break
nonce += 1 # otherwise, try the next nonce
# One pass of the loop is one "hash". The whole Bitcoin network runs
# this loop hundreds of quintillions of times *per second*.這帶來一個優美而簡單的安全論證。想改寫歷史——比如抹掉一筆你已經付出去的款項——你必須把它所在的那個區塊「重挖」一次,連同其後的「每一個」區塊都重挖,而且要比誠實網路延長真鏈的速度更快。這需要掌握全網超過一半的算力:也就是著名的 51% 攻擊。誠實礦工合計的雜湊運算——以全網 算力 來衡量——就是攻擊者必須翻越的那道牆。牆越高,鏈越安全。
現在來看那個數字。誠實的比特幣礦工合計賺取區塊補貼加上手續費——大約是「每天數千萬美元」這個量級——而為了賺到它,他們在電力與硬體上花費大致相當的金額。這筆持續的支出就是鏈的「安全預算」,而它規模巨大:比特幣每年大約消耗 100 至 170 兆瓦時(TWh),與阿根廷或波蘭這樣的國家相當。工作量證明的支持者主張這是優點而非缺陷:安全性錨定在一個物理的、外部的成本上,再聰明的軟體也偽造不來。
權益證明:用利益綁定取代燃料
權益證明只做了一處替換:稀缺資源不再是能源,而是「鎖在協定內部的資本」。要參與,你得透過 質押 成為一名 驗證者——把鏈本身的代幣存入當作保證金。協定接著按各驗證者質押的多寡,依比例挑選由誰提案、由誰對每個區塊投票。質押一份,你就有一份影響力;質押一千份,就有一千份。偽造身分對你毫無幫助,因為影響力來自「押下去的錢」,而非「你聲稱跑了幾台機器」。
這裡有一個觀念上的跳躍,也是本階名稱的由來。在工作量證明裡,嚇阻力是「成本」:攻擊很貴,但只要你付得起,沒有任何東西會被從你身上拿走。在權益證明裡,嚇阻力還多了「懲罰」:因為你的保證金活在協定內部,協定可以在你違規時「直接銷毀它」。簽署兩個互相衝突的區塊、或投出兩張自相矛盾的票,都是可被證明的不當行為——會觸發 罰沒,燒掉你一部分質押並把你逐出。(確切的罰沒條件是本階稍後一篇的主題。)這正是「利益綁定(skin in the game)」的字面意思:你不是把安全性「租」給網路,而是押上了一名人質。
安全預算:流量對上存量
一條鏈的「安全預算」,粗略地說,就是攻擊者為了壓過誠實多數,必須「花掉」或「賭上」多少。兩種模型最深的差異在於:工作量證明的預算是一種「流量」(每小時都要花、永遠都要花),而權益證明的預算是一種「存量」(鎖住、且面臨被銷毀風險的資本)。把同一場攻擊在兩種模型裡各走一遍,就能看得很具體。
- 工作量證明的誠實成本是一種流量。 比特幣礦工每天在電力與礦機上花費約數千萬美元的量級。要發動 51% 攻擊,你得在算力上壓過所有人——也就是在你想持續改寫區塊的「每一小時」裡「持續地」匹配那筆支出,外加先取得那些機器。
- 工作量證明的攻擊對攻擊者而言是可回收的。 攻擊結束後,你的 ASIC 礦機 與電力合約依然有價值——協定無法伸手沒收它們。防線純粹是「成本」;協定內並沒有懲罰。
- 權益證明的誠實成本是一筆「處於風險中的存量」。 在以太坊上,有超過三千萬枚 ETH——佔總供給量逾四分之一、價值達數百億美元——正被質押著。你在投票權中的份額,等於你在那筆鎖定資本中的份額。
- 權益證明的攻擊會燒掉攻擊者自己的錢。 要強行造出兩個互相衝突的結果,你得掌握一大部分質押(三分之一可癱瘓、三分之二可把謊言定案——這是 最終性 那篇的範疇)。就算你辦到了,協定也會「罰沒那些違規的質押」:一場技術上成功的攻擊,依然會摧毀你為了發動它而買進的那筆資本,還很可能順帶讓代幣價格崩盤。
- 所以兩者問的問題不同。 工作量證明問的是「我每小時得多花多少?」;權益證明問的是「我得把多少資本擺到被摧毀的風險裡?」兩種預算都隨幣價水漲船高,而且「兩者都不免費」——但只有其中一種,能讓協定反過來懲罰攻擊者。
也要誠實面對兩邊的但書。工作量證明的預算正在悄悄「縮水」:比特幣的區塊補貼每四年減半,因此除非手續費成長到足以填補缺口,否則攻擊者要翻越的那道牆會隨時間越變越矮。權益證明的預算也並非靜止——想買下三分之一供給量的攻擊者,會在買進過程中把價格大幅推高,又在賣出過程中把它砸崩。兩個數字都真實、都很龐大,也都「完全」取決於一項高波動資產的市場價格。
誰玩得起——以及那些誠實的取捨
切換稀缺資源,也改變了「誰」能參與,而這直接牽動 去中心化。工作量證明獎勵的是擁有最便宜電力與最好 ASIC 晶片的人,於是挖礦集中到少數幾個地區的工業礦場,小礦工則聯合成 礦池 來平滑收入——而這些礦池本身也可能大到令人擔憂。硬體門檻很高,而且是實體的。
權益證明把門檻從硬體翻轉成資本。你可以用一台普通筆電配上家用網路,就在以太坊上驗證——但要單獨運行一個驗證者,你需要 32 枚 ETH,以近期價格計約是 5 萬至 10 萬美元這個量級。這對多數人遙不可及,於是他們把代幣委託給質押服務與「流動性質押」池。結果是另一種中心化隱憂:單一最大的流動性質押池,曾一度握有全部質押 ETH 的近 三分之一,以一種協定從未設想的方式集中了影響力。
權益證明也帶來了工作量證明從沒有過的、真正全新的理論問題。因為投票不耗費任何實體成本,一名驗證者原則上可以同時對「每一條」相爭的分叉都投票——這就是 無利害關係(nothing-at-stake) 問題——而罰沒的存在,正是為了讓這種行為等同自殺。買下舊的、被棄置金鑰的攻擊者,可能試圖從很久以前重寫歷史——這就是 長程攻擊——也正因如此,權益證明鏈倚賴 弱主觀性:剛開始同步的節點,會信任一個近期、由社群共同認可的檢查點,而不是單憑純算力從 創世區塊 一路重建。這些都是此設計的真實代價,而本階接下來的內容,大致就是「它們如何被一一拆解」的故事。