13 个版本 (8 个重大更新)

0.10.5 2024年8月21日
0.9.1 2024年4月4日
0.8.0 2024年2月27日
0.7.0 2023年10月11日
0.3.0 2022年11月24日

#385 in 魔法豆

Download history 1690/week @ 2024-05-03 1644/week @ 2024-05-10 1119/week @ 2024-05-17 996/week @ 2024-05-24 1617/week @ 2024-05-31 1752/week @ 2024-06-07 1527/week @ 2024-06-14 1235/week @ 2024-06-21 1734/week @ 2024-06-28 1495/week @ 2024-07-05 1393/week @ 2024-07-12 1548/week @ 2024-07-19 2609/week @ 2024-07-26 2076/week @ 2024-08-02 1826/week @ 2024-08-09 1901/week @ 2024-08-16

8,808 每月下载量
用于 9 个 crate (3 个直接使用)

MIT 许可证

1.5MB
21K SLoC

Miden 验证器

此 crate 包含 Miden VM 验证器,用于证明 Miden VM 的正确执行。内部,验证器使用 Miden 处理器 来执行程序,然后依靠 Winterfell 验证器生成 STARK 证明。

使用方法

此 crate 公开了一个 prove() 函数,该函数可用于执行 Miden VM 程序并生成其执行的证明。该函数接受以下参数

  • program: &Program - 要执行的 Miden 程序的引用。
  • stack_inputs: StackInputs - 一组用于执行程序的公共输入。
  • host: Host - 一个 Host 的实例,可用于向 VM 提供非确定性输入并从 VM 接收消息。
  • options: &ProvingOptions - 证明生成配置参数。默认选项针对 96 位安全性级别。

如果程序执行成功,则函数返回一个包含 2 个元素的元组

  • outputs: StackOutputs - 程序生成的输出。
  • proof: ExecutionProof - 程序执行证明。 ExecutionProof 可以通过 to_bytes()from_bytes() 函数轻松地进行序列化和反序列化。

证明生成示例

以下是一个简单的示例,执行一个程序,该程序将两个数字压入栈中并计算它们的和

use miden_assembly::Assembler;
use miden_prover::{prove, ProvingOptions, StackInputs, DefaultHost};

// instantiate the assembler
let assembler = Assembler::default();

// this is our program, we compile it from assembly code
let program = assembler.compile("begin push.3 push.5 add end").unwrap();

// let's execute it and generate a STARK proof
let (outputs, proof) = prove(
    &program,
    StackInputs::default(),       // we won't provide any stack inputs
    DefaultHost::default(),       // we'll be using a default host
    &ProvingOptions::default(),   // we'll be using default options
)
.unwrap();

// the output should be 8
assert_eq!(8, outputs.stack().first().unwrap().as_int());

功能特性

Miden 验证器可以编译以下特性

  • std - 默认启用并依赖于 Rust 标准库。
  • concurrent - 意味着启用 std 并启用多线程证明生成。
  • metal - 在支持的平台上启用基于 Metal 的证明生成加速(适用于递归证明)。
  • no_std 不依赖于 Rust 标准库并支持编译成 WebAssembly。

要使用 no_std 编译,请通过 --no-default-features 标志禁用默认功能。

并发证明生成

当启用 concurrent 功能编译时,验证器将使用多个线程生成 STARK 证明。有关并发证明生成的优点,请查看这些 基准测试

内部,我们使用 rayon 进行并行计算。要控制生成 STARK 证明时使用的线程数,可以使用 RAYON_NUM_THREADS 环境变量。

许可协议

本项目采用 MIT 许可协议

依赖关系

~7–33MB
~492K SLoC