作者:RISC Zero 高級工程師 Erik Kaneda ;編譯:Maxlion
前言
本文將對比 zkEVM 和 zkVM 在技術上的差異,並介紹 RISC Zero zkVM 及其即將推出的 Bonsai 網絡。關於 RISC Zero,它是一個通用 zkVM,RISC Zero zkVM 是一台可驗證的計算機,其工作方式類似於真正的嵌入式 RISC-V 微處理器,使程序員能夠像編寫任何其他代碼一樣編寫 ZK 證明。支持 Rust 和 C++ 編寫 ZK 證明,並支持任何編譯爲 RISC-V 的語言。
背景
隨着當前智能合約的復雜性增加,dapp 越來越先進,區塊空間越來越稀缺,運行鏈上代碼的成本也在增加。換句話說,如果你的 DeFi 邏輯變得計算昂貴,或者你的鏈上遊戲邏輯需要額外的計算能力,你應該考慮使用 zkVM 或 zkEVM,將復雜的應用邏輯移到鏈外。
在這篇博文中,我想解釋在這種情況下,一個字母所能帶來的不同。我將從 EVM 的概述开始,然後是 zkEVM,再接着是 zkVM。zkEVM 允許你在鏈外傳輸 Solidity 應用程序,而 RISC Zero 的 zkVM 和即將推出的 Bonsai 網絡允許你使用 Rust 編寫可擴展的、與鏈無關的代碼。
快速了解 EVM:
EVM 是 Ethereum Virtual Machine(以太坊虛擬機)的縮寫,你可以把它看作是執行 Ethereum 上所有交易的軟件。
每個節點通過運行這個軟件(如geth等實現)來參與以太坊網絡。在以太坊中,交易是由代碼表示的,其格式稱爲 EVM 字節碼,代表 EVM 的指令。大體上,這些指令面向數學計算,來獲取區塊鏈信息,以及交換金錢。世界上有許多虛擬機,每一個都有自己的專長。以太坊的虛擬機很關鍵,因爲它更適合應用於去中心化的金融(DeFi)。
什么是 "zk",爲什么每個人都把它放在其他詞的前面?
最近最酷的趨勢之一是把 "zk "放在單詞的前面,這兩個字母代表零知識證明。維基百科上有很多例子(我最喜歡的是 "兩個球和色盲的朋友 "問題)。如果你對它們不熟悉,我建議此時花幾分鐘時間讀一讀零知識證明的例子。
長話短說,零知識證明能夠實現可驗證的計算。你可以把它看作是一種確保哪些計算被完成,以及計算結果是正確的方法。計算機就計算結果達成一致的一種方式是讓每台機器運行相同的代碼並比較結果。根據不同的計算,這對資源有限的系統來說可能很昂貴。通過使用像 RISC Zero 這樣的零知識證明框架,機器可以通過檢查證明的數學有效性來確保計算的正確執行,而不是重復運行相同的代碼(如EVM)。
在 RISC Zero,我們把這些證明稱爲 "收據"(receipts),在博客的其余部分,我將使用這個術語。每張收據都包括一個加密標識符,表明進行了哪項計算,以及計算的任何公共輸出的日志。雖然這可能看起來是一個簡單的概念,但它意味着機器可以生成收據來 "證明 "計算已經完成。
那么,當你把 zk 放在 EVM 前面時會發生什么?
術語 zkEVM 是用來描述在 EVM 字節碼引擎上運行智能合約的軟件,並爲特定的計算(或交易)生成收據。這個軟件通常可以證明兩個或多個收據是有效的,並生成另一個收據。通過使用這種機制,zkEVM 可以運行許多交易,並使用一個收據來表示它,這被稱爲 "Rollup"。用 Solidity 編寫的項目可以使用 zkEVMs 來擴展交易,而不是在鏈上進行所有計算,在區塊鏈上發布一個單一的收據來代表許多發生在鏈外的交易。zkEVM 有很多類型,如果你想了解它們,你可以在這篇文章中閱讀更多。
zkVM: 通過放棄E來解鎖可驗證的計算
在 RISC Zero,我們實現了一個零知識虛擬機(zkVM),而不是一個 zkEVM。兩者之間的區別在於,"VM",即 "虛擬機",比 EVM 更通用。
在 zkVM 上,你可以運行幾乎所有在計算機上運行的軟件,而不是任何可以在以太坊上運行的軟件。這種計算機使用 RISC-V 架構,這是一套用於通用計算的指令。這意味着 RISC-V 並沒有內置錢包地址或其他區塊鏈結構的概念。該指令集主要由在內存位置之間移動數據和對數據進行數學運算的運算符組成。雖然這個指令集可能看起來過於籠統,但並不要求程序員知道如何用匯編語言編程,以便爲這個 zkVM 編寫程序。
與 EVM 相比,這個底層的 RISC-V 模擬器允許程序員用 Rust、C/C++和 Go 等語言爲 zkVM 編寫程序(注意,我們目前支持Rust,我們對C/C++和Go的支持目前正在進行中)。這意味着 zkVM 的程序員可以使用別人在該語言的生態系統中开發的相關庫。一個例子是,我們可以運行玩 Wordle 或 Where‘s Waldo 等遊戲的程序。然而,我們並不局限於簡單的遊戲:你可以運行許多其他編譯爲 RISC-V 的程序。
運行 RISC-V 程序有什么用?
如果你想了解更多幫助你寫出更好的 DeFi 應用的框架,你可能會想知道爲什么我們正在研究 RISC Zero 這樣一個通用的計算框架。
通過允許用戶使用通用語言編寫程序,我們打开了在 Solidity 庫之外編寫代碼的可能性。這意味着應用邏輯不需要局限於可以用 Solidity 表達的內容,並允許你寫出與鏈無關的代碼。像 Rust 這樣的通用語言允許开發者比那些爲特定目的而設計的語言更容易編寫不同類型的程序。例如,你可以用 Rust 編寫一個簡單的算術計算器,它接受一個數學表達式作爲輸入,運行數學計算,並將解決方案作爲輸出返回。如果你增加這個計算器的復雜性,以支持常見的編程語言結構,如變量、循環和函數,你就實現了一個簡單的語言解釋器,將程序作爲輸入,運行程序,並將解決方案作爲輸出返回。這些程序可以被編譯成 RISC-V 並在 RISC Zero 的 zkVM 上運行。有了 Rust,你可以使用現有的 crates 來爲你的應用程序編程,而不是從頭开始編寫一切。
一個這樣的庫是 Rust 上的 revm crate。這個 crate 是用 Rust 編寫的 EVM 的一個實現。通過使用這個 crate,我們可以在 zkVM 上運行一個 EVM 字節碼解釋器。這意味着你可以在運行在 zkVM 上的 EVM 字節碼解釋器上運行 solidity 合約! 通過這樣做,zkVM 會產生一個收據,代表運行智能合約的 EVM 的執行。這在 Odra 的這篇博文中已經進行了探討,並被 zkPoEx 團隊用來提高 bug 賞金。
如何擴展區塊鏈
隨着當前智能合約的復雜性增加,許多人發現他們維護的鏈上代碼只會隨着他們的开發而增加成本。換句話說,如果你的 DeFi 邏輯逐漸變得計算昂貴,或者你的鏈上遊戲邏輯需要額外的計算能力,RISC Zero 的 zkVM 和即將推出的 Bonsai 網絡允許你使用通用編程語言編寫可擴展的鏈上代碼。我在這篇博文中列舉了幾個例子,我們正處於真正可擴展的計算網絡的最开始。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。