Skip to content

Commit e4dd50e

Browse files
starknet_os: implement run_virtual_os (#11430)
1 parent 4da0544 commit e4dd50e

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

crates/starknet_os/src/io.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ pub mod os_output;
33
pub mod os_output_types;
44
#[cfg(any(feature = "testing", test))]
55
pub mod test_utils;
6+
pub mod virtual_os_output;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use cairo_vm::vm::runners::cairo_pie::CairoPie;
2+
use starknet_types_core::felt::Felt;
3+
4+
/// The output of the virtual OS runner.
5+
#[derive(Debug)]
6+
pub struct VirtualOsRunnerOutput {
7+
/// The raw virtual OS output.
8+
pub raw_output: Vec<Felt>,
9+
/// The Cairo PIE (Program Independent Execution) artifact.
10+
pub cairo_pie: CairoPie,
11+
}

crates/starknet_os/src/runner.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use apollo_starknet_os_program::{AGGREGATOR_PROGRAM, OS_PROGRAM};
1+
use apollo_starknet_os_program::{AGGREGATOR_PROGRAM, OS_PROGRAM, VIRTUAL_OS_PROGRAM};
22
use blockifier::state::state_api::StateReader;
33
use cairo_vm::cairo_run::CairoRunConfig;
44
use cairo_vm::hint_processor::hint_processor_definition::HintProcessor;
@@ -21,6 +21,7 @@ use crate::hint_processor::snos_hint_processor::SnosHintProcessor;
2121
use crate::hints::hint_implementation::output::OUTPUT_ATTRIBUTE_FACT_TOPOLOGY;
2222
use crate::io::os_input::{OsHints, StarknetOsInput};
2323
use crate::io::os_output::{StarknetAggregatorRunnerOutput, StarknetOsRunnerOutput};
24+
use crate::io::virtual_os_output::VirtualOsRunnerOutput;
2425
use crate::metrics::{AggregatorMetrics, OsMetrics};
2526
use 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

Comments
 (0)