Skip to content
Open
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 @@ -12,6 +12,8 @@ Both branches support Stwo prover opcodes (Blake2s, QM31) since v2.0.0.

#### Upcoming Changes

* feat: configurable limit to number of traceback entries [#2358](https://github.com/klaus993/cairo-vm/pull/2358)

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

* Add union merge strategy for CHANGELOG.md [#2345](https://github.com/lambdaclass/cairo-vm/pull/2345)
Expand Down
4 changes: 3 additions & 1 deletion bench/criterion_benchmark.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use cairo_vm::{
types::{layout_name::LayoutName, program::Program},
vm::runners::cairo_runner::CairoRunner,
vm::runners::cairo_runner::{CairoRunner, DEFAULT_MAX_TRACEBACK_ENTRIES},
};
use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};

Expand Down Expand Up @@ -34,6 +34,7 @@ fn build_many_runners(c: &mut Criterion) {
black_box(false),
black_box(false),
black_box(false),
black_box(DEFAULT_MAX_TRACEBACK_ENTRIES),
)
.unwrap(),
);
Expand All @@ -55,6 +56,7 @@ fn load_program_data(c: &mut Criterion) {
false,
false,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap()
},
Expand Down
3 changes: 3 additions & 0 deletions bench/iai_benchmark.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use cairo_vm::vm::runners::cairo_runner::DEFAULT_MAX_TRACEBACK_ENTRIES;
use core::hint::black_box;
use iai_callgrind::library_benchmark;
use iai_callgrind::library_benchmark_group;
Expand Down Expand Up @@ -41,6 +42,7 @@ fn build_runner() {
false,
false,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap();
core::mem::drop(black_box(runner));
Expand All @@ -59,6 +61,7 @@ fn build_runner_helper() -> CairoRunner {
false,
false,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap()
}
Expand Down
20 changes: 15 additions & 5 deletions cairo-vm-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use cairo_vm::vm::errors::vm_errors::VirtualMachineError;
use cairo_vm::vm::runners::cairo_pie::CairoPie;
#[cfg(feature = "with_tracer")]
use cairo_vm::vm::runners::cairo_runner::CairoRunner;
use cairo_vm::vm::runners::cairo_runner::RunResources;
use cairo_vm::vm::runners::cairo_runner::{RunResources, DEFAULT_MAX_TRACEBACK_ENTRIES};
#[cfg(feature = "with_tracer")]
use cairo_vm_tracer::error::trace_data_errors::TraceDataError;
#[cfg(feature = "with_tracer")]
Expand Down Expand Up @@ -157,6 +157,7 @@ fn run(args: impl Iterator<Item = String>) -> Result<(), Error> {
allow_missing_builtins: args.allow_missing_builtins,
dynamic_layout_params: cairo_layout_params,
disable_trace_padding: false,
max_traceback_entries: DEFAULT_MAX_TRACEBACK_ENTRIES,
};

let mut cairo_runner = match if args.run_from_cairo_pie {
Expand Down Expand Up @@ -269,8 +270,9 @@ mod tests {
use super::*;
use assert_matches::assert_matches;
use cairo_vm::{
hint_processor::hint_processor_definition::HintProcessor, types::program::Program,
vm::runners::cairo_runner::CairoRunner,
hint_processor::hint_processor_definition::HintProcessor,
types::program::Program,
vm::runners::cairo_runner::{CairoRunner, DEFAULT_MAX_TRACEBACK_ENTRIES},
};
use rstest::rstest;

Expand All @@ -280,8 +282,16 @@ mod tests {
hint_processor: &mut dyn HintProcessor,
) -> Result<CairoRunner, CairoRunError> {
let program = Program::from_bytes(program_content, Some("main")).unwrap();
let mut cairo_runner =
CairoRunner::new(&program, LayoutName::all_cairo, None, false, true, false).unwrap();
let mut cairo_runner = CairoRunner::new(
&program,
LayoutName::all_cairo,
None,
false,
true,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap();
let end = cairo_runner
.initialize(false)
.map_err(CairoRunError::Runner)?;
Expand Down
8 changes: 7 additions & 1 deletion cairo1-run/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ use cairo_vm::{
},
vm::{
errors::{runner_errors::RunnerError, vm_errors::VirtualMachineError},
runners::cairo_runner::{CairoRunner, RunResources, RunnerMode},
runners::cairo_runner::{
CairoRunner, RunResources, RunnerMode, DEFAULT_MAX_TRACEBACK_ENTRIES,
},
vm_core::VirtualMachine,
},
Felt252,
Expand Down Expand Up @@ -101,6 +103,8 @@ pub struct Cairo1RunConfig<'a> {
pub finalize_builtins: bool,
/// Appends the return and input values to the output segment. This is performed by default when running in proof_mode
pub append_return_values: bool,
/// The maximum number of traceback entries to store.
pub max_traceback_entries: u32,
}

impl Default for Cairo1RunConfig<'_> {
Expand All @@ -115,6 +119,7 @@ impl Default for Cairo1RunConfig<'_> {
finalize_builtins: false,
append_return_values: false,
dynamic_layout_params: None,
max_traceback_entries: DEFAULT_MAX_TRACEBACK_ENTRIES,
}
}
}
Expand Down Expand Up @@ -263,6 +268,7 @@ pub fn cairo_run_program(
runner_mode,
cairo_run_config.trace_enabled,
false,
cairo_run_config.max_traceback_entries,
)?;
let end = runner.initialize(cairo_run_config.proof_mode)?;
load_arguments(&mut runner, &cairo_run_config, main_func)?;
Expand Down
2 changes: 2 additions & 0 deletions cairo1-run/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use cairo_lang_compiler::{
};
use cairo_vm::cairo_run::{write_encoded_memory, write_encoded_trace};
use cairo_vm::types::layout::CairoLayoutParams;
use cairo_vm::vm::runners::cairo_runner::DEFAULT_MAX_TRACEBACK_ENTRIES;
use cairo_vm::{
air_public_input::PublicInputError, types::layout_name::LayoutName,
vm::errors::trace_errors::TraceError, Felt252,
Expand Down Expand Up @@ -143,6 +144,7 @@ fn run(args: impl Iterator<Item = String>) -> Result<Option<String>, Error> {
finalize_builtins: args.air_public_input.is_some() || args.cairo_pie_output.is_some(),
append_return_values: args.append_return_values,
dynamic_layout_params: cairo_layout_params,
max_traceback_entries: DEFAULT_MAX_TRACEBACK_ENTRIES,
};

// Try to parse the file as a sierra program
Expand Down
3 changes: 2 additions & 1 deletion hint_accountant/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use std::fs::{self, File};
use std::io::BufReader;

use cairo_vm::vm::runners::cairo_runner::DEFAULT_MAX_TRACEBACK_ENTRIES;
use cairo_vm::{
hint_processor::{
builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor,
Expand Down Expand Up @@ -49,7 +50,7 @@ fn run() {
whitelists.push(whitelist_file.allowed_hint_expressions);
}
}
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);
let mut hint_executor = BuiltinHintProcessor::new_empty();
let (ap_tracking_data, reference_ids, references, mut exec_scopes, accessible_scopes) = (
ApTracking::default(),
Expand Down
13 changes: 12 additions & 1 deletion vm/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::{
},
runners::{
cairo_pie::CairoPie,
cairo_runner::{CairoRunner, RunnerMode},
cairo_runner::{CairoRunner, RunnerMode, DEFAULT_MAX_TRACEBACK_ENTRIES},
},
security::verify_secure_runner,
trace::trace_entry::RelocatedTraceEntry,
Expand Down Expand Up @@ -49,6 +49,8 @@ pub struct CairoRunConfig<'a> {
/// instances of the builtin) compared to their sizes at the end of the execution.
pub disable_trace_padding: bool,
pub allow_missing_builtins: Option<bool>,
/// The maximum number of traceback entries to store.
pub max_traceback_entries: u32,
}

impl Default for CairoRunConfig<'_> {
Expand All @@ -66,6 +68,7 @@ impl Default for CairoRunConfig<'_> {
disable_trace_padding: false,
allow_missing_builtins: None,
dynamic_layout_params: None,
max_traceback_entries: DEFAULT_MAX_TRACEBACK_ENTRIES,
}
}
}
Expand All @@ -77,6 +80,8 @@ pub struct StwoCairoRunConfig {
pub fill_holes: bool,
pub secure_run: bool,
pub disable_trace_padding: bool,
/// The maximum number of traceback entries to store.
pub max_traceback_entries: u32,
}

