撰文: StarkWare
編譯:凹凸曼
TL;DR
- Validity Rollups 是以安全和去中心化的方式增加以太坊吞吐量的最有前途的方式; zkEVM 和Cairo VM (CVM) 是有效性匯總中使用的兩種類型的VM。
- zkEVM 專注於以太坊兼容性,但犧牲了性能和可擴展性。
- Starknet 中使用的Cairo VM 將性能和可擴展性置於兼容性之上。
在談論擴展以太坊時,Rollups 是今年的熱門話題。在各種類型的rollups 中,我們認為Validity Rollups (VRs),也稱為zk-rollups,是以安全和去中心化的方式增加以太坊吞吐量的最有希望的方式。這種擴展解決方案的核心是使用有效性證明進行可驗證計算。他們是這樣工作的:
運營商不是在以太坊主網上處理每筆交易,而是將交易執行卸載到鏈下環境。這個鏈下環境作為第2 層,意味著在以太坊之上運行的層。
在處理大量交易後,第2 層操作員返回結果以應用於以太坊的狀態,以及驗證鏈下執行完整性的有效性證明。該證明保證一批中的所有交易都是有效的,並由鏈上驗證者合約自主驗證。這允許以太坊將結果應用到它的狀態。
Validity Rollups
注意:Validity Rollups 通常被錯誤地稱為零知識匯總,但這並不准確。大多數Validity Rollup 不使用ZKP,也不用於確保隱私的目的。因此,術語「Validity Rollup」更準確。
鏈下虛擬機
在繼續之前,我們需要回答的第一個問題是:什麼是虛擬機(VM)?簡單地說,它是一個可以運行程序的環境,就像運行Windows 操作系統的Mac。它在對某些輸入執行計算後在狀態之間轉換。以太坊虛擬機(EVM) 是運行以太坊智能合約的VM。
零知識虛擬機(zkVM) 是一種程序執行環境,它與程序輸出一起允許生成可以輕鬆驗證的有效性證明。此有效性證明證明程序已正確執行。當使用術語「zkEVM」時,它通常是指利用以太坊虛擬機(EVM) 並能夠證明EVM 執行的匯總。這個術語可能會產生誤導,因為EVM 本身並不生成這些證明;相反,證明是由一個單獨的證明機制生成的,該機制以EVM 執行的結果為起點。此外,這些證明是關於有效性而非隱私的,因此它們不完全是零知識證明。儘管如此,為了保持一致性,我們將在本文中堅持使用傳統術語「zkEVM」。
雖然所有Validity Rollups 都旨在利用有效性證明來擴展以太坊,但它們在選擇VM 來執行鏈下交易方面有所不同。許多Validity Rollups 選擇複製EVM 的設計(因此被稱為「zkEVM rollups」),試圖在L2 rollup 上複製以太坊。 Starknet 使用一種新的VM——Cairo VM (CVM)——專門設計用於優化有效性證明效率。
這兩種方法各有優缺點,但zkEVM 以性能換取以太坊兼容性,而Cairo VM 將性能優先於兼容性,優先考慮擴展能力。
zkEVM 的做法
zkEVM 是一個Validity Rollup,其目標是將以太坊體驗完全引入Layer-2 區塊鏈。它旨在將以太坊開發人員環境複製為匯總。借助zkEVM,開發人員在編寫智能合約或將智能合約移植到更具可擴展性的解決方案時,無需更改代碼或放棄其EVM 工具(和智能合約)。
這種方法的一個主要缺點是它降低了有效性證明的擴展潛力。由於zkEVM 致力於與以太坊兼容,因此速度較慢且資源密集度更高。與CVM 不同,EVM 在設計時並未考慮證明效率。這限制了可以提高效率和可擴展性的優化的使用,最終影響系統的整體性能。
EVM 的可證明性
zkEVM 方法的核心挑戰植根於EVM 的原始藍圖——它並非設計用於在有效性證明上下文中運行。因此,反映其功能的努力無法釋放有效性證明的全部潛力,導致效率達不到最佳水平。這種低效率最終會拖累系統的整體性能。 EVM 與有效性證明的兼容性受到以下因素的阻礙:
EVM 採用基於堆棧的模型,而有效性證明更有效地用於基於寄存器的模型。 EVM 基於堆棧的特性使得證明其執行的正確性以及為其本機工具鏈提供直接支持變得更加困難。
以太坊存儲佈局嚴重依賴Keccak 和大型Merkle Patricia Tree,這兩者都不利於有效性證明並施加大量證明負擔。例如,Keccak 對於x86 架構(我們通常在其上運行EVM)非常快,但需要90k 步來證明(內置特殊構建)。而Pedersen(一種對zk 友好的哈希函數)需要32 個步驟。即使使用遞歸壓縮,在zkEVM 中使用Keccak 也意味著最終由用戶支付的大量證明者資源。
因此,各種zkEVM 旨在為以太坊工具提供不同級別的支持——zkEVM 與以太坊的兼容性越高,性能就越差。 (有關zkEVM 類型的更多信息,請跳至文章末尾。)
Cairo-VM 的做法
zkEVM 解決方案投入大量開發時間來「讓EVM 為Validity Rollups 工作」,將兼容性置於長期性能和可擴展性之上。還有另一種選擇:使用全新的專用虛擬機,並在頂部添加對以太坊工具的支持作為附加層。這是Starknet 所採用的方法,Starknet 是2021 年11 月推出的無需許可的Validity Rollup。 Starknet 是第一個在完全可組合的網絡上提供通用智能合約平台的Validity Rollup。
Starknet 使用Cairo-VM (CVM),這是一種同名的高級語言。 Cairo-VM 是為高效生成程序執行的有效性證明而設計的VM。
使用Cairo(虛擬機和語言),我們有:
1. 優化的有效性證明——每條指令都有一個有效的代數表示
2.用於編寫可證明程序的Rust-like 語言
3. 高級Cairo 和Cairo 彙編(VM 指令)之間的中間表示(Sierra),允許高效執行Cairo 代碼
開發一種新語言可以讓人們根據它要滿足的特定需求對其進行定制,並為其配備能夠滿足以前未滿足需求的功能。
Cairo 和編碼多元化
為了創建關於某些計算的有效性證明,首先必須將該計算表示為描述該計算的一系列數學約束。由於優化計算以提高效率的挑戰以及對專用工具的需求,過程可能非常棘手。
Cairo 語言最初旨在簡化此任務,並使其更容易向StarkEx 添加功能和復雜的業務邏輯。 Cairo 程序被編譯成代數機器代碼——一個數字序列——由一個固定的VM 執行。有了Cairo,生成描述計算的數學約束的整個複雜性——有效性證明的一個棘手問題——被抽像出來並被固定的約束集(總共少於50 個約束)捕獲。因此,開發人員可以利用有效性證明來擴展他們的應用程序,而無需了解底層數學和基礎設施,只需使用他們熟悉的語法編寫代碼即可。
https://twitter.com/EliBenSasson/status/1638270015009968134
Starknet 是關於創新的,這反映在其多元化的代碼方法中。 Cairo 使用STARKs 獲得最佳擴展的能力不僅限於那些在Cairo 本地編寫合約的人。開發人員可以選擇最適合他們的方法:
在Cairo 本地編寫代碼:隨著Cairo 1.0 的發布,開發人員現在可以使用符合人體工程學且安全的Rust 語言,這使得編寫程序邏輯變得更加容易且不易出錯。
Solidity 兼容性:Solidity 開發人員可以編寫可供Cairo VM 使用的代碼。這種方法提供了與以太坊類似的開發人員體驗,並使Solidity 智能合約可移植到Starknet。有兩種方法可以實現這一點:
轉譯:轉譯是指將用一種編程語言編寫的源代碼轉換為另一種語言的過程。 Nethermind 團隊創建了Warp 轉譯器,用於將Solidity 代碼轉譯到Cairo。 Warp 使Solidity 智能合約可移植到Starknet,有效地使其成為Type 4 zkEVM。它已經被用於轉譯和部署Uniswap 合約,只需進行極小的改動。
Starknet 上的zkEVM:Cairo VM 可用於證明另一個VM 的執行。 Kakarot 是一個用Cairo 編寫的zkEVM,可用於在Starknet 上運行以太坊智能合約。 Cairo VM 和zkEVM 不是競爭方法,我們可以同時擁有Cairo VM 和zkEVM,而不是在Cairo VM 和zkEVM 之間進行選擇!
儘管存在時間很短,但Cairo 是TVL 排名第四的最受歡迎的智能合約語言,並且已經獲得超過3.5 億美元的資金。
總結
zkEVM 旨在將以太坊環境複製為rollup,並允許開發人員使用熟悉的以太坊工具。然而,這種方法抑制了有效性證明的全部潛力,並且可能是資源密集型的。
Cairo VM 專為有效性證明系統而設計,不受EVM 的限制。它由一種新的、安全且符合人體工程學的Rust 啟發的編程語言支持,稱為Cairo 1.0,形成了一個強大的工具,旨在通過使用STARK 證明擴展以太坊來獲得最大效率。
看到Cairo 每週取得的成績,以及開發人員不同選擇的增長,如Kakarot zkEVM 和Warp,令人興奮。隨著Starknet dApp 進入生產階段,展示了Cairo 的強大功能,我們相信它將在未來用於更雄心勃勃的項目。
由於上面概述的STARK 擴展的三種途徑,以及毫無疑問將在未來幾個月內提供的其他途徑,開發人員現在對擴展區塊鏈擁有前所未有的控制權。