目前包括 Taiko、Polygon、Linea、Scroll 和 zkSync Era 等多個 ZK rollups 專案均推出了自己的 zkEVM,目的是為方便 L1 到 L2 移植程式碼和開發以吸引開發者和用戶進入生態,本文實測哪一家 zkEVM 的開發更好,並比較其優缺點,本文由 Jarrod Watts 撰文。
(前情提要:讀懂zkSync Boojum升級:更安全更高效的zkEVM )
(背景補充:ZK-EVM五種類型:與以太坊「完全、部分、幾乎等效」差在哪? )
以太坊擴容戰爭中,Optimistic rollups 因其 EVM 高度相容甚至完全等效,導致該賽道的 Arbitrum 和 Optimism 在開發者採用上佔據先天優勢,其 L1 到 L2 無縫移植程式碼和豐富的開發工具可快速吸引開發者進駐並在平臺上部署和建立應用。
與之對比,ZK 系則更難一些。其技術上固有的特性導致 ZK rollups 需要訂製自己的虛擬機,這意味著專案方需要做更多的工作來「解釋」來自 EVM 的程式碼甚至是從頭開發編寫全新程式碼。不過,目前包括 Taiko、Polygon、Linea、Scroll 和 ZkSync Era 的多個 ZK rollups 賽道專案均推出了自己的 zkEVM 實現。
作為擴容聖盃,zkEVM 對開發者的合約部署體驗有至關重要的影響,面對琳琅滿目的 ZK rollups 專案,開發者到底該如何選擇?
本文編譯了來自 Jarrod Watts 釋出的推文總結 ,他是 Polygon 的開發者工程師,在當前熱門的 ZK rollups 專案上部署智慧合約(1 個 Solidity 智慧合約和一個 NFT 合約),對 Taiko、Polygon、Linea、Scroll 和 ZkSync Era 等專案的 zkEVM 效能進行了實測,比較了其各自的優缺點和 L2 到 L1 到帳時間,為想要嘗試部署二層合約的開發者提供實測指南。
以下為來自 BlockBeats 的原文編譯:
ZK-EVM 是什麼以及我們為何需要它?
在解讀 ZK-EVM 是什麼之前,先看看為何需要 ZK-EVM?
ZK Rollups 為以太坊帶來擴充套件性和高效能,另一面是 ZK Rollups 解決方案與 EVM(以太坊虛擬機器)不相容,這意味著 ZK Rollups 方案僅能支援執行有限的操作,包括轉帳、鑄幣或銷燬,並且還得為使用者開發錢包等工具。
因此,我們需要與 EVM 相容的 ZK Rollups,為此,多家公司都開發了自己的 ZK-EVM。
ZK-EVM,即零知識 EVM,它是一種與零知識證明相容的以太坊虛擬機器實現。
ZK-EVM 主要功能是對以太坊 L2(第 2 層)上交易進行批量處理,並將該批量交易的「有效性證明」發回至以太坊 L1 上。通常,zkEVM 可以做以太坊主網的一切。它將 Solidity 或 Vyper 中人類可讀的程式碼編譯成位元組碼,執行智慧合約,並更新區塊鏈狀態。
構建 EVM 相容的 ZK Rollups 的難點在於,以太坊一開始的設計並沒有考慮到 ZK 友好性。這意味著零知識證明需要大量的資源進行計算。
其中,某些 EVM 操作碼 opcodes 尤為「ZK 不友好」,這導致各家公司最終設計出的 ZK-EVM 產品在 EVM 相容性上各不相同。
opcodes 、位元組碼和 EVM 分別是什麼?
科普時間到,操作碼(opcodes)、位元組碼和 EVM 分別是什麼?
首先,EVM 是以太坊上智能合約的執行環境,以太坊將所謂的「機器狀態」以一種 trie 樹形資料結構進行儲存,每執行完一個區塊中的交易後,該結構發生變化。
EVM 是有確定性的,這意味著在任何特定狀態上執行一組指令都會產生相同的新狀態。
根據以太坊開發者文件 ,一箇舊的有效狀態(S)+ 一組新的有效交易(T),以太坊將產生一個新的有效輸出狀態 S‘。
你可以將其看作是國際象棋這樣的遊戲。以太坊就像是一個棋盤,其中存在不同的遊戲狀態,在以太坊中,這種狀態的可能性則是無限的。棋盤遊戲都有自己特定的移動規則(對比以太坊上的交易),並且對哪類棋子執行哪些操作也有特定的限制。遊戲玩家採取行動(對比的是使用者在以太坊上提交交易),遊戲(以太坊)制定和執行規則,從而在每個回合(對應區塊時間)後產生一個新的棋盤(以太坊全域性)狀態。
進行以太坊或任何 EVM 相容的區塊鏈開發,需要使用 Solidity 編寫智慧合約。Solidity 是一種高階語言,其目的是人類可讀,這樣開發者就可以專注於編寫程式碼,而非暫存器、記憶體地址、呼叫堆疊等抽象層面的東西。
然而,EVM 卻無法讀取 Solidity。相反,它只能理解「位元組碼」(bytecode),這是一種二進位制、機器可讀的低階程式碼。
在 EVM 中,「位元組碼」(bytecode)代表的是一系列 EVM「操作碼」(opcodes),操作碼是程式的低階可讀指令,代表的是可在 EVM 中執行的特定操作。
由於 Solidity 這樣的高階語言無法在 EVM 中被直接執行,因此,我們需要一種方法將智慧合約程式碼從人類可讀的 Solidity 語言操作碼位元組碼,然後由 EVM 執行,這就是編譯器的工作。
當使用 Remix IDE 編譯器對 Solidity 程式碼編譯後,可看到該智慧合約轉換成的特定的操作碼,並檢視從該操作碼生成的位元組碼。
以下是操作碼:
以下是上面操作碼對應的位元組碼。
通過將位元組碼轉譯成操作碼,從而可獲知位元組碼中包含哪些執行指令。
由於對 EVM 中一些特定操作碼進行 ZK 證明的難度較高,導致市面上出現了不同相容程度的 ZK-EVM,其中,有些 ZK-EVM 和 EVM 操作碼集完全等效,有些對一些 EVM 操作碼進行了部分修改,還有一種則具有完全不同的位元組碼。
不同型別的 ZK-EVM
由於一開始以太坊設計並沒有考慮到 ZK 友好性,因此理論上,越接近以太坊設計,生成 ZK 證明就越困難且耗時。2022 年 8 月,以太坊創辦人 Vitalik 曾發表部落格文章 「聽 Vitalik 解讀不同型別 ZK-EVM 的未來」,對不同 ZK-EVM 進行了分類。
在該文中,Vitalik 基於 EVM 相容性和 ZK 證明生成時間(效能)兩個維度對各類 ZK-EVM 進行了分類,Vitalik 在該圖表中羅列了四種(半)型別,目前市面上所有 ZK-EVM 產品都可被囊括其中。
1,第一種型別的 ZK-EVM 與以太坊完全等效,它們不會更改以太坊系統的任何部分,更易於生成證明。在這種系統中,ZK 證明需要很長時間(幾個小時)才能生成。Taiko 屬於該型別的 ZK-EVM。
2,第二種型別完全與 EVM 等效,但更改了一些不同的內部表示形式,比如鏈狀態的儲存方式,以加速 ZK 證明的生成時間。目前,市面上沒有這種型別的 ZK-EVM;不過,Polygon、Linea 和 Scroll 正在朝這個方向努力。
2.5,在型別 2 和型別 3 之間,還存在一個型別 2.5。這種型別完全與 EVM 等效,只不過增加了某類操作的 Gas 成本,以「大幅縮短最壞情況下的證明時間」。目前,市面上沒有這種型別的 ZK-EVM;不過,一個名為 Kakarot 的新 ZK-EVM 專案正在朝這個方面發力。
3,型別 3 幾乎與 EVM 等效,不過等效精確性上做出了一些讓步,以進一步縮短證明時間並簡化 EVM 的開發。目前,Polygon、 Linea 和 Scroll 屬於這一型別。
4,型別 4 相當於 ZK-EVM 的高階語言,這一類 ZK-EVM 將智慧合約的原始碼編譯為 ZK-SNARK 友好的語言,這將會帶來更快的證明時間,相應的也會引發不相容和限制等缺點。目前,zkSync Era 屬於這一型別。
值得注意的是,將有效性證明發回以太坊 L1 所需時間就是使用者將資金轉回 L1 的時間。如果證明生成需要幾個小時,則該使用者在這幾個小時內無法將資金橋接回 L1。
實戰:Taiko、Polygon、Linea、Scroll 和 ZkSync Era 開發評測
理論知識複習完畢,以下是實戰部分。
通過在 Taiko、Polygon、Linea、Scroll 和 ZkSync Era 上各自部署了 Solidity 智慧合約和 NFT 合約,測試每個 ZK-EVM 的效能和存在的相應缺陷,作者還給出了可用的開發者資源,評估主要從開發者體驗以及 L2 到 L1 的橋接時間兩個維度進行。
Taiko ZK-EVM
Taiko 屬於型別 1 ZK-EVM,目前處於測試網階段。Taiko 可準確地處理以太坊的所有行為;使用相同的 hash 函式、gas 價格和加密演算法等。
操作過程:部署了一個簡單的 Solidity 智慧合約並通過使用 ThirdWeb 代理部署了一個簡單的 NFT 集合。
型別 1 ZK-EVM 的缺點是,當一切都與以太坊完全相同時(即使在內部),生成證明需要很長時間。這意味著,使用者將 ETH 從 Taiko L2 橋接回以太坊 L1 需要幾個小時的處理時間(如下所示)。
Linea ZK-EVM
Linea 屬於型別 3 ZK-EVM,Linea 目前還不能證明所有操作碼或預編譯;代表的是與以太坊不同的鏈內部狀態,比如使用不同 hash 函式。
部署的位元組碼與以太坊相同。
此次部署過程幾乎無縫,可輕鬆部署兩個智慧合約,並與其進行互動。這與以太坊的行為相同;可使用現有工具和錢包部署智慧合約、與其互動、鑄造 NFT 等。
在撰寫本文時,Linea 還未上線橋接前端介面。因此,只能直接呼叫橋接的智慧合約函式。
Linea 文件中顯示,ETH 的 L2 到 L1 橋接通常需要大約 15 分鐘,但此次操作案例中大約花了幾個小時。
Polygon ZK-EVM
Polygon ZK-EVM 屬於型別 3 ZK-EVM,自今年 3 月底以來已啟動主網。
Polygon zkEVM 在官方文件列出了 EVM 和 zkEVM 之間當前的所有差異
延伸閱讀:Polygon zkEVM 是什麼?一文盤點鏈上生態、潛力項目…
在 Polygon zkEVM 上部署位元組碼與以太坊相同,這讓部署智慧合約並與其互動變得非常簡單。Vitalik 曾表示,「Polygon zkEVM 具有獨特的設計,他們正在使用 ZK 驗證自己稱為 zkASM 的內部語言」。
Polygon 工程團隊表示,除了改進證明生成和提款時間之外,未來還將盡快完成剩餘的預編譯,目標是成為 Vitalik 圖表中的型別 2。
此次部署案例中,zkEVM 主網橋接十分順利;L2 -> L1 橋接過程大約需要 1 小時。
Scroll
Scroll 屬於型別 3 ZK-EVM,目前處於測試網階段。Scroll 也在官方文件中列出了 ZK-EVM 與以太坊 EVM 之間的差異
和其他 3 型 ZK-EVM 一樣,此次部署過程幾乎無縫,輕鬆部署了 Solidity 智慧合約和 NFT 集合,並進行互動。從 L2 到 L1 的橋接資金預計需要「10 分鐘到幾個小時」。
ZkSync Era
ZkSync Era 屬於型別 4 ZK-EVM。與其他 ZK-EVM 完全不同,在 ZkSync Era 的 zkEVM 上部署的智慧合約位元組碼與以太坊不同。
這讓 ZkSync Era 提供一個獨特的功能,即對帳戶抽象(Account abstraction)的原生支援,這將帶來不同的開發者體驗。通常情況下,大多數加密錢包只是標準地址,可以傳送和接收資金,並與智慧合約互動。有了帳戶抽象,加密錢包是訂製化的,可以更復雜的方式設計,提供更廣泛的功能。此外,該 zkEVM 仍允許開發者使用相同的高階語言,例如 Solidity。
雖然 ZkSync Era 的 ZK-EVM 與 EVM 差異較大,但 ZkSync Era 提供了一整套開發者最佳實踐和注意事項。此外,開發者需要對開發流程進行一些小調整,以專門針對 ZkSync Era 進行構建。
比如,在下例中,必須使用自定義 zkSync 擴充套件安裝和配置 Hardhat 環境,以生成可以部署到 Era ZK-EVM 的位元組碼。
編譯生成了和以太坊完全不同的全新位元組碼,和以上的 ZK-EVM 生成的位元組碼完全不同。
值得注意的是,ThirdWeb 目前已經上線 zkSync Era ,為開發者提供更加方便的部署體驗。
在這次操作中總共部署了兩個智慧合約,與它們進行互動,並將資產從 L2 發回 L1。目前,出於安全原因,從 ZkSync Era 主網到以太坊 L1 的提款有 24 小時的延遲。
Kakarot ZkEvm
另一個致力於實現 2.5 型別 ZK-EVM 的是 Kakarot ZkEvm,該專案在今年 6 月獲得了包括 Vitalik Buterin 和 StarkWare 在內的多家機構的融資,Kakarot 計劃於 2023 年晚些時候釋出測試網。
相關閱讀:
《詳解 Kakarot:受 Vitalik 青睞並投資的 zkEVM 專案》
結語
對於終端使用者來說,誰贏得比賽並不重要,因為相容 EVM 的 ZK 解決方案的進展是整個行業的一大勝利。對於各專案方而言,與其說是一場競賽,不如說是探索不同方法來推進整個行業的進步,Vitalik 甚至還有一個「多證明者理論」,其基礎前提是,不同的 Rollup 可以協同工作,從而增強以太坊的整體安全性。
歸根結底,大家都希望以太坊能夠成功。L2 擴容轉型是 Vitalik 認為以太坊需要經歷的三個技術轉型之一。未來將如何發展,我們拭目以待。
📍相關報導📍
科普 | zkEVM Validium 優勢全解:交易成本更低、隱私更安全