impl Default for StwoCairoRunConfig {
Expand All @@ -88,6 +93,7 @@ impl Default for StwoCairoRunConfig {
fill_holes: false,
secure_run: true,
disable_trace_padding: true,
max_traceback_entries: DEFAULT_MAX_TRACEBACK_ENTRIES,
}
}
}
Expand All @@ -109,6 +115,7 @@ pub fn cairo_run_stwo(
runner_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)?;
cairo_runner.exec_scopes = exec_scopes;

Expand Down Expand Up @@ -170,6 +177,7 @@ pub fn cairo_run_program_with_initial_scope(
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)?;

cairo_runner.exec_scopes = exec_scopes;
Expand Down Expand Up @@ -277,6 +285,7 @@ pub fn cairo_run_pie(
false,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)?;

let end = cairo_runner.initialize(allow_missing_builtins)?;
Expand Down Expand Up @@ -357,6 +366,7 @@ pub fn cairo_run_pie_stwo(
RunnerMode::ExecutionMode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)?;

let end = cairo_runner.initialize_stwo(allowed_builtins)?;
Expand Down Expand Up @@ -435,6 +445,7 @@ pub fn cairo_run_fuzzed_program(
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)?;

let _end = cairo_runner.initialize(allow_missing_builtins)?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,12 +392,13 @@ mod tests {
use assert_matches::assert_matches;

use crate::utils::test_utils::*;
use crate::vm::runners::cairo_runner::DEFAULT_MAX_TRACEBACK_ENTRIES;

use super::*;

#[test]
fn test_is_on_curve_2() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);
vm.set_fp(1);
let ids_data = non_continuous_ids_data![("is_on_curve", -1)];
vm.segments = segments![((1, 0), 1)];
Expand Down Expand Up @@ -428,7 +429,7 @@ mod tests {

#[test]
fn test_compute_q_mod_prime() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);

