openvm_sdk/prover/vm/
mod.rs1use 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}