本文通過解釋在 EVM 以及不同類型的 zkEVM 中如何部署合約以區別不同兼容程度的 zkEVM。

原文:Distinguishing zkEVMs

作者:pseudotheos

翻譯: Franci,ECN

以太坊虚拟机 (EVM) 是在以太坊区块链上管理状态和执行智能合约的虚拟机。zkEVMs 旨在通过零知识电路来证明 EVM 的执行,这个领域在过去的一年里已经有了显著的增长并扩张为一个行业。在该领域涌现了许多不同的项目和社区,每个项目和社区都采取了自己独特的方案来应对这两种技术交叉带来的挑战和机遇。

對比不同 zkEVM 項目的一個維度是 EVM 的兼容程度。雖然 EVM 兼容是一個連續介質,但有兩種主要的方案:語言層面的兼容和字節碼層面的兼容。

要理解這些方案之間的區別,很重要的一點是了解 EVM 如何執行用 Solidity 或 Vyper 等高級語言編寫的代碼。

為了使 EVM 能夠運行智能合約所指定的行為,有這樣一個過程:高級語言被編譯成字節碼,與 EVM 相連接。對於 Solidity,典型的流程如下:

  1. 首先,合約是用 Solidity 編程語言編寫的,並保存為一個 .sol  文件。這個文件包含合約的函數、變量和其他元素。Solidity 代碼通常使用集成開發環境 (IDE) 編寫,並遵循特定的語法和結構。
  2. 接下來,使用 Solidity 編譯器將 .sol  文件編譯成字節碼 [1]。字節碼是一種有效存儲的、機器可讀的操作碼表示,可以在 EVM 上執行。操作碼  是 EVM 能夠直接解釋和執行的低層級指令。編譯過程包括幾個步驟,如語法檢查、類型檢查和優化,以確保字節碼的正確和有效的。
  3. 一旦合約被編譯成字節碼,它就可以被部署到以太坊。這通常涉及到向交易池發送一個帶有合約字節碼的交易。該交易最終被納入以太坊區塊,然後合約被創建。
  4. 合約部署後,它可以與以太坊上的其他合約和用戶進行互動。

上述流程描述了合約如何被部署到以太坊。部署到 zkEVM 的流程將根據它是字節碼層面兼容的還是語言層面兼容的而有所不同。

圖片

執行和證明具有與 EVM 相同的字節碼的 zkEVM 被稱為 “字節碼層面兼容”。在字節碼兼容的 zkEVM 中,除了合約部署地方的不同,對開發者的體驗沒有任何改變。這種 zkEVM 上可以使用同樣的 Solidity 代碼、編譯器和字節碼。開發者可以繼續使用他們往常使用的編程語言和工具,同時還可以利用零知識電路的可擴展性和加密安全性。這類 zkEVM 需要能夠通過處理相同的低層級操作碼和復制相同的結果來複製 EVM 的行為。這涉及到將操作碼映射到自定義的 ZK 電路上。從工程的角度來看,這種映射是具有挑戰性的,而且操作碼的映射導致更龐大的電路和更高的證明生成成本。然而,它最終會給開發者帶來更簡單的體驗。

語言層級兼容性是指 zkEVM 與高級代碼 (如 Solidity) 一起運行的能力。開發者仍然可以用 Solidity 或其他高級語言編寫代碼,但這種高級代碼必須被編譯成與 EVM 不同的字節碼。這需要一個特定於部署合約的 zkEVM 網絡的編譯步驟。非 EVM 的字節碼可以被設計為更加電路友好,從而使證明生成更高效。

感謝閱讀! 在 Twitter 上關注 @pseudotheos  以獲得未來文章的通知。本文基於 CC BY-SA  版權類型。

腳註

[1]: Solidity 首先被編譯成一種中間語言,稱為 Yul,然後再編譯成字節碼。

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