2025年3月,Nexus团队发布了 Nexus zkVM 3.0,本文将更详细地介绍其设计意图与功能。
零知识虚拟机(zkVM)领域正在迅速演进,推动力来自于对可扩展、高效且可靠的系统的需求——这些系统应能够在不受计算规模、编程语言或底层架构限制的前提下,证明任意程序的正确执行。
Nexus正是基于这一愿景推出了 Nexus zkVM 3.0,它是一次经过深思熟虑的虚拟机重构,解决了长期存在的限制问题,并为新一代零知识虚拟机引入了关键创新。
在 zkVM 3.0 中,引入了多个架构性进步,包括:
这些改进旨在提升证明效率、减少内存开销,并为模块化和可扩展的系统奠定基础。更重要的是,zkVM 3.0 建立在前几代产品的经验教训之上,为未来的分布式和按需选择式(a la carte)证明打下了良好基础。
最初版本的 Nexus zkVM 为可扩展、可验证的计算奠定了重要基础。
zkVM 1.0 引入了一个通用型的递归零知识虚拟机,利用了如 Nova、SuperNova 和 CycleFold 等基于 folding 的证明系统。
这些系统展示了递增式可验证计算(incrementally verifiable computation,IVC)的可行性,能够对任意长度的程序执行生成简洁的证明。其架构采用了 RISC-V RV32I 指令集,支持标准编译工具链,突显了递归在大规模计算中的强大威力。
在此基础上,zkVM 2.0 通过支持 HyperNova 和集成 Jolt(一个基于 Lasso lookup argument的证明系统)扩展了架构。
这些增强提升了前端表达能力和证明组合性。基于 Nova 和 HyperNova 的版本也采用了优雅而富有表现力的 folding 式递归方式,支持复杂程序,并保持低内存开销。
然而,这些设计也面临挑战:
此外,Nexus的 folding 式证明系统实现的是统一的 IVC 方案,不支持成本模块化 —— 即所有指令路径的证明开销近乎相同,无论实际使用与否。为了实现递归组合,依赖 Grumpkin 椭圆曲线循环,这又引入了非原生域运算的额外复杂性。最后,由于使用了 Kate、Zaverucha 和 Goldberg 提出的 KZG 多项式承诺方案,这两个版本都需要可信设置。
尽管存在这些权衡,zkVM 1.0 与 2.0 在通用 zkVM 的发展过程中发挥了关键作用,并为 zkVM 3.0 中的创新提供了坚实基础。
通过 zkVM 3.0,Nexus在早期版本的基础上,构建了一个重新设计的架构,以提升证明系统的效率与模块化能力。本次发布解决了前几代实现中的关键限制,提供了一个更具可扩展性、对开发者更友好的可验证计算平台。
Nexus将重点转向可扩展性与灵活性,并引入了一系列关键创新,以简化性能瓶颈并扩展系统能力:
用一种基于对数导数的全新技术(称为 LogUps)替代了基于 Merkle 树的内存检查。这种方法允许在不存储或管理整个内存状态的情况下,跟踪并验证内存访问模式。
相反,只需维护紧凑的摘要,便可高效地总结内存的读写操作。这大大降低了证明复杂性,使得能够以无状态且可扩展的方式验证内存行为。
zkVM 3.0 引入了双阶段执行模型,以改进执行轨迹(execution trace)的生成方式。
这一策略帮助减少不必要的轨迹数据,同时实现精确的约束编码,从而提升证明生成性能与验证效率。
为了避免可信设置并提升证明性能,集成了由 StarkWare 开发的透明 STARK 证明器 —— S-two。S-two 使用基于哈希的承诺方案,并支持代数中间表示(AIR),Nexus用其来编码 zkVM 的约束系统。
这一选择提升了安全性,简化了部署流程,并进一步提供了可预期的后量子安全性。
zkVM 3.0 将其执行域迁移至 S-two 所使用的Mersenne素数域(M31),该域支持在 32 位架构上实现快速的原生算术运算。
这一迁移减少了承诺开销,避免了非原生算术转换的需要,简化了约束的生成与评估流程。同时也确保证明和验证两个阶段都能受益于硬件加速与更紧凑的执行轨迹表示。
Nexus zkVM 指令集基于广泛采用的开放指令集架构 RISC-V RV32I。这个决策确保开发者几乎无需修改即可使用标准工具链和熟悉的编译器基础设施。这也为未来的扩展提供便利,并提升真实世界应用的可移植性。
Nexus团队重构了其 zkVM 的执行轨迹矩阵,使其遵循组件化模型。更具体地说,执行轨迹现在被划分为若干逻辑单元 —— 包括 CPU、寄存器内存、程序内存、数据内存以及执行逻辑 —— 每个组件负责执行轨迹中的一个特定部分。
这种设计实现了模块化,简化了未来的扩展(如分布式证明),并为“按需付费”的成本模型奠定基础 —— 开发者只需为其程序实际使用的功能付费。
Nexus将 zkVM 3.0 的执行轨迹结构化为一个统一的矩阵,其中每一行对应一次指令执行周期,每一列则追踪一个特定变量或子组件的状态。这个轨迹记录了虚拟机状态的完整演化过程,并构成 zkVM 输出证明的基础。
为了支持模块化和清晰的语义划分,轨迹在概念上被划分为以下几个组件:
CPU 组件负责取指、解码并为指令执行做好准备。它包含的轨迹列包括:
该组件确保程序能按正确的指令流推进,并强制执行跳转目标与终止行为的规则。
该组件模拟虚拟机的通用寄存器文件,用于存储中间值和持久值。其内容包括:
寄存器内存确保算术、逻辑和内存类指令在寄存器使用上的正确性。
程序内存是只读的,用于存储按字节寻址的指令流。其列用于:
这使验证者可以确认每条指令确实来自已提交的程序区域。
数据内存在程序执行过程中处理读写操作,用于堆栈操作、堆分配和基于内存的计算。
其轨迹列用于追踪:
与程序内存不同,数据内存是动态的,其访问模式由执行过程中计算出的值决定。
该组件负责指令的具体语义执行。包括:
每一行都会激活与特定指令操作码对应的约束,确保其在输入有效的前提下执行正确的计算。
这些组件在执行轨迹矩阵中并不是物理上分离的,而是逻辑上区分开的,以便于理解。在内部,zkVM 3.0 使用共享列与专用列组合来表示这些组件,从而在保持模块化语义的同时,实现高效的约束组合。这种组织方式也为未来版本中按组件进行证明提供了清晰路径。
为了说明 zkVM 3.0 如何构造一个可验证的执行证明,接下来看一个在虚拟机中运行的简单 RISC-V 程序。算术化过程将该程序的行为转换为结构化的执行轨迹,随后通过代数约束进行验证。
zkVM 3.0 将程序的执行表示为一个大型矩阵,其中:
该执行轨迹捕获以下内容:
随着程序的运行,该矩阵逐行演化,最终形成完整的计算记录。
该轨迹的正确性通过代数中间表示(Algebraic Intermediate Representation,AIR)强制执行。AIR 系统定义了:
如:
ADD
这类 ALU 指令的转移约束,会确保程序计数器(PC)在相邻两行之间增加 4。也就是说,如果第 i i i 行对应一条 ADD
指令,则有 PC[i+1] = PC[i] + 4。这符合 RISC-V 的语义,其中大多数指令占用 4 个字节。这些约束均以有限域(zkVM 3.0 中为 M31)上的low-degree多项式 表示,从而能高效地在 S-two 证明系统中强制执行。
并非所有列在每一行上都处于激活状态:
这种结构在保持完整表达能力的同时,最大程度地减少了约束开销。
为避免开销高昂的 Merkle 证明,zkVM 3.0 使用 LogUps 实现离线内存检查。zkVM 并不将内存表示为完整的状态向量,而是构造多项式约束来验证内存访问摘要:
这使得 zkVM 能以代数方式验证内存使用,而无需保存完整的内存状态。
这一算术化策略确保 zkVM 3.0 能将真实世界的计算转化为紧凑、可验证的证明,同时不牺牲通用性或性能。它也为未来的模块化和分布式证明架构奠定了基础。
尽管 zkVM 3.0 在架构上进行了重大升级,仍然存在一些核心限制。这些权衡体现了系统快速演进过程中的挑战,也为Nexus未来的开发路线提供了指导。在持续改进 zkVM 的过程中,Nexus团队将专注于模块化、可扩展性与适应性,确保系统能灵活应对日益复杂与分布式的应用需求。
zkVM 3.0 中的以下设计选择既展示了现有成果,也揭示了未来的改进空间:
在下一版本Nexus zkVM 的优先任务是引入模块化证明、可定制的成本结构和分布式证明生成机制,让开发者在多样化环境中获得更多控制力、更高效率与更强扩展性。
展望 zkVM 的下一次迭代,Nexus的目标是突破 zkVM 3.0 的单体架构,构建一个更加模块化、可扩展的系统设计。
Nexus团队计划将统一的轨迹矩阵分解为每个组件独立的轨迹(trace),每个轨迹只捕捉一个子系统(如 CPU、内存、算术逻辑单元)的行为。每个组件轨迹将配备自己的一组约束和独立的证明。为了维护系统的一致性,将通过基于 LogUp 的摘要约束将共享变量在组件之间进行连接。
通过分离各组件,可以实现:
除了划分主要子系统之外,还计划将每条指令的执行逻辑隔离到浅层、专用的轨迹片段中。如,像 ADD
、JUMP
或 SHA256
这样的指令可以在仅在相关时激活的轻量子组件中处理。这将使得能够:
通过这一演进,Nexus的目标是使未来版本的 zkVM 更具可扩展性、可定制性和开发者友好性,同时保持当前版本所定义的通用性与安全性保障。
通过 zkVM 3.0,Nexus朝着构建一个快速且模块化的零知识虚拟机迈出了关键一步。通过引入小域算术、离线内存验证机制以及 S-two 证明器,设计出了一个在性能与通用性之间取得良好平衡的系统。
同时,也意识到现有架构中的一些局限性——从单体式轨迹结构到固定成本的指令编码。这些经验教训将直接引导未来 zkVM 的演进方向,其中包括模块化证明、组件隔离和分布式证明生成等关键特性。
Nexus致力于打造一个开发者可以随规模扩展、灵活适配,并在高可信环境中放心使用的 zkVM。zkVM 3.0 是这一目标的基石——Nexus团队将继续在此基础上不断构建前进。
[1] Nexus团队2025年5月30日博客 zkVM 3.0 and Beyond: Toward Modular, Distributed Zero-Knowledge Proofs
[2] Starkware团队2025年6月25日博客 Nexus x S-two: Building the future of scalable zkVMs