menu-icon
anue logo
熱門時事鉅亨號鉅亨買幣
search icon

區塊鏈

深度解析zkEVM:工作原理、構建難度、重要性以及開發進展等

BlockBeats 律動財經 2022-11-11 22:02

cover image of news article
律動財經圖片

零知識以太坊虛擬機(zkEVM)是一種生成零知識證明來驗證程序正確性的虛擬機。ZkEVM 旨在以支持零知識技術的方式執行智能合約。 

ZkEVM 是零知識 (ZK) 匯總的一部分,這是以太坊第 2 層擴展解決方案,通過將計算和狀態儲存轉移到鏈下來提高吞吐量。ZK-rollup 向以太坊提交交易數據以及驗證鏈下交易批次有效性的零知識證明。 

早期的 ZK-rollup 缺乏執行智能合約的能力,並且受限於簡單的Token交換和支付。但是,隨著與 EVM 兼容的零知識虛擬機的引入,ZK-rollups 開始支持以太坊 dApp。

在本文中,我們將探討 zkEVM 的工作原理、重要性以及存在哪些類型的 zkEVM。 


什麼是 zkEVM?

zkEVM 是與 EVM 兼容的虛擬機,支持零知識證明計算。與常規虛擬機不同,zkEVM 證明程序執行的正確性,包括操作中使用的輸入和輸出的有效性。 

我們將進一步分解此定義以使其更易於理解:

EVM 兼容性 

EVM(以太坊虛擬機)是執行部署在以太坊網路上的智能合約的運行時環境。EVM 充當「世界計算機」,為運行在以太坊區塊鏈上的去中心化應用程序 (dApps) 提供動力。 

如果虛擬機可以運行為在 EVM 環境中運行而創建的程序,則它是「與 EVM 兼容的」。這樣的虛擬機可以執行用 Solidity 或以太坊開發中使用的其他高級語言編寫的智能合約。ZkEVM 與 EVM 兼容,因為它們無需對底層邏輯進行大量修改即可執行以太坊智能合約。

支持零知識技術 

EVM 從未設計為支持零知識證明,這使得構建與 EVM 兼容、對零知識友好的虛擬機變得困難。然而,研究的進步在某種程度上使得將 EVM 計算包裝在零知識證明中成為可能。

不同的 zkEVM 項目採用不同的方法將 EVM 執行與零知識證明計算相結合。每種方法都有獨特的權衡,我們將在本指南的後面部分進行探討。 

zkEVM 是如何工作的?

與 EVM 一樣,zkEVM 是一個虛擬機,它通過程序操作在狀態之間轉換。但是 zkEVM 更進一步,通過生成證明來證明計算的每個部分的正確性。本質上,zkEVM 使用一種機制來證明執行步驟(如前所述)遵循規則。 

要了解 zkEVM 的工作原理(以及它為何不同),讓我們回顧一下 EVM 當前的工作原理。 

EVM 的工作原理

以太坊虛擬機是一種狀態機,它響應一些輸入而從舊狀態行動到新狀態。每個智能合約執行都會觸發 EVM 狀態的變化(稱為「狀態轉換」)。以下是智能合約交易期間發生的情況的高級概述:

1. 合約字節碼(從源代碼編譯而來)從 EVM 的儲存中加載,並由 EVM 上的點對點節點執行。節點使用相同的交易輸入,這保證了每個節點都達到相同的結果(否則它們無法達成共識)。 

2. EVM 操作碼(包含在字節碼中)與 EVM 狀態的不同部分(內存、儲存和堆棧)交互。操作碼執行讀寫操作——從狀態儲存讀取(獲取)值並將新值寫入(發送)到 EVM 的儲存。 

3. EVM 操作碼在返回新值之前對從狀態儲存中獲得的值執行計算。此更新導致 EVM 轉換到新狀態(因此,事務被稱為「狀態轉換」)。這個新狀態被其他節點複製並保持到另一個事務被執行。 

image.png

顯示程序如何在
以太坊
虛擬機 (EVM) 中執行的圖表。[來源]

zkEVM 的工作原理 

zkEVM 生成零知識證明來驗證每次計算中的各種元素:

