专注于 zkVM

当您听到“虚拟机”这个词时,您首先想到的是什么?

如果您想到的是计算机,那么您就离事实不远了。虚拟机本质上是一个可以运行其他程序的程序,通常通过指令的获取-解码-执行循环。它有点像物理计算机的虚拟表示。

关于虚拟机在现代计算基础设施中发挥的基本作用,我还有很多可以分享的内容,但我们今天不在这里讨论这个问题。今天,我们在 zk-proofs 的背景下讨论虚拟机。我们正在谈论 zkVM。

让我们开始吧。

虚拟机受到其构建环境的限制

如果您已经进入零知识领域一段时间,您很可能听说过 zkEVM,或零知识以太坊虚拟机。 zkEVM 是一种虚拟机,它以与零知识证明(zk-proof)计算兼容的方式执行以太坊智能合约。

zkEVM 将任意数量的以太坊交易压缩为一个低成本且简洁的有效性证明。这允许在没有信任假设的情况下将 EVM 的运行委托给强大的节点,同时将主干(验证器)保留在廉价的硬件上,从而促进可访问性和去中心化。

不幸的是,以太坊虚拟机并不是为了在 zk 电路中运行而设计的,因为当时很少有人知道什么是零知识。因此,在实现 zkEVM 时必须做出一些权衡,从选择不与以太坊等效到让 Gas 成本不反映证明者成本(查看Vitalik 关于 zkEVM 类型的文章)。

换句话说,以太坊的局限性改变了实施和优化 zkEVM 产生的有效性证明的难度。更重要的是,它还需要重做所有对安全性非常重要的测试、模糊测试和审计。

zkVM 简介

如果有一种方便、简单的方法可以让您编写一个高级程序并执行它,并获得输出和证明,而无需了解任何有关零知识的知识,该怎么办?

zkVM(零知识虚拟机)是一种作为 zk 证明系统电路实现的虚拟机,通过 zk 证明保证安全且可验证的可信性。您不是证明特定程序的执行,而是证明虚拟机的执行。

zkVM 可以显着减少实施 zk-proof 的耗时和出错率。

zkVM 并不是一个新概念。第一个在零知识内进行任意计算的系统是TinyRAM,创建于 2013 年,它处理随机存取存储器。此后,DSL(领域特定语言)出现了。像CirccomNoir这样的语言在低级电路和高级专业语言之间创建了一个中间地带。从那里,我们到达了Cairo-VMMiden。 Cairo-VM 由 Starkware 于 2021 年构建,具有多项功能,包括优化的有效性证明、一种类似于 Rust 的用于编写可证明程序的现代语言,以及一个允许高效执行 Cairo 代码的程序。

Polygon 的方法 Miden 旨在对开发人员友好。开发人员无需学习任何有关密码学或 zk 证明的知识即可在 Miden VM 上运行智能合约,因为 zkVM 具有多语言支持。

从那时起,出现了多种虚拟机,包括RISC Zero zkVMSuccinct 的 SP1。稍后我们将深入探讨这些方法。

zkEVM 与 zkVM

那么 zkEVM 和 zkVM 之间的主要区别是什么?

zkEVM 可能有点复杂,因为以太坊虚拟机具有复杂的规格。 zkEVM 的开发、维护和审核成本高昂,因为它们基本上是另一种 EVM 实现,以多项式方程而不是普通编程语言编写。

另一方面,zkVM 则更简单一些。他们可以让所有应用程序能够在每笔交易中相对无缝地使用 zk 证明。更改和扩展证明系统代码库、进行审计以及使用更广泛的工具(例如更多编程语言)变得更加容易。有关 zkEVM 和 zkVM 之间的差异以及以太坊扩展和 zk-proofs 的更多详细信息,请查看这篇优秀文章

太鼓方法

Taiko 团队一直在为以太坊基金会的 PSE zkEVM做出贡献。更具体地说,我们使用AxiomEZKLScroll也贡献的“ Halo2-KZG ”证明系统将每个 EVM 操作码实现为手动电路,分担实现和审计的负担。然后,当提交一个包含由 EVM 指令组成的交易列表的区块时,zkEVM 能够通过组合所有电路的输出来生成证明。

由于 zk 证明非常复杂,并且几乎包括将以太坊实现为一组多项式方程,因此存在与证明系统、电路编译器和 zkEVM 代码本身相关的风险。这就是 Taiko 实现多证明者系统的原因,该系统涉及为单个区块生成多种类型的证明。因此,即使一种类型的证明在某种程度上受到损害,其他证明也可以通过检测错误的状态转换来确保系统继续安全运行。

