openvm_sdk/prover/vm/
mod.rs

1use std::sync::Arc;
2
3use openvm_circuit::arch::{
4    instructions::exe::VmExe, VirtualMachine, VirtualMachineError, VmBuilder, VmInstance,
5};
6use openvm_stark_backend::{config::Val, prover::hal::DeviceDataTransporter};
7use openvm_stark_sdk::engine::StarkFriEngine;
8
9use crate::prover::vm::types::VmProvingKey;
10
11pub mod types;
12
13pub fn new_local_prover<E, VB>(
14    vm_builder: VB,
15    vm_pk: &VmProvingKey<E::SC, VB::VmConfig>,
16    exe: Arc<VmExe<Val<E::SC>>>,
17) -> Result<VmInstance<E, VB>, VirtualMachineError>
18where
19    E: StarkFriEngine,
20    VB: VmBuilder<E>,
21{
22    let engine = E::new(vm_pk.fri_params);
23    let d_pk = engine.device().transport_pk_to_device(&vm_pk.vm_pk);
24    let vm = VirtualMachine::new(engine, vm_builder, vm_pk.vm_config.clone(), d_pk)?;
25    let cached_program_trace = vm.commit_program_on_device(&exe.program);
26    let instance = VmInstance::new(vm, exe, cached_program_trace)?;
27    Ok(instance)
28}