Skip to content

Commit 3fa2fba

Browse files
feat: create and use CairoRunConfig as ctor arg for CairoRunner ctors
1 parent e15c441 commit 3fa2fba

File tree

15 files changed

+314
-217
lines changed

15 files changed

+314
-217
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Both branches support Stwo prover opcodes (Blake2s, QM31) since v2.0.0.
1313
#### Upcoming Changes
1414

1515
* Add Stwo cairo runner API [#2351](https://github.com/starkware-libs/cairo-vm/pull/2351)
16+
* feat: create and use CairoRunConfig as ctor arg for CairoRunner ctors [#2367](https://github.com/starkware-libs/cairo-vm/pull/2367)
17+
1618
* feat: move runner_mode to be a field in StwoCairoRunConfig [#2366](https://github.com/starkware-libs/cairo-vm/pull/2366)
1719

1820
* refactor: rename CairoRunConfig to Cairo0RunConfig [#2365](https://github.com/starkware-libs/cairo-vm/pull/2365)

bench/criterion_benchmark.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use cairo_vm::{
2-
types::{layout::CairoLayout, layout_name::LayoutName, program::Program},
2+
cairo_run::Cairo0RunConfig,
3+
types::{layout_name::LayoutName, program::Program},
34
vm::runners::cairo_runner::CairoRunner,
45
};
56
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
@@ -29,10 +30,17 @@ fn build_many_runners(c: &mut Criterion) {
2930
_ = black_box(
3031
CairoRunner::new(
3132
black_box(&program),
32-
black_box(CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap()),
33-
black_box(false),
34-
black_box(false),
35-
black_box(false),
33+
black_box(
34+
&Cairo0RunConfig {
35+
layout: LayoutName::starknet_with_keccak,
36+
proof_mode: false,
37+
trace_enabled: false,
38+
disable_trace_padding: false,
39+
..Default::default()
40+
}
41+
.run_config()
42+
.unwrap(),
43+
),
3644
)
3745
.unwrap(),
3846
);
@@ -49,10 +57,15 @@ fn load_program_data(c: &mut Criterion) {
4957
|| {
5058
CairoRunner::new(
5159
&program,
52-
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
53-
false,
54-
false,
55-
false,
60+
&Cairo0RunConfig {
61+
layout: LayoutName::starknet_with_keccak,
62+
proof_mode: false,
63+
trace_enabled: false,
64+
disable_trace_padding: false,
65+
..Default::default()
66+
}
67+
.run_config()
68+
.unwrap(),
5669
)
5770
.unwrap()
5871
},

bench/iai_benchmark.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use cairo_vm::types::layout::CairoLayout;
1+
use cairo_vm::cairo_run::Cairo0RunConfig;
22
use core::hint::black_box;
33
use iai_callgrind::library_benchmark;
44
use iai_callgrind::library_benchmark_group;
@@ -37,10 +37,15 @@ fn build_runner() {
3737
let program = parse_program_helper();
3838
let runner = CairoRunner::new(
3939
black_box(&program),
40-
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
41-
false,
42-
false,
43-
false,
40+
&Cairo0RunConfig {
41+
layout: LayoutName::starknet_with_keccak,
42+
proof_mode: false,
43+
trace_enabled: false,
44+
disable_trace_padding: false,
45+
..Default::default()
46+
}
47+
.run_config()
48+
.unwrap(),
4449
)
4550
.unwrap();
4651
core::mem::drop(black_box(runner));
@@ -54,10 +59,15 @@ fn build_runner_helper() -> CairoRunner {
5459
let program = Program::from_bytes(program.as_slice(), Some("main")).unwrap();
5560
CairoRunner::new(
5661
&program,
57-
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
58-
false,
59-
false,
60-
false,
62+
&Cairo0RunConfig {
63+
layout: LayoutName::starknet_with_keccak,
64+
proof_mode: false,
65+
trace_enabled: false,
66+
disable_trace_padding: false,
67+
..Default::default()
68+
}
69+
.run_config()
70+
.unwrap(),
6171
)
6272
.unwrap()
6373
}

cairo-vm-cli/src/main.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,8 @@ mod tests {
269269
use super::*;
270270
use assert_matches::assert_matches;
271271
use cairo_vm::{
272-
hint_processor::hint_processor_definition::HintProcessor,
273-
types::{layout::CairoLayout, program::Program},
274-
vm::runners::cairo_runner::CairoRunner,
272+
cairo_run::Cairo0RunConfig, hint_processor::hint_processor_definition::HintProcessor,
273+
types::program::Program, vm::runners::cairo_runner::CairoRunner,
275274
};
276275
use rstest::rstest;
277276

@@ -283,10 +282,15 @@ mod tests {
283282
let program = Program::from_bytes(program_content, Some("main")).unwrap();
284283
let mut cairo_runner = CairoRunner::new(
285284
&program,
286-
CairoLayout::new(LayoutName::all_cairo, None).unwrap(),
287-
false,
288-
true,
289-
false,
285+
&Cairo0RunConfig {
286+
layout: LayoutName::all_cairo,
287+
proof_mode: false,
288+
trace_enabled: true,
289+
disable_trace_padding: false,
290+
..Default::default()
291+
}
292+
.run_config()
293+
.unwrap(),
290294
)
291295
.unwrap();
292296
let end = cairo_runner

cairo1-run/src/cairo_run.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use cairo_lang_sierra_type_size::get_type_size_map;
3434
use cairo_lang_utils::{
3535
bigint::BigIntAsHex, casts::IntoOrPanic, unordered_hash_map::UnorderedHashMap,
3636
};
37+
use cairo_vm::vm::runners::cairo_runner::CairoRunConfig;
3738
use std::{collections::HashMap, iter::Peekable};
3839

3940
use cairo_vm::{
@@ -137,6 +138,20 @@ impl Cairo1RunConfig<'_> {
137138
fn copy_to_output(&self) -> bool {
138139
self.append_return_values || self.proof_mode
139140
}
141+
142+
pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
143+
let runner_mode = if self.proof_mode {
144+
RunnerMode::ProofModeCairo1
145+
} else {
146+
RunnerMode::ExecutionMode
147+
};
148+
CairoRunConfig::new(
149+
CairoLayout::new(self.layout, self.dynamic_layout_params.clone())?,
150+
self.trace_enabled,
151+
self.disable_trace_padding,
152+
runner_mode,
153+
)
154+
}
140155
}
141156

142157
/// Runs a Cairo 1 program
@@ -262,23 +277,7 @@ pub fn cairo_run_program(
262277
)?
263278
};
264279

265-
let runner_mode = if cairo_run_config.proof_mode {
266-
RunnerMode::ProofModeCairo1
267-
} else {
268-
RunnerMode::ExecutionMode
269-
};
270-
271-
let mut runner = CairoRunner::new_v2(
272-
&program,
273-
CairoLayout::new(
274-
cairo_run_config.layout,
275-
cairo_run_config.dynamic_layout_params.clone(),
276-
)
277-
.map_err(RunnerError::from)?,
278-
runner_mode,
279-
cairo_run_config.trace_enabled,
280-
cairo_run_config.disable_trace_padding,
281-
);
280+
let mut runner = CairoRunner::new_v2(&program, &cairo_run_config.run_config()?);
282281
let end = runner.initialize(cairo_run_config.proof_mode)?;
283282
load_arguments(&mut runner, &cairo_run_config, main_func)?;
284283

vm/src/cairo_run.rs

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
},
1313
runners::{
1414
cairo_pie::CairoPie,
15-
cairo_runner::{CairoRunner, RunnerMode},
15+
cairo_runner::{CairoRunConfig, CairoRunner, RunnerMode},
1616
},
1717
security::verify_secure_runner,
1818
trace::trace_entry::RelocatedTraceEntry,
@@ -72,6 +72,23 @@ impl Default for Cairo0RunConfig<'_> {
7272
}
7373
}
7474

75+
impl Cairo0RunConfig<'_> {
76+
pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
77+
let runner_mode = if self.proof_mode {
78+
RunnerMode::ProofModeCanonical
79+
} else {
80+
RunnerMode::ExecutionMode
81+
};
82+
CairoRunConfig::new(
83+
CairoLayout::new(self.layout, self.dynamic_layout_params.clone())?,
84+
self.trace_enabled,
85+
self.disable_trace_padding,
86+
runner_mode,
87+
)
88+
}
89+
}
90+
91+
#[derive(Clone)]
7592
pub struct StwoCairoRunConfig {
7693
pub trace_enabled: bool,
7794
pub relocate_mem: bool,
@@ -96,6 +113,17 @@ impl Default for StwoCairoRunConfig {
96113
}
97114
}
98115

116+
impl StwoCairoRunConfig {
117+
pub fn run_config(&self) -> Result<CairoRunConfig, RunnerError> {
118+
CairoRunConfig::new(
119+
CairoLayout::all_cairo_stwo_instance(),
120+
self.trace_enabled,
121+
self.disable_trace_padding,
122+
self.runner_mode.clone(),
123+
)
124+
}
125+
}
126+
99127
#[allow(clippy::result_large_err)]
100128
pub fn cairo_run_stwo(
101129
program: &Program,
@@ -107,12 +135,7 @@ pub fn cairo_run_stwo(
107135
let _span = span!(Level::INFO, "cairo run stwo").entered();
108136

109137
let proof_mode = cairo_run_config.runner_mode != RunnerMode::ExecutionMode;
110-
let mut cairo_runner = CairoRunner::new_stwo(
111-
program,
112-
cairo_run_config.runner_mode.clone(),
113-
cairo_run_config.trace_enabled,
114-
cairo_run_config.disable_trace_padding,
115-
)?;
138+
let mut cairo_runner = CairoRunner::new_stwo(program, &cairo_run_config.run_config()?)?;
116139
cairo_runner.exec_scopes = exec_scopes;
117140

118141
let end = cairo_runner.initialize_stwo(allowed_builtins)?;
@@ -166,17 +189,7 @@ pub fn cairo_run_program_with_initial_scope(
166189
.allow_missing_builtins
167190
.unwrap_or(cairo_run_config.proof_mode);
168191

169-
let mut cairo_runner = CairoRunner::new(
170-
program,
171-
CairoLayout::new(
172-
cairo_run_config.layout,
173-
cairo_run_config.dynamic_layout_params.clone(),
174-
)
175-
.map_err(RunnerError::from)?,
176-
cairo_run_config.proof_mode,
177-
cairo_run_config.trace_enabled,
178-
cairo_run_config.disable_trace_padding,
179-
)?;
192+
let mut cairo_runner = CairoRunner::new(program, &cairo_run_config.run_config()?)?;
180193

181194
cairo_runner.exec_scopes = exec_scopes;
182195

@@ -276,17 +289,7 @@ pub fn cairo_run_pie(
276289
let allow_missing_builtins = cairo_run_config.allow_missing_builtins.unwrap_or_default();
277290

278291
let program = Program::from_stripped_program(&pie.metadata.program);
279-
let mut cairo_runner = CairoRunner::new(
280-
&program,
281-
CairoLayout::new(
282-
cairo_run_config.layout,
283-
cairo_run_config.dynamic_layout_params.clone(),
284-
)
285-
.map_err(RunnerError::from)?,
286-
false,
287-
cairo_run_config.trace_enabled,
288-
cairo_run_config.disable_trace_padding,
289-
)?;
292+
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;
290293

291294
let end = cairo_runner.initialize(allow_missing_builtins)?;
292295
cairo_runner.vm.finalize_segments_by_cairo_pie(pie);
@@ -363,9 +366,11 @@ pub fn cairo_run_pie_stwo(
363366
let program = Program::from_stripped_program(&pie.metadata.program);
364367
let mut cairo_runner = CairoRunner::new_stwo(
365368
&program,
366-
RunnerMode::ExecutionMode,
367-
cairo_run_config.trace_enabled,
368-
cairo_run_config.disable_trace_padding,
369+
&StwoCairoRunConfig {
370+
runner_mode: RunnerMode::ExecutionMode,
371+
..cairo_run_config.clone()
372+
}
373+
.run_config()?,
369374
)?;
370375

371376
let end = cairo_runner.initialize_stwo(allowed_builtins)?;
@@ -437,17 +442,7 @@ pub fn cairo_run_fuzzed_program(
437442
.allow_missing_builtins
438443
.unwrap_or(cairo_run_config.proof_mode);
439444

440-
let mut cairo_runner = CairoRunner::new(
441-
&program,
442-
CairoLayout::new(
443-
cairo_run_config.layout,
444-
cairo_run_config.dynamic_layout_params.clone(),
445-
)
446-
.map_err(RunnerError::from)?,
447-
cairo_run_config.proof_mode,
448-
cairo_run_config.trace_enabled,
449-
cairo_run_config.disable_trace_padding,
450-
)?;
445+
let mut cairo_runner = CairoRunner::new(&program, &cairo_run_config.run_config()?)?;
451446

452447
let _end = cairo_runner.initialize(allow_missing_builtins)?;
453448

vm/src/tests/cairo_run_test.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::{tests::*, types::layout_name::LayoutName};
22

33
#[cfg(feature = "mod_builtin")]
44
use crate::{
5-
types::layout::CairoLayout,
65
utils::test_utils::Program,
76
vm::{
87
runners::{builtin_runner::BuiltinRunner, cairo_runner::CairoRunner},
@@ -1070,18 +1069,8 @@ fn run_program_with_custom_mod_builtin_params(
10701069
};
10711070
let mut hint_processor = BuiltinHintProcessor::new_empty();
10721071
let program = Program::from_bytes(data, Some(cairo_run_config.entrypoint)).unwrap();
1073-
let mut cairo_runner = CairoRunner::new(
1074-
&program,
1075-
CairoLayout::new(
1076-
cairo_run_config.layout,
1077-
cairo_run_config.dynamic_layout_params,
1078-
)
1079-
.unwrap(),
1080-
cairo_run_config.proof_mode,
1081-
cairo_run_config.trace_enabled,
1082-
cairo_run_config.disable_trace_padding,
1083-
)
1084-
.unwrap();
1072+
let mut cairo_runner =
1073+
CairoRunner::new(&program, &cairo_run_config.run_config().unwrap()).unwrap();
10851074

10861075
let end = cairo_runner.initialize(false).unwrap();
10871076
// Modify add_mod & mul_mod params

0 commit comments

Comments
 (0)