從合約部署的角度區分不同的zkEVM

來源:pseudotheos.mirror.xyz

作者:Pseudotheos

以太坊虛擬機(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,然後再編譯成字節碼。

Total
0
Shares
Related Posts