let ap_tracking = ApTracking::default();

Expand All @@ -454,7 +455,7 @@ mod tests {

#[test]
fn test_compute_ids_high_low() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);

let value = BigInt::from(25);
let shift = BigInt::from(12);
Expand Down Expand Up @@ -523,7 +524,7 @@ mod tests {

#[test]
fn test_r1_get_point_from_x() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);
vm.set_fp(10);

let ids_data = non_continuous_ids_data![("x", -10), ("v", -7)];
Expand Down Expand Up @@ -582,7 +583,7 @@ mod tests {

#[test]
fn test_reduce_value() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);

//Initialize fp
vm.run_context.fp = 10;
Expand Down Expand Up @@ -637,7 +638,7 @@ mod tests {

#[test]
fn test_reduce_x() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);

//Initialize fp
vm.run_context.fp = 10;
Expand Down
5 changes: 3 additions & 2 deletions vm/src/hint_processor/cairo_1_hint_processor/dict_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,14 @@ impl DictSquashExecScope {
mod tests {
use super::*;
use crate::types::relocatable::Relocatable;
use crate::vm::runners::cairo_runner::DEFAULT_MAX_TRACEBACK_ENTRIES;
use crate::vm::vm_core::VirtualMachine;
use std::collections::HashMap;

/// Test for relocate_all_dictionaries error cases
#[test]
fn test_relocate_all_dictionaries_errors() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);

// Test 1: First segment is a temporary segment (should error)
{
Expand Down Expand Up @@ -297,7 +298,7 @@ mod tests {
/// Test for relocate_all_dictionaries when no temporary segments
#[test]
fn test_relocate_all_dictionaries_no_temporary_segments() {
let mut vm = VirtualMachine::new(false, false);
let mut vm = VirtualMachine::new(false, false, DEFAULT_MAX_TRACEBACK_ENTRIES);
let mut dict_manager = DictManagerExecScope::new(false);

// Adding some trackers should not cause any errors
Expand Down
1 change: 1 addition & 0 deletions vm/src/tests/cairo_run_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,7 @@ fn run_program_with_custom_mod_builtin_params(
cairo_run_config.proof_mode,
cairo_run_config.trace_enabled,
cairo_run_config.disable_trace_padding,
cairo_run_config.max_traceback_entries,
)
.unwrap();

Expand Down
4 changes: 3 additions & 1 deletion vm/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::types::layout_name::LayoutName;
#[cfg(feature = "cairo-1-hints")]
use crate::vm::errors::cairo_run_errors::CairoRunError;
#[cfg(feature = "cairo-1-hints")]
use crate::vm::runners::cairo_runner::RunResources;
use crate::vm::runners::cairo_runner::{RunResources, DEFAULT_MAX_TRACEBACK_ENTRIES};
use crate::vm::trace::trace_entry::RelocatedTraceEntry;
#[cfg(feature = "cairo-1-hints")]
use crate::Felt252;
Expand Down Expand Up @@ -111,6 +111,7 @@ fn run_cairo_1_entrypoint(
false,
false,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap();

Expand Down Expand Up @@ -218,6 +219,7 @@ fn run_cairo_1_entrypoint_with_run_resources(
false,
false,
false,
DEFAULT_MAX_TRACEBACK_ENTRIES,
)
.unwrap();

Expand Down
Loading
Loading