區塊鏈的三個核心屬性是去中心化、安全性和可擴充性。根據區塊鏈三難困境理論,區塊鏈架構只能實現其中兩個。乙太坊在設計時考慮了去中心化和安全性,因此在可擴充性方面表現不佳。目前,乙太坊每天處理超過100萬筆交易,這可能導致高額的交易費用,並增加對乙太坊擴容解決方案的需求。
以太坊有多種不同的擴容解決方案,每種方案都有其自己的權衡和安全模型,包括 Layer 1 分片、Layer 2 狀態通道、Plasma、側鏈、Rollups 和 Validium。由於分片技術演進緩慢且實現複雜,而側鏈和 Validium 無法從以太坊繼承安全性和數據可用性。總之,以太坊生態系現在主要使用的是 Rollups 擴容解決方案。
Beosin 迄今已成為以太坊 Layer2 的安全夥伴,例如 Manta 網絡和 StarkNet。在過去的審計中,許多知名區塊鏈已通過 Beosin 的鏈安全審計,包括 Ronin 網絡、Manta 網絡、Merlin Chain、Clover、Self Chain、Crust Network 等。Beosin 現在針對以太坊 Layer2 發布了審計解決方案,為以太坊 Layer2 生態系統提供全面的安全審計服務。
ETH Layer2使用Rollups將數百筆交易打包成一個提交到Ethereum主網,從而將交易費用分配給所有Rollup用戶,降低每個用戶的費用。Rollups中的交易數據提交到Layer1,但執行是由Rollups獨立進行的。通過將交易數據提交到Layer1,Rollups可以繼承Ethereum的安全性,因為一旦數據上傳到Layer1,要回滾Rollups交易需要在Layer1上回滾數據。
目前,Rollups 可以以兩種主要方式實施:
樂觀的Rollups:利用經濟激勵和博弈論來驗證交易,例如Arbitrum、Base、OP、Blast等。
零知識 Rollups:使用零知識證明保證安全和隱私,如 Scroll、Linea、zkSync、StarkNet 等等。
樂觀的Rollups是一種通過將計算和狀態存儲移出鏈以擴大以太坊的方法。它在鏈外執行交易,但將交易數據作為calldata或blob發布到主網。
樂觀 Rollups 在以太坊上部署一個名為 Rollup 合約的智能合約,該合約管理 Rollup 的狀態,跟踪用戶餘額,處理存款、提款和爭議解決。交易由一個序列器在鏈下進行收集和總結,多筆交易被捆綁到一個 Rollup 區塊中,該區塊包含新帳戶狀態(Merkle root)的摘要和加密證明。然後序列器通過提供 Merkle root 和 calldata 將 Rollup 區塊提交到主鏈。
樂觀的 Rollups 被稱為“樂觀”,因為它們假設離線交易是有效的,並且不公開證明交易批次的有效性。相比之下,樂觀 Rollups 依賴於欺詐證明方案,以檢測交易計算不正確的情況。在以太坊上提交 Rollup 批次後,有一段時間窗口(稱為挑戰期),在此期間任何人都可以通過計算欺詐證明來挑戰 Rollup 交易的結果。欺詐證明包含驗證者認為是欺詐的特定交易的詳細信息。
如下圖所示,目前大部分樂觀 Rollup 的挑戰期為 7 天,最短的為 1 天。
在挑戰期間,任何人都可以通過計算詐騙證明來挑戰交易結果。如果交易無效,Rollup 區塊將被撤銷,挑戰者將獲得獎勵,並且序列處理者將受到懲罰。
如果匯總批次在質疑期后仍未受到質疑(即所有交易均已正確執行),則在乙太坊上被視為有效並被接受。其他人可以繼續擴展未確認的匯總塊,但請注意,如果根據先前發佈的錯誤執行事務,則事務結果將被撤銷。
最後,用戶必須向 Rollup 合約提交提款請求,從第二層提取資金到第一層。合約將驗證用戶在 Rollup 上是否有足夠的資金,並相應地更新他們在主鏈上的餘額。
通過生態建設和空投,Arbitrum 快速成為 ETH Layer2 中最活躍的網絡,TVL 超過 27 億美元。在盛大的空投之後,Arbitrum 團隊推出了 Arbitrum Orbit 計劃:鼓勵開發人員使用 Arbitrum 相關技術構建 Layer3。Beosin 已經完成了 ArbSwap、Arbipad 的安全審計,幫助 Arbitrum 生態系統的安全發展。
雖然Optimism的生態活動比Arbitrum少,但Optimism於2023年推出的OP Stack已經獲得廣泛行業認可,作為構建模塊化Layer2的完整和可行解決方案。已經有超過25個Layer2網絡使用OP Stack進行構建,包括Base、Mantle、Manta、OP BNB和Celo等明星項目。在Optimism上構建的DIPX Finance和Starnet已通過Beosin的安全審計。
Base是基於OP Stack的Layer2網路,在生態活動和TVL方面僅次於Arbitrum。此前,Beosin已經詳細分析了Base的架構和安全風險,並審計了Surf協定和EDA,以幫助專案擁有者和使用者規避安全風險。
Blast在“Big Bang”開發者競賽結束時,其總鎖倉價值飆升至20億美元以上,成為Layer2領域的一員。Beosin在Blast主網上線之前對其網絡安全進行了分析。由於Blast未實施作弊證明,資產存放在多簽錢包中,而不是Rollup橋接,這存在著較高的中心化風險。Beosin對Blast生態項目(如Wand Protocol、Zest、Kalax)進行了審計。
OP Stack,一個成熟的擴容解決方案框架,基本上將構建樂觀 Rollups 鏈的複雜過程分解為一個簡化的過程,通過提供完整的軟件組件、工具和框架。這裡我們以 Op stack 框架為例,分析樂觀 Rollups 的典型架構。
● 執行節點:Op-geth是一個擴展的以太坊執行客戶端,負責處理與Layer2特定功能相關的任務,例如從Layer1接收代幣存款。該層定義了負責執行狀態變化的所有功能。在這裡,狀態轉換是基於從摘要節點(序列和驗證者)通過引擎API接收到的輸入觸發的。
● Rollup節點:包括序列器和驗證器。整理者負責將來自第2層的處理過的交易進行批處理並發佈到第1層。序列器定義第2層鏈上的交易如何被收集和發佈。驗證器/驗證器檢查批處理交易的有效性,如果檢測到任何欺詐,則提交證據。
● 詐騙證明: Cannon 是 Geth 的升級版本,負責在詐騙檢測和證明階段運行 EVM。它本質上是一個在鏈上爭議引擎,通過 API 與序列化程序和驗證程序協調,以證明虛假交易。
● 批處理提交:排序器一次批處理所有已處理的事務,由驗證器驗證,排序器將批處理的事務提交到第 1 層。
● 橋接合約:部署在以太坊和第二層上,允許用戶在第一層和第二層之間傳遞信息和轉移資產。
在樂觀 Rollup 的技術架構下,確保用戶資產在 L1 和 L2 之間移動的安全性非常重要。以下詳細介紹了用戶如何在兩個層之間存取資產以及系統如何維護這些交易的完整性和安全性。
● 資產跨鏈進入Rollup:用戶將資金存入Layer1的Rollup鏈橋合約。鏈橋合約將交易轉發到Layer2,在那裡,相同數量的資產被鑄造並發送到用戶在樂觀Rollup中選擇的地址。
通常情況下,用戶生成的交易(例如從Layer1到Layer2的存款)會排隊等待,直到隔離器重新提交它們到Rollup合約為止。然而,為了保持抗審查性,樂觀Rollup允許用戶在交易延遲超過最大允許時間時直接將交易提交到鏈上的Rollup合約。
● 從Rollup中提取資產:由於詐騙證明機制,從樂觀Rollup提取資金到以太坊更加複雜。如果用戶發起Layer2到Layer1的交易以提取Layer1上管理的資金,他們需要等待挑戰期結束,這通常需要約7天。
當用戶在Rollup上發起提款請求時,該交易將被包括在下一批次中,並且Rollup上的用戶資產將被銷毀。一旦批次被發佈在以太坊上,用戶可以計算默克爾證明來驗證他們的退出交易是否包含在區塊中。下一步是等待延遲期結束,在Layer1上完成交易並將資金提取到主網。
為了避免從以太坊提款需要等一周的時間,樂觀 Rollup 的用戶可以向流動性提供者(LP)請求預付款,流動性提供者將承擔待處理的提款所有權並支付 Layer1 上的用戶資金以換取費用。流動性提供者可以自行檢查鏈上數據來驗證用戶提款請求的有效性,然後釋放資金。通過這種方式,他們可以確保交易最終將被確認,從而實現信任的確定性。
Layer2是一個完整的區塊鏈系統,因此公鏈的常見審計也適用於Optimistic Rollup,詳細內容請見本文末附錄。
此外,由於其特殊性質,樂觀 Rollup 需要進行一系列額外的審計:
● 數據可用性的驗證:確保在 Layer1 上可用 Layer2 交易數據,以防止數據丟失。
● 數據同步機制:檢查Layer1和Layer2之間的數據同步機制是否健全,能夠處理網絡分割等異常情況。
● 驗證詐騙證明合約是否正確實施。
● 挑戰期機制: 檢查挑戰期長度是否合理,並確保詐騙證明能在指定時間內完成。
● 提交欺詐證據的流程: 檢查提交欺詐證據的流程是否安全。
● 存款和提款流程:檢查從Layer1到Layer2和從Layer2到Layer1的存款和提款流程,以確保流程安全。
● 資產鑄造和銷毀:檢查在Layer2上的資產鑄造和銷毀邏輯,以確保與Layer1資產的正確對應。
● 流動性提供者機制:如果存在流動性提供者(LP)機制,則有必要檢查LP的運作流程及其安全性。
零知識(ZK) Rollup是基於零知識證明的第2層協議。它主要在鏈下執行複雜計算和生成證明,在鏈上驗證證明並存儲部分數據以確保數據可用性。
ZK Rollup 是一種“混合擴容解決方案”,它是一種在鏈下運行但從以太坊獲得安全性的協議。具體而言,以太坊網絡強制執行對 ZK Rollups 狀態更新的有效性,並保證在每次 Rollup 狀態更新時背景數據的可用性。Rollup 的狀態由在以太坊網絡上部署的智能合約維護。為了更新此狀態,ZK Rollups 节點必須提交一個用於驗證的有效性證明。有效性證明是一種密碼學保證,即所提出的狀態變更確實是執行給定交易批次的結果。這意味著 ZK Rollups 只需要提供有效性證明來完成以太坊上的交易,而無需發布所有交易數據。
從 ZK Rollups 轉賬到 Ethereum 沒有延遲,因為只有在 ZK Rollups 合約驗證了有效性的證明後,退出交易才會執行。相反,從 Optimistic Rollups 提取資金會產生延遲,因為任何人都可以使用詐騙證明來挑戰退出交易。
zkSync是由Matter Labs團隊在五年前推出的L2解決方案,使用零知識證明技術來實現高效的交易驗證,籌集了超過2億美元。zkSync是使用ZK Rollups的生態活躍度最高的Layer2網絡之一,也具有爭議性。Beosin曾對其領先的DeFi項目SyncSwap進行過審計,涵蓋了代碼質量、合約邏輯和安全性、運營模式等方面。
StarkNet使用ZK-STARK來構建Layer2,以提高交易速度並降低交易費用。StarkNet具有本地虛擬機(Cairo VM)和開發語言Cairo,可幫助開發人員更安全、更輕鬆地撰寫智能合約。Beosin已成為StarkNet的官方安全合作夥伴,為Option Dance和Reddio完成了安全審計。2024年8月13日,Reddio完成了由Paradigm領投的種子融資輪,以構建高性能並行EVM Layer2網絡。
Scroll是通過零知識證明技術進行擴展,並通過硬件加速生成和驗證零知識證明,旨在實現字節碼級的EVM兼容性。這意味著開發人員可以直接使用Solidity和Ethereum相關的開發工具來構建智能合約。
ZK Rollups的常見框架包括Rollup和Bridge合約,收集者,聚合器,重複者和生成零知識證明的Roller網絡。具體架構如下圖所示:
● Rollup合約和橋接合約:
Rollup合約負責提供Rollup交易的數據可用性,驗證zkEVM有效性證明,並允許用戶在以太坊和Rollup之間轉移資產。它從匯總者那裡接收第2層狀態根和區塊,狀態根存儲在以太坊狀態中,第2層區塊數據作為以太坊的calldata保存。
橋接合約部署在以太坊和Layer2上,允許用戶在Layer1和Layer2之間傳遞消息和轉移資產。
● 順序器:順序器提供JSON-RPC接口並接受第2層交易,定期從內存池檢索一批交易進行執行,生成新的第2層區塊和狀態根。其實現通常基於Go-Ethereum(Geth),確保最佳兼容性和最高安全性。
● 協調器:當收集人生成新塊並從收集人收到該塊的執行跟蹤時,協調器會收到通知。然後,執行跟蹤被調度到 Roller 網路中隨機選擇的 Roller,從而生成有效性證明。
● Relayer: 轉發器監控在以太坊和第二層上部署的 Rollup 合約和橋接合約。主要職責包括:1)通過監控 Rollup 合約追蹤第二層區塊的數據可用性和驗證;2)監控以太坊和第二層橋接合約的存款和提款事件,並將消息轉發到另一端。
● Roller Network: 在Roller網絡中,Roller充當證明者,負責為ZK Rollup生成有效性證明。首先從協調器接收區塊執行跟踪,轉換為電路證人,然後使用硬件加速為每個zkevm生成證明,最後使用證明聚合將多個證明聚合成單個證明。
在ZK Rollups的技術架構下,在L1和L2之間的轉移過程中,確保用戶資產的安全性至關重要。以下詳細介紹了用戶如何在兩個層之間訪問資產,以及系統如何維護這些交易的完整性和安全性。
● 資產跨鏈入 Rollup:用戶通過將代幣存入部署在網絡鏈層上的 ZK Rollups 合約,進入 Rollup。該交易需由項目方提交給 Rollup 合約。
如果待處理的存款隊列開始填滿,ZK Rollups操作員將接受這些存款交易並將其提交給Rollup合約。一旦資金存入Rollup,用戶可以開始交易處理。
用戶可以通過對其帳戶進行哈希運算,將哈希值發送到 Rollup 合約並提供一個梅克爾證明,以驗證當前狀態根。
● 從Rollup中提取資產:用戶發起退出交易,將其Rollup上的資產發送到指定帳戶進行銷毀。如果操作者將交易添加到下一批次,用戶可以向鏈上合約提交提取請求。提取請求包括:
Merkle證明,證明用戶的交易被添加到交易批次中的已銷毀帳戶
交易數據
批量處理根
Layer1網絡地址,用於接收存入資金
Rollup合約對交易數據進行哈希,檢查批次根是否存在,並使用Merkle證明檢查交易哈希是否屬於批次根。合約執行退出交易並將資金發送到用戶選擇的Layer1網絡上的地址。
第2層是一個完整的區塊鏈系統,因此,區塊鏈的常見審計項目也適用於ZK Rollup,在本文末尾的附錄中有詳細說明。
此外,由於其特殊性質,ZK Rollup 需要進行一些額外的審計:
● 系統安全的證明:檢查使用的零知識證明方案的安全性和正確性(例如Groth16、Plonk、Halo2、zk-STARK等)。
● 電路安全:檢查電路設計和實施中可能存在的潛在漏洞,主要包括以下內容:
未約束的電路
過度約束的電路
非确定性电路
算術上/下溢 算術上/下溢
位元長度不匹配
未使用的公共輸入優化掉
凍結之心:零知識證明的鍛造
可信設置洩漏
已指定但未受限
不安全的元件使用
可變精度
● 證明生成和驗證:審查證明生成和驗證的過程,以確保其高效和安全。
● 數據可用性證明:確保第 2 層事務數據在第 1 層可用,防止數據丟失。
● 數據同步機制:檢查Layer1和Layer2之間的數據同步機制是否完善,能夠處理網絡分割等異常情況。
● 存款和提款流程:檢查從Layer1到Layer2以及從Layer2到Layer1的存款和提款流程,以確保流程安全。
● 資產鑄造和銷毀:檢查在Layer2上的資產鑄造和銷毀邏輯,確保與Layer1資產的正確對應。
● 掃描外部依賴項和已知漏洞:ZK Rollup經常在很大程度上依賴第三方的加密和數學庫或工具,應該徹底檢查其依賴的安全性,以掃描和驗證已知的漏洞。
區塊鏈及二層協議的常規審計項目:
● 整數溢出:檢查整數溢位和整數下溢
● 循環:檢查程序的循環,看條件是否合理
● 無限遞歸調用:檢查程序遞歸調用的退出條件是否合理
● 競態條件: 在並發狀態下檢查對共享資源的存取權限
● 異常崩潰:檢查導致程式主動退出的異常拋出代碼
● 除以0的漏洞:檢查是否存在除以0的情況
● 類型轉換:檢查類型轉換是否正確,轉換過程中是否丟失重要信息
● 陣列越界:檢查對陣列邊界外元素的訪問
● 反序列化漏洞:在反序列化過程中檢查問題
● 功能實現安全性:檢查RPC介面的實現是否存在安全風險,是否與RPC介面的功能設計一致
● 敏感RPC接口的權限設置是否合理:檢查敏感RPC接口的訪問權限設置
● 加密傳輸機制:檢查是否使用加密傳輸協議,如TLS
● 要求資料格式解析:檢查請求資料的格式解析流程
● 錢包解鎖攻擊:當節點解鎖其錢包時,它被 RPC 要求竊取資金
● 傳統網絡安全:檢查以下漏洞:跨站腳本(XSS)/模板注入/第三方組件漏洞/HTTP參數污染/SQL注入/XXE實體注入/反序列化漏洞/SSRF漏洞/代碼注入/本地文件包含/遠程文件包含/命令執行注入以及其他傳統漏洞
● 網絡節點身份認證和識別機制:檢查是否存在節點身份識別機制,節點身份識別機制可以被規避
● 路由表污染:檢查路由表是否可以任意插入或覆蓋
● 节点发现算法:检查节点发现算法是否平衡且不可预测,例如,距离算法是否不平衡
● 連接使用審計:檢查P2P網路連接節點數量的限制和管理是否合理
● 日食攻擊:評估日食攻擊的成本和危害,必要時提供定量分析
● Sybil 攻擊:評估投票共識機制並分析投票資格檢查策略
● 竊聽攻擊:檢查通信協議是否洩露隱私
● 外星人攻擊:評估節點是否能識別相同類型的鏈節點
● 時間劫持:檢查節點的網絡時間計算機制
● 記憶體耗盡攻擊:檢查大量的記憶體消耗
● 硬盤耗盡攻擊: 檢查大文件存儲位置
● 套接字壓力攻擊:檢查鏈路數限制策略
● 內核處理器耗盡攻擊: 檢查內核處理器創建的限制,例如文件處理器
● 持久記憶體洩漏:檢查記憶體洩漏
● 哈希算法安全性:檢查哈希算法的碰撞抵抗力
● 數字簽名演算法安全性:檢查簽名演算法和演算法實現的安全性
● 加密演演演算法安全性:檢查加密演演演算法的安全性和演演演算法實現
● 隨機數產生器安全性:檢查金鑰隨機數生成演演演算法是否合理
● BFT實現安全性:評估BFT演演演算法的實現安全性
● 分叉選擇規則:檢查分叉選擇規則以確保安全
● 中心化程度測試:識別系統設計中是否存在過度中心化的設計
● 激勵審計:評估激勵措施對安全性的影響
● 雙花攻擊:檢查共識是否可以防禦雙花攻擊
● MEV攻擊審計:檢查區塊打包節點的MEV對鏈公平性的影響
● 區塊同步程序審計:在同步期間檢查安全問題
● 區塊格式解析過程審計:檢查格式解析期間的安全問題,如導致崩潰的解析錯誤
● 區塊生成過程審計:檢查區塊生成過程中的安全問題,包括梅克爾樹根是否以合理的方式建立
● 區塊驗證過程審核:檢查區塊簽名項目和驗證邏輯是否足夠
● 區塊驗證邏輯審核:檢查區塊驗證演算法和實現是否合理
● 區塊雜湊碰撞:檢查區塊雜湊碰撞的構造方式以及碰撞是否合理處理。
● 區塊處理資源限制:檢查孤區池、驗證計算、硬碟尋址等資源限制是否合理
● 交易同步過程審計:檢查同步過程中的安全問題
● 交易哈希碰撞: 檢查交易哈希碰撞的構造方式以及它們是如何處理的。
● 交易格式解析: 檢查格式解析過程中的安全問題,例如導致崩潰的解析錯誤
● 交易有效性檢查:檢查每種類型交易的簽名項目及驗證邏輯是否足夠
● 交易處理資源限制:檢查交易池、驗證計算和硬盤地址等資源限制是否合理。
● 交易延展性攻擊:交易是否可以在不影響交易有效性的情況下更改內部欄位(如 ScriptSig)來更改交易哈希
● 交易重放攻擊審計:檢查系統對交易重放的檢測
● 合約位元碼檢查:檢查虛擬機的合約驗證過程的安全性,例如整數溢出和死循環
● 合約的字節碼執行:檢查虛擬機的字節碼執行過程的安全性,如整數溢出、死循環等
● Gas 模型: 檢查交易處理/合約執行的每個原子操作的費用是否與資源消耗成比例
● 紀錄完整性:檢查金鑰資訊是否被記錄
● 日誌安全:檢查日誌處理不當是否會導致整數溢出等安全問題
● 日誌中包含隱私信息:檢查日誌中是否包含像密鑰這樣的隱私信息
● 日誌存儲:檢查是否在日誌中記錄了過多的內容,這樣會消耗節點資源
● 節點代碼供應鏈安全:檢查所有公鏈框架的第三方庫、組件和版本是否存在已知問題
區塊鏈的三個核心屬性是去中心化、安全性和可擴充性。根據區塊鏈三難困境理論,區塊鏈架構只能實現其中兩個。乙太坊在設計時考慮了去中心化和安全性,因此在可擴充性方面表現不佳。目前,乙太坊每天處理超過100萬筆交易,這可能導致高額的交易費用,並增加對乙太坊擴容解決方案的需求。
以太坊有多種不同的擴容解決方案,每種方案都有其自己的權衡和安全模型,包括 Layer 1 分片、Layer 2 狀態通道、Plasma、側鏈、Rollups 和 Validium。由於分片技術演進緩慢且實現複雜,而側鏈和 Validium 無法從以太坊繼承安全性和數據可用性。總之,以太坊生態系現在主要使用的是 Rollups 擴容解決方案。
Beosin 迄今已成為以太坊 Layer2 的安全夥伴,例如 Manta 網絡和 StarkNet。在過去的審計中,許多知名區塊鏈已通過 Beosin 的鏈安全審計,包括 Ronin 網絡、Manta 網絡、Merlin Chain、Clover、Self Chain、Crust Network 等。Beosin 現在針對以太坊 Layer2 發布了審計解決方案,為以太坊 Layer2 生態系統提供全面的安全審計服務。
ETH Layer2使用Rollups將數百筆交易打包成一個提交到Ethereum主網,從而將交易費用分配給所有Rollup用戶,降低每個用戶的費用。Rollups中的交易數據提交到Layer1,但執行是由Rollups獨立進行的。通過將交易數據提交到Layer1,Rollups可以繼承Ethereum的安全性,因為一旦數據上傳到Layer1,要回滾Rollups交易需要在Layer1上回滾數據。
目前,Rollups 可以以兩種主要方式實施:
樂觀的Rollups:利用經濟激勵和博弈論來驗證交易,例如Arbitrum、Base、OP、Blast等。
零知識 Rollups:使用零知識證明保證安全和隱私,如 Scroll、Linea、zkSync、StarkNet 等等。
樂觀的Rollups是一種通過將計算和狀態存儲移出鏈以擴大以太坊的方法。它在鏈外執行交易,但將交易數據作為calldata或blob發布到主網。
樂觀 Rollups 在以太坊上部署一個名為 Rollup 合約的智能合約,該合約管理 Rollup 的狀態,跟踪用戶餘額,處理存款、提款和爭議解決。交易由一個序列器在鏈下進行收集和總結,多筆交易被捆綁到一個 Rollup 區塊中,該區塊包含新帳戶狀態(Merkle root)的摘要和加密證明。然後序列器通過提供 Merkle root 和 calldata 將 Rollup 區塊提交到主鏈。
樂觀的 Rollups 被稱為“樂觀”,因為它們假設離線交易是有效的,並且不公開證明交易批次的有效性。相比之下,樂觀 Rollups 依賴於欺詐證明方案,以檢測交易計算不正確的情況。在以太坊上提交 Rollup 批次後,有一段時間窗口(稱為挑戰期),在此期間任何人都可以通過計算欺詐證明來挑戰 Rollup 交易的結果。欺詐證明包含驗證者認為是欺詐的特定交易的詳細信息。
如下圖所示,目前大部分樂觀 Rollup 的挑戰期為 7 天,最短的為 1 天。
在挑戰期間,任何人都可以通過計算詐騙證明來挑戰交易結果。如果交易無效,Rollup 區塊將被撤銷,挑戰者將獲得獎勵,並且序列處理者將受到懲罰。
如果匯總批次在質疑期后仍未受到質疑(即所有交易均已正確執行),則在乙太坊上被視為有效並被接受。其他人可以繼續擴展未確認的匯總塊,但請注意,如果根據先前發佈的錯誤執行事務,則事務結果將被撤銷。
最後,用戶必須向 Rollup 合約提交提款請求,從第二層提取資金到第一層。合約將驗證用戶在 Rollup 上是否有足夠的資金,並相應地更新他們在主鏈上的餘額。
通過生態建設和空投,Arbitrum 快速成為 ETH Layer2 中最活躍的網絡,TVL 超過 27 億美元。在盛大的空投之後,Arbitrum 團隊推出了 Arbitrum Orbit 計劃:鼓勵開發人員使用 Arbitrum 相關技術構建 Layer3。Beosin 已經完成了 ArbSwap、Arbipad 的安全審計,幫助 Arbitrum 生態系統的安全發展。
雖然Optimism的生態活動比Arbitrum少,但Optimism於2023年推出的OP Stack已經獲得廣泛行業認可,作為構建模塊化Layer2的完整和可行解決方案。已經有超過25個Layer2網絡使用OP Stack進行構建,包括Base、Mantle、Manta、OP BNB和Celo等明星項目。在Optimism上構建的DIPX Finance和Starnet已通過Beosin的安全審計。
Base是基於OP Stack的Layer2網路,在生態活動和TVL方面僅次於Arbitrum。此前,Beosin已經詳細分析了Base的架構和安全風險,並審計了Surf協定和EDA,以幫助專案擁有者和使用者規避安全風險。
Blast在“Big Bang”開發者競賽結束時,其總鎖倉價值飆升至20億美元以上,成為Layer2領域的一員。Beosin在Blast主網上線之前對其網絡安全進行了分析。由於Blast未實施作弊證明,資產存放在多簽錢包中,而不是Rollup橋接,這存在著較高的中心化風險。Beosin對Blast生態項目(如Wand Protocol、Zest、Kalax)進行了審計。
OP Stack,一個成熟的擴容解決方案框架,基本上將構建樂觀 Rollups 鏈的複雜過程分解為一個簡化的過程,通過提供完整的軟件組件、工具和框架。這裡我們以 Op stack 框架為例,分析樂觀 Rollups 的典型架構。
● 執行節點:Op-geth是一個擴展的以太坊執行客戶端,負責處理與Layer2特定功能相關的任務,例如從Layer1接收代幣存款。該層定義了負責執行狀態變化的所有功能。在這裡,狀態轉換是基於從摘要節點(序列和驗證者)通過引擎API接收到的輸入觸發的。
● Rollup節點:包括序列器和驗證器。整理者負責將來自第2層的處理過的交易進行批處理並發佈到第1層。序列器定義第2層鏈上的交易如何被收集和發佈。驗證器/驗證器檢查批處理交易的有效性,如果檢測到任何欺詐,則提交證據。
● 詐騙證明: Cannon 是 Geth 的升級版本,負責在詐騙檢測和證明階段運行 EVM。它本質上是一個在鏈上爭議引擎,通過 API 與序列化程序和驗證程序協調,以證明虛假交易。
● 批處理提交:排序器一次批處理所有已處理的事務,由驗證器驗證,排序器將批處理的事務提交到第 1 層。
● 橋接合約:部署在以太坊和第二層上,允許用戶在第一層和第二層之間傳遞信息和轉移資產。
在樂觀 Rollup 的技術架構下,確保用戶資產在 L1 和 L2 之間移動的安全性非常重要。以下詳細介紹了用戶如何在兩個層之間存取資產以及系統如何維護這些交易的完整性和安全性。
● 資產跨鏈進入Rollup:用戶將資金存入Layer1的Rollup鏈橋合約。鏈橋合約將交易轉發到Layer2,在那裡,相同數量的資產被鑄造並發送到用戶在樂觀Rollup中選擇的地址。
通常情況下,用戶生成的交易(例如從Layer1到Layer2的存款)會排隊等待,直到隔離器重新提交它們到Rollup合約為止。然而,為了保持抗審查性,樂觀Rollup允許用戶在交易延遲超過最大允許時間時直接將交易提交到鏈上的Rollup合約。
● 從Rollup中提取資產:由於詐騙證明機制,從樂觀Rollup提取資金到以太坊更加複雜。如果用戶發起Layer2到Layer1的交易以提取Layer1上管理的資金,他們需要等待挑戰期結束,這通常需要約7天。
當用戶在Rollup上發起提款請求時,該交易將被包括在下一批次中,並且Rollup上的用戶資產將被銷毀。一旦批次被發佈在以太坊上,用戶可以計算默克爾證明來驗證他們的退出交易是否包含在區塊中。下一步是等待延遲期結束,在Layer1上完成交易並將資金提取到主網。
為了避免從以太坊提款需要等一周的時間,樂觀 Rollup 的用戶可以向流動性提供者(LP)請求預付款,流動性提供者將承擔待處理的提款所有權並支付 Layer1 上的用戶資金以換取費用。流動性提供者可以自行檢查鏈上數據來驗證用戶提款請求的有效性,然後釋放資金。通過這種方式,他們可以確保交易最終將被確認,從而實現信任的確定性。
Layer2是一個完整的區塊鏈系統,因此公鏈的常見審計也適用於Optimistic Rollup,詳細內容請見本文末附錄。
此外,由於其特殊性質,樂觀 Rollup 需要進行一系列額外的審計:
● 數據可用性的驗證:確保在 Layer1 上可用 Layer2 交易數據,以防止數據丟失。
● 數據同步機制:檢查Layer1和Layer2之間的數據同步機制是否健全,能夠處理網絡分割等異常情況。
● 驗證詐騙證明合約是否正確實施。
● 挑戰期機制: 檢查挑戰期長度是否合理,並確保詐騙證明能在指定時間內完成。
● 提交欺詐證據的流程: 檢查提交欺詐證據的流程是否安全。
● 存款和提款流程:檢查從Layer1到Layer2和從Layer2到Layer1的存款和提款流程,以確保流程安全。
● 資產鑄造和銷毀:檢查在Layer2上的資產鑄造和銷毀邏輯,以確保與Layer1資產的正確對應。
● 流動性提供者機制:如果存在流動性提供者(LP)機制,則有必要檢查LP的運作流程及其安全性。
零知識(ZK) Rollup是基於零知識證明的第2層協議。它主要在鏈下執行複雜計算和生成證明,在鏈上驗證證明並存儲部分數據以確保數據可用性。
ZK Rollup 是一種“混合擴容解決方案”,它是一種在鏈下運行但從以太坊獲得安全性的協議。具體而言,以太坊網絡強制執行對 ZK Rollups 狀態更新的有效性,並保證在每次 Rollup 狀態更新時背景數據的可用性。Rollup 的狀態由在以太坊網絡上部署的智能合約維護。為了更新此狀態,ZK Rollups 节點必須提交一個用於驗證的有效性證明。有效性證明是一種密碼學保證,即所提出的狀態變更確實是執行給定交易批次的結果。這意味著 ZK Rollups 只需要提供有效性證明來完成以太坊上的交易,而無需發布所有交易數據。
從 ZK Rollups 轉賬到 Ethereum 沒有延遲,因為只有在 ZK Rollups 合約驗證了有效性的證明後,退出交易才會執行。相反,從 Optimistic Rollups 提取資金會產生延遲,因為任何人都可以使用詐騙證明來挑戰退出交易。
zkSync是由Matter Labs團隊在五年前推出的L2解決方案,使用零知識證明技術來實現高效的交易驗證,籌集了超過2億美元。zkSync是使用ZK Rollups的生態活躍度最高的Layer2網絡之一,也具有爭議性。Beosin曾對其領先的DeFi項目SyncSwap進行過審計,涵蓋了代碼質量、合約邏輯和安全性、運營模式等方面。
StarkNet使用ZK-STARK來構建Layer2,以提高交易速度並降低交易費用。StarkNet具有本地虛擬機(Cairo VM)和開發語言Cairo,可幫助開發人員更安全、更輕鬆地撰寫智能合約。Beosin已成為StarkNet的官方安全合作夥伴,為Option Dance和Reddio完成了安全審計。2024年8月13日,Reddio完成了由Paradigm領投的種子融資輪,以構建高性能並行EVM Layer2網絡。
Scroll是通過零知識證明技術進行擴展,並通過硬件加速生成和驗證零知識證明,旨在實現字節碼級的EVM兼容性。這意味著開發人員可以直接使用Solidity和Ethereum相關的開發工具來構建智能合約。
ZK Rollups的常見框架包括Rollup和Bridge合約,收集者,聚合器,重複者和生成零知識證明的Roller網絡。具體架構如下圖所示:
● Rollup合約和橋接合約:
Rollup合約負責提供Rollup交易的數據可用性,驗證zkEVM有效性證明,並允許用戶在以太坊和Rollup之間轉移資產。它從匯總者那裡接收第2層狀態根和區塊,狀態根存儲在以太坊狀態中,第2層區塊數據作為以太坊的calldata保存。
橋接合約部署在以太坊和Layer2上,允許用戶在Layer1和Layer2之間傳遞消息和轉移資產。
● 順序器:順序器提供JSON-RPC接口並接受第2層交易,定期從內存池檢索一批交易進行執行,生成新的第2層區塊和狀態根。其實現通常基於Go-Ethereum(Geth),確保最佳兼容性和最高安全性。
● 協調器:當收集人生成新塊並從收集人收到該塊的執行跟蹤時,協調器會收到通知。然後,執行跟蹤被調度到 Roller 網路中隨機選擇的 Roller,從而生成有效性證明。
● Relayer: 轉發器監控在以太坊和第二層上部署的 Rollup 合約和橋接合約。主要職責包括:1)通過監控 Rollup 合約追蹤第二層區塊的數據可用性和驗證;2)監控以太坊和第二層橋接合約的存款和提款事件,並將消息轉發到另一端。
● Roller Network: 在Roller網絡中,Roller充當證明者,負責為ZK Rollup生成有效性證明。首先從協調器接收區塊執行跟踪,轉換為電路證人,然後使用硬件加速為每個zkevm生成證明,最後使用證明聚合將多個證明聚合成單個證明。
在ZK Rollups的技術架構下,在L1和L2之間的轉移過程中,確保用戶資產的安全性至關重要。以下詳細介紹了用戶如何在兩個層之間訪問資產,以及系統如何維護這些交易的完整性和安全性。
● 資產跨鏈入 Rollup:用戶通過將代幣存入部署在網絡鏈層上的 ZK Rollups 合約,進入 Rollup。該交易需由項目方提交給 Rollup 合約。
如果待處理的存款隊列開始填滿,ZK Rollups操作員將接受這些存款交易並將其提交給Rollup合約。一旦資金存入Rollup,用戶可以開始交易處理。
用戶可以通過對其帳戶進行哈希運算,將哈希值發送到 Rollup 合約並提供一個梅克爾證明,以驗證當前狀態根。
● 從Rollup中提取資產:用戶發起退出交易,將其Rollup上的資產發送到指定帳戶進行銷毀。如果操作者將交易添加到下一批次,用戶可以向鏈上合約提交提取請求。提取請求包括:
Merkle證明,證明用戶的交易被添加到交易批次中的已銷毀帳戶
交易數據
批量處理根
Layer1網絡地址,用於接收存入資金
Rollup合約對交易數據進行哈希,檢查批次根是否存在,並使用Merkle證明檢查交易哈希是否屬於批次根。合約執行退出交易並將資金發送到用戶選擇的Layer1網絡上的地址。
第2層是一個完整的區塊鏈系統,因此,區塊鏈的常見審計項目也適用於ZK Rollup,在本文末尾的附錄中有詳細說明。
此外,由於其特殊性質,ZK Rollup 需要進行一些額外的審計:
● 系統安全的證明:檢查使用的零知識證明方案的安全性和正確性(例如Groth16、Plonk、Halo2、zk-STARK等)。
● 電路安全:檢查電路設計和實施中可能存在的潛在漏洞,主要包括以下內容:
未約束的電路
過度約束的電路
非确定性电路
算術上/下溢 算術上/下溢
位元長度不匹配
未使用的公共輸入優化掉
凍結之心:零知識證明的鍛造
可信設置洩漏
已指定但未受限
不安全的元件使用
可變精度
● 證明生成和驗證:審查證明生成和驗證的過程,以確保其高效和安全。
● 數據可用性證明:確保第 2 層事務數據在第 1 層可用,防止數據丟失。
● 數據同步機制:檢查Layer1和Layer2之間的數據同步機制是否完善,能夠處理網絡分割等異常情況。
● 存款和提款流程:檢查從Layer1到Layer2以及從Layer2到Layer1的存款和提款流程,以確保流程安全。
● 資產鑄造和銷毀:檢查在Layer2上的資產鑄造和銷毀邏輯,確保與Layer1資產的正確對應。
● 掃描外部依賴項和已知漏洞:ZK Rollup經常在很大程度上依賴第三方的加密和數學庫或工具,應該徹底檢查其依賴的安全性,以掃描和驗證已知的漏洞。
區塊鏈及二層協議的常規審計項目:
● 整數溢出:檢查整數溢位和整數下溢
● 循環:檢查程序的循環,看條件是否合理
● 無限遞歸調用:檢查程序遞歸調用的退出條件是否合理
● 競態條件: 在並發狀態下檢查對共享資源的存取權限
● 異常崩潰:檢查導致程式主動退出的異常拋出代碼
● 除以0的漏洞:檢查是否存在除以0的情況
● 類型轉換:檢查類型轉換是否正確,轉換過程中是否丟失重要信息
● 陣列越界:檢查對陣列邊界外元素的訪問
● 反序列化漏洞:在反序列化過程中檢查問題
● 功能實現安全性:檢查RPC介面的實現是否存在安全風險,是否與RPC介面的功能設計一致
● 敏感RPC接口的權限設置是否合理:檢查敏感RPC接口的訪問權限設置
● 加密傳輸機制:檢查是否使用加密傳輸協議,如TLS
● 要求資料格式解析:檢查請求資料的格式解析流程
● 錢包解鎖攻擊:當節點解鎖其錢包時,它被 RPC 要求竊取資金
● 傳統網絡安全:檢查以下漏洞:跨站腳本(XSS)/模板注入/第三方組件漏洞/HTTP參數污染/SQL注入/XXE實體注入/反序列化漏洞/SSRF漏洞/代碼注入/本地文件包含/遠程文件包含/命令執行注入以及其他傳統漏洞
● 網絡節點身份認證和識別機制:檢查是否存在節點身份識別機制,節點身份識別機制可以被規避
● 路由表污染:檢查路由表是否可以任意插入或覆蓋
● 节点发现算法:检查节点发现算法是否平衡且不可预测,例如,距离算法是否不平衡
● 連接使用審計:檢查P2P網路連接節點數量的限制和管理是否合理
● 日食攻擊:評估日食攻擊的成本和危害,必要時提供定量分析
● Sybil 攻擊:評估投票共識機制並分析投票資格檢查策略
● 竊聽攻擊:檢查通信協議是否洩露隱私
● 外星人攻擊:評估節點是否能識別相同類型的鏈節點
● 時間劫持:檢查節點的網絡時間計算機制
● 記憶體耗盡攻擊:檢查大量的記憶體消耗
● 硬盤耗盡攻擊: 檢查大文件存儲位置
● 套接字壓力攻擊:檢查鏈路數限制策略
● 內核處理器耗盡攻擊: 檢查內核處理器創建的限制,例如文件處理器
● 持久記憶體洩漏:檢查記憶體洩漏
● 哈希算法安全性:檢查哈希算法的碰撞抵抗力
● 數字簽名演算法安全性:檢查簽名演算法和演算法實現的安全性
● 加密演演演算法安全性:檢查加密演演演算法的安全性和演演演算法實現
● 隨機數產生器安全性:檢查金鑰隨機數生成演演演算法是否合理
● BFT實現安全性:評估BFT演演演算法的實現安全性
● 分叉選擇規則:檢查分叉選擇規則以確保安全
● 中心化程度測試:識別系統設計中是否存在過度中心化的設計
● 激勵審計:評估激勵措施對安全性的影響
● 雙花攻擊:檢查共識是否可以防禦雙花攻擊
● MEV攻擊審計:檢查區塊打包節點的MEV對鏈公平性的影響
● 區塊同步程序審計:在同步期間檢查安全問題
● 區塊格式解析過程審計:檢查格式解析期間的安全問題,如導致崩潰的解析錯誤
● 區塊生成過程審計:檢查區塊生成過程中的安全問題,包括梅克爾樹根是否以合理的方式建立
● 區塊驗證過程審核:檢查區塊簽名項目和驗證邏輯是否足夠
● 區塊驗證邏輯審核:檢查區塊驗證演算法和實現是否合理
● 區塊雜湊碰撞:檢查區塊雜湊碰撞的構造方式以及碰撞是否合理處理。
● 區塊處理資源限制:檢查孤區池、驗證計算、硬碟尋址等資源限制是否合理
● 交易同步過程審計:檢查同步過程中的安全問題
● 交易哈希碰撞: 檢查交易哈希碰撞的構造方式以及它們是如何處理的。
● 交易格式解析: 檢查格式解析過程中的安全問題,例如導致崩潰的解析錯誤
● 交易有效性檢查:檢查每種類型交易的簽名項目及驗證邏輯是否足夠
● 交易處理資源限制:檢查交易池、驗證計算和硬盤地址等資源限制是否合理。
● 交易延展性攻擊:交易是否可以在不影響交易有效性的情況下更改內部欄位(如 ScriptSig)來更改交易哈希
● 交易重放攻擊審計:檢查系統對交易重放的檢測
● 合約位元碼檢查:檢查虛擬機的合約驗證過程的安全性,例如整數溢出和死循環
● 合約的字節碼執行:檢查虛擬機的字節碼執行過程的安全性,如整數溢出、死循環等
● Gas 模型: 檢查交易處理/合約執行的每個原子操作的費用是否與資源消耗成比例
● 紀錄完整性:檢查金鑰資訊是否被記錄
● 日誌安全:檢查日誌處理不當是否會導致整數溢出等安全問題
● 日誌中包含隱私信息:檢查日誌中是否包含像密鑰這樣的隱私信息
● 日誌存儲:檢查是否在日誌中記錄了過多的內容,這樣會消耗節點資源
● 節點代碼供應鏈安全:檢查所有公鏈框架的第三方庫、組件和版本是否存在已知問題