本文我們將詳細分析 Scroll 的架構和技術,説明大家瞭解 Scroll 當前的網路狀態和未來的發展方向

10 月 10 日 14:00,乙太坊二層解決方案 Scroll 主網產生了第一個區塊,標誌著 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 資產。

source: https://scroll.mirror.xyz/nDAbJbSIJdQIWqp9kn8J0MVS4s6pYBwHmK7keidQs-k

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 電路需要驗證更新操作是否按照規定的規則進行,並且確保根哈希正確地反映了所有更改的結果。

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. 約束代碼哈希:對代碼哈希中位元組的 RLC 行為進行正確約束,並通過查找 Keccak 表來驗證代碼哈希;

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 網路如何進行經濟激勵以吸引使用者和維持網路穩定運行是一個需要思考的問題。

目前,Beosin 也已支援 zk 專案的審計,我們對 zk 相關的硬核安全研究,可閱讀下面文章:

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。