Skip to content

Commit 788b4a7

Browse files
feat: refactor CairoRunner ctors to accept CairoLayout directly
1 parent 4d059c1 commit 788b4a7

13 files changed

Lines changed: 127 additions & 86 deletions

File tree

CHANGELOG.md

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

1313
#### Upcoming Changes
1414

15+
* feat: refactor CairoRunner ctors to accept CairoLayout directly [#2363](https://github.com/starkware-libs/cairo-vm/pull/2363)
16+
1517
* feat: implement CairoLayout::new from layout name and dynamic params [#2362](https://github.com/starkware-libs/cairo-vm/pull/2362)
1618

1719
* Add Stwo cairo runner API [#2351](https://github.com/lambdaclass/cairo-vm/pull/2351)

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ When running a Cairo program directly using the Cairo-vm repository you would fi
229229
2. Instantiate the VM, the cairo_runner, the hint processor, and the entrypoint
230230

231231
```rust
232-
let mut cairo_runner = CairoRunner::new(&program, LayoutName::all_cairo, false, false);
232+
let mut cairo_runner =
233+
CairoRunner::new(&program, CairoLayout::new(LayoutName::all_cairo, None)?, false, false);
233234

234235
let mut hint_processor = BuiltinHintProcessor::new_empty();
235236

bench/criterion_benchmark.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use cairo_vm::{
2-
types::{layout_name::LayoutName, program::Program},
2+
types::{layout::CairoLayout, layout_name::LayoutName, program::Program},
33
vm::runners::cairo_runner::CairoRunner,
44
};
55
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
@@ -29,8 +29,7 @@ fn build_many_runners(c: &mut Criterion) {
2929
_ = black_box(
3030
CairoRunner::new(
3131
black_box(&program),
32-
black_box(LayoutName::starknet_with_keccak),
33-
black_box(None),
32+
black_box(CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap()),
3433
black_box(false),
3534
black_box(false),
3635
black_box(false),
@@ -50,8 +49,7 @@ fn load_program_data(c: &mut Criterion) {
5049
|| {
5150
CairoRunner::new(
5251
&program,
53-
LayoutName::starknet_with_keccak,
54-
None,
52+
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
5553
false,
5654
false,
5755
false,

bench/iai_benchmark.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use cairo_vm::types::layout::CairoLayout;
12
use core::hint::black_box;
23
use iai_callgrind::library_benchmark;
34
use iai_callgrind::library_benchmark_group;
@@ -36,8 +37,7 @@ fn build_runner() {
3637
let program = parse_program_helper();
3738
let runner = CairoRunner::new(
3839
black_box(&program),
39-
LayoutName::starknet_with_keccak,
40-
None,
40+
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
4141
false,
4242
false,
4343
false,
@@ -54,8 +54,7 @@ fn build_runner_helper() -> CairoRunner {
5454
let program = Program::from_bytes(program.as_slice(), Some("main")).unwrap();
5555
CairoRunner::new(
5656
&program,
57-
LayoutName::starknet_with_keccak,
58-
None,
57+
CairoLayout::new(LayoutName::starknet_with_keccak, None).unwrap(),
5958
false,
6059
false,
6160
false,

cairo-vm-cli/src/main.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,8 @@ mod tests {
269269
use super::*;
270270
use assert_matches::assert_matches;
271271
use cairo_vm::{
272-
hint_processor::hint_processor_definition::HintProcessor, types::program::Program,
272+
hint_processor::hint_processor_definition::HintProcessor,
273+
types::{layout::CairoLayout, program::Program},
273274
vm::runners::cairo_runner::CairoRunner,
274275
};
275276
use rstest::rstest;
@@ -280,8 +281,14 @@ mod tests {
280281
hint_processor: &mut dyn HintProcessor,
281282
) -> Result<CairoRunner, CairoRunError> {
282283
let program = Program::from_bytes(program_content, Some("main")).unwrap();
283-
let mut cairo_runner =
284-
CairoRunner::new(&program, LayoutName::all_cairo, None, false, true, false).unwrap();
284+
let mut cairo_runner = CairoRunner::new(
285+
&program,
286+
CairoLayout::new(LayoutName::all_cairo, None).unwrap(),
287+
false,
288+
true,
289+
false,
290+
)
291+
.unwrap();
285292
let end = cairo_runner
286293
.initialize(false)
287294
.map_err(CairoRunError::Runner)?;

cairo1-run/src/cairo_run.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ use cairo_vm::{
4141
math_utils::signed_felt,
4242
serde::deserialize_program::{ApTracking, FlowTrackingData, HintParams, ReferenceManager},
4343
types::{
44-
builtin_name::BuiltinName, layout::CairoLayoutParams, layout_name::LayoutName,
45-
program::Program, relocatable::MaybeRelocatable,
44+
builtin_name::BuiltinName,
45+
layout::{CairoLayout, CairoLayoutParams},
46+
layout_name::LayoutName,
47+
program::Program,
48+
relocatable::MaybeRelocatable,
4649
},
4750
vm::{
4851
errors::{runner_errors::RunnerError, vm_errors::VirtualMachineError},
@@ -258,12 +261,15 @@ pub fn cairo_run_program(
258261

259262
let mut runner = CairoRunner::new_v2(
260263
&program,
261-
cairo_run_config.layout,
262-
cairo_run_config.dynamic_layout_params.clone(),
264+
CairoLayout::new(
265+
cairo_run_config.layout,
266+
cairo_run_config.dynamic_layout_params.clone(),
267+
)
268+
.map_err(RunnerError::from)?,
263269
runner_mode,
264270
cairo_run_config.trace_enabled,
265271
false,
266-
)?;
272+
);
267273
let end = runner.initialize(cairo_run_config.proof_mode)?;
268274
load_arguments(&mut runner, &cairo_run_config, main_func)?;
269275

vm/src/cairo_run.rs

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use crate::{
22
hint_processor::hint_processor_definition::HintProcessor,
33
types::{
4-
builtin_name::BuiltinName, layout::CairoLayoutParams, layout_name::LayoutName,
4+
builtin_name::BuiltinName,
5+
layout::{CairoLayout, CairoLayoutParams},
6+
layout_name::LayoutName,
57
program::Program,
68
},
79
vm::{
@@ -165,8 +167,11 @@ pub fn cairo_run_program_with_initial_scope(
165167

166168
let mut cairo_runner = CairoRunner::new(
167169
program,
168-
cairo_run_config.layout,
169-
cairo_run_config.dynamic_layout_params.clone(),
170+
CairoLayout::new(
171+
cairo_run_config.layout,
172+
cairo_run_config.dynamic_layout_params.clone(),
173+
)
174+
.map_err(RunnerError::from)?,
170175
cairo_run_config.proof_mode,
171176
cairo_run_config.trace_enabled,
172177
cairo_run_config.disable_trace_padding,
@@ -272,8 +277,11 @@ pub fn cairo_run_pie(
272277
let program = Program::from_stripped_program(&pie.metadata.program);
273278
let mut cairo_runner = CairoRunner::new(
274279
&program,
275-
cairo_run_config.layout,
276-
cairo_run_config.dynamic_layout_params.clone(),
280+
CairoLayout::new(
281+
cairo_run_config.layout,
282+
cairo_run_config.dynamic_layout_params.clone(),
283+
)
284+
.map_err(RunnerError::from)?,
277285
false,
278286
cairo_run_config.trace_enabled,
279287
cairo_run_config.disable_trace_padding,
@@ -430,8 +438,11 @@ pub fn cairo_run_fuzzed_program(
430438

431439
let mut cairo_runner = CairoRunner::new(
432440
&program,
433-
cairo_run_config.layout,
434-
cairo_run_config.dynamic_layout_params.clone(),
441+
CairoLayout::new(
442+
cairo_run_config.layout,
443+
cairo_run_config.dynamic_layout_params.clone(),
444+
)
445+
.map_err(RunnerError::from)?,
435446
cairo_run_config.proof_mode,
436447
cairo_run_config.trace_enabled,
437448
cairo_run_config.disable_trace_padding,
@@ -641,6 +652,24 @@ mod tests {
641652
assert_eq!(&output_buffer, "0\n");
642653
}
643654

655+
#[cfg(feature = "test_utils")]
656+
#[test]
657+
fn test_cairo_run_fuzzed_program() {
658+
let program = Program::from_bytes(
659+
include_bytes!("../../cairo_programs/struct.json"),
660+
Some("main"),
661+
)
662+
.unwrap();
663+
let mut hint_processor = BuiltinHintProcessor::new_empty();
664+
cairo_run_fuzzed_program(
665+
program,
666+
&CairoRunConfig::default(),
667+
&mut hint_processor,
668+
1000,
669+
)
670+
.unwrap();
671+
}
672+
644673
#[test]
645674
fn run_with_no_trace() {
646675
let program = Program::from_bytes(

vm/src/tests/cairo_run_test.rs

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

33
#[cfg(feature = "mod_builtin")]
44
use crate::{
5+
types::layout::CairoLayout,
56
utils::test_utils::Program,
67
vm::{
78
runners::{builtin_runner::BuiltinRunner, cairo_runner::CairoRunner},
@@ -1071,8 +1072,11 @@ fn run_program_with_custom_mod_builtin_params(
10711072
let program = Program::from_bytes(data, Some(cairo_run_config.entrypoint)).unwrap();
10721073
let mut cairo_runner = CairoRunner::new(
10731074
&program,
1074-
cairo_run_config.layout,
1075-
cairo_run_config.dynamic_layout_params,
1075+
CairoLayout::new(
1076+
cairo_run_config.layout,
1077+
cairo_run_config.dynamic_layout_params,
1078+
)
1079+
.unwrap(),
10761080
cairo_run_config.proof_mode,
10771081
cairo_run_config.trace_enabled,
10781082
cairo_run_config.disable_trace_padding,

vm/src/tests/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#[cfg(feature = "cairo-1-hints")]
2+
use crate::types::layout::CairoLayout;
13
use crate::types::layout_name::LayoutName;
24
#[cfg(all(feature = "cairo-1-hints", feature = "test_utils"))]
35
use crate::vm::errors::cairo_run_errors::CairoRunError;
@@ -107,8 +109,7 @@ fn run_cairo_1_entrypoint(
107109

108110
let mut runner = CairoRunner::new(
109111
&(contract_class.clone().try_into().unwrap()),
110-
LayoutName::all_cairo,
111-
None,
112+
CairoLayout::new(LayoutName::all_cairo, None).unwrap(),
112113
false,
113114
false,
114115
false,
@@ -215,8 +216,7 @@ fn run_cairo_1_entrypoint_with_run_resources(
215216
) -> Result<Vec<Felt252>, CairoRunError> {
216217
let mut runner = CairoRunner::new(
217218
&(contract_class.clone().try_into().unwrap()),
218-
LayoutName::all_cairo,
219-
None,
219+
CairoLayout::new(LayoutName::all_cairo, None).unwrap(),
220220
false,
221221
false,
222222
false,

vm/src/types/layout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub struct CairoLayout {
4141
}
4242

4343
impl CairoLayout {
44-
pub(crate) fn new(
44+
pub fn new(
4545
layout: LayoutName,
4646
dynamic_layout_params: Option<CairoLayoutParams>,
4747
) -> Result<CairoLayout, CairoLayoutError> {

0 commit comments

Comments
 (0)