1. 字節碼訪問:是否從正確的地址正確加載了適當的程序代碼? 

2. 讀寫操作:程序是否在計算之前從堆棧/內存/儲存中獲取了正確的值?灣。程序在完成執行後是否將正確的輸出值寫入堆棧/內存/儲存? 

3. 計算:操作碼是否正確執行(即一個接一個,沒有跳過步驟)? 

zkEVM 的架構

zkEVM 分為三個部分:執行環境、證明電路和驗證者合約。每個組件都有助於 zkEVM 的程序執行、證明生成和證明驗證。 

1. 執行環境 

顧名思義,執行環境是在 zkEVM 中運行程序(智能合約)的地方。zkEVM 的執行環境功能與 EVM 非常相似:它採用初始狀態和當前事務來輸出新的(最終)狀態。

2. 驗證電路 

證明電路產生零知識證明來驗證在執行環境中計算的交易的有效性。使用前狀態、交易輸入和後狀態資訊作為輸入來完成證明生成過程。之後,證明者獲得該特定狀態轉換有效性的簡潔證明。 

image.png

顯示 zkEVM 如何為程序生成有效性證明的圖表。[來源]

3. 驗證者合約 

ZK-rollups 將有效性證明提交給部署在 L1 鏈(以太坊)上的智能合約進行驗證。輸入(預狀態和交易資訊)和輸出(最終狀態)也提交給驗證者合約。然後驗證者在提供的證明上運行計算,並確認提交的輸出是根據輸入正確計算的。 

什麼是 zkEVM 操作碼?

ZkEVM 操作碼是用於在與 EVM 兼容的 ZK-rollup 中執行程序的低級機器指令。與 EVM 一樣,用高級語言編寫的合約必須編譯為 VM 可以解釋的低級語言(字節碼)。該字節碼指定了在 VM 中部署程序時用於執行程序的操作碼。

我們需要 zkEVM 操作碼,因為常規的 EVM 操作碼在零知識證明電路中的使用效率很低。通常有兩種方法可以為 zkEVM 創建操作碼:

為原生 EVM 操作碼構建 ZK 電路

為 ZK 證明計算創建新語言

為原生 EVM 操作碼構建零知識電路 

這種方法需要在算術電路中實現所有 EVM 指令集——這是一項複雜且耗時的任務。好處是開發人員可以使用現有的區塊鏈開發工具創建智能合約,或將現有的以太坊合約移植到 ZK-rollups,而無需進行大量修改。  

為 ZK 證明計算創建新語言

這種方法需要構建一種新語言——旨在支持有效性證明——並開發自定義操作碼。開發人員需要直接用新語言編寫合約,或者將 Solidity 源代碼編譯為自定義 zkEVM 操作碼。 

雖然這種方法通常比第一種方法更容易實現,但它也有缺點。例如,開發人員可能無法訪問現有的以太坊基礎設施和資源。 

image.png

根據 EVM 兼容性分類的零知識虛擬機。[來源]

是什麼讓構建 zkEVM 變得困難?

由於 EVM 在構建時並未考慮 zk-proof 計算,因此它具有對證明電路不友好的特性。下面簡要概述了使構建 zkEVM 變得困難的四件事:

特殊的操作碼

基於堆棧的架構

儲存開銷

證明成本

1. 特殊的操作碼 

與常規 VM 不同,EVM 使用特殊的操作碼來執行程序(CALL、DELEGATECALL)和錯誤處理(REVERT、INVALID)以及其他操作。這增加了為 EVM 操作設計驗證電路的過程的複雜性。 

2. 基於堆棧的架構 

EVM 使用基於堆棧的架構,雖然比基於寄存器的結構更簡單,但增加了計算證明的難度。這就是為什麼著名的零知識 VM,例如 ZkSync 的 zkEVM 和 StarkWare 的 StarkNet 使用基於寄存器的模型。 

3. 儲存開銷

EVM 的儲存布局依賴於 Keccak 散列函數和 Merkle Patricia Trie,兩者都有很高的證明開銷。一些 zkVM,比如 ZkSync,試圖通過替換 KECCAK256 函數來迴避這個問題——但這可能會破壞與現有以太坊工具和基礎設施的兼容性。

