核心構想:把工作搬到別處做,但把過程攤在所有人眼前
想像證券交易所的交易大廳。每分鐘有數百萬筆委託在此交錯——快速、便宜、混亂。但大廳本身證明不了任何事;每分鐘收盤時,書記員會把每一張委託單的影本、連同更新後的帳戶餘額,一起釘進一座全城都能打開查閱的防火公共保險庫。大廳是工作發生的地方;保險庫又慢又貴,卻偽造不了。一個 Rollup 正是這樣的拆分:上層由一條快速的執行層負責幹活,底下則墊著一座無法被竄改的公共保險庫——以太坊的基礎層——保管著一切證據。
更精確地說:Rollup 是一條 第二層(L2) 鏈,它在基礎鏈之外執行交易,然後把兩樣東西貼回 以太坊(L1):交易資料,以及對結果狀態的承諾(一個稱為「狀態根」的雜湊值)。關鍵在於,它不要求 L1 重新執行每一筆交易,只要求 L1 保管證據並擔任最終裁判。正是這一步,讓 Rollup 得以擴容。
上一篇把瓶頸釘死了:每個全節點都要重新執行每一筆交易,所以你不能光把區塊變大,否則會把小型驗證者擠下線、侵蝕去中心化——這就是可擴展性三難困境。Rollup 繞過了它:把執行搬到鏈下,只把資料與爭議裁決留在鏈上,於是在絕大多數情況下,L1 節點不再重跑 Rollup 的交易。你因此換來高一個數量級的吞吐量,卻不必要求每個節點多做一個數量級的運算。
Rollup 內部:定序器、批次與 L1 合約
- 你簽署一筆 L2 交易,把它送給 Rollup 的定序器(sequencer)——而不是送上 L1。操作起來就像送出一筆普通的以太坊交易,只是換了一個端點。
- 定序器為湧入的交易排序,並對照當前的 L2 狀態執行它們,在鏈下算出新的狀態。
- 它會週期性地把數百到數千筆交易打包成一個批次(batch),壓縮資料後貼到 L1 上的一份智慧合約——連同新的狀態根,也就是它對結果狀態的承諾。
- L1 合約會永久記下兩樣東西:批次的資料(這就是資料可得性)以及新的狀態根,並依序排進它的歷史紀錄。
- 至此,L2 狀態已錨定到 L1。它繼承了 L1 的資料可得性與結算,並在其所在的 L1 區塊達到最終性時隨之定案——前提是通過後續兩篇要講的有效性檢查。
// Simplified L1 rollup contract: settlement + data anchor
contract Rollup {
bytes32[] public stateRoots; // one commitment per batch
// The sequencer submits a batch. The COMPRESSED transaction data is
// passed in calldata (post-EIP-4844, in a cheaper blob) so that it is
// PUBLISHED on L1 for everyone to read and replay.
function submitBatch(
bytes calldata txData, // <-- data availability lives here
bytes32 newStateRoot, // <-- commitment to the state after txData
bytes calldata proof // validity proof (zk); empty for optimistic
) external onlySequencer {
bytes32 prevRoot = stateRoots.length == 0
? GENESIS_ROOT
: stateRoots[stateRoots.length - 1];
// ZK-rollup: verify now, accept only a correct transition
// require(verifier.verify(prevRoot, newStateRoot, txData, proof));
// Optimistic-rollup: store optimistically; a fraud proof can revert
// this root during the challenge window (next guide).
stateRoots.push(newStateRoot);
emit BatchSubmitted(stateRoots.length - 1, newStateRoot, keccak256(txData));
}
}狀態根是一個雜湊值,它對整個 L2 狀態——每一筆帳戶餘額、每一個合約儲存槽——做出承諾,就如同以太坊的世界狀態樹(world-state trie)根對整個 L1 做出承諾一樣。而 txData 則是壓縮過的輸入清單。兩者合在一起就是在說:這是進來的東西,這是它產生的狀態。 任何同時握有這兩者的人,都能自己驗證這個主張。
「借用安全性」到底是什麼意思
側鏈擁有自己的驗證者,靠自己的安全性站著。Rollup 刻意反其道而行——它不自己製造安全性,而是向 L1 借來三項具體的保證:
- 資料可得性。 因為批次資料發布在 L1 上,它的可取得程度就跟以太坊本身一模一樣——不必另外信任一群營運者願意把資料留著。
- 結算與爭議裁決。 L1 合約是正統狀態根的唯一真實來源。它驗證有效性證明、或裁決詐欺證明;Rollup 的狀態,跟錨定它的那個 L1 區塊一樣最終定案——這正是 L1 之所以是 Rollup 的結算層的原因。
- 抗審查與無信任退出。 即使定序器審查你、甚至直接消失,你仍能透過 L1 合約強制納入一筆交易、或直接觸發提領,因此你永遠拿得回你的資金。
這就是「真正的 L2」與「不過是側鏈」之間的分界線。一條真正的 L2,其使用者的安全——尤其是把資產提出來的能力——來自 L1,而不是來自一套另立的信任集合。透過三難困境來看:Rollup 在真正要緊的事情上保住了 L1 等級的去中心化與安全性,只把執行這一塊搬到更快的一層去做。
為什麼資料可得性才是整場遊戲的核心
「Rollup」一詞裡最關鍵的一個字,是資料。一個狀態根本身只是個數字:它記下「定序器聲稱新狀態是 X」這件事,卻沒告訴你 X 對不對,也沒告訴你你自己的餘額。一切都取決於交易資料有沒有被發布出來,好讓任何人——而不只是定序器——都能從頭把狀態重算一遍。
因為 L2 的狀態轉換規則是公開且確定性的,輸入(貼出的交易)加上規則,就完全決定了輸出(新的狀態根)。把資料放在 L1 上,賦予了三種能力:
- 重建。 任何人都能從創世區塊起,把發布出來的資料重新播放一遍,獨立重建整個 L2 狀態——完全不需要定序器的許可。
- 挑戰或驗證。 一個誠實的參與者只要重算出不同的結果,就能證明貼出的狀態根是錯的(一份詐欺證明);或者,有效性證明可以拿來對照那些已發布的輸入加以檢驗。
- 退出。 你可以從資料中算出自己的餘額,向 L1 合約證明它,然後提領——就算定序器永遠消失了也一樣。
這也解釋了 Rollup 的成本花在哪裡。貴的不是運算,而是發布到 L1 上的那些位元組。因此,壓縮是 Rollup 的核心手藝:
One ETH transfer, measured as bytes PUBLISHED to L1:
As a normal L1 transaction ............... ~110 bytes
nonce ............ ~3
gas price ........ ~8
gas limit ........ ~3
to (address) ..... 21
value ............ ~9
signature ........ ~67
As a compressed rollup transaction ....... ~12 bytes
nonce ............ dropped (read from L2 state)
gas params ....... dropped (shared by the whole batch)
to ............... ~4 (an index into the state, not 20 bytes)
value ............ ~3 (compact "scientific-notation" encoding)
signature ........ dropped (a zk-rollup's validity proof already
attests every signature)
~10x smaller per transaction, and the one-time cost of opening a batch
is split across the hundreds of transactions packed inside it.
(Figures are illustrative, from rollup research. An optimistic rollup
must keep signatures, so it compresses somewhat less.)這就是為什麼擴容的故事,骨子裡其實是一個資料的故事。後面的篇章會再回到這裡:EIP-4844 的 blob 交易為 Rollup 在 L1 上開了一條專屬、便宜的資料車道,而資料可得性抽樣加上 danksharding,又把這道前沿推得更遠。
Rollup、側鏈與 Validium:資料與安全性各自落在哪裡
這三者都把執行搬離以太坊,用起來幾乎一模一樣——又快又便宜,一個能持有代幣的帳戶。它們的差別只在兩個問題上:資料在哪裡,以及安全性從何而來?
- 側鏈(例如 Polygon PoS、Gnosis Chain):擁有自己的共識與自己的驗證者集合——資料與安全性都落在以太坊之外。橋是一份「鎖定—鑄造」的受信任合約,由側鏈自己的驗證者把守;一旦他們串謀或被駭,橋上的資金就可能化為烏有。快又便宜,但你信任的是一套完全獨立的系統。
- Validium:把狀態承諾貼上 L1(所以 L1 仍會驗證正確性,通常透過 zk 證明),但把資料留在鏈下,交由一個資料可得性委員會保管。正確性很強,但若委員會扣住資料,你可能被凍結在資金之外。所謂 volition 的設計,則讓使用者能逐筆選擇要走 Rollup 模式還是 Validium 模式。
- Rollup:把資料與承諾兩者都貼上 L1。它完整繼承 L1 的資料可得性與結算——三者中最安全的,也是最貴的,原因恰恰就是把資料發布上鏈要付 L1 的 gas。
data location correctness secured by can you always exit? type --------------------------------------------------------------------------------- published on L1 L1 proof / fraud proof yes ROLLUP off-chain committee L1 validity proof only if data is released VALIDIUM the chain itself its own validator set only if they stay honest SIDECHAIN
兩種流派,以及誠實的附帶細則
每一條 Rollup 都得回答一個問題:L1 要怎麼相信貼出來的狀態根是對的?答案有兩種,它們也定義了接下來的兩篇。
- 樂觀 Rollup(Arbitrum、Optimism)假定貼出的狀態根有效,並讓任何人在一段挑戰期內——通常約七天——提交一份詐欺證明來推翻謊言。只要有一位誠實的驗證者,就足以維持整條鏈的安全;代價是漫長的提領延遲。這就是樂觀 Rollup的設計。
- ZK(有效性)Rollup 則要求定序器貼出一份簡潔的有效性證明,由 L1 的驗證器當場檢查,任何不正確的狀態根都會被直接拒絕。回報是接近即時的最終性與快速提領;代價是沉重的證明運算,以及打造 zkEVM 的艱難工程。這就是 ZK-Rollup 的設計。
今天的真實 Rollup 還不是那個純粹的理想型,認清這些落差是值得的:
- 多數 Rollup 仍只跑一個中心化的單一定序器。它偷不走你的資金,卻能重排、審查、或下線;透過 L1 的強制納入是最後防線,而把定序器去中心化,則是仍在進行、尚未完成的工程。
- 許多 Rollup 還留著一把能升級合約的管理員多簽——原則上連規則都改得動。這些「輔助輪」被 L2BEAT 的 Stage 0/1/2 成熟度框架公開追蹤;在把大筆資金託付給某條鏈之前,先查它的 stage。
- 詐欺證明與有效性證明系統都還在成熟中——有些打著「樂觀」旗號的鏈,其實還沒開放無需許可的詐欺證明,意味著那張安全網尚未完全張開。