随着时间的推移,我们已经转向 zkVM 模型。我们还可以修改客户端并运行它,生成 zk-proof。我们通过从使用与 ASIC 相当的系统(即,将客户端编写为专用加密电路)升级到使用通用 CPU 来实现这一点,只不过在该 CPU 上运行的客户端已经过编写、测试和审核。

为了确保 Taiko 的稳健性,我们不断使我们所依赖的密码学假设多样化。我们通过构建一个多重证明系统并为多个 zkVM(RISC Zero、SP1、Powdr)做出贡献来实现这一目标。我们继续投资 Halo2-KZG,因为 RISC-Zero 和 SP1 是基于 STARK 的,而 Powdr+Halo2 将是基于 SNARK 的(有关这些 zkVM 的更多详细信息,请参阅下一节)。

Taiko 还使用 SGX(即 Software Guard Extensions),这是一组与安全相关的指令代码,有助于增强隐私和安全性,而不会泄露数据本身。我们基于 geth/reth 修改执行客户端,以便它们可以在 SGX enclave 中运行,只需进行最少的修改(查看Taiko 的实现 Raiko)。然后,客户端生成一个 SGX 证明(查看Justin Drake 的这篇文章了解更多详细信息)。

要了解有关 Taiko 多重证明方法的更多信息,请查看Taiko 的 ZK 工程师 Cecilia 撰写的文章。

zkVM 和我们正在关注的其他相关项目

RISC 零 zkVM

RISC Zero 构建了一个通用 zkVM,它允许开发人员证明任意 Rust 代码的正确执行,使他们能够利用现有工具来构建程序。虽然这使得验证代码变得更加方便,但这也意味着 RISC Zero 团队必须构建一个可能需要更复杂计算才能添加新功能的电路。

简洁处理器 1 (SP1)

SP1 是 zkVM 市场中相对较新的参与者,是 Succinct 的第一代 zkVM,可验证任意 Rust(或任何 LLVM 编译语言)程序的执行情况。与 RISC Zero zkVM 一样,SP1 不需要开发人员学习专门知识。该团队最近发布了 SP1 Reth,这是一个使用 SP1 构建的开源性能 1 型 zkEVM,他们本质上是在 zkVM 中运行以太坊客户端。

Powdr zkVM 工具包

Powdr 是一个 zkVM 编译器堆栈,可帮助构建 zkVM 和类似的证明框架。开发人员可以使用 powdr 执行动态执行,以及定义算术约束、查找等。该团队的目标是多个后端,包括 Halo2-KGZ、eSTARKS 和 SuperNova。

验证虚拟机

Valida 是一个社区驱动的基于 STARK 的 VM,致力于代码重用、证明者性能和可扩展性。

Nexus zkVM

Nexus zkVM 是一种模块化、可扩展、开源和高度并行化的 zkVM,设计为在足够的机器功率的情况下以每秒万亿个 CPU 周期运行。 zkVM 用 Rust 编写,专注于性能和安全性。

DelphinusLab zkWASM

Delphinus Lab 正在构建 zkWASM(支持 Web Assembly 的 zkSNARK 虚拟机。一种二进制指令格式,可用作 C、C++ 和 Rust 等编程语言的编译器)。 zkWASM 将作为 WASM 运行时上运行的应用程序和链上智能合约之间的去信任层运行。

尼尔基金会

Nil 基金会正在构建zkLLVM,这是一个从高级编程语言到可在 EVM 上验证的可证明计算协议的输入的编译器。 zkLLVM 的每个证明输出都是 EVM 内变量。

环路

CirC 是一个编译器基础设施,支持从高级(有状态、统一)语言到(无状态、非统一、存在量化)电路的编译。

诺瓦

Nova 是一种高速递归 SNARK,可实现 IVC(增量可验证计算)。 IVC 是一种强大的加密原语,允许证明者以增量方式生成“长时间运行”顺序计算的正确执行证明。

最后的笔记

zkVM 代表了零知识计算领域的重大发展,为开发人员提供了安全、可验证地执行程序的强大工具。虽然 zkEVM 为零知识计算铺平了道路,但 zkVM 提供了更灵活且对开发人员友好的方法。

致谢

如果没有 zk-proof 社区令人难以置信的持续努力,这篇文章就不可能完成。特别感谢 Taiko 团队的 Mamy Ratsimbazafy 和 Brecht Devos,以及 RISC Zero 的 Paul Gafni。

加入我们💗

探索我们的招聘网站上的空缺职位 。

关注我们🥁

要了解 Taiko 的最新动态:

贡献

为 Taiko 做出贡献并赚取 GitPOAP!您还将成为我们自述文件的贡献者。开始使用 贡献指南

Subscribe to fen yun
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.