zkEVM 和 zkVM 技术比较:解锁可验证计算能力

本文将对比 zkEVM 和 zkVM 在技术上的差异,并介绍 RISC Zero zkVM 及其即将推出的 Bonsai 网络。

撰文:Erik Kaneda,RISC Zero 高级工程师 

编译: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 的程序员可以使用别人在该语言的生态系统中开发的相关库。一个例子是,我们可以运行玩 WordleWhere'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 网络允许你使用通用编程语言编写可扩展的链上代码。我在这篇博文中列举了几个例子,我们正处于真正可扩展的计算网络的最开始。如果你想看看这是怎么回事,今天就开始吧,加入我们的社区,注册 Bonsai,帮助建立一个去中心化和可扩展的全民互联网。

作者RISC ZeroRISC Zero
相关文章
2024.04.18 - 10 天前
Merlin 技术方案解读:它到底是怎么运转的?
让更多人理解 Merlin 的大致工作流程,对其安全模型有更清晰的认知。
2024.01.27 - 92 天前
解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)
BitVM无需on chain的数据,先在链下发布并存储,链上只存放Commitment(承诺)。
2023.07.24 - 279 天前
全链游戏/自治世界(FOG/AW):游戏状态同步与技术挑战解析
对于完全运行在链上的游戏,区块链是游戏服务器并作为游戏状态的去中心化的信任源。
2023.07.24 - 279 天前
Rollup 升级背后的多签与委员会信任风险:L2 并不像许多人所想的那么“美好”
该如何降低多签和安全委员会带来的信任风险?
2023.06.27 - 306 天前
解读 zkSync 推出的 ZK Stack:L2 和 L3 齐头并进
ZK 技术解锁了现有非 ZK 解决方案无法实现的能力。
2023.06.25 - 308 天前
时间绑定代币:代币化的时限、所有权与收益,会给加密资产带来哪些新玩法?
时间绑定代币具体如何实现?又有哪些可实现的场景?
2023.06.01 - 332 天前
解读信标层:Rollup 网络安全与跨链转账的关键
本文探讨了以太坊Rollup网络中的Enshrined跨链桥以及AltLayer的信标层架构。
2023.05.30 - 334 天前
以钱包为中心,打造面向客户体验的技术栈
以钱包为中心的客户体验堆栈,是当前加密市场中最重要和最大的“挖掘”b2b 基础设施机会。
2023.05.29 - 335 天前
EIP-6963 概述:多钱包冲突的可能解决方案
EIP-6963 旨在增强多个钱包提供商之间的互操作性,降低新提供商的准入门槛,并改善以太坊网络上的用户体验。
2023.05.27 - 337 天前
ZKML:将AI和区块链融合,实现隐私保护的模型部署技术
火热的ZKML到底是什么?