Scroll會帶動Layer2新浪潮嗎?以及你不得不知曉的zkEVM電路與審計知識

中級Dec 27, 2023
本文詳細分析 Scroll 的架構與技術,幫助大家了解 Scroll 目前的網路狀態與未來的髮展方曏,以及解説 Scroll zkEVM 電路與稽核知識
Scroll會帶動Layer2新浪潮嗎?以及你不得不知曉的zkEVM電路與審計知識

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相關的硬核安全研究,可閲讀下麵文章:1、三種針對ZK基礎算法Groth16的攻擊手法分享2、深入探究 Tornado.Cash,揭示zkp項目的延展性攻擊

Beosin作爲一家全球領先的區塊鏈安全公司,在全球10多個國家和地區設立了分部,業務涵蓋項目上線前的代碼安全審計、項目運行時的安全風險監控、預警與阻斷、虛擬貨幣被盜資産追回、安全合規KYT/AML等“一站式”區塊鏈安全産品+服務,目前已爲全球3000多個區塊鏈企業提供安全技術服務,審計智能合約超過3000份。歡迎點擊公衆號留言框,與我們聯繫。

聲明:

  1. 本文轉載自[Beosin],著作權歸屬原作者[Beosin],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。

Scroll會帶動Layer2新浪潮嗎?以及你不得不知曉的zkEVM電路與審計知識

中級Dec 27, 2023
本文詳細分析 Scroll 的架構與技術,幫助大家了解 Scroll 目前的網路狀態與未來的髮展方曏,以及解説 Scroll zkEVM 電路與稽核知識
Scroll會帶動Layer2新浪潮嗎?以及你不得不知曉的zkEVM電路與審計知識

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相關的硬核安全研究,可閲讀下麵文章:1、三種針對ZK基礎算法Groth16的攻擊手法分享2、深入探究 Tornado.Cash,揭示zkp項目的延展性攻擊

Beosin作爲一家全球領先的區塊鏈安全公司,在全球10多個國家和地區設立了分部,業務涵蓋項目上線前的代碼安全審計、項目運行時的安全風險監控、預警與阻斷、虛擬貨幣被盜資産追回、安全合規KYT/AML等“一站式”區塊鏈安全産品+服務,目前已爲全球3000多個區塊鏈企業提供安全技術服務,審計智能合約超過3000份。歡迎點擊公衆號留言框,與我們聯繫。

聲明:

  1. 本文轉載自[Beosin],著作權歸屬原作者[Beosin],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!