什麼是zkEVM ?
zkEVM 是一個支持零知識證明計算的EVM 兼容的虛擬機。與普通虛擬機不同,zkEVM 可以證明程序執行的正確性,包括操作中使用的輸入和輸出的有效性。
EVM 的兼容性
EVM 是一個runtime 環境,用來執行部署在以太坊上的智能合約。 EVM 的功能就好比是一台為運行在以太坊區塊鏈上的dApps 提供動力的“世界計算機” 。
如果一個虛擬機能夠運行那些可以在EVM 環境中運行的程序,那麼它就是“EVM 兼容” 的,這樣的虛擬機可以執行那些用Solidity 或以太坊開發中使用的其它高級語言編寫的智能合約。也就是說,zkEVM 之所以EVM 兼容,是因為它可以執行以太坊智能合約,且同時無需對底層邏輯進行大量修改。
支持零知識技術
EVM 在設計之時,並未考慮到要支持零知識證明,這使得構建EVM 兼容的零知識友好虛擬機變得困難。不過伴隨研究方面的進展,使得可以將EVM 的計算包裹到零知識證明中。
不同的zkEVM 項目採用不同的方法結合EVM 的執行和零知識證明的計算。每種方法都有各自的權衡考慮,這將在後文中探討。
zkEVM 是如何工作的?
與EVM 一樣,zkEVM 也是一個基於程序操作結果而在不同狀態之間轉換的虛擬機。但zkEVM 更進一步,它通過產生一個證明來證明計算的每一部分是正確的。本質上,zkEVM 使用一種機制來證明執行步驟是遵循了規則的。
為了理解zkEVM 是如何工作的,讓我們先回顧一下EVM 目前是如何工作的。
EVM 如何工作
EVM 是一個狀態機,它根據某些輸入從舊狀態轉換到新狀態。每個智能合約的執行都會觸發EVM 狀態的變化(稱為"狀態轉換")。下面是一個智能合約交易過程中所發生情況的高級概述。
1. 合約字節碼(由源代碼編譯而成)從EVM 的存儲中加載,並由EVM 上的點對點節點執行。節點使用相同的交易輸入,以保證每個節點都將得到相同的結果(否則他們無法達成共識)。
2. EVM 操作碼(包含在字節碼中)與EVM 狀態的各個部分(內存、存儲和堆棧)交互。操作碼執行讀寫操作(read-write operations) —— 從狀態存儲中讀取(獲取)數值,並將新數值寫入(發送)到EVM 的存儲中。
3. EVM 操作碼在返回新數值之前,會對從狀態存儲中獲得的數值進行計算,這種更新會使EVM 轉換到一個新的狀態(交易因此被稱為"狀態轉換")。這個新狀態被其它節點複製,直到另一個交易被執行。
如圖顯示了程序(智能合約)如何在EVM 中執行
zkEVM 如何工作
zkEVM 通過生成零知識證明來驗證每次計算中的各種元素。
1. 字節代碼訪問:是否從正確的地址正確加載了適當的程序代碼?
2. 讀寫操作:
a. 在計算之前,程序是否從堆棧/內存/存儲中獲取了正確的值?
b. 在完成執行之後,程序是否將正確的輸出值寫入了堆棧/內存/存儲?
3. 計算:操作碼是否正確執行(即一個接一個,不跳步)
zkEVM 的結構
zkEVM 分為三個部分:執行環境、證明電路和驗證者合約。每部分都對zkEVM 的程序執行、證明生成和證明驗證有所貢獻。
1. 執行環境顧名思義,執行環境是程序(智能合約)在zkEVM 中運行的地方。 zkEVM 的執行環境功能很像EVM:採取初始狀態和當前交易來輸出一個新的(最終的)狀態。
2. 證明電路證明電路產生零知識證明,驗證在執行環境中計算交易的有效性。證明生成過程是通過使用前狀態、交易輸入和後狀態信息來作為輸入完成的。之後,證明者獲得該特定狀態轉換的有效性簡潔證明。
該圖顯示了zkEVM 如何為程序生成有效性證明
3. 驗證者合約
zk-rollups 將有效性證明提交給部署在L1 鏈(以太坊)上的智能合約以進行驗證。輸入(前狀態和交易信息)和輸出(最終狀態)也將會提交給驗證者合約。然後,驗證者對提供的證明進行計算,並確認提交的輸出是由輸入正確地計算出來的。
什麼是zkEVM 操作碼?
zkEVM 操作碼是用於在EVM 兼容的zk-rollups 中執行程序的低級機器指令。與EVM 一樣,用高級語言編寫的合約必須被編譯成虛擬機可以解釋的低級語言(字節碼),當在虛擬機中部署程序的時候,該字節碼指定了執行程序時所需使用的操作碼。
zkEVM 操作碼是非常有必要的,因為普通的EVM 操作碼在零知識證明電路中的使用效率非常低。通常有兩種方法來創建zkEVM 的操作碼:
- 為原生EVM 操作碼建立零知識電路
- 為零知識證明計算創建新語言
為原生EVM 操作碼建立零知識電路這種方法需要在算術電路中實現所有的EVM 指令集,是一項複雜而費時的任務。好處是開發者可以使用現有的區塊鏈開發者工具創建智能合約,或者將現有的以太坊合約移植到zk-rollups,而無需對其進行大量修改。
為零知識證明計算創建新語言這種方法需要為有效性證明開發一種新語言和自定義操作碼。開發人員直接用新語言編寫合約,或者將Solidity 源代碼編譯為自定義的zkEVM 操作代碼。
雖然這種方法通常比第一種方法更容易實現,但可能導致開發人員無法訪問現有的以太坊基礎設施和資源。
根據EVM 兼容性,對zkVM 進行分類。
構建zkEVM 的困難點在哪裡?
由於EVM 在建造時並沒有考慮到零知識計算,所以它的一些特性對證明電路來說是不太友好的。以下四個方面是使構建zkEVM 變得困難的主要原因:
- 特殊操作碼
- 基於堆棧的結構
- 存儲開銷
- 證明成本
1. 特殊操作碼與普通的虛擬機有所不同,EVM 在程序執行(CALL、DELEGATECALL)和錯誤處理(REVERT、INVALID)等操作中使用了特殊的操作碼,它增加了EVM 操作證明電路設計過程的複雜性。
2. 基於堆棧的架構
EVM 使用的基於堆棧的結構,雖然比基於寄存器的結構簡單,但增加了證明計算的難度。這就是為什麼那些著名的zkVM,如ZkSync 的zkEVM 和StarkWare 的StarkNet 都使用基於寄存器的模型。
3. 存儲開銷
EVM 的存儲佈局依賴於Keccak 函數和Merkle Patricia Trie,這兩者的證明開銷都很高。一些zkVM,如ZkSync,試圖通過替換Keccak 256 函數來避開這個問題,但這可能會破壞與現有以太坊工具和基礎設施的兼容性。
4. 證明成本即使解決了上述問題,仍還需處理生成證明的過程。生成零知識證明需要專門的硬件,以及需要投資大量的時間、金錢和精力成本。
以上這些問題阻礙了建立與EVM 兼容的zkEVM。然而,零知識技術方面的一些突破,在一定程度上已經可以緩解這些問題帶來的影響,這使人們重新對zkEVM 解決方案產生興趣。
為什麼zkEVM 如此重要?
建立功能齊全的zkEVM 將鼓勵開發與EVM 兼容的zk-rollups 項目。這樣做有幾個優點:
- 安全的可擴展性
- 更便宜的成本
- 更快的最終確定性和資本效率
- 網絡效應
1. 安全的可擴展性根據協議規則,所有驗證節點必須重新執行在EVM 中進行的所有計算。這種方法確保了安全性,因為以太坊節點可以獨立驗證程序的正確性,但它限制了以太坊網絡的可擴展性,每秒只能管理15-20 筆交易。
與EVM 兼容的zk-rollups 可以在解決以太坊吞吐量問題的同時,而不破壞網絡的安全性。和其它擴展協議一樣,zk-rollups 不受以太坊共識協議規則的影響,並且可以優化執行速度。一些估測資料顯示,zk-rollups 每秒可以處理約2000 個交易,且不會產生高額費用。
除此以外,與其它擴展項目相比,zk-rollups 具有更高的安全保障—— 它們用有效性證明驗證鏈外計算的正確性。也就是說,智能合約在L2 上執行的交易可以在L1(以太坊)上得到可靠的驗證,但無需節點重新執行操作。這大大增加了以太坊的處理速度且不降低安全性。
2. 更便宜的成本
Rollups 通過將交易數據作為CALLDATA 寫入以太坊,來承襲以太坊主網的安全性。不過optimistic rollups 和zk-rollups 需要在以太坊上發布的數據多少是有區別的。
由於optimistic rollups 不提供鏈外交易的有效性證明,所以它們需要在鏈上發布所有與交易相關的數據(包括簽名和交易參數)。如果不把所有數據放在鏈上,挑戰者就無法構建用於爭議無效rollups 交易的欺詐證明。
相反,即使只向以太坊發布最少的數據量,zk-rollups 也負擔得起。因為有效性證明已經保證了狀態轉換的可信性。 zkEVM 甚至可以省略交易輸入,只發布最終的狀態變化,進一步減少對CALLDATA 的需求。
這對開發者和用戶來說都是有益的,因為很大比例的rollups 成本來自於在鏈上發布數據。通過將CALLDATA 的調用減少到最低限度,zk-rollups 可以降低dapps 的使用成本,比如去中心化的交易所、NFT市場、預測市場等等。
3. 更快的最終確定性和資本效率除了更好的安全性之外,zk-rollups 相較optimistic rollups 還有一個優勢:更快的最終確定性。區塊鏈中的最終確定性是指交易變為得不可逆所需的時間;只有當網絡參與者對交易的有效性有客觀證明時,交易才能最終完成最終確定性。
基於zk-rollups,在zkEVM 中執行的交易通常在發佈到以太坊上後立即被最終確定。歸功於每個交易批都帶有即時可驗證的有效性證明,以太坊主鏈可以快速應用狀態更新。
由於optimistic rollups 只發布沒有證明的虛擬機交易,所以挑戰期必須在交易實現最終確定性之前結束。挑戰期長達1-2 週,在此期間,任何人都可在交易提交給以太坊之後對其提出挑戰。
較慢的最終確定性對用戶體驗有很多影響。例如,在挑戰期結束之前,用戶不能從rollups 中提取資產。或許流動性供應商願意解決這個問題,但如果提款涉及高額資產甚至NFT,可能他們也無能為力了。
但zkEVM 沒有上述這些問題。更快的最終確定性對於重量級用戶來說是非常好的,如NFT 交易者、DeFi 投資者或需要無縫移動資產(特別是在L1 和L2 之間)的套利交易者。
4. 網絡效應構建EVM 兼容的zkVM 的最重要原因是為了利用以太坊的網絡效應。以太坊作為世界上最大的智能合約平台,擁有一個為開發者和項目提供價值的龐大生態系統。例如,開發人員可以訪問經過審計和戰鬥測試的代碼庫、廣泛的工具、文檔等。如若創建一個與以太坊基礎設施不兼容的新zkVM, 則會阻斷項目和開發團隊利用以太坊的網絡效應。
存在哪些類型的zkEVM ?
目前的zkEVM 項目主要分為兩類:支持原生EVM 操作碼的zkVM,和使用定制EVM 操作碼的zkVM。接下來我們將比較不同的zkEVM 協議,並了解它們是如何工作的。
Polygon zkEVM
Polygon Hermez 是一個具有zkVM 的Polygon zk-rollup,旨在支持EVM 的兼容性。為此,EVM 字節碼被編譯成“微操作碼(micro opcodes)” 並在uVM 中執行,uVM 使用SNARK 證明和STARK 證明來驗證程序執行的正確性。
將這兩種證明類型結合起來是一個戰略性的決定。 STARK 證明的生成速度更快,SNARK 由於證明更小,所以在以太坊上驗證會更便宜。
Polygon Hermez zkEVM 使用一個STARK 證明電路來生成狀態轉換的有效性證明,用SNARK 證明驗證STARK 證明的正確性(可以認為是生成"證明的證明"),並將SNARK 證明提交到以太坊進行驗證。
zkSync zkEVM
zkSync 由Matter Labs 開發,是一個由自己的zkEVM 驅動的EVM 兼容的zk-rollups。 ZkSync 通過以下策略實現了EVM 兼容。
1. 將Solidity 編寫的合約代碼編譯成Yul。 Yul 是一種可以被不同的虛擬機編譯成字節碼的中間語言。
2. 將Yul 字節碼(使用LLVM 框架)重新編譯為專為zkSync zkEVM 設計的自定義、電路兼容的字節碼集。
與Polygon Hermez 一樣,zkSync zkEVM 在語言層面實現了EVM 的兼容性,而不是在字節碼層面。例如,zkSync zkEVM 不支持傳統的乘法和加法操作碼(ADDMOD、SMOD、MULMOD)。
Scroll zkEVM
Scroll 是一個正在開發的新的zkEVM 實現。 Scroll 團隊計劃為每個EVM 操作碼設計零知識電路。這將允許開發人員在Scroll 上部署以太坊原生智能合約EVM,而無需修改底層EVM 字節碼。
在其它方面,Scroll zkEVM 將使用“加密累積器(cryptographic accumulator)” 來驗證存儲的正確性。這被用來證明合約字節碼從給定的地址被正確地加載。
它還提供了一個電路,用於將字節碼與執行跟踪聯繫起來。執行跟踪是一個序列,它指定了哪些虛擬機指令以何種順序被執行。證明者將在證明生成過程中提交執行跟踪,以驗證計算是否與原始字節碼一致。
AppliedZKP zkEVM
Applied ZKP 是一個由以太坊基金會資助的項目,旨在開發一個EVM 兼容的zk-rollup 和一個為以太坊區塊生成有效性證明的機制。後者是至關重要的,因為將區塊與有效性證明配對將消除節點重新執行區塊的需要。
Applied ZKP 的創新是將計算與存儲分離。它使用兩種類型的有效性證明—— 狀態證明和EVM 證明。
狀態證明檢查觸及存儲、內存和堆棧的操作是否正確地發生。狀態證明本質上是驗證讀寫操作的準確性。
EVM 證明檢查計算是否在正確的時間調用了正確的操作碼。 EVM 證明驗證了計算本身,也確認了狀態證明對每個操作碼執行了正確的操作。
AppliedZKP zkEVM 使用一個總線映射來連接狀態證明和EVM 證明。而且,在以太坊區塊被視為有效之前,這兩個證明都必須得到驗證。
zkEVM 的開發行至何處了?
除了zkSync,大多數zkEVM 仍在開發完善中。儘管如此,零知識技術的不斷發展意味著全功能的zkEVM 的前景比以往任何時候都要好。
同時,開發者可以利用StarkNet zkVM 來發揮零知識應用的優勢。 StarkNet 雖然與EVM 不兼容,但可以將Solidity 源代碼編譯成自定義的零知識友好的字節碼。你也可以選擇用Cairo(StarkNet 的語言)編寫合約。
END
zCloak Network 是基於零知識證明技術的隱私計算服務平台,使用zk-STARK 虛擬機為通用計算進行零知識證明的生成與驗證。基於獨創的自主權數據和自證明計算技術,可以讓用戶在無需對外發送數據的情況下,實現對數據的分析和計算。項目採用“零知識證明即服務”的商業模式,打造一站式的多鏈隱私計算基礎設施。 zCloak 的首個產品zkID.app 是一個鏈上數字身份與數據隱私保護解決方案。無論是企業、個人還是IoT 設備,都可以藉由zkID 獲得符合W3C 國際標準的數字身份,並完成相關數字憑證的製備、公證、傳遞和驗證等相關工作,整個過程由符合工業標準的密碼技術保障其安全可靠。
原文出自Alchemy,原文鏈接: https://www.alchemy.com/overviews/zkevm
轉載請註明原文與本文出處及翻譯團隊zCloak Network