Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Both branches support Stwo prover opcodes (Blake2s, QM31) since v2.0.0.
#### Upcoming Changes

* Add Stwo cairo runner API [#2351](https://github.com/starkware-libs/cairo-vm/pull/2351)
* feat: consolidate CairoRunner ctors [#2368](https://github.com/starkware-libs/cairo-vm/pull/2368)

* feat: create and use CairoRunConfig as ctor arg for CairoRunner ctors [#2367](https://github.com/starkware-libs/cairo-vm/pull/2367)

* feat: move runner_mode to be a field in StwoCairoRunConfig [#2366](https://github.com/starkware-libs/cairo-vm/pull/2366)
Expand Down
32 changes: 14 additions & 18 deletions bench/criterion_benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,20 @@ fn build_many_runners(c: &mut Criterion) {
let program = Program::from_bytes(program.as_slice(), Some("main")).unwrap();
c.bench_function("build runner", |b| {
b.iter_with_large_drop(|| {
_ = black_box(
CairoRunner::new(
black_box(&program),
black_box(
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
),
)
.unwrap(),
);
_ = black_box(CairoRunner::new(
black_box(&program),
black_box(
&Cairo0RunConfig {
layout: LayoutName::starknet_with_keccak,
proof_mode: false,
trace_enabled: false,
disable_trace_padding: false,
..Default::default()
}
.run_config()
.unwrap(),
),
));
})
});
}
Expand All @@ -67,7 +64,6 @@ fn load_program_data(c: &mut Criterion) {
.run_config()
.unwrap(),
)
.unwrap()
},
|mut runner| _ = black_box(runner.initialize(false).unwrap()),
BatchSize::SmallInput,
Expand Down
4 changes: 1 addition & 3 deletions bench/iai_benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,7 @@ fn build_runner() {
}
.run_config()
.unwrap(),
)
.unwrap();
);
core::mem::drop(black_box(runner));
}

Expand All @@ -69,7 +68,6 @@ fn build_runner_helper() -> CairoRunner {
.run_config()
.unwrap(),
)
.unwrap()
}

#[library_benchmark]
Expand Down
3 changes: 1 addition & 2 deletions cairo-vm-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,8 +291,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
let end = cairo_runner
.initialize(false)
.map_err(CairoRunError::Runner)?;
Expand Down
2 changes: 1 addition & 1 deletion cairo1-run/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ pub fn cairo_run_program(
)?
};

let mut runner = CairoRunner::new_v2(&program, &cairo_run_config.run_config()?);
let mut runner = CairoRunner::new(&program, &cairo_run_config.run_config()?);
let end = runner.initialize(cairo_run_config.proof_mode)?;
load_arguments(&mut runner, &cairo_run_config, main_func)?;

