JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

Rollup 如何向以太坊借用安全性

把工作搬到鏈下做,卻把證據發布到鏈上。正是這一步,讓 Rollup 能把以太坊擴容百倍、同時繼承它的安全性——也正是這一步,把 Rollup 和側鏈劃清了界線。

核心構想:把工作搬到別處做,但把過程攤在所有人眼前

想像證券交易所的交易大廳。每分鐘有數百萬筆委託在此交錯——快速、便宜、混亂。但大廳本身證明不了任何事;每分鐘收盤時,書記員會把每一張委託單的影本、連同更新後的帳戶餘額,一起釘進一座全城都能打開查閱的防火公共保險庫。大廳是工作發生的地方;保險庫又慢又貴,卻偽造不了。一個 Rollup 正是這樣的拆分:上層由一條快速的執行層負責幹活,底下則墊著一座無法被竄改的公共保險庫——以太坊的基礎層——保管著一切證據。

更精確地說:Rollup 是一條 第二層(L2) 鏈,它在基礎鏈之外執行交易,然後把兩樣東西貼回 以太坊(L1):交易資料,以及對結果狀態的承諾(一個稱為「狀態根」的雜湊值)。關鍵在於,它要求 L1 重新執行每一筆交易,只要求 L1 保管證據並擔任最終裁判。正是這一步,讓 Rollup 得以擴容。

上一篇把瓶頸釘死了:每個全節點都要重新執行每一筆交易,所以你不能光把區塊變大,否則會把小型驗證者擠下線、侵蝕去中心化——這就是可擴展性三難困境。Rollup 繞過了它:把執行搬到鏈下,只把資料與爭議裁決留在鏈上,於是在絕大多數情況下,L1 節點不再重跑 Rollup 的交易。你因此換來高一個數量級的吞吐量,卻不必要求每個節點多做一個數量級的運算。

Rollup 內部:定序器、批次與 L1 合約

  1. 你簽署一筆 L2 交易,把它送給 Rollup 的定序器(sequencer)——而不是送上 L1。操作起來就像送出一筆普通的以太坊交易,只是換了一個端點。
  2. 定序器為湧入的交易排序,並對照當前的 L2 狀態執行它們,在鏈下算出新的狀態。
  3. 它會週期性地把數百到數千筆交易打包成一個批次(batch),壓縮資料後貼到 L1 上的一份智慧合約——連同新的狀態根,也就是它對結果狀態的承諾。
  4. L1 合約會永久記下兩樣東西:批次的資料(這就是資料可得性)以及新的狀態根,並依序排進它的歷史紀錄。
  5. 至此,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));
    }
}
一份最精簡的 Rollup 合約。注意兩個半邊:txData(資料,發布在 L1 上)與 newStateRoot(承諾)。兩種 Rollup 流派的差別,只在於 proof 這個參數怎麼處理。

狀態根是一個雜湊值,它對整個 L2 狀態——每一筆帳戶餘額、每一個合約儲存槽——做出承諾,就如同以太坊的世界狀態樹(world-state trie)根對整個 L1 做出承諾一樣。而 txData 則是壓縮過的輸入清單。兩者合在一起就是在說:這是進來的東西,這是它產生的狀態。 任何同時握有這兩者的人,都能自己驗證這個主張。

「借用安全性」到底是什麼意思

側鏈擁有自己的驗證者,靠自己的安全性站著。Rollup 刻意反其道而行——它不自己製造安全性,而是向 L1 借來三項具體的保證:

  1. 資料可得性。 因為批次資料發布在 L1 上,它的可取得程度就跟以太坊本身一模一樣——不必另外信任一群營運者願意把資料留著。
  2. 結算與爭議裁決。 L1 合約是正統狀態根的唯一真實來源。它驗證有效性證明、或裁決詐欺證明;Rollup 的狀態,跟錨定它的那個 L1 區塊一樣最終定案——這正是 L1 之所以是 Rollup 的結算層的原因。
  3. 抗審查與無信任退出。 即使定序器審查你、甚至直接消失,你仍能透過 L1 合約強制納入一筆交易、或直接觸發提領,因此你永遠拿得回你的資金。

這就是「真正的 L2」與「不過是側鏈」之間的分界線。一條真正的 L2,其使用者的安全——尤其是把資產提出來的能力——來自 L1,而不是來自一套另立的信任集合。透過三難困境來看:Rollup 在真正要緊的事情上保住了 L1 等級的去中心化與安全性,只把執行這一塊搬到更快的一層去做。

