1- use apollo_starknet_os_program:: { AGGREGATOR_PROGRAM , OS_PROGRAM } ;
1+ use apollo_starknet_os_program:: { AGGREGATOR_PROGRAM , OS_PROGRAM , VIRTUAL_OS_PROGRAM } ;
22use blockifier:: state:: state_api:: StateReader ;
33use cairo_vm:: cairo_run:: CairoRunConfig ;
44use cairo_vm:: hint_processor:: hint_processor_definition:: HintProcessor ;
@@ -21,6 +21,7 @@ use crate::hint_processor::snos_hint_processor::SnosHintProcessor;
2121use crate :: hints:: hint_implementation:: output:: OUTPUT_ATTRIBUTE_FACT_TOPOLOGY ;
2222use crate :: io:: os_input:: { OsHints , StarknetOsInput } ;
2323use crate :: io:: os_output:: { StarknetAggregatorRunnerOutput , StarknetOsRunnerOutput } ;
24+ use crate :: io:: virtual_os_output:: VirtualOsRunnerOutput ;
2425use crate :: metrics:: { AggregatorMetrics , OsMetrics } ;
2526use crate :: vm_utils:: vm_error_with_code_snippet;
2627
@@ -194,3 +195,30 @@ pub fn run_aggregator(
194195 unused_hints : aggregator_hint_processor. get_unused_hints ( ) ,
195196 } )
196197}
198+
199+ /// Runs the virtual OS.
200+ pub fn run_virtual_os (
201+ layout : LayoutName ,
202+ OsHints {
203+ os_hints_config,
204+ os_input : StarknetOsInput { os_block_inputs, deprecated_compiled_classes, compiled_classes } ,
205+ } : OsHints ,
206+ ) -> Result < VirtualOsRunnerOutput , StarknetOsError > {
207+ // Create the hint processor - reuse the SNOS hint processor with the virtual OS program.
208+ let mut snos_hint_processor = SnosHintProcessor :: new (
209+ & VIRTUAL_OS_PROGRAM ,
210+ os_hints_config,
211+ os_block_inputs. iter ( ) . collect ( ) ,
212+ deprecated_compiled_classes,
213+ compiled_classes,
214+ vec ! [ PanickingStateReader ; os_block_inputs. len( ) ] ,
215+ ) ?;
216+
217+ // Run the virtual OS program.
218+ let runner_output = run_program ( layout, & VIRTUAL_OS_PROGRAM , & mut snos_hint_processor) ?;
219+
220+ Ok ( VirtualOsRunnerOutput {
221+ raw_output : runner_output. raw_output ,
222+ cairo_pie : runner_output. cairo_pie ,
223+ } )
224+ }
0 commit comments