一台由上萬人同步運行的世界電腦
想像有上萬名會計師散布在世界各地,每人都保有一份相同的帳本,並受同一條規則約束:任何一筆紀錄,在每一個人都親自重新核對過之前,都不算數。 正是這份令人抓狂的冗餘,讓你不必信任任何一位會計師、卻仍能信任這本帳——也正因如此,它永遠快不起來。這就是區塊鏈。慢,不是一個你能修掉的 bug,而是去中心化的代價。
用數字來看。以太坊的基礎層每秒大約結算 15 至 30 筆交易;比特幣約莫每秒 7 筆。相較之下,Visa 平時每秒就能處理數千筆,並宣稱還有數萬筆的餘裕。這個落差很刺眼——但並不是因為 Visa 的工程師比較聰明。Visa 跑的是一個由少數人掌控的私有叢集;區塊鏈跑的卻是一個任何人都能加入、而且每個人都必須有能力驗證的公開網路。
為什麼每個節點都得把所有事重做一遍
全節點不信任——它驗證。當一個新區塊抵達,節點會把裡頭的每一筆交易逐一重新執行、重新推導出最終狀態,並確認結果與區塊宣稱的相符。只要有一筆交易無效,節點就會拒絕整個區塊。這種由上千台機器各自獨立重跑一遍的動作,正是「無需信任」的字面意義所在:你不必聽信任何人的片面之詞,因為你(以及所有人)都親自驗算過了。
但驗證並非免費。每個節點同時要付三筆帳:重跑程式的 CPU、在點對點網路上接收每一筆廣播交易的頻寬,以及保存整個世界狀態(每一個帳戶、餘額與合約)的儲存空間。光是歷史紀錄就大得驚人:一個保留所有過往狀態的封存節點,動輒佔上好幾 TB。鏈不只要當下快;每個節點還得扛起「曾經發生過的一切」的全部重量。
# Ethereum mainnet — a back-of-envelope throughput ceiling BLOCK_GAS_LIMIT = 30_000_000 # gas per block (raised over time as hardware improves) BLOCK_TIME = 12 # seconds per slot/block GAS_PER_TRANSFER = 21_000 # a plain ETH transfer, fixed cost transfers_per_block = BLOCK_GAS_LIMIT / GAS_PER_TRANSFER # ~1,428 ceiling_tps = transfers_per_block / BLOCK_TIME # ~119 tx/s (TRANSFERS ONLY) # But almost nobody just sends ETH. A Uniswap swap costs ~120,000 gas: GAS_PER_SWAP = 120_000 swaps_per_block = BLOCK_GAS_LIMIT / GAS_PER_SWAP # ~250 realistic_tps = swaps_per_block / BLOCK_TIME # ~21 swaps/s # => real mixed load lands around 15-30 tx/s, NOT thousands. # The block gas limit is a hard cap on total work per 12 seconds, # and that cap exists to keep an ordinary node able to keep up.
這串算術裡藏著一個關鍵:吞吐量的上限,不是由最快的節點決定,而是由我們仍希望留在俱樂部裡的那台最弱機器決定。我們刻意把上限設成讓使用消費級硬體、家用網路的人也跟得上。一旦調高上限,就等於墊高參與的門檻。速度的天花板,說穿了,就是一個關於「誰有資格驗證」的決定。
那些直覺的解法——以及它們為何反咬一口
如果一個區塊裝得太少,兩個解法立刻浮上腦海:把每個區塊做得更大,或者更頻繁地產出區塊。兩者確實都能拉高吞吐量。但兩者也都在悄悄侵蝕去中心化——而第二種還連帶傷害安全性。
- 更大的區塊(調高gas 上限或位元組大小):每塊資料量增為 10 倍,就意味著每一個節點得永遠負擔 10 倍的 CPU、頻寬與硬碟。業餘者與小型驗證者悄悄退場,只剩資料中心等級的機器活得下來。你用犧牲去中心化,換來了吞吐量。
- 更快的區塊(縮短出塊時間):一個區塊要在全球網路上傳播,得花上數百毫秒。當你產出區塊的速度快過它擴散的速度,節點之間就會經常對「鏈頂」意見不一致——於是出現孤兒區塊與重組。靠近產出者、連線良好的節點會贏得這場競速,既讓鏈走向中心化,又讓廉價的鏈重組變得更容易,從而削弱安全性。
這不是紙上談兵。比特幣的「區塊大小之戰」(2015–2017)正是為了這個問題撕裂了社群,最終以一次硬分叉收場:Bitcoin Cash 在 2017 年 8 月帶著更大的區塊分裂出去,Bitcoin SV 之後又為了追求 GB 級區塊再度分裂。Solana 則押了相反的賭注——純粹拚速度,達到每秒數千筆交易——但它的驗證者需要資料中心等級的硬體,而且網路曾數度發生整個停擺的全面當機。每一句「就把它做大一點」,骨子裡都是一場去中心化的拋售。
把可擴展性三難困境講清楚
以太坊的 Vitalik Buterin 為這個反覆出現的張力取了名字:可擴展性三難困境——一條區塊鏈想同時擁有三項特質,而直覺型的設計通常只能順利地拿到其中兩項。
- 去中心化——任何人都能用便宜、堪用的硬體運行節點、獨立驗證整條鏈,無需任何守門人的許可。這正是讓系統能抗審查、且可信地保持中立的根基。
- 安全性——這條鏈能抵抗掌握大量資源的攻擊者;發動一次51% 攻擊或深度重組,代價必須高到讓人傾家蕩產。
- 可擴展性——這條鏈能以低廉的單筆成本,處理大量交易(高吞吐量)。
於是你可以把每一種設計,都讀成這個三角形的某個角。比特幣與以太坊 L1 牢牢坐在去中心化+安全性這一角,代價是低可擴展性。由少數幾台高規節點運行的鏈,能拿到可擴展性+安全性,卻在去中心化上很弱。一條由極小驗證者集合看守的快速側鏈,能提供可擴展性+(某種程度的)去中心化,但它的安全預算遠小於緊鄰它的那條鏈。三選二;落選的那一項就會吃苦頭。
關鍵突破:讓「檢查」比「執行」便宜得多
再看一次所有痛苦底下的那個假設:要驗證這條鏈,你就必須把它重新執行一遍。 驗證的成本,等於執行的成本。正是這個對稱性,逼得每個節點都要重做每一筆交易,也把吞吐量鎖死在最弱節點的速度上。一旦打破這個對稱——讓驗證比執行便宜得多——三難困境就會大幅鬆動。
目前已知有兩種辦法,能讓「這批交易被正確執行了」這個主張變得便宜可驗。詐欺證明(樂觀式做法)先假定這批交易有效,並讓任何發現謊言的人,在挑戰期內提交一份簡潔的「造假證明」——誠實驗證幾乎免費,只有當事情看起來不對勁時,你才真正動手。有效性證明(零知識做法)則附上一份簡潔的密碼學證明,保證這批交易確實正確執行;任何人都能在數毫秒內驗證它,完全不必重跑那段運算。
無論走哪條路,經濟結構都翻轉了。由少數強大、專精的角色去扛繁重的執行,而其他所有人——包括你的筆電——都能便宜地驗證,且絲毫不放棄查核的權利。這正是三難困境留下的那道縫隙:你可以一邊拉高吞吐量,一邊讓驗證仍在普通人的能力範圍之內。接下來的四篇,就是把這道縫隙工程化的過程。
把執行搬離基礎層
這個洞見直指如今主導以太坊路線圖的策略:別再讓基礎層包辦一切。 把執行往上推到第二層——也就是 Rollup——它在鏈下把交易打包成批,再把資料連同一份證明(詐欺式或有效性式)發回基礎層。如此一來,L1 不再是全世界最忙的那台電腦,而變成更聚焦、也更強悍的角色。
基礎層的工作於是收斂到它獨擅勝場的兩件事:作為結算層為交易排序並定案,以及保證底層資料確實被公開發布,好讓任何人都能重建狀態、查核證明。而這第二件事——資料可得性——竟然才是真正的瓶頸,也是 Rollup 的主要成本來源;這正是為什麼像 EIP-4844 的 blob 交易、以及通往 Danksharding 的那條路,瞄準的都是「便宜的資料」,而非「更快的運算」。
退一步看,整體輪廓就清晰了:一種模組化設計,把過去單體式的鏈拆成數個專精的層——執行、結算、共識與資料——每一層都能各自獨立地擴展。三難困境並未被廢除,而是被重新編排:讓每一層只需在三項裡贏得兩項,整個系統再從各層各自繼承最強的那項特質。
從這裡開始,本章會循序搭建:Rollup 究竟如何透過向基礎層張貼資料來「借用」它的安全性;先假定有效、直到詐欺證明出面反駁的樂觀式路線;事先就把正確性證明好的 zk 路線;以及最後,為什麼是資料可得性——而非運算——才是整個領域如今爭相拓寬的那道瓶頸。