來源:Scaling Ethereum Efficiently;編譯:Starknet 中文社區
概要
-
有效性證明Rollup 以安全和去中心化的方式增加以太坊吞吐量,也是最具潛力的方式;zkEVM 和Cairo VM(CVM)是有效性證明Rollup 中所使用到的兩種虛擬機(VM) 類型。
-
zkEVM 專注於以太坊兼容性,但犧牲了性能和可擴展性。
-
Starknet 採用的Cairo VM 將性能和可擴展性置於兼容性之上。
Rollup 是今年關於擴展以太坊的熱門話題。在各種類型Rollup 中,我們相信有效性證明Rollup(以下簡稱VR,或稱為zk-rollup),是以安全和去中心化的方式增加以太坊吞吐量,最有希望的擴容方案。這種擴容方案的核心是採用有效性證明進行可驗證計算。下面來了解其運行原理:
-
和在以太坊主網上處理每筆交易不同,運營者將交易放到鏈下環境執行。鏈下環境就是L2,即在以太坊之上運行的操作層。
-
在大批量交易處理完成後,L2 運營者將結果返回至以太坊狀態中,同時還有一個有效性證明用於驗證鏈下執行的完整性。該證明保證同一批次中的所有交易都有效,並由鏈上驗證合約自主驗證。該操作允許以太坊將結果應用於其狀態。
有效性證明Rollup
請注意:有效性證明Rollup 常被錯稱為零知識證明Rollup (zkRollup),這並不准確。大部分有效性證明Rollup 不採用零知識證明,也不用於確保隱私。因此,術語「有效性證明Rollup」更準確。
鏈下虛擬機
在繼續深入前,我們需要回答第一個問題:什麼是虛擬機(VM)?簡而言之,虛擬機是一個可以運行程序的環境,比如Mac 上運行Windows 操作系統。 VM 在對某些輸入執行計算後,在狀態之間進行轉換。以太坊虛擬機(EVM)就是運行以太坊智能合約的VM。
零知識虛擬機(zkVM)是程序執行環境,與程序輸出一起生成可輕鬆驗證的有效性證明。有效性證明用於證明程序已正確執行。當使用「zkEVM」一詞時,通常是指運行以太坊虛擬機(EVM)並能夠證明EVM 執行的Rollup。這個術語可能會造成誤會,因為EVM 本身無法生成這些證明;相反,證明是由一個單獨的證明器機制產生,該機制將EVM 的執行結果作為其起點。此外,上述證明都是與有效性相關,而與隱私無關。因此,準確來說不能稱為零知識證明。而為了保持一致性,在本文中仍使用傳統術語「zkEVM」。
儘管所有有效性證明Rollup 都旨在採用有效性證明來擴展以太坊,而不同方案在VM 執行鏈下交易方面做出了不同選擇。許多有效性證明Rollup 選擇複製EVM 設計(因此稱為「zkEVM rollup」),嘗試在L2 rollup 上複製以太坊。 Starknet 採用的是Cairo VM(CVM),是專為優化有效性證明效率而設計的全新VM。
上述兩種方式各有利弊和取捨,但zkEVM 犧牲性能以求以太坊兼容性,而Cairo VM 將性能置於兼容性之上,優先考慮可擴展能力。
了解zkEVM 運作方式
zkEVM 是一種有效性證明Rollup,旨在L2 區塊鏈上完全引入以太坊體驗。目的是將以太坊開發者環境複製到Rollup 中。借助zkEVM,開發者編寫或移植智能合約到擴容方案時,無需調整代碼或棄用原本的EVM 工具(以及智能合約)。
這種方式有一個關鍵缺陷,即降低了有效性證明的擴展能力。由於重心放在與以太坊兼容,導致zkEVM 速度更慢且資源密集度更高。與CVM 不同,EVM 在設計時沒有考慮證明效率。因此限制了在提高效率和可擴展性的優化使用,最終影響系統的整體性能。
EVM 的可證明性
zkEVM 方式的核心挑戰在於EVM 根深蒂固的原始藍圖,起初的設計並不是為了在有效性證明環境中運行。因此,努力都放在實現以太坊功能上,就無法釋放有效性證明的全部潛力,導致效率不盡人意。這種低效率最終拖了系統整體性能的後腿。 EVM 與有效性證明的兼容性受到以下因素的阻礙:
-
EVM 採用基於堆棧的模型,而有效性證明更高效地用於基於寄存器的模型。 EVM 基於堆棧的性質使其本質上更難證明其執行的正確性,並為其本地工具鏈提供直接支持。
-
以太坊存儲佈局重度依賴於Keccak 和大型Merkle Patricia 樹,這兩者都是非有效性證明友好型,帶來巨大證明負擔。例如,Keccak 對於x86 架構非常快速(通常用於運行EVM),但需要9 萬個步驟來證明(需要特殊內置)。而Pedersen(零知識友好型哈希函數)只需要32 個步驟。即使採用遞歸壓縮,zkEVM 中使用Keccak 消耗證明器資源仍舊很高,成本最終還是得由用戶承擔。
因此,各類zkEVM 旨在為以太坊工具提供不同程度的支持,但zkEVM 與以太坊兼容性越高,性能也就越低。 (有關更多zkEVM 類型的信息,請參閱文章結尾處)
了解Cairo-VM 運作方式
zkEVM 解決方案在「讓EVM 適用於有效性證明Rollup」方面投入了大量開發時間,將兼容性置於長遠性能和可擴展性之上。還有另一個選項:採用全新的專用虛擬機,並新增一個額外層用於支持以太坊工具。這就是Starknet 採取的措施,Starknet 於2021 年11 月推出了一個無需許可的有效性證明Rollup。 Starknet 是首個在完全可組合性網絡中,實現通用智能合約平台的有效性證明Rollup。
Starknet 採用Cairo-VM(CVM),並創造同名高級語言Cairo。 Cairo-VM 是為高效生成程序執行的有效性證明而設計。
通過Cairo(VM 和編程語言)可實現:
-
優化有效性證明,每條指令都有一個有效代數表達式
-
用於編寫可證明程序的現代類Rust 語言
-
高級Cairo 語言和Cairo 彙編(VM 指令)之間的中間表達式(Sierra),可以高效執行Cairo 代碼
開發一種全新語言可以根據特定需求定制,可以包含以前所不具備的功能,滿足新需要。
Cairo 和編碼多元化
為了創建某些計算的有效性證明,首先必須將該計算表達為描述計算的一系列數學約束。這個過程非常複雜,難點在於優化計算以提高效率,而且需要特定工具。
Cairo 語言設計之初就是為了簡化這一任務,以便StarkEx 能輕鬆增添功能和復雜的商業邏輯。將Cairo 程序編譯成代數機器代碼,即一串數字,由單個固定的VM 執行。有了Cairo,生成描述計算的數學約束這個複雜過程(對於有效性證明來說非常棘手)得以抽象化,進而以一組固定的約束條件(總共不到50個約束)來表示。這樣,開發者無需理解底層數學和基礎設施,僅需用熟悉的語法編寫代碼,就能利用有效性證明擴展應用程序。
Starknet 致力於創新,這點在代碼多元化處理方法上展現得淋漓盡致。 Cairo 採用STARK 技術實現最佳擴展功能,不僅限於使用Cairo 本地環境編寫合約。開發者還可以選擇最適合的方式:
-
在Cairo 本地編碼:Cairo 1.0 受Rust 啟發,更加符合開發者使用習慣且更加安全,編寫程序邏輯變得更加容易且不易出錯。
-
Solidity 兼容性:Solidity 開發者可以編寫支持Cairo VM 的代碼。這種方式提供了與以太坊相似的開發者體驗,並支持Solidity 智能合約遷移至Starknet。遷移實現方式有兩種:
-
轉譯:轉譯是將一種編程語言的源代碼轉換成另一種語言的過程。 Nethermind 團隊構建了Warp 轉譯器,用於將Solidity 代碼轉譯為Cairo。 Warp 讓Solidity 智能合約可移植至Starknet,使其有效成為第四類zkEVM。目前已用於轉譯和部署Uniswap 合約,只需極小的改動即可實現。
-
Starknet 上的zkEVM:Cairo VM 能用於證明另一個VM 的執行。 Kakarot 是採用Cairo 編寫的zkEVM,可用於在Starknet 上運行以太坊智能合約。 Cairo VM 和zkEVM 並不是競爭關係,與其在兩者之間做出選擇,不如採用兩者兼得的方式!
儘管Cairo 問世時間不長,但根據TVL 排名,Cairo 是第四受歡迎的智能合約編程語言,估值超3.5 億美元。
總結
zkEVM 旨在將以太坊開發者環境複製到Rollup 中,並允許開發者使用熟悉的以太坊工具。但這種方式限制了有效性證明的潛力,且資源密集。
專為有效性證明設計的Cairo VM 不受到EVM 的限制。 Cairo VM 支持Cairo 1.0。 Cairo 1.0 受Rust 語言啟發,更加符合開發者使用習慣且更加安全,形成強大的工具,旨在利用STARK 證明高效擴展以太坊。
看到Cairo 每週都在發展,Kakarot zkEVM 和Warp 這種開發者選擇越來越多,令人興奮。隨著Starknet dApp 投入生產,展現出Cairo 的強大力量,我們堅信未來Cairo 會催生出前所未見的優秀項目。
上文概述了SATRK 擴展的三種路徑,毫無疑問未來幾個月還會有更多創新誕生。開發者現在對擴展區塊鏈有了前所未有的掌控權。
zkEVM 類型
Vitalik 將zkEVM 主要分為四個類型:
-
第一類完全等效以太坊:不改變以太坊生態系統的任何部分。
-
第二類完全等效EVM:能和現有dApp 兼容,並對以太坊的設計做出部分調整以加快證明生成。
-
第三類大致等效EVM:支持大部分EVM 操作碼,移除部分zkEVM 難以實現的功能(如預編譯和哈希函數)。
-
第四類等效高級語言:用Solidity/Vyper 編寫智能合約代碼,並將其轉譯成有效性證明友好型語言。