Expand Down
14 changes: 7 additions & 7 deletions vm/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ pub fn cairo_run_stwo(
let _span = span!(Level::INFO, "cairo run stwo").entered();

let proof_mode = cairo_run_config.runner_mode != RunnerMode::ExecutionMode;
let mut cairo_runner = CairoRunner::new_stwo(program, &cairo_run_config.run_config()?)?;
let mut cairo_runner = CairoRunner::new(program, &cairo_run_config.run_config()?);
cairo_runner.exec_scopes = exec_scopes;

let end = cairo_runner.initialize_stwo(allowed_builtins)?;
Expand Down Expand Up @@ -189,7 +189,7 @@ pub fn cairo_run_program_with_initial_scope(
.allow_missing_builtins
.unwrap_or(cairo_run_config.proof_mode);

let mut cairo_runner = CairoRunner::new(program, &cairo_run_config.run_config()?)?;
let mut cairo_runner = CairoRunner::new(program, &cairo_run_config.run_config()?);

cairo_runner.exec_scopes = exec_scopes;

Expand Down Expand Up @@ -289,7 +289,7 @@ pub fn cairo_run_pie(
let allow_missing_builtins = cairo_run_config.allow_missing_builtins.unwrap_or_default();

let program = Program::from_stripped_program(&pie.metadata.program);
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?);

let end = cairo_runner.initialize(allow_missing_builtins)?;
cairo_runner.vm.finalize_segments_by_cairo_pie(pie);
Expand Down Expand Up @@ -343,7 +343,7 @@ pub fn cairo_run_pie(
}

/// Runs a Cairo PIE using the Stwo runtime API.
/// Same as `cairo_run_pie` but uses `new_stwo` + `initialize_stwo` instead of layouts.
/// Same as `cairo_run_pie` but uses [StwoCairoRunConfig] + `initialize_stwo` instead of layouts.
/// Note: Cairo PIEs cannot be run in proof mode.
/// WARNING: As the RunResources are part of the HintProcessor trait, the caller should make sure that
/// the number of steps in the `RunResources` matches that of the `ExecutionResources` in the `CairoPie`.
Expand All @@ -364,14 +364,14 @@ pub fn cairo_run_pie_stwo(
pie.run_validity_checks()?;

let program = Program::from_stripped_program(&pie.metadata.program);
let mut cairo_runner = CairoRunner::new_stwo(
let mut cairo_runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ExecutionMode,
..cairo_run_config.clone()
}
.run_config()?,
)?;
);

let end = cairo_runner.initialize_stwo(allowed_builtins)?;
cairo_runner.vm.finalize_segments_by_cairo_pie(pie);
Expand Down Expand Up @@ -442,7 +442,7 @@ pub fn cairo_run_fuzzed_program(
.allow_missing_builtins
.unwrap_or(cairo_run_config.proof_mode);

let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?);

let _end = cairo_runner.initialize(allow_missing_builtins)?;

Expand Down
3 changes: 1 addition & 2 deletions vm/src/tests/cairo_run_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1069,8 +1069,7 @@ fn run_program_with_custom_mod_builtin_params(
};
let mut hint_processor = BuiltinHintProcessor::new_empty();
let program = Program::from_bytes(data, Some(cairo_run_config.entrypoint)).unwrap();
let mut cairo_runner =
CairoRunner::new(&program, &cairo_run_config.run_config().unwrap()).unwrap();
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config().unwrap());

let end = cairo_runner.initialize(false).unwrap();
// Modify add_mod & mul_mod params
Expand Down
6 changes: 2 additions & 4 deletions vm/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,7 @@ fn run_cairo_1_entrypoint(
}
.run_config()
.unwrap(),
)
.unwrap();
);

let program_builtins = get_casm_contract_builtins(&contract_class, entrypoint_offset);
runner
Expand Down Expand Up @@ -228,8 +227,7 @@ fn run_cairo_1_entrypoint_with_run_resources(
}
.run_config()
.unwrap(),
)
.unwrap();
);