4. 證明成本 

即使解決了上述問題,仍然需要應對證明生成過程。生成零知識證明需要專門的硬體以及大量的時間、金錢和精力投入。 

儘管並非詳盡無遺,但此列表提出了一些阻礙構建與 EVM 兼容的 zkEVM 的問題。儘管如此,零知識技術的幾項突破使得緩解這些問題成為可能——導致人們對 zkEVM 解決方案重新產生興趣。 

為什麼 zkEVM 很重要?

構建功能齊全的 zkEVM 將鼓勵與 EVM 兼容的ZK-rollup 項目的開發。這具有幾個優點:

安全的可擴展性

成本更低

更快的最終確定性和資本效率

網路效應

1. 安全的可擴展性

根據協議規則,所有驗證節點必須重新執行在以太坊虛擬機中執行的所有計算。這種方法確保了安全性,因為以太坊節點可以獨立驗證程序的正確性,但它限制了以太坊網路只能管理約 15-20 個交易的可擴展性)。

與 EVM 兼容的 ZK-rollup 可以解決以太坊的吞吐量問題,而不會破壞網路安全。與其他擴展協議一樣,ZK-rollups 不受以太坊共識協議規則的負擔,並且可以優化執行速度。一些估計表明,ZK- rollups 每秒可以處理約 2000 筆交易,而不會產生以太坊的高額費用。

但是,ZK-rollups 與其他擴容項目相比具有更高的安全保障;他們用有效性證明來驗證鏈下計算的正確性。這意味著智能合約在 L2 上執行的交易可以在 L1(以太坊)上可靠地驗證,而無需節點重新執行操作。這可以在不降低安全性的情況下顯着提高以太坊的處理速度。 

2. 更低的成本

Rollups 通過將交易數據作為 CALLDATA 寫入以太坊來從以太坊主網獲得安全性。然而,樂觀匯總和零知識匯總的不同之處在於它們必須在以太坊上發布多少數據。

 

因為樂觀匯總不提供鏈下交易的有效性證明,所以它們需要在鏈上發布所有與交易相關的數據(包括簽名和交易參數)。如果不將所有數據都放在鏈上,挑戰者就無法構建用於對無效匯總交易提出爭議的欺詐證明。 

相反,ZK-rollups 可以將最少的數據發布到以太坊,因為有效性證明已經保證了狀態轉換的可信度。zkEVM 甚至可以省略交易輸入並僅發布最終狀態更改,從而進一步降低 CALLDATA 要求。 

3. 更快的確定性和資本效率 

除了更好的安全性之外,ZK-rollups 與樂觀 rollups 相比還有另一個優勢:更快的最終確定性。區塊鏈中的確定性是交易變得不可逆轉所需的時間;只有當網路參與者有客觀證據證明其有效性時,交易才能最終確定。 

使用 ZK-rollups,在 zkEVM 中執行的交易通常在發布到以太坊後立即完成。由於每個交易批次都帶有即時可驗證的有效性證明,因此以太坊主鏈可以快速應用狀態更新。 

由於樂觀匯總僅在沒有證明的情況下發布 VM 事務,因此必須經過質詢期才能使事務達到最終確定性。挑戰期是 1-2 周,在此期間,任何人都可以在交易提交到以太坊後對其進行挑戰。 

較慢的最終確定性對用戶體驗有很多影響。例如,在延遲期到期之前,用戶不能從匯總中提取資產。流動性提供者可能會解決問題,但如果提款涉及高價值資產甚至 NFT,則可能無效。 

zkEVM 沒有上述問題。更快的最終確定性非常適合高級用戶,例如需要無縫行動資產(尤其是在 L1 和 L2 之間)的 NFT 交易者、DeFi 投資者或套利交易者。 

4. 網路效應

構建與 EVM 兼容的 zkVM 的最重要原因是利用以太坊的網路效應。作為全球最大的智能合約平台,以太坊擁有龐大的生態系統,為開發者和項目提供價值。 

