Miden prover

This crate contains the Miden VM prover, which proves correct execution of Miden VM. Internally, the prover uses Miden processor to execute the programs, and then relies on the Winterfell prover to generate STARK proofs.

Usage

This crate exposes a prove() function which can be used to execute Miden VM programs and generate proofs of their execution. The function takes the following parameters:

If the program is executed successfully, the function returns a tuple with 2 elements:

Proof generation example

Here is a simple example of executing a program which pushes two numbers onto the stack and computes their sum: ```Rust use midenassembly::Assembler; use midenprover::{prove, ProofOptions, StackInputs, MemAdviceProvider};

// 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 MemAdviceProvider::default(), // we won't provide any advice values &ProofOptions::default(), // we'll be using default options ) .unwrap();

// the output should be 8 assert_eq!(Some(&8), outputs.stack().first()); ```

Crate features

Miden prover can be compiled with the following features:

To compile with no_std, disable default features via --no-default-features flag.

Concurrent proof generation

When compiled with concurrent feature enabled, the prover will generate STARK proofs using multiple threads. For benefits of concurrent proof generation check out these benchmarks.

Internally, we use rayon for parallel computations. To control the number of threads used to generate a STARK proof, you can use RAYON_NUM_THREADS environment variable.

License

This project is MIT licensed.