Rollup是以太坊Layer2的擴容方案,旨在通過將交易與鏈下處理的方式提高以太坊交易吞吐量。Optimistic 本意「樂觀的」,正如其名Optimistic Rollup是一套「樂觀」機制。Optimistic Rollup假設所有Layer2上的交易都是有效的,把許多筆交易壓縮成一筆提交給以太坊,在提交後會有一周挑戰期時間,在此期間鏈上任何用戶都可以發起質疑挑戰來驗證交易的真實性。如果在狀態更新中,發現了欺詐,挑戰者即可獲得獎勵。毫無疑問,Optimistic Rollup是以太坊Layer2最具實施性和創新性的方案,其技術細節值得我們深究。本文將簡要分析Optimistic Rollup實施細節,剖析Optimistic Rollup技術原理。
在Optimistic Rollup二層之上,用戶的交易會被發送到Optimistic Rollup的節點運營者,節點將成為「驗證者」和「聚合者」,負責聚合交易、驗證交易,同時將眾多交易數據壓縮成一筆,壓縮後這筆交易會和其他交易一樣進入以太坊Layer1的交易池,最終節點會接受打包交易並在以太坊區塊鏈上發布區塊。任何人都可以成為Optimistic Rollup節點,但類似Pos機制(權益證明機制),節點必須向以太坊網絡提供誠信保證金。
在節點提交區塊時並不做關於狀態轉換合法性的校驗,但是會為該區塊提供一周的「欺詐證明」挑戰期。在挑戰期內,沒有節點或者用戶對其合法性做出挑戰,則該區塊被確認。如果做出「欺詐證明」挑戰,並挑戰成功。發布該區塊的節點將失去保證金。為了鼓勵發現欺詐行為,保證金將獎勵給發現欺詐行為的用戶。通過這種方式,Optimistic Rollup利用加密經濟的激勵措施來確保節點的誠實可靠。
一筆普通的以太坊交易(比如發送 ETH)通常消耗約 110 字節。然而,在Optimistic Rollup 上發送 ETH 僅僅消耗約 12 字節。為了達到該效果,Optimistic Rollup採用了更簡單的高級編碼。
在Optimistic Rollup二層交易中,完全省略 nonce,只是從 pre-state 中恢復 nonce;Gas相關的Gasprice和Gas被移到二層交易之外;To和From無需使用以太坊地址,而是在狀態中添加一個子樹來存儲索引到地址的映射;Value可以使用科學計數法存儲,轉賬只需要3位;對於簽名,可以將一個批次中的交易進行BLS聚合簽名,降低每個交易的簽名存儲消耗,這個簽名可以一次性對整個消息集和發送者進行 batch 檢查。同時,這些交易數據會被存儲在鏈上Gas成本比較低的字段Calldata中。
上傳數據不僅僅是上述的交易數據內容,還會包含批次交易發生前後的默克爾樹根(包含賬戶、餘額、合約代碼等狀態數據,因此也稱狀態根),以及用於證明(或用於備查)狀態轉換合法性的數據。這些壓縮數據的方法是Optimistic Rollup實現擴容的關鍵。目前,經過壓縮後,Optimistic Rollup能帶來高於以太坊30倍的吞吐量。
Optimistic Rollup 在以太坊 Layer 1 部署了一個特定的智能合約,稱為 Rollup 合約,該合約負責管理 Rollup 的狀態,如跟蹤用戶餘額、處理存款、取款和爭議解決。在 Optimistic Rollup 中,交易由 節點在鏈下收集和聚合,他們將多個交易捆綁在一起成為一個 「 Rollup 塊」。該塊包含新賬戶狀態的交易內容和默克爾樹根。
之後,節點將匯總的數據作為 calldata 發布到以太坊上。 calldata 是智能合約中不可修改、非持久的區域,其行為與內存非常相似。 而 calldata 作為區塊鏈的歷史日誌部分,不會存儲為以太坊狀態的一部分。 因為 calldata 不涉及以太坊狀態的任何部分,所以在鏈上存儲數據更便宜。
前文提到,上傳的數據除了交易內容,還包括交易發生前後的默克爾樹根。默克爾樹根是任何時間點的Optimistic Rollup狀態(帳戶、餘額、合約代碼等),也稱為「狀態樹」,是Optimistic Rollup的狀態組織形式。默克爾樹的葉子節點是賬戶狀態,根節點是最終值。Optimistic Rollup二層交易的改變會引起交易相關賬戶狀態更新,引起葉子節點的信息變動,最終導致根哈希值的變動。二層的運營者會在本地維護二層賬戶的狀態樹,記錄批次交易發生前後的根哈希值,在上傳批次交易時將此二哈希值一併上傳。
此默克爾樹根(狀態根)引用 Rollup的最新狀態,經過哈希處理並存儲在 Rollup合約中。 鏈上的每個狀態轉換都會產生一個新的 Rollup狀態,節點通過計算新的狀態根來提交該狀態。
節點在發布區塊時需要同時提交舊狀態根和新狀態根。如果舊狀態根與鏈上合約中的現有狀態根匹配,則後者被丟棄並替換為新狀態根。節點還需要為交易批次本身提交 默克爾樹根。 這允許任何人通過提供默克爾樹證明來證明交易包含在區塊中。默克爾樹根,對於證明Optimistic Rollup中的狀態變化是非常重要的。
Optimistic Rollup允許任何人在不提供有效性證明的情況下提供交易信息、狀態轉換信息並發布區塊。 為了確保以太坊區塊鏈安全,Optimistic Rollup制定了一周的時間窗口,在此期間用戶都可以對區塊(狀態轉換等信息)提出質疑。
如果有人提出質疑,Optimistic Rollup協議將啟動欺詐證明計算,通過重放導致鏈上發生狀態轉換的事務計算出新的狀態根,並將得到的狀態根與排序者發布的狀態根進行對比,如果其他節點或者用戶發現最終區塊狀態和該節點提議狀態不同,則欺詐證明挑戰成功,狀態轉換取消。同時該節點將會受到懲罰,他們的保證金將被沒收並獎勵給挑戰者。
在以太坊重新執行交易以檢測欺詐需要發布單獨交易的狀態承諾,並增加必須在鏈上發布的數據,重放交易還會產生巨大的Gas成本。 目前Optimistic Rollup挑戰期為一周,但因為資本效率問題,社區正在激烈討論是否需要縮短挑戰期。
Optimistic Rollup不僅能支持以太坊擴容,同時將整個以太坊智能合約的功能引入了Layer2框架,為DAPP的系列開發和部署提供了圖靈完備的OVM虛擬機。
OVM虛擬機是個功能完備,有與以太坊EVM虛擬機完全兼容的執行環境,適用於Layer2系統。有了OVM虛擬機之後,開發者可以通過OVM虛擬機在Rollup鏈上進行以太坊鏈上的所有操作,並通過API和區塊鏈進行交互。此外,OVM虛擬機使得 DApp 移植到 Layer2 變得十分簡單,項目方無需部署各種 Layer2 擴容方案,而只需接入 OVM,便可以使用其中的各類 Layer2 結構。
基於Optimistic Rollup協議開發的二層網絡有2個:Optimism和Arbitrum。目前Optimism和Arbitrum是以太坊領域最大的Layer2生態,其鎖倉價值達到40億美元,並仍然在顯著增長。眾多知名項目也加入了Optimistic Rollup的陣營,比如:UniSwap、SushiSwap等。
但Optimistic Rollup並非一家獨大,其還面臨着Zk Rollup的競爭。如前文介紹,Optimistic Rollup採用的是欺詐證明,即系統樂觀地相信交易數據的正確性,通過欺詐挑戰的經濟邏輯來確保交易的正確性。而ZK Rollup 是零知識有效性證明的擴容方案,其核心在於分批處理鏈下交易,並生成加密有效性證明來驗證每批交易的真實性。兩者孰優孰劣需要更長時間的檢驗。