本文我們將詳細分析 Scroll 的架構與技術,幫助大家了解 Scroll 目前的網路狀態與未來的發展方向,以及為大家講解 Scroll zkEVM 電路與稽核知識,加強zk專案方的安全防範。
(前情提要: Scroll主網正式推出,你該知道的一切都在這)
(背景補充: L2新星》Scroll 主網正式上線、兩步驟跨鏈教學,但社群謠傳「無空投」?)
以太坊二層解決方案 Scroll主網 在 10 月 10 日下午兩點產生了第一個區塊,標誌著 Scroll 的主網成功上線。截止到 10 月 25 日,已有超過 7600 個 ETH 通過跨鏈橋進入 Scroll 網路,24 個去中心化交易平臺上線 Scroll 主網,總 TVL 約 1 千萬美元。
10 月 17 日,Scroll 官方在宣佈主網啟動的同時,繼續堅持開源和去中⼼化的承諾。下⼀階段 Scroll 將致力於構建去中⼼化的證明⽹絡和排序器。本文我們將詳細分析 Scroll 的架構和技術,幫助大家瞭解 Scroll 當前的網路狀態和未來的發展方向,以及為大家講解 Scroll zkEVM 電路與審計知識,加強 zk 專案方的安全防範。
帶動 Layer2 新浪潮的 Scroll 是誰?
Scroll 是一種基於零知識證明技術的以太坊 Layer 2 擴容解決方案,旨在提高以太坊網路的交易吞吐量和速度。相較於 Optimistic Rollup,Scroll 通過零知識證明技術進行擴容,並通過硬體加速零知識證明的生成和驗證,致力於實現位元組碼級別的 EVM 相容。這意味著開發者可以直接使用 Solidity 和以太坊相關的開發工具來構建智慧合約,無需進行任何修改就可將其部署到 Scroll 上。
據 Scroll 官網公佈,目前 Scroll 團隊核心成員共有 10 名,分佈於亞洲、美洲和歐洲。團隊相關成員均擁有豐富的 zkRollup 開發經驗和行業運營經驗,大多數畢業於知名大學,並擁有博士學位。
目前,Scroll 生態非常豐富,基礎設施包含了錢包、開發工具、安全設施等方面的專案,旨在幫助專案在設計、開發、執行以及安全審計方面的整個生命週期裡,都能得到全方位的支援,目前 Scroll 主網已有超過 180 個生態專案。
1. 錢包
Scroll 目前支援幾乎所有的主流錢包:Metamask、TrustWallet、MathWallet、TokenPocket、WalletConnect、Binance Chain Wallet、SafePal Wallet。除此之外,Scroll 生態錢包還有 OKX Wallet、Versa Wallet 等。
2. 跨鏈橋
Scroll 官方的跨鏈基礎設施包括了 Celer Network、Stargate、Orbiter Finance、Hop Protocol、LI.FI、Connext 等。此外還包含了跨鏈流動性協議 Synapse Protocol、專注於 Layer 2 跨鏈橋的 Owlto Finance、以太坊 Layer 1 與 Layer 2 跨鏈橋 Pheasant Network、Symbiosis、Catalyst 等。
3. DeFi
Scroll 生態中有不少老牌的 DeFi 專案,包括了借貸協議 Aave、多鏈 DEX 聚合器 DODO、DEX SushiSwap、DEX 聚合器 OpenOcean、多鏈 DeFi 協議 iZUMi Finance、DEX Syncswap、DeFi 收益率協議 Pendle Finance、借貸協議 dForce、槓桿交易聚合器 MUX Protocol 等,也有 GMX 等原生未被大規模使用的創新專案。
4. 其他
在 NFT、遊戲、社交等方面 ,Scroll 生態的其他專案還包括了 NFTScan、Web3 任務平臺 QuestN、TaskOn、電子協議簽署平臺 EthSign、Galaxy Blitz、OmniKingdoms 等線上鏈遊。
Scroll 技術特點有何不同?
1. 整體架構
Scroll 的架構分為以下三個主要元件:
- Scroll Node:它根據使用者交易產生 Scroll 網路的區塊,將這些交易提交到以太坊基礎層,並處理以太坊和 Scroll 之間的訊息傳遞。
- Roller:Roller 負責將智慧合約轉化成 zkEVM 電路,隨後生成證明,用於證明交易的正確性。在 Scroll 網路中存在多個 Roller,並行處理並通過硬體加速以減少生成證明的時間。Scroll 由於直接證明 EVM 的位元組碼處理正確與否,因此對於 EVM 做到了位元組碼層面的相容。
- Rollup 和 Bridge Contract:這些合約為 Scroll 的交易提供資料可用性,驗證 zkEVM 生成的有效性證明。可以說,Scroll 是通過 Rollup 合約和 Bridge 合約和以太坊基礎層連線的。通過這些合約,使用者可以在以太坊和 Scroll 之間傳遞任意訊息,並且藉助網關合約向任一方向轉移 ERC-20 資產。
Scroll 在以太坊部署的主要合約:
閘道器路由代理合約(保證代幣在跨鏈操作中的正確反射):0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6
訊息代理合約(傳遞 L1 與 L2 之間的訊息):0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367
值得注意的是以上合約可由代理管理員(Proxy Admin)和持有者(Owner)進行修改。此外,Scroll 還設定了白名單功能,可以改變特定地址在 Scroll 的 gas 費。Scroll 的排序器目前是中心化的,可以審查 Scroll 網路的訊息和交易,並且有可能跳過訊息佇列中的任何訊息直接最終確認某一訊息。
2. Scroll zkEVM 工作流程
Scroll 生成區塊後,會經過協調器(Coordinator)和多個證明器(Roller)後生成聚合證明,然後提交給以太坊上的 Rollup 合約進行驗證。詳細過程如下:
1、排序器獲得新的交易後,虛擬機器會讀取該筆交易相關的位元組碼,生成對應的執行蹤跡 (Execution Trace) 並將其傳送給協調器。同時,排序器還將交易資料提交給 Rollup 合約。
2、Roller 先將從協調器接收到的執行蹤跡轉化為 zkEVM 電路。每一步執行蹤跡都有對應的 zkEVM 電路,此處對於某些 zk 不友好的函式(hash,Keccak),Scroll 通過構建查詢表,將執行蹤跡中此類函式的輸入和輸出反射到查詢表,利用額外的電路來驗證查詢表的正確性。隨後 Roller 為這些 zkEVM 電路生成對應的證明。
3、在生成證明後,Roller 將其傳送回協調器。每經過若干個區塊,協調器將聚合任務隨機分配給某一 Roller,然後該 Roller 將若干個區塊的證明聚合成單個證明。
4、最後,協調器將聚合證明提交給 Rollup 合約,Rollup 合約再根據聚合證明來驗證之前提交給 Rollup 合約的狀態和交易資料,確定區塊的正確性。
Scroll zkEVM 電路與審計
1. 主要電路
zkEVM 由許多電路組成,每個電路負責檢查 EVM 的某個方面。這些電路最後以某種方式進行聚合或組合,共同完成交易執行的證明。下圖顯示了這些電路和表格之間的關係:
其中有一些較小的子電路,例如 ECDSA 電路和操作碼相關的子電路,不會以影響電路的組合方式與其他表和電路互動,因此為了清楚起見,它們沒有在圖中顯示。
EVM Circuit
以太坊虛擬機器(Ethereum Virtual Machine,簡稱 EVM)是一個狀態機,它定義了以太坊協議中有效狀態轉換的規則。這意味著它規定了一個確定性函式,根據當前的 EVM 狀態計算下一個有效的 EVM 狀態。EVM 的執行部分使用操作碼(opcodes)來實現這些狀態轉換,從而產生執行軌跡(Execution trace)。EVM 電路的目標是構建與執行軌跡相對應的約束系統,可以通過後端的零知識證明系統進行證明。
EVM 電路的高階設計思想在某種程度上類似於 EVM 本身的設計(例如 go-ethereum)。在 go-ethereum 中,直譯器迴圈遍歷執行軌跡上的所有指令操作碼。在每個指令中,直譯器幫助檢查相關的上下文資訊,如 gas、堆疊、記憶體等,然後將操作碼傳送到 JumpTable,從中獲取該操作碼應執行的詳細操作。
類似地,在 EVM 電路中,Scroll 根據執行軌跡中的步驟構建執行步驟,併為操作碼和執行上下文提供證明。對於每個執行步驟,會施加一組約束來檢查上下文資訊。對於每個操作碼,會施加一組約束來檢查操作碼的行為。在執行軌跡中,相同的操作碼應具有相同的約束。Scroll 使用選擇器來 「開啟」 執行軌跡中相同操作碼的所有步驟,並使用後端的證明系統證明它們的行為。
State Circuit
在執行過程中,EVM 的所有讀寫操作都記錄在 rw_table 中,並按計數器變數 rw_counter 排序。而 state Circuit 的目的就是證明正確的生成了 rw_table。
MPT Circuit
Merkle Patricia Tree 是以太坊儲存層使用的關鍵資料結構之一。在 Scroll 的 zkevm- Circuits 中,將原始 MPT 修改為 zkTrie,它本質上是一個稀疏二進位制 Merkle Patricia Trie。在 zkevm- Circuits 中,Scroll 使用 MPT 表來逐步追蹤 MPT 操作的狀態轉換。MPT 表具有以下表佈局:
MPT 電路的目標是驗證上述 MPT 表的正確性,即確保 MPT 表中記錄的每次更新都會導致正確的更改。為了實現這個目標,MPT 電路使用約束系統來強制執行 MPT 的唯一更改。這意味著對於 MPT 表中的每個更新,MPT 電路會確保只有一種可能的更改方式。這樣可以防止意外或非法的更改,並確保 MPT 的完整性和正確性。特別地,當 MPT 由於帳戶或儲存的更新而發生更改時,MPT 電路必須證明這次更新會導致正確的根更改。這意味著 MPT 電路需要驗證更新操作是否按照規定的規則進行,並且確保根hash正確地反應了所有更改的結果。
Keccak Circuit
Scroll 在遵循 NIST Keccak 規範、Keccak 團隊 Keccak 規範的條件下實現了他們自己的 Keccak256。
而 Keccak 電路則用於證明 Keccak256 運算結果的正確性。這部分電路的實現複雜,主要因為 keccak256 演算法本身就是 zk-unfriendly 的。
Tx Circuit
Tx 電路提供了驗證交易正確性的約束條件。它主要檢查交易的以下幾個方面:
1. CallDataLength 和累積 CallDataGasCost 的正確性:通過自定義門和查詢 tx 表中 tx 的最後一行 call data 位元組;
2. TxSign 和 TxHash 相關資料的正確性:通過查詢 RLP 表和 Keccak 表;
3. 證明 「若 tx_type 為 L1Msg,則 msg_hash」 的正確性:通過查詢 RLP 表進行驗證;
4. 通過 ECDSA 正確執行 tx 簽名,並且能夠正確的從 ECDSA 簽名中恢復呼叫者地址:通過查詢 sig 表進行驗證;
5. tx id、cum_num_txs 和 call_data_length 等的正確過渡行為。
6. 一些基本約束,如一些指示變數的布林值等。
Bytecode Circuit
EVM 電路需要查詢儲存正確位元組碼資訊的位元組碼錶。這確保了合約中儲存的位元組與表中載入的位元組相同。而位元組碼電路的目的是約束上述位元組碼錶的正確性。這包括:
1. 與標籤(tag)的邊界行為相關的約束:首行和末行的約束條件,從 tag==byte 轉換到 header 以及反之的轉換,從 header 轉換到 header 的轉換;
2. 約束程式碼大小:包括通過約束位元組碼的最後一個位元組的索引來計算位元組碼的長度;
3. 約束程式碼hash:對程式碼hash中位元組的 RLC 行為進行正確約束,並通過查詢 Keccak 表來驗證程式碼hash;
4. 確保 PUSH 行為的正確性:is_code = push_data_left == 0(必須是布林值),並通過查詢 push_table 來確保 PUSH1-PUSH32 的推送資料大小;
5. 確保在一個位元組碼中每行的正確傳播。
2. 安全審計
不同的鏈擁有各自的自定義業務模組功能,這些模組通常會修改 EVM 中的預編譯合約以及操作碼,其中 Scroll zkEVM 作為一種基於零知識證明的二層擴容方案,該方案使用電路重構了相關操作碼並根據執行追蹤生成證明,這個複雜的實現極大增加了審計難度。Beosin 安全專家評估後認為,目前 zkEVM 安全審計主要分為以下幾個方面:
1. GAS:zkEVM 電路在生成執行追蹤對應的證明時,會同時校驗交易耗費 gas 的正確性。如果在操作碼的實現電路中高頻率地使用沒有約束的自由變數,可能導致證明生成失敗或其他未知錯誤。
2. 記憶體安全:部分 zkEVM 電路實現的數學基礎是多項式承諾,如 Scroll 使用的 KZG 承諾。而多項式計算不會自動對齊,因此如果電路缺乏約束會導致取值域與電腦程式中的位元組範圍不一致,在部分合約開發者開啟了 gas 優化的情況下,資料的緊湊排列可能導致記憶體安全問題,如 Polygon zkEVM 中的 BYTE_C4096 常數多項式。多項式允許引數的取值範圍超過位元組的最大取值範圍 255,這在一些採取 AMM 模式的交易所中,可能導致惡意的 Sequencer 偽造引數獲利。本質上,這一類的漏洞都是由於電路表示的數值有效範圍與程式的變數取值範圍不一致導致的,如 Beosin 安全研究員在 Snarkjs 庫中發現的漏洞 CVE-2023-33252。
3. 操作碼安全:zkEVM 操作碼實現時,存在普遍的欠約束等安全問題,尤其是精度問題。例如底層電路在實現兩個數的比較時,如果程式中比較運算的精度為 1 個位元組,那麼電路約束需要規定取值範圍,否則電路中運算的精度將遠超程式精度,導致結果錯誤。
4. 安全 EIP 支援:EIP-2、EIP-155 等安全類 eip 的支援。
5. Sequencer 中心化問題:目前 Scroll 生成的證明全部依賴 Sequencer 生成的執行追蹤,如果 Sequencer 作惡,zkEVM 無法保護使用者資產安全。
6. 相容性問題:zkEVM 根據執行蹤跡生成電路證明並在合約驗證,即使 Sequencer 進行微小的升級,也可能導致底層語言級別生成的執行蹤跡存在較大差異。
Scroll 的未來展望
1. Scroll 目前採用了兩層 KZG 版本的 Halo2 證明系統,使用 GPU 硬體加速加快證明生成的速度,目前瓶頸轉移到了見證生成和複製資料這部分。此外,Roller 的中心化程度和硬體執行費用也是 Scroll 在未來發展多階段證明系統需要考慮的部分。
2. 因為 EVM 執行蹤跡是動態變化的,會存在各種各樣的電路約束和規模。目前為滿足動態變化執行蹤跡,每步執行蹤跡都需要滿足最大的電路規模,造成額外的記憶體浪費。
3. Scroll 的 Roller 目前預計通過網路交易費用獲利,然而當前 Scroll 網路的使用者數和交易費用無法滿足 Roller 和排序器的執行費用。在未來,Scroll 網路如何進行經濟激勵以吸引使用者和維持網路穩定執行是一個需要思考的問題。
📍相關報導📍
ZK Rollup 新星|Scroll 宣布Q3上線主網!估值達18億美元