例如,開發人員可以訪問經過實戰測試和審計的代碼庫、廣泛的工具、文檔等。創建一個與以太坊基礎設施不兼容的新 zkVM 將使項目和開發團隊無法利用以太坊的網路效應。 

有哪些類型的 zkEVM?

當前的 zkEVM 項目分為兩大類:支持原生 EVM 操作碼的 zkVM 和使用自定義 EVM 操作碼的 zkVM。下面我們比較不同的 zkEVM 協議並解釋它們是如何工作的:

Polygon zkEVM

Polygon Hermez 是一個帶有零知識虛擬機的Polygon ZK-rollup,旨在支持 EVM 兼容性。為此,EVM 字節碼被編譯成「微操作碼」並在 uVM 中執行——一個使用 SNARK 和 STARK 證明來驗證程序執行正確性的虛擬機。 

結合這兩種證明類型的決定具有戰略意義。STARK(可擴展的透明知識論證)證明的生成速度更快,但 SNARK(簡潔的非交互式知識論證)證明更小,在以太坊上驗證成本更低。 

Polygon Hermez zkEVM使用 STARK 證明電路來生成狀態轉換的有效性證明。STARK 證明驗證 STARK 證明的正確性(將其視為生成「證明的證明」)並提交給以太坊進行驗證。 

zkSync zkEVM

zkSync 是一個與 EVM 兼容的 ZK-rollup,由 Matter Labs 開發並由其自己的zkEVM提供支持。ZkSync 使用以下策略實現與以太坊的兼容性:

1. 將 Solidity 編寫的合約代碼編譯成 Yul,一種中間語言,可以編譯成不同虛擬機的字節碼。 

2. 將 Yul 字節碼(使用 LLVM 框架)重新編譯為專門為 zkSync 的 zkEVM 設計的自定義、電路兼容的字節碼集。 

與 Polygon Hermez 一樣,zkSync zkEVM 在語言級別而不是字節碼級別實現 EVM 兼容性。例如,zkSync 的 zkEVM 不支持傳統的乘法和加法操作碼(ADDMOD、SMOD、MULMOD)。 

Scroll zkEVM

Scroll是一個正在開發的新的零知識 EVM 實現。Scroll 團隊計劃為每個 EVM 操作碼設計零知識電路。這將允許開發人員在 Scroll 上部署以太坊原生智能合約 EVM,而無需修改底層 EVM 字節碼。 

除此之外,Scroll zkEVM 將使用「密碼累加器(cryptographic accumulator)」來驗證儲存的正確性。這用於證明合約字節碼是從給定地址正確加載的。 

它還提供了一個將字節碼與執行跟蹤鏈接起來的電路。執行跟蹤是一個序列,指定執行了哪些 VM 指令以及執行順序。證明者將在證明生成期間提交執行跟蹤,以驗證計算與原始字節碼是否一致。 

Applied ZKP zkEVM

Applied ZKP是由以太坊基金會資助的一個項目,旨在開發與 EVM 兼容的 ZK-rollup 以及為以太坊區塊生成有效性證明的機制。最後一部分至關重要,因為將塊與有效性證明配對將消除節點重新執行塊的需要。 

Applied ZKP 的創新在於計算與儲存的分離。它使用兩種類型的有效性證明——狀態證明和 EVM 證明: 

狀態證明

檢查涉及儲存、內存和堆棧的操作是否正確發生。狀態證明本質上是驗證讀寫操作的準確性。 

EVM 證明

檢查計算是否在正確的時間調用了準確的操作碼。EVM 證明驗證計算本身,並確認狀態證明為每個操作碼執行了正確的操作。 

AppliedZKP zkEVM 使用總線映射來鏈接狀態證明和 EVM 證明。此外,在以太坊區塊被視為有效之前,必須驗證這兩個證明。

我們在 zkEVM 的開發進度中處於什麼位置?

除了 zkSync,大多數零知識 EVM 仍在開發中。然而,零知識技術的不斷發展意味著功能齊全的 zkEVM 的前景比以往任何時候都好。 

原文連結

暢行幣圈交易全攻略,專家駐群實戰交流

▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!

前往鉅亨買幣找交易所優惠

文章標籤


Empty