為什麼資料可得性才是整場遊戲的核心

「Rollup」一詞裡最關鍵的一個字,是資料。一個狀態根本身只是個數字:它記下「定序器聲稱新狀態是 X」這件事,卻沒告訴你 X 對不對,也沒告訴你你自己的餘額。一切都取決於交易資料有沒有被發布出來,好讓任何人——而不只是定序器——都能從頭把狀態重算一遍。

因為 L2 的狀態轉換規則是公開且確定性的,輸入(貼出的交易)加上規則,就完全決定了輸出(新的狀態根)。把資料放在 L1 上,賦予了三種能力:

  1. 重建。 任何人都能從創世區塊起,把發布出來的資料重新播放一遍,獨立重建整個 L2 狀態——完全不需要定序器的許可。
  2. 挑戰或驗證。 一個誠實的參與者只要重算出不同的結果,就能證明貼出的狀態根是錯的(一份詐欺證明);或者,有效性證明可以拿來對照那些已發布的輸入加以檢驗。
  3. 退出。 你可以從資料中算出自己的餘額,向 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.)
Rollup 為何便宜:每筆交易發布的位元組少得多,又把開一個批次的固定開銷,分攤到整個批次的數百筆交易上。

這就是為什麼擴容的故事,骨子裡其實是一個資料的故事。後面的篇章會再回到這裡:EIP-4844 的 blob 交易為 Rollup 在 L1 上開了一條專屬、便宜的資料車道,而資料可得性抽樣加上 danksharding,又把這道前沿推得更遠。

Rollup、側鏈與 Validium:資料與安全性各自落在哪裡

這三者都把執行搬離以太坊,用起來幾乎一模一樣——又快又便宜,一個能持有代幣的帳戶。它們的差別只在兩個問題上:資料在哪裡,以及安全性從何而來

  1. 側鏈(例如 Polygon PoS、Gnosis Chain):擁有自己的共識與自己的驗證者集合——資料與安全性都落在以太坊之外。橋是一份「鎖定—鑄造」的受信任合約,由側鏈自己的驗證者把守;一旦他們串謀或被駭,橋上的資金就可能化為烏有。快又便宜,但你信任的是一套完全獨立的系統。
  2. Validium:把狀態承諾貼上 L1(所以 L1 仍會驗證正確性,通常透過 zk 證明),但把資料留在鏈下,交由一個資料可得性委員會保管。正確性很強,但若委員會扣住資料,你可能被凍結在資金之外。所謂 volition 的設計,則讓使用者能逐筆選擇要走 Rollup 模式還是 Validium 模式。
  3. 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
整套分類,三列說盡。把資料發布在 L1 上,正是那項能保證你永遠重建得了狀態、也退得出來的性質。

兩種流派,以及誠實的附帶細則

每一條 Rollup 都得回答一個問題:L1 要怎麼相信貼出來的狀態根是對的?答案有兩種,它們也定義了接下來的兩篇。

  1. 樂觀 Rollup(Arbitrum、Optimism)假定貼出的狀態根有效,並讓任何人在一段挑戰期內——通常約七天——提交一份詐欺證明來推翻謊言。只要有一位誠實的驗證者,就足以維持整條鏈的安全;代價是漫長的提領延遲。這就是樂觀 Rollup的設計。
  2. ZK(有效性)Rollup 則要求定序器貼出一份簡潔的有效性證明,由 L1 的驗證器當場檢查,任何不正確的狀態根都會被直接拒絕。回報是接近即時的最終性與快速提領;代價是沉重的證明運算,以及打造 zkEVM 的艱難工程。這就是 ZK-Rollup 的設計。

今天的真實 Rollup 還不是那個純粹的理想型,認清這些落差是值得的:

  1. 多數 Rollup 仍只跑一個中心化的單一定序器。它偷不走你的資金,卻能重排、審查、或下線;透過 L1 的強制納入是最後防線,而把定序器去中心化,則是仍在進行、尚未完成的工程。
  2. 許多 Rollup 還留著一把能升級合約的管理員多簽——原則上連規則都改得動。這些「輔助輪」被 L2BEAT 的 Stage 0/1/2 成熟度框架公開追蹤;在把大筆資金託付給某條鏈之前,先查它的 stage。
  3. 詐欺證明與有效性證明系統都還在成熟中——有些打著「樂觀」旗號的鏈,其實還沒開放無需許可的詐欺證明,意味著那張安全網尚未完全張開。