let program_builtins = get_casm_contract_builtins(&contract_class, entrypoint_offset);
runner
Expand Down
4 changes: 0 additions & 4 deletions vm/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ pub mod test_utils {
.run_config()
.unwrap(),
)
.unwrap()
};
($program:expr, $layout:expr) => {
crate::vm::runners::cairo_runner::CairoRunner::new(
Expand All @@ -275,7 +274,6 @@ pub mod test_utils {
.run_config()
.unwrap(),
)
.unwrap()
};
($program:expr, $layout:expr, $proof_mode:expr) => {
crate::vm::runners::cairo_runner::CairoRunner::new(
Expand All @@ -290,7 +288,6 @@ pub mod test_utils {
.run_config()
.unwrap(),
)
.unwrap()
};
($program:expr, $layout:expr, $proof_mode:expr, $trace_enabled:expr) => {
crate::vm::runners::cairo_runner::CairoRunner::new(
Expand All @@ -305,7 +302,6 @@ pub mod test_utils {
.run_config()
.unwrap(),
)
.unwrap()
};
}
pub(crate) use cairo_runner;
Expand Down
3 changes: 1 addition & 2 deletions vm/src/vm/runners/builtin_runner/modulo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -836,8 +836,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);

let end = runner.initialize(false).unwrap();
// Modify add_mod & mul_mod params
Expand Down
52 changes: 15 additions & 37 deletions vm/src/vm/runners/cairo_runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ pub enum RunnerMode {
impl CairoRunner {
/// The `dynamic_layout_params` argument should only be used with dynamic layout.
/// It is ignored otherwise.
pub fn new_v2(program: &Program, config: &CairoRunConfig) -> CairoRunner {
pub fn new(program: &Program, config: &CairoRunConfig) -> CairoRunner {
CairoRunner {
program: program.clone(),
vm: VirtualMachine::new(config.trace_enabled, config.disable_trace_padding),
Expand All @@ -257,19 +257,8 @@ impl CairoRunner {
}
}

/// Creates a `CairoRunner` for Stwo.
/// Same as `new` but without layout parameters. Builtins are created from
/// an explicit list via `initialize_stwo` instead of being derived from a layout.
/// Must be paired with `initialize_stwo`. Do not use with `initialize`.
pub fn new_stwo(
program: &Program,
config: &CairoRunConfig,
) -> Result<CairoRunner, RunnerError> {
Ok(CairoRunner::new_v2(program, config))
}

/// Initializes the runner in Stwo mode: creates builtins, segments, entrypoint, and VM.
/// Must be used with runners created via `new_stwo`. Do not use with `new`.
/// Must be used with runners created via a StwoCairoRunConfig.
pub fn initialize_stwo(
&mut self,
allowed_builtins: &[BuiltinName],
Expand All @@ -286,10 +275,6 @@ impl CairoRunner {
Ok(end)
}

pub fn new(program: &Program, config: &CairoRunConfig) -> Result<CairoRunner, RunnerError> {
Ok(Self::new_v2(program, config))
}

pub fn initialize(&mut self, allow_missing_builtins: bool) -> Result<Relocatable, RunnerError> {
info!("Initializing builtins.");
self.initialize_builtins(allow_missing_builtins)?;
Expand Down Expand Up @@ -5639,8 +5624,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.expect("failed to create runner");
);

// We allow missing builtins, as we will simulate them later.
let end = cairo_runner
Expand Down Expand Up @@ -5668,7 +5652,7 @@ mod tests {
Some("main"),
)
.unwrap();
let runner = CairoRunner::new_stwo(
let runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ProofModeCanonical,
Expand All @@ -5678,8 +5662,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
assert_eq!(runner.runner_mode, RunnerMode::ProofModeCanonical);
assert!(runner.execution_public_memory.is_some());
}
Expand All @@ -5691,7 +5674,7 @@ mod tests {
Some("main"),
)
.unwrap();
let runner = CairoRunner::new_stwo(
let runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ExecutionMode,
Expand All @@ -5701,8 +5684,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
assert_eq!(runner.runner_mode, RunnerMode::ExecutionMode);
assert!(runner.execution_public_memory.is_none());
}
Expand All @@ -5729,7 +5711,7 @@ mod tests {
Some("main"),
)
.unwrap();
let mut runner = CairoRunner::new_stwo(
let mut runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ProofModeCanonical,
Expand All @@ -5739,8 +5721,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
let allowed = vec![
BuiltinName::output,
BuiltinName::pedersen,
Expand All @@ -5763,7 +5744,7 @@ mod tests {
#[test]
fn initialize_builtins_stwo_rejects_ecdsa() {
let program = Program::default();
let mut runner = CairoRunner::new_stwo(
let mut runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ProofModeCanonical,
Expand All @@ -5773,8 +5754,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
match runner.initialize_builtins_stwo(&[BuiltinName::ecdsa]) {
Err(RunnerError::UnsupportedStwoBuiltin(BuiltinName::ecdsa)) => {}
_ => panic!("Expected UnsupportedStwoBuiltin(ecdsa) error"),
Expand All @@ -5784,7 +5764,7 @@ mod tests {
#[test]
fn initialize_builtins_stwo_rejects_keccak() {
let program = Program::default();
let mut runner = CairoRunner::new_stwo(
let mut runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ProofModeCanonical,
Expand All @@ -5794,8 +5774,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
match runner.initialize_builtins_stwo(&[BuiltinName::keccak]) {
Err(RunnerError::UnsupportedStwoBuiltin(BuiltinName::keccak)) => {}
_ => panic!("Expected UnsupportedStwoBuiltin(keccak) error"),
Expand All @@ -5809,7 +5788,7 @@ mod tests {
Some("main"),
)
.unwrap();
let mut runner = CairoRunner::new_stwo(
let mut runner = CairoRunner::new(
&program,
&StwoCairoRunConfig {
runner_mode: RunnerMode::ProofModeCanonical,
Expand All @@ -5819,8 +5798,7 @@ mod tests {
}
.run_config()
.unwrap(),
)
.unwrap();
);
// bitwise_builtin_test requires bitwise, but we only allow output
match runner.initialize_builtins_stwo(&[BuiltinName::output]) {
Err(RunnerError::UnsupportedStwoBuiltin(BuiltinName::bitwise)) => {}
Expand Down
Loading
Loading