#miden #vm

无 std miden-processor

Miden 虚拟机处理器

17 个版本 (9 个破坏性更新)

0.10.5 2024 年 8 月 21 日
0.9.2 2024 年 4 月 25 日
0.8.0 2024 年 2 月 27 日
0.7.0 2023 年 10 月 11 日
0.1.0 2021 年 11 月 16 日

#837 in 魔法豆

Download history 1485/week @ 2024-05-01 1752/week @ 2024-05-08 1220/week @ 2024-05-15 960/week @ 2024-05-22 1513/week @ 2024-05-29 1635/week @ 2024-06-05 1819/week @ 2024-06-12 1194/week @ 2024-06-19 1616/week @ 2024-06-26 1772/week @ 2024-07-03 1265/week @ 2024-07-10 1372/week @ 2024-07-17 2221/week @ 2024-07-24 2620/week @ 2024-07-31 1950/week @ 2024-08-07 1692/week @ 2024-08-14

8,670 每月下载量
17 个crate中使用 (9 个直接使用)

MIT 许可证

1.5MB
25K SLoC

Miden 处理器

该crate包含Miden虚拟机处理器的实现。处理器的作用是执行程序并生成程序执行跟踪。该跟踪随后由Miden虚拟机用于生成程序正确执行的证明。

用法

处理器公开了两个用于执行程序的函数:execute()execute_iter()。函数 execute() 接受以下参数

  • program: &Program - 要执行的Miden程序的引用。
  • stack_inputs: StackInputs - 执行程序时使用的一组公共输入。
  • host: Host - 一个 Host 实例,可用于向虚拟机提供非确定性输入并从虚拟机接收消息。
  • options: ExecutionOptions - 执行指定程序的一组选项(例如,允许的最大周期数)。

该函数返回一个 Result<ExecutionTrace, ExecutionError>,如果执行成功,它将包含程序的执行跟踪,如果执行失败,则包含错误。内部,虚拟机将此执行跟踪传递给证明器以生成程序正确执行的证明。

execute_iter() 函数接受类似的参数(但没有 options),并返回一个 VmStateIterator。此迭代器可用于遍历执行程序的周期,以进行调试。实际上,当我们使用此函数执行程序时,会保留大量调试信息,我们可以获得任何周期的虚拟机状态的精确图像。此外,如果执行导致错误,VmStateIterator 仍可用于检查错误发生周期的虚拟机状态。

例如

use miden_assembly::Assembler;
use miden_processor::{execute, execute_iter, ExecutionOptions, DefaultHost, StackInputs, };

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

// compile Miden assembly source code into a program
let program = assembler.compile("begin push.3 push.5 add end").unwrap();

// use an empty list as initial stack
let stack_inputs = StackInputs::default();

// instantiate a default host (with no advice inputs)
let mut host = DefaultHost::default();

// instantiate default execution options
let exec_options = ExecutionOptions::default();

// execute the program with no inputs
let trace = execute(&program, stack_inputs.clone(), &mut host, exec_options).unwrap();

// now, execute the same program in debug mode and iterate over VM states
for vm_state in execute_iter(&program, stack_inputs, host, exec_options) {
    match vm_state {
        Ok(vm_state) => println!("{:?}", vm_state),
        Err(_) => println!("something went terribly wrong!"),
    }
}

处理器组件

处理器由几个组件组织

  • 解码器,负责解码指令和管理控制流。
  • 栈,负责在栈上执行指令。
  • 范围检查器,负责检查值是否可以放入16位。
  • 芯片模块,包含处理复杂计算(例如,哈希)以及随机访问内存的特殊化芯片。

这些组件通过两个总线连接

  • 范围检查器总线,将栈和芯片模块与范围检查器连接。
  • 芯片总线,将栈和解码器与芯片模块连接。

有关 Miden VM 设计的更深入描述,请参见此处

箱子功能

Miden 处理器可以编译以下功能

  • std - 默认启用并依赖于 Rust 标准库。
  • no_std 不依赖于 Rust 标准库,并允许编译到 WebAssembly。

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

许可

该项目受 MIT 许可 许可。

依赖关系

~7–33MB
~484K SLoC