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::{prover::DeviceDataTransporter, StarkEngine, Val};
7
8use crate::prover::vm::types::VmProvingKey;
9
10pub mod types;
11
12pub fn new_local_prover<E, VB>(
13 vm_builder: VB,
14 vm_pk: &VmProvingKey<VB::VmConfig>,
15 exe: Arc<VmExe<Val<E::SC>>>,
16) -> Result<VmInstance<E, VB>, VirtualMachineError>
17where
18 E: StarkEngine<SC = crate::SC>,
19 VB: VmBuilder<E>,
20{
21 let engine = E::new(vm_pk.get_params());
22 let d_pk = engine.device().transport_pk_to_device(&*vm_pk.vm_pk);
23 let vm = VirtualMachine::new(engine, vm_builder, vm_pk.vm_config.clone(), d_pk)?;
24 let cached_program_trace = vm.commit_program_on_device(&exe.program);
25 let instance = VmInstance::new(vm, exe, cached_program_trace)?;
26 Ok(instance)
27}