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::{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}