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 魔法豆
8,808 每月下载量
用于 9 个 crate (3 个直接使用)
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