1- use openvm_sdk:: { Sdk , StdIn , types:: ExecutableFormat } ;
1+ use std:: sync:: Arc ;
2+
3+ use openvm_circuit:: {
4+ arch:: { VmExecutor , instructions:: exe:: VmExe } ,
5+ system:: {
6+ memory:: merkle:: public_values:: extract_public_values, program:: trace:: VmCommittedExe ,
7+ } ,
8+ } ;
9+ use openvm_sdk:: { F , SC , StdIn , config:: SdkVmConfig } ;
210
311use crate :: Error ;
412
@@ -8,15 +16,28 @@ pub struct ExecutionResult {
816 pub public_values : Vec < u8 > ,
917}
1018
19+ #[ derive( Default ) ]
20+ pub struct DebugInput {
21+ pub mock_prove : bool ,
22+ pub commited_exe : Option < Arc < VmCommittedExe < SC > > > ,
23+ }
24+
1125pub fn execute_guest (
12- sdk : & Sdk ,
13- exe : impl Into < ExecutableFormat > ,
26+ vm_config : SdkVmConfig ,
27+ exe : & VmExe < F > ,
1428 stdin : & StdIn ,
1529) -> Result < ExecutionResult , Error > {
16- let ( public_values, ( _cost, total_cycle) ) = sdk
17- . execute_metered_cost ( exe, stdin. clone ( ) )
30+ let executor = VmExecutor :: new ( vm_config. clone ( ) ) . expect ( "invalid config" ) ;
31+ let instance = executor. instance ( exe) . expect ( "invalid exe" ) ;
32+
33+ let state = instance
34+ . execute ( stdin. clone ( ) , None )
1835 . map_err ( |e| Error :: GenProof ( e. to_string ( ) ) ) ?;
36+ let total_cycle = state. instret ( ) ;
37+ let final_memory = state. memory ;
1938
39+ let public_values: Vec < u8 > =
40+ extract_public_values ( vm_config. as_ref ( ) . num_public_values , & final_memory. memory ) ;
2041 tracing:: debug!( name: "public_values after guest execution" , ?public_values) ;
2142 if public_values. iter ( ) . all ( |x| * x == 0 ) {
2243 return Err ( Error :: GenProof ( "public_values are all 0s" . to_string ( ) ) ) ;
0 commit comments