0xMiden/miden-vm

GitHub: 0xMiden/miden-vm

这是一个基于 STARK 技术的零知识虚拟机,能够为在 Rust 环境下执行的程序自动生成可验证的计算完整性证明。

Stars: 734 | Forks: 281

# Miden Virtual Machine [![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/0xMiden/miden-vm/blob/main/LICENSE-MIT) [![LICENSE](https://img.shields.io/badge/license-APACHE-blue.svg)](https://github.com/0xMiden/miden-vm/blob/main/LICENSE-APACHE) [![Test](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/df5c545ee9174028.svg)](https://github.com/0xMiden/miden-vm/actions/workflows/test.yml) [![Build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fa3e54a299174029.svg)](https://github.com/0xMiden/miden-vm/actions/workflows/build.yml) [![RUST_VERSION](https://img.shields.io/badge/rustc-1.90+-lightgray.svg)](https://www.rust-lang.org/tools/install) [![Crates.io](https://img.shields.io/crates/v/miden-vm)](https://crates.io/crates/miden-vm) 一个基于 STARK 的虚拟机。 **警告:** 本项目处于 alpha 阶段。尚未经过审计,可能存在 bug 和安全漏洞。此实现尚不适合生产环境使用。 **警告:** 对于 `no_std`,仅官方支持 `wasm32-unknown-unknown` 和 `wasm32-wasip1` 目标。 ## 概述 Miden VM 是一个用 Rust 编写的零知识虚拟机。对于在 Miden VM 上执行的任何程序,都可以自动生成基于 STARK 的执行证明。然后,任何人都可以使用此证明来验证程序执行是否正确,而无需重新执行程序,甚至无需了解程序的内容。 Miden VM 使用 [Plonky3](https://github.com/0xMiden/Plonky3) 作为证明系统,尽管进行了一些修改。有关更多信息,请参阅 [`p3-miden`](https://github.com/0xMiden/p3-miden) 仓库。 在最新的稳定版本中,VM 的大部分核心功能已经稳定,并且已经实现了大部分 STARK 证明生成。我们仍在更改 VM 内部和外部接口,因此您应该预料到每个新版本都会有一些破坏性变更。 - 如果您想了解更多关于 Miden VM 如何工作的信息,请查看 [文档](https://docs.miden.xyz/miden-vm/)。 - 如果您想开始使用 Miden VM,请查看 [miden-vm](./miden-vm) crate。 - 如果您想了解更多关于 STARKs 的信息,请查看 [参考资料](#references) 部分。 ### 状态和功能 VM 的下一个版本正在 [next](https://github.com/0xMiden/miden-vm/tree/next) 分支中进行开发;有关当前未发布版本以及每个过去版本中所做更改的列表,请参阅 [更新日志](https://github.com/0xMiden/miden-vm/blob/next/CHANGELOG.md)。 #### 功能亮点 Miden VM 是一个功能齐全的虚拟机。尽管针对零知识证明生成进行了优化,但它提供了人们从常规 VM 中期望的所有功能。仅举几例: - **流程控制。** Miden VM 是图灵完备的,支持熟悉的流程控制结构,如条件语句和计数器/条件控制的循环。对最大循环次数或控制流逻辑的深度没有任何限制。 - **程序和执行上下文。** Miden 汇编程序可以分解为称为 _程序_ 的子例程,程序执行可以跨越多个隔离的上下文,每个上下文都有自己的专用内存空间。这些上下文分为 _根上下文_ 和 _用户上下文_。可以通过自定义内核调用从用户上下文访问根上下文。 - **内存。** Miden VM 支持读写随机存取内存。程序可以保留部分全局内存,以便更容易地管理局部变量。 - **丰富的指令集。** Miden VM 为 32 位无符号整数提供原生操作(算术、比较和位运算),以及使用 Poseidon2 哈希函数(VM 的原生哈希函数)计算哈希和验证 Merkle 路径的内置指令。 - **外部库。** Miden VM 支持根据预定义库编译程序。VM 附带这样一个库:Miden `miden-core-lib`,它增加了对 64 位无符号整数等内容的支持。开发人员可以构建其他类似的库,以适合其用例的方式扩展 VM 的功能。 - **非确定性**。与传统虚拟机不同,Miden VM 支持非确定性编程。这意味着证明者可以在 VM 之外做额外的工作,然后向 VM 提供 _提示_。这些提示可用于显着加快某些类型的计算,以及向 VM 提供秘密输入。 - **可自定义的主机。** Miden VM 可以使用用户定义的主机进行实例化。这些主机用于在执行/证明生成期间向 VM 提供外部数据(通过非确定性输入),并且可以将 VM 连接到任意数据源(例如,数据库或 RPC 调用)。 - **快速处理器执行模式。** 除了用于证明生成的跟踪生成处理器之外,Miden VM 还包括一个可以高达 320 MHz 的速度执行程序的快速处理器,从而实现快速的程序测试和调试。 - **预编译。** Miden VM 支持 [预编译](./docs/src/design/stack/precompiles.md),允许程序将昂贵的计算委托给主机,同时在 STARK 证明内生成可审计的证据。这可以有效地验证签名方案和哈希函数等操作,否则这些操作在 VM 中原生执行的成本高得令人望而却步。 #### 计划中的功能 在未来几个月中,我们计划完成 VM 的设计并实现对以下功能的支持: - **递归证明。** Miden VM 将很快能够验证其自身执行的证明。这将实现无限递归证明,这是现实世界应用程序中非常有用的工具。 - **更好的调试。** Miden VM 将提供更好的调试体验,包括能够设置断点、更好的源映射以及更完整的程序分析信息。 #### 编译为 WebAssembly。 Miden VM 是用纯 Rust 编写的,可以编译为 WebAssembly。对于大多数 crate,默认链接 Rust 的 `std` 标准库。要编译到两个受支持的 `wasm32` 目标之一,请使用 `cargo` 的 `--no-default-features` 标志以确保不链接 Rust 标准库(*即,在 `no_std` 中编译*)。 #### 并发证明生成 当启用 `concurrent` 功能编译时,证明者将使用多个线程生成 STARK 证明。有关并发证明生成的好处,请查看下面的基准测试。 在内部,我们使用 [rayon](https://github.com/rayon-rs/rayon) 进行并行计算。因此,要控制用于生成 STARK 证明的线程数,您可以使用 `RAYON_NUM_THREADS` 环境变量。 ### 项目结构 该项目组织成几个 crate,如下所示: | Crate | Description | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [core](core) | 包含定义 Miden VM 指令集、程序结构的组件,以及其他 crate 使用的一组实用函数。 | | [assembly](crates/assembly) | 包含 Miden 汇编器。汇编器用于将 Miden 汇编源代码编译为 Miden VM 程序。 | | [processor](processor) | 包含 Miden VM 处理器。处理器用于执行 Miden 程序并生成程序执行跟踪。然后,Miden 证明者使用这些跟踪来生成正确程序执行的证明。 | | [air](air) | 包含 Miden VM 处理器逻辑的 _代数中间表示_ (AIR)。VM 在证明生成和验证期间使用此 AIR。 | | [prover](prover) | 包含 Miden VM 证明者。证明者用于生成证明正确执行 Miden VM 程序的 STARK 证明。在内部,证明者使用 Miden 处理器来执行程序并生成执行跟踪。 | | [verifier](verifier) | 包含一个轻量级验证器,可用于验证由 Miden VM 生成的程序执行证明。 | | [miden-vm](miden-vm) | 将 Miden VM 处理器、证明者和验证器公开的功能聚合在一个位置,并为 Miden VM 提供 CLI 接口。 | | [core-lib](crates/lib/core) | 包含 Miden 核心汇编库。Miden 核心库的目标是为常用的原语提供高度优化且经过实战检验的实现。 | | [test-utils](crates/test-utils) | 包含用于测试 Miden VM 程序执行的实用程序。 | ## 文档 `docs/` 文件夹中的文档是使用 Docusaurus 构建的,并自动合并到主要的 [miden-docs](https://github.com/0xMiden/miden-docs) 仓库中,用于主文档网站。对 `next` 分支的更改会触发自动部署工作流。文档文件夹需要在构建之前安装 npm 包。 ## 性能 下面的基准测试应仅作为对未来预期性能的粗略指南。许多优化尚未应用的原因,我们预计一旦我们花一些时间进行性能优化,速度就会有所提高。 关于性能的一些一般说明: - 执行时间主要由证明生成时间主导。实际上,运行程序所需的时间通常不到生成证明所需时间的 0.01%。 - 证明验证时间非常快。在大多数情况下,它在 1 毫秒以下,但有时高达 2 毫秒或 3 毫秒。 - 证明生成过程是动态可调的。通常,在执行时间、证明大小和安全级别之间存在权衡(即,对于给定的安全级别,我们可以通过增加执行时间来减小证明大小,在一定范围内)。 - 证明生成和证明验证时间都受到 STARK 协议中使用的哈希函数的极大影响。在下面的基准测试中,我们使用 BLAKE3,这是一种非常快的哈希函数。 ### 单核证明者性能 当在单个 CPU 核心上执行时,当前版本的 Miden VM 以大约 20 - 25 KHz 的速度运行。在下面的基准测试中,VM 在 Apple M4 Max CPU 上以单线程执行 [Blake3 示例](miden-vm/masm-examples/hashing/blake3_1to1/)程序。生成的证明具有 96 位的目标安全级别。 | VM cycles | Execution time | Proving time | RAM consumed | Proof size | | :------------: | :------------: | :----------: | :----------: | :--------: | | 214 | 0.3 ms | 885 ms | 200 MB | 80 KB | | 216 | 0.7 ms | 3.6 sec | 750 MB | 100 KB | | 218 | 1.2 ms | 14.7 sec | 2.9 GB | 116 KB | | 220 | 11.1 ms | 59 sec | 11 GB | 136 KB | 从上文可以看出,证明时间随着周期数的每次翻倍大致翻倍,但证明大小的增长要慢得多。 ### 多核证明者性能 STARK 证明生成具有高度可并行性。因此,通过利用多个 CPU 核心,我们可以显着减少证明生成时间。例如,当在 16 核 CPU (Apple M4 Max) 上执行时,当前版本的 Miden VM 以大约 170 KHz 的速度运行。而在 64 核 CPU (Amazon Graviton 4) 上执行时,VM 以大约 200 KHz 的速度运行。 在下面的基准测试中,VM 在 96 位目标安全级别下为 220 个周期执行相同的 Blake3 示例程序: | Machine | Execution time | Proving time | Execution % | Implied Frequency | | ------------------------------ | :------------: | :----------: | :---------: | :---------------: | | Apple M1 Pro (16 threads) | 14.5 ms | 14.7 sec | 0.1% | 70 KHz | | Apple M4 Max (16 threads) | 11.1 ms | 5.9 sec | 0.2% | 170 KHz | | Amazon Graviton 4 (64 threads) | 10.7 ms | 5.7 sec | 0.2% | 175 KHz | | AMD EPYC 9R45 (64 threads) | 7.5 ms | 4.5 sec | 0.2% | 220 KHz | | AMD Ryzen 9 9950X (16 threads) | 7.6 ms | 7.6 sec | 0.1% | 138 KHz | | AMD Ryzen 9 9950X (32 threads) | 7.3 ms | 6.8 sec | 0.1% | 154 KHz | ### 适合递归的证明 上述基准测试中的证明是使用 BLAKE3 哈希函数生成的。虽然此哈希函数非常快,但在 Miden VM 中执行效率不高。因此,使用 BLAKE3 生成的证明不太适合递归证明验证。为了支持高效的递归证明,我们需要使用算术友好的哈希函数。Miden VM 原生支持 Poseidon2,就是这样一种哈希函数。算术友好哈希函数的缺点之一是它们明显比常规哈希函数慢。 在下面的基准测试中,我们在 96 位目标安全级别下使用 Poseidon2 哈希函数代替 BLAKE3 为 220 个周期执行相同的 Blake3 示例程序: | Machine | Execution time | Proving time | Slowdown vs BLAKE3 | | ------------------------------ | :------------: | :----------: | :----------------: | | Apple M1 Pro (16 threads) | 14.5 ms | 31.9 sec | 2.2x| Apple M4 Max (16 threads) | 11.1 ms | 12.9 sec | 2.2x | | Amazon Graviton 4 (64 threads) | 10.7 ms | 9.5 sec | 1.7x | | AMD EPYC 9R45 (64 threads) | 7.5 ms | 8.6 sec | 1.9x | | AMD Ryzen 9 9950X (16 threads) | 7.4 ms | 18.9 sec | 2.5x | | AMD Ryzen 9 9950X (32 threads) | 7.3 ms | 14.8 sec | 2.2x | ## 参考资料 Miden VM 生成的执行证明基于 STARKs。STARK 是一种新颖的计算证明方案,允许您创建一个可高效验证的证明,证明计算已正确执行。该方案由 Eli Ben-Sasson、Michael Riabzev 等人在 Technion - Israel Institute of Technology 开发。STARK 不需要初始可信设置,并且依赖于非常少的加密假设。 以下是一些有关 STARKs 的学习资源: - STARKs 白皮书:[Scalable, transparent, and post-quantum secure computational integrity](https://eprint.iacr.org/2018/046) - STARKs 与 SNARKs:[A Cambrian Explosion of Crypto Proofs](https://nakamoto.com/cambrian-explosion-of-crypto-proofs/) Vitalik Buterin 关于 zk-STARKs 的博客系列: - [STARKs, part 1: Proofs with Polynomials](https://vitalik.eth.limo/general/2017/11/09/starks_part_1.html) - [STARKs, part 2: Thank Goodness it's FRI-day](https://vitalik.eth.limo/general/2017/11/22/starks_part_2.html) - [STARKs, part 3: Into the Weeds](https://vitalik.eth.limo/general/2018/07/21/starks_part_3.html) Alan Szepieniec 的 STARK 教程: - [Anatomy of a STARK](https://aszepieniec.github.io/stark-anatomy/) - [BrainSTARK](https://aszepieniec.github.io/stark-brainfuck/) StarkWare 的 STARK Math 博客系列: - [STARK Math: The Journey Begins](https://medium.com/starkware/stark-math-the-journey-begins-51bd2b063c71) - [Arithmetization I](https://medium.com/starkware/arithmetization-i-15c046390862) - [Arithmetization II](https://medium.com/starkware/arithmetization-ii-403c3b3f4355) - [Low Degree Testing](https://medium.com/starkware/low-degree-testing-f7614f5172db) - [A Framework for Efficient STARKs](https://medium.com/starkware/a-framework-for-efficient-starks-19608ba06fbe) StarkWare 的 STARK 教程: - [STARK 101](https://starkware.co/stark-101/) ## 许可证 任何有意提交以包含在此存储库中的贡献,根据 Apache-2.0 许可证的定义,均应在 [MIT](./LICENSE-MIT) 和 [Apache 2.0](./LICENSE-APACHE) 许可证下获得双重许可,且不包含任何附加条款或条件。
标签:AI工具, Layer 2, Miden VM, Plonky3, Rollup, Rust, STARK, WASM, ZKP, 区块链, 可视化界面, 可验证计算, 密码学, 手动系统调用, 生成式AI安全, 网络流量审计, 虚拟机, 证明生成, 通知系统, 隐私计算, 零知识证明