diff --git a/CHANGELOG.md b/CHANGELOG.md index c812a53d8d..977803c465 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ #### Upcoming Changes +* BREAKING: Integrate `RunResources` logic into `HintProcessor` trait [#1274](https://github.com/lambdaclass/cairo-rs/pull/1274) + * Rename trait `HintProcessor` to `HintProcessorLogic` + * Add trait `ResourceTracker` + * Trait `HintProcessor` is now `HintProcessor: HintProcessorLogic + ResourceTracker` + * `BuiltinHintProcessor::new` & `Cairo1HintProcessor::new` now receive the argumet `run_resources: RunResources` + * `HintProcessorLogic::execute_hint` no longer receives `run_resources: &mut RunResources` + * Remove argument `run_resources: &mut RunResources` from `CairoRunner::run_until_pc` & `CairoRunner::run_from_entrypoint` + * build: remove unused implicit features from cairo-vm #### [0.6.1] - 2023-6-23 diff --git a/hint_accountant/src/main.rs b/hint_accountant/src/main.rs index 6dae282908..e1e1af8de0 100644 --- a/hint_accountant/src/main.rs +++ b/hint_accountant/src/main.rs @@ -3,14 +3,11 @@ use cairo_vm::{ hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, serde::deserialize_program::ApTracking, types::exec_scope::ExecutionScopes, - vm::{ - errors::hint_errors::HintError, runners::cairo_runner::RunResources, - vm_core::VirtualMachine, - }, + vm::{errors::hint_errors::HintError, vm_core::VirtualMachine}, with_std::collections::{HashMap, HashSet}, }; use serde::Deserialize; @@ -70,13 +67,7 @@ fn run() { .compile_hint(h, &ap_tracking_data, &reference_ids, &references) .expect("this implementation is infallible"); matches!( - hint_executor.execute_hint( - &mut vm, - &mut exec_scopes, - &hint_data, - &constants, - &mut RunResources::default() - ), + hint_executor.execute_hint(&mut vm, &mut exec_scopes, &hint_data, &constants,), Err(HintError::UnknownHint(_)), ) }) diff --git a/vm/src/cairo_run.rs b/vm/src/cairo_run.rs index 9d1871297e..bfa7f0585e 100644 --- a/vm/src/cairo_run.rs +++ b/vm/src/cairo_run.rs @@ -3,7 +3,7 @@ use crate::{ types::program::Program, vm::{ errors::{cairo_run_errors::CairoRunError, vm_exception::VmException}, - runners::cairo_runner::{CairoRunner, RunResources}, + runners::cairo_runner::CairoRunner, security::verify_secure_runner, vm_core::VirtualMachine, }, @@ -59,10 +59,9 @@ pub fn cairo_run( let mut vm = VirtualMachine::new(cairo_run_config.trace_enabled); let end = cairo_runner.initialize(&mut vm)?; // check step calculation - let mut run_resources = RunResources::default(); cairo_runner - .run_until_pc(end, &mut run_resources, &mut vm, hint_executor) + .run_until_pc(end, &mut vm, hint_executor) .map_err(|err| VmException::from_vm_error(&cairo_runner, &vm, err))?; cairo_runner.end_run(false, false, &mut vm, hint_executor)?; @@ -156,7 +155,7 @@ mod tests { .map_err(CairoRunError::Runner)?; assert!(cairo_runner - .run_until_pc(end, &mut RunResources::default(), &mut vm, hint_processor) + .run_until_pc(end, &mut vm, hint_processor) .is_ok()); Ok((cairo_runner, vm)) @@ -176,12 +175,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_ok()); assert!(cairo_runner.relocate(&mut vm, true).is_ok()); // `main` returns without doing nothing, but `not_main` sets `[ap]` to `1` @@ -301,12 +295,7 @@ mod tests { let mut vm = vm!(); let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_ok()); assert!(cairo_runner.relocate(&mut vm, false).is_ok()); assert!(vm.get_relocated_trace().is_err()); diff --git a/vm/src/hint_processor/builtin_hint_processor/bigint.rs b/vm/src/hint_processor/builtin_hint_processor/bigint.rs index 49752a5cd1..bc34b7e841 100644 --- a/vm/src/hint_processor/builtin_hint_processor/bigint.rs +++ b/vm/src/hint_processor/builtin_hint_processor/bigint.rs @@ -100,12 +100,10 @@ mod test { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::builtin_hint_processor::hint_code; - use crate::hint_processor::hint_processor_definition::HintProcessor; - use crate::hint_processor::hint_processor_definition::HintReference; + use crate::hint_processor::hint_processor_definition::{HintProcessorLogic, HintReference}; use crate::stdlib::collections::HashMap; use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_core::VirtualMachine; use assert_matches::assert_matches; use num_bigint::BigInt; diff --git a/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs b/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs index 381abe62c4..a135f83b9f 100644 --- a/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs @@ -306,14 +306,13 @@ mod tests { use super::*; use crate::hint_processor::builtin_hint_processor::hint_code; use crate::types::errors::math_errors::MathError; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, relocatable, types::exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs b/vm/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs index 2879d48cef..c9ca674f7a 100644 --- a/vm/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs +++ b/vm/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs @@ -21,10 +21,13 @@ use super::{ }, }; use crate::{ - hint_processor::builtin_hint_processor::secp::ec_utils::{ - ec_double_assign_new_x, ec_double_assign_new_x_v2, + hint_processor::{ + builtin_hint_processor::secp::ec_utils::{ + ec_double_assign_new_x, ec_double_assign_new_x_v2, + }, + hint_processor_definition::HintProcessorLogic, }, - vm::runners::cairo_runner::RunResources, + vm::runners::cairo_runner::{ResourceTracker, RunResources}, }; use crate::{ hint_processor::{ @@ -103,7 +106,7 @@ use crate::{ verify_multiplicity_body, verify_usort, }, }, - hint_processor_definition::{HintProcessor, HintReference}, + hint_processor_definition::HintReference, }, serde::deserialize_program::ApTracking, stdlib::{any::Any, collections::HashMap, prelude::*, rc::Rc}, @@ -148,16 +151,21 @@ pub struct HintFunc( ); pub struct BuiltinHintProcessor { pub extra_hints: HashMap>, + run_resources: RunResources, } impl BuiltinHintProcessor { pub fn new_empty() -> Self { BuiltinHintProcessor { extra_hints: HashMap::new(), + run_resources: RunResources::default(), } } - pub fn new(extra_hints: HashMap>) -> Self { - BuiltinHintProcessor { extra_hints } + pub fn new(extra_hints: HashMap>, run_resources: RunResources) -> Self { + BuiltinHintProcessor { + extra_hints, + run_resources, + } } pub fn add_hint(&mut self, hint_code: String, hint_func: Rc) { @@ -165,14 +173,13 @@ impl BuiltinHintProcessor { } } -impl HintProcessor for BuiltinHintProcessor { +impl HintProcessorLogic for BuiltinHintProcessor { fn execute_hint( &mut self, vm: &mut VirtualMachine, exec_scopes: &mut ExecutionScopes, hint_data: &Box, constants: &HashMap, - _run_resources: &mut RunResources, ) -> Result<(), HintError> { let hint_data = hint_data .downcast_ref::() @@ -805,16 +812,32 @@ impl HintProcessor for BuiltinHintProcessor { } } +impl ResourceTracker for BuiltinHintProcessor { + fn consume_step(&mut self) { + self.run_resources.consume_step(); + } + + fn consumed(&self) -> bool { + self.run_resources.consumed() + } + + fn get_n_steps(&self) -> Option { + self.run_resources.get_n_steps() + } + + fn run_resources(&self) -> &RunResources { + &self.run_resources + } +} + #[cfg(test)] mod tests { use super::*; use crate::stdlib::any::Any; use crate::types::relocatable::Relocatable; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, - hint_processor::hint_processor_definition::HintProcessor, types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, utils::test_utils::*, vm::{ @@ -1228,7 +1251,6 @@ mod tests { exec_scopes, &any_box!(hint_data), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -1241,7 +1263,6 @@ mod tests { exec_scopes, &any_box!(hint_data), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); diff --git a/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs b/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs index 5aba04c816..94317ec8ad 100644 --- a/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs +++ b/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs @@ -368,7 +368,6 @@ pub fn u64_array_to_mayberelocatable_vec(array: &[u64]) -> Vec mod tests { use super::*; use crate::stdlib::string::ToString; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, @@ -376,7 +375,7 @@ mod tests { builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::{HintProcessor, HintReference}, + hint_processor_definition::{HintProcessorLogic, HintReference}, }, types::{exec_scope::ExecutionScopes, relocatable::Relocatable}, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/dict_hint_utils.rs b/vm/src/hint_processor/builtin_hint_processor/dict_hint_utils.rs index 1dad70571b..42c7bd37c8 100644 --- a/vm/src/hint_processor/builtin_hint_processor/dict_hint_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/dict_hint_utils.rs @@ -259,11 +259,10 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::builtin_hint_processor::dict_manager::Dictionary; use crate::hint_processor::builtin_hint_processor::hint_code; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::stdlib::collections::HashMap; use crate::types::exec_scope::ExecutionScopes; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ hint_processor::builtin_hint_processor::dict_manager::{DictManager, DictTracker}, relocatable, diff --git a/vm/src/hint_processor/builtin_hint_processor/ec_recover.rs b/vm/src/hint_processor/builtin_hint_processor/ec_recover.rs index 1553f56305..a8c5126b84 100644 --- a/vm/src/hint_processor/builtin_hint_processor/ec_recover.rs +++ b/vm/src/hint_processor/builtin_hint_processor/ec_recover.rs @@ -118,7 +118,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::hint_code; use crate::hint_processor::hint_processor_definition::HintReference; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_core::VirtualMachine; use crate::{ any_box, @@ -126,7 +125,7 @@ mod tests { builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs b/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs index 336b8903d4..a36cc82da3 100644 --- a/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs @@ -225,7 +225,7 @@ mod tests { use crate::any_box; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::relocatable; use crate::types::exec_scope::ExecutionScopes; use crate::types::relocatable::Relocatable; @@ -233,7 +233,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::hint_code; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use assert_matches::assert_matches; use super::*; diff --git a/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs b/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs index 9bde78bd28..e74dffa370 100644 --- a/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs +++ b/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs @@ -266,14 +266,13 @@ mod tests { use super::*; use crate::hint_processor::builtin_hint_processor::hint_code; use crate::vm::errors::memory_errors::MemoryError; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/find_element_hint.rs b/vm/src/hint_processor/builtin_hint_processor/find_element_hint.rs index f2c202adc0..d9d7a56600 100644 --- a/vm/src/hint_processor/builtin_hint_processor/find_element_hint.rs +++ b/vm/src/hint_processor/builtin_hint_processor/find_element_hint.rs @@ -131,7 +131,6 @@ mod tests { use super::*; use crate::stdlib::string::ToString; use crate::types::relocatable::Relocatable; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -139,7 +138,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::relocatable::MaybeRelocatable, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/garaga.rs b/vm/src/hint_processor/builtin_hint_processor/garaga.rs index b4ad3016f8..94e90464ac 100644 --- a/vm/src/hint_processor/builtin_hint_processor/garaga.rs +++ b/vm/src/hint_processor/builtin_hint_processor/garaga.rs @@ -29,9 +29,8 @@ mod tests { use crate::any_box; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::types::exec_scope::ExecutionScopes; - use crate::vm::runners::cairo_runner::RunResources; use crate::{hint_processor::builtin_hint_processor::hint_code, utils::test_utils::*}; use felt::Felt252; use num_traits::{Bounded, One, Zero}; diff --git a/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs b/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs index bf27e6ddce..e0aa586ee4 100644 --- a/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs @@ -298,7 +298,6 @@ pub fn split_output_mid_low_high( mod tests { use super::*; use crate::any_box; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ hint_processor::{ builtin_hint_processor::{ @@ -306,7 +305,7 @@ mod tests { hint_code, keccak_utils::HashMap, }, - hint_processor_definition::{HintProcessor, HintReference}, + hint_processor_definition::{HintProcessorLogic, HintReference}, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/math_utils.rs b/vm/src/hint_processor/builtin_hint_processor/math_utils.rs index 9dc99ab05d..be27605888 100644 --- a/vm/src/hint_processor/builtin_hint_processor/math_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/math_utils.rs @@ -782,7 +782,6 @@ mod tests { use super::*; use crate::stdlib::ops::Shl; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -790,7 +789,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, relocatable, types::exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/memset_utils.rs b/vm/src/hint_processor/builtin_hint_processor/memset_utils.rs index 97359bb91e..3673a49d05 100644 --- a/vm/src/hint_processor/builtin_hint_processor/memset_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/memset_utils.rs @@ -59,14 +59,13 @@ mod tests { use super::*; use crate::stdlib::string::ToString; use crate::types::relocatable::Relocatable; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs b/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs index 4c9aef2f2f..0beefc2b66 100644 --- a/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs @@ -42,11 +42,10 @@ mod tests { use crate::any_box; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::hint_processor::hint_processor_definition::HintReference; use crate::stdlib::collections::HashMap; use crate::types::exec_scope::ExecutionScopes; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_core::VirtualMachine; use crate::{hint_processor::builtin_hint_processor::hint_code, utils::test_utils::*}; diff --git a/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs b/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs index 823949194d..0ef880b41d 100644 --- a/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs @@ -45,13 +45,12 @@ mod tests { use super::*; use crate::types::relocatable::Relocatable; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/secp/bigint_utils.rs b/vm/src/hint_processor/builtin_hint_processor/secp/bigint_utils.rs index cffa79b75c..c4d70466d5 100644 --- a/vm/src/hint_processor/builtin_hint_processor/secp/bigint_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/secp/bigint_utils.rs @@ -226,7 +226,7 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::stdlib::ops::Shl; use crate::stdlib::string::ToString; use crate::types::exec_scope::ExecutionScopes; @@ -236,7 +236,6 @@ mod tests { use crate::vm::vm_core::VirtualMachine; - use crate::vm::runners::cairo_runner::RunResources; use assert_matches::assert_matches; use num_traits::One; diff --git a/vm/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs b/vm/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs index ed9b23556f..d61999e2dd 100644 --- a/vm/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs @@ -546,14 +546,13 @@ mod tests { use crate::hint_processor::builtin_hint_processor::secp::secp_utils::SECP_P_V2; use crate::stdlib::string::ToString; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{exec_scope::ExecutionScopes, relocatable::Relocatable}, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/secp/field_utils.rs b/vm/src/hint_processor/builtin_hint_processor/secp/field_utils.rs index c1a4b5fbd1..746c7973ba 100644 --- a/vm/src/hint_processor/builtin_hint_processor/secp/field_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/secp/field_utils.rs @@ -196,7 +196,6 @@ mod tests { use super::*; use crate::hint_processor::builtin_hint_processor::hint_code; use crate::stdlib::string::ToString; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, @@ -204,7 +203,7 @@ mod tests { builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{ exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/secp/signature.rs b/vm/src/hint_processor/builtin_hint_processor/secp/signature.rs index bedcfd2b41..4cb2621b45 100644 --- a/vm/src/hint_processor/builtin_hint_processor/secp/signature.rs +++ b/vm/src/hint_processor/builtin_hint_processor/secp/signature.rs @@ -165,7 +165,6 @@ mod tests { use crate::stdlib::string::ToString; use crate::types::errors::math_errors::MathError; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -173,7 +172,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/segments.rs b/vm/src/hint_processor/builtin_hint_processor/segments.rs index cb08e83891..c23c58d3d4 100644 --- a/vm/src/hint_processor/builtin_hint_processor/segments.rs +++ b/vm/src/hint_processor/builtin_hint_processor/segments.rs @@ -48,7 +48,6 @@ pub fn temporary_array( mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -56,7 +55,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/set.rs b/vm/src/hint_processor/builtin_hint_processor/set.rs index f57cb01cdf..a3feda7485 100644 --- a/vm/src/hint_processor/builtin_hint_processor/set.rs +++ b/vm/src/hint_processor/builtin_hint_processor/set.rs @@ -58,14 +58,13 @@ pub fn set_add( mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs b/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs index 6d4a4bbe01..89120574e5 100644 --- a/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs @@ -214,7 +214,6 @@ pub fn sha256_finalize( mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -222,7 +221,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::{HintProcessor, HintReference}, + hint_processor_definition::{HintProcessorLogic, HintReference}, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/signature.rs b/vm/src/hint_processor/builtin_hint_processor/signature.rs index f50f5caa19..97b03c764d 100644 --- a/vm/src/hint_processor/builtin_hint_processor/signature.rs +++ b/vm/src/hint_processor/builtin_hint_processor/signature.rs @@ -45,7 +45,6 @@ pub fn verify_ecdsa_signature( mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -53,7 +52,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code::VERIFY_ECDSA_SIGNATURE, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{ exec_scope::ExecutionScopes, instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, diff --git a/vm/src/hint_processor/builtin_hint_processor/squash_dict_utils.rs b/vm/src/hint_processor/builtin_hint_processor/squash_dict_utils.rs index 25cd81644e..3ef80e10e4 100644 --- a/vm/src/hint_processor/builtin_hint_processor/squash_dict_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/squash_dict_utils.rs @@ -301,14 +301,13 @@ pub fn squash_dict( #[cfg(test)] mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs b/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs index bce9837494..f1a6f71eb1 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs @@ -474,7 +474,6 @@ pub fn uint256_mul_div_mod( #[cfg(test)] mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -482,7 +481,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{ exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/uint384.rs b/vm/src/hint_processor/builtin_hint_processor/uint384.rs index a0fbe18a97..1a643b1a14 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint384.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint384.rs @@ -230,7 +230,6 @@ pub fn sub_reduced_a_and_reduced_b( mod tests { use super::*; use crate::hint_processor::builtin_hint_processor::hint_code; - use crate::vm::runners::cairo_runner::RunResources; use core::ops::Shl; use crate::{ @@ -239,7 +238,7 @@ mod tests { builtin_hint_processor::builtin_hint_processor_definition::{ BuiltinHintProcessor, HintProcessorData, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::{ exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs b/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs index adfed5307b..dd981380bb 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs @@ -168,10 +168,9 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::builtin_hint_processor::hint_code; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use assert_matches::assert_matches; diff --git a/vm/src/hint_processor/builtin_hint_processor/usort.rs b/vm/src/hint_processor/builtin_hint_processor/usort.rs index 4c7126c5dc..319e394c74 100644 --- a/vm/src/hint_processor/builtin_hint_processor/usort.rs +++ b/vm/src/hint_processor/builtin_hint_processor/usort.rs @@ -136,7 +136,6 @@ pub fn verify_multiplicity_body( #[cfg(test)] mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ any_box, hint_processor::{ @@ -144,7 +143,7 @@ mod tests { builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, hint_code::USORT_BODY, }, - hint_processor_definition::HintProcessor, + hint_processor_definition::HintProcessorLogic, }, types::exec_scope::ExecutionScopes, utils::test_utils::*, diff --git a/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs b/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs index 19422851d3..22448a8fbf 100644 --- a/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs +++ b/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs @@ -117,10 +117,9 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::builtin_hint_processor::hint_code; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use assert_matches::assert_matches; #[cfg(target_arch = "wasm32")] diff --git a/vm/src/hint_processor/builtin_hint_processor/vrf/inv_mod_p_uint512.rs b/vm/src/hint_processor/builtin_hint_processor/vrf/inv_mod_p_uint512.rs index 8b2cf6b51f..2293190f2e 100644 --- a/vm/src/hint_processor/builtin_hint_processor/vrf/inv_mod_p_uint512.rs +++ b/vm/src/hint_processor/builtin_hint_processor/vrf/inv_mod_p_uint512.rs @@ -53,13 +53,12 @@ mod tests { use crate::any_box; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::types::relocatable::Relocatable; use crate::utils::test_utils::mayberelocatable; use crate::utils::test_utils::memory; use crate::utils::test_utils::memory_from_memory; use crate::utils::test_utils::memory_inner; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ hint_processor::builtin_hint_processor::hint_code::INV_MOD_P_UINT512, types::exec_scope::ExecutionScopes, diff --git a/vm/src/hint_processor/builtin_hint_processor/vrf/pack.rs b/vm/src/hint_processor/builtin_hint_processor/vrf/pack.rs index 5e385ef75c..4313da0e66 100644 --- a/vm/src/hint_processor/builtin_hint_processor/vrf/pack.rs +++ b/vm/src/hint_processor/builtin_hint_processor/vrf/pack.rs @@ -79,12 +79,11 @@ mod test { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::builtin_hint_processor::hint_code; use crate::hint_processor::builtin_hint_processor::secp::secp_utils::SECP_P_V2; - use crate::hint_processor::hint_processor_definition::HintProcessor; + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::hint_processor::hint_processor_definition::HintReference; use crate::stdlib::collections::HashMap; use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_core::VirtualMachine; use num_bigint::BigInt; use num_traits::One; diff --git a/vm/src/hint_processor/cairo_1_hint_processor/hint_processor.rs b/vm/src/hint_processor/cairo_1_hint_processor/hint_processor.rs index 7e9ae9da83..0fa7468dd0 100644 --- a/vm/src/hint_processor/cairo_1_hint_processor/hint_processor.rs +++ b/vm/src/hint_processor/cairo_1_hint_processor/hint_processor.rs @@ -6,9 +6,10 @@ use crate::hint_processor::cairo_1_hint_processor::dict_manager::DictSquashExecS use crate::hint_processor::hint_processor_definition::HintReference; use crate::stdlib::{boxed::Box, collections::HashMap, prelude::*}; use crate::types::relocatable::Relocatable; +use crate::vm::runners::cairo_runner::ResourceTracker; use crate::vm::runners::cairo_runner::RunResources; use crate::{ - hint_processor::hint_processor_definition::HintProcessor, + hint_processor::hint_processor_definition::HintProcessorLogic, types::exec_scope::ExecutionScopes, vm::errors::vm_errors::VirtualMachineError, vm::{errors::hint_errors::HintError, vm_core::VirtualMachine}, @@ -49,12 +50,14 @@ fn get_beta() -> Felt252 { /// HintProcessor for Cairo 1 compiler hints. pub struct Cairo1HintProcessor { hints: HashMap>, + run_resources: RunResources, } impl Cairo1HintProcessor { - pub fn new(hints: &[(usize, Vec)]) -> Self { + pub fn new(hints: &[(usize, Vec)], run_resources: RunResources) -> Self { Self { hints: hints.iter().cloned().collect(), + run_resources, } } // Runs a single Hint @@ -1095,7 +1098,7 @@ impl Cairo1HintProcessor { } } -impl HintProcessor for Cairo1HintProcessor { +impl HintProcessorLogic for Cairo1HintProcessor { // Ignores all data except for the code that should contain fn compile_hint( &self, @@ -1129,7 +1132,6 @@ impl HintProcessor for Cairo1HintProcessor { hint_data: &Box, //Constant values extracted from the program specification. _constants: &HashMap, - _run_resources: &mut RunResources, ) -> Result<(), HintError> { let hints: &Vec = hint_data.downcast_ref().ok_or(HintError::WrongHintData)?; for hint in hints { @@ -1138,3 +1140,21 @@ impl HintProcessor for Cairo1HintProcessor { Ok(()) } } + +impl ResourceTracker for Cairo1HintProcessor { + fn consumed(&self) -> bool { + self.run_resources.consumed() + } + + fn consume_step(&mut self) { + self.run_resources.consume_step() + } + + fn get_n_steps(&self) -> Option { + self.run_resources.get_n_steps() + } + + fn run_resources(&self) -> &RunResources { + &self.run_resources + } +} diff --git a/vm/src/hint_processor/hint_processor_definition.rs b/vm/src/hint_processor/hint_processor_definition.rs index 7ba2dddac7..966a0f9f5f 100644 --- a/vm/src/hint_processor/hint_processor_definition.rs +++ b/vm/src/hint_processor/hint_processor_definition.rs @@ -8,13 +8,13 @@ use crate::types::exec_scope::ExecutionScopes; use crate::types::instruction::Register; use crate::vm::errors::hint_errors::HintError; use crate::vm::errors::vm_errors::VirtualMachineError; -use crate::vm::runners::cairo_runner::RunResources; +use crate::vm::runners::cairo_runner::ResourceTracker; use crate::vm::vm_core::VirtualMachine; use super::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use felt::Felt252; -pub trait HintProcessor { +pub trait HintProcessorLogic { //Executes the hint which's data is provided by a dynamic structure previously created by compile_hint fn execute_hint( &mut self, @@ -28,10 +28,6 @@ pub trait HintProcessor { hint_data: &Box, //Constant values extracted from the program specification. constants: &HashMap, - // RunResources keeps track of the steps executed by the VirtualMachine. - // It is not used in cairo-rs, but it is utilized in starknet_in_rust and blockifier - // to limit recursive contract calls. - run_resources: &mut RunResources, ) -> Result<(), HintError>; //Transforms hint data outputed by the VM into whichever format will be later used by execute_hint @@ -55,6 +51,9 @@ pub trait HintProcessor { } } +pub trait HintProcessor: HintProcessorLogic + ResourceTracker {} +impl HintProcessor for T where T: HintProcessorLogic + ResourceTracker {} + fn get_ids_data( reference_ids: &HashMap, references: &[HintReference], diff --git a/vm/src/tests/cairo_1_run_from_entrypoint_tests.rs b/vm/src/tests/cairo_1_run_from_entrypoint_tests.rs index f0d3df786f..70e88dcba8 100644 --- a/vm/src/tests/cairo_1_run_from_entrypoint_tests.rs +++ b/vm/src/tests/cairo_1_run_from_entrypoint_tests.rs @@ -1,6 +1,6 @@ use num_traits::Num; -use crate::tests::*; +use crate::{tests::*, vm::runners::cairo_runner::ResourceTracker}; use assert_matches::assert_matches; #[test] @@ -605,51 +605,60 @@ fn uint512_div_mod_test() { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn fibonacci_with_run_resources_ok() { let program_data = include_bytes!("../../../cairo_programs/cairo-1-contracts/fib.casm"); - let mut resources = RunResources::new(621); + let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); // Program takes 621 steps + let mut hint_processor = + Cairo1HintProcessor::new(&contract_class.hints, RunResources::new(621)); assert_matches!( run_cairo_1_entrypoint_with_run_resources( - program_data.as_slice(), + serde_json::from_slice(program_data.as_slice()).unwrap(), 0, - &mut resources, + &mut hint_processor, &[1_usize.into(), 1_usize.into(), 20_usize.into()], ), Ok(x) if x == [10946_usize.into()] ); - assert_eq!(resources, RunResources::new(0)); + assert_eq!(hint_processor.run_resources(), &RunResources::new(0)); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn fibonacci_with_run_resources_2_ok() { let program_data = include_bytes!("../../../cairo_programs/cairo-1-contracts/fib.casm"); - let mut resources = RunResources::new(1000); + let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); // Program takes 621 steps + let mut hint_processor = + Cairo1HintProcessor::new(&contract_class.hints, RunResources::new(1000)); assert_matches!( run_cairo_1_entrypoint_with_run_resources( - program_data.as_slice(), + contract_class, 0, - &mut resources, + &mut hint_processor, &[1_usize.into(), 1_usize.into(), 20_usize.into()], ), Ok(x) if x == [10946_usize.into()] ); - assert_eq!(resources, RunResources::new(1000 - 621)); + assert_eq!( + hint_processor.run_resources(), + &RunResources::new(1000 - 621) + ); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn fibonacci_with_run_resources_error() { let program_data = include_bytes!("../../../cairo_programs/cairo-1-contracts/fib.casm"); - let mut resources = RunResources::new(100); + let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); // Program takes 621 steps + let mut hint_processor = + Cairo1HintProcessor::new(&contract_class.hints, RunResources::new(100)); assert!(run_cairo_1_entrypoint_with_run_resources( - program_data.as_slice(), + contract_class, 0, - &mut resources, + &mut hint_processor, &[1_usize.into(), 1_usize.into(), 20_usize.into()], ) .is_err()); - assert_eq!(resources, RunResources::new(0)); + assert_eq!(hint_processor.run_resources(), &RunResources::new(0)); } diff --git a/vm/src/tests/mod.rs b/vm/src/tests/mod.rs index 29c68f1cea..7d75c8345a 100644 --- a/vm/src/tests/mod.rs +++ b/vm/src/tests/mod.rs @@ -115,7 +115,8 @@ pub(self) fn run_cairo_1_entrypoint( expected_retdata: &[Felt252], ) { let contract_class: CasmContractClass = serde_json::from_slice(program_content).unwrap(); - let mut hint_processor = Cairo1HintProcessor::new(&contract_class.hints); + let mut hint_processor = + Cairo1HintProcessor::new(&contract_class.hints, RunResources::default()); let mut runner = CairoRunner::new( &(contract_class.clone().try_into().unwrap()), @@ -190,7 +191,6 @@ pub(self) fn run_cairo_1_entrypoint( .run_from_entrypoint( entrypoint_offset, &entrypoint_args, - &mut RunResources::default(), true, Some(runner.program.shared_program_data.data.len() + program_extra_data.len()), &mut vm, @@ -215,14 +215,11 @@ pub(self) fn run_cairo_1_entrypoint( /// Equals to fn run_cairo_1_entrypoint /// But with run_resources as an input pub(self) fn run_cairo_1_entrypoint_with_run_resources( - program_content: &[u8], + contract_class: CasmContractClass, entrypoint_offset: usize, - run_resources: &mut RunResources, + hint_processor: &mut Cairo1HintProcessor, args: &[MaybeRelocatable], ) -> Result, CairoRunError> { - let contract_class: CasmContractClass = serde_json::from_slice(program_content).unwrap(); - let mut hint_processor = Cairo1HintProcessor::new(&contract_class.hints); - let mut runner = CairoRunner::new( &(contract_class.clone().try_into().unwrap()), "all_cairo", @@ -295,11 +292,10 @@ pub(self) fn run_cairo_1_entrypoint_with_run_resources( runner.run_from_entrypoint( entrypoint_offset, &entrypoint_args, - run_resources, true, Some(runner.program.shared_program_data.data.len() + program_extra_data.len()), &mut vm, - &mut hint_processor, + hint_processor, )?; // Check return values diff --git a/vm/src/utils.rs b/vm/src/utils.rs index c41875c0b8..9d9810fca0 100644 --- a/vm/src/utils.rs +++ b/vm/src/utils.rs @@ -427,13 +427,7 @@ pub mod test_utils { ($vm:expr, $ids_data:expr, $hint_code:expr, $exec_scopes:expr, $constants:expr) => {{ let hint_data = HintProcessorData::new_default($hint_code.to_string(), $ids_data); let mut hint_processor = BuiltinHintProcessor::new_empty(); - hint_processor.execute_hint( - &mut $vm, - $exec_scopes, - &any_box!(hint_data), - $constants, - &mut RunResources::default(), - ) + hint_processor.execute_hint(&mut $vm, $exec_scopes, &any_box!(hint_data), $constants) }}; ($vm:expr, $ids_data:expr, $hint_code:expr, $exec_scopes:expr) => {{ let hint_data = HintProcessorData::new_default( @@ -446,7 +440,6 @@ pub mod test_utils { $exec_scopes, &any_box!(hint_data), &crate::stdlib::collections::HashMap::new(), - &mut RunResources::default(), ) }}; ($vm:expr, $ids_data:expr, $hint_code:expr) => {{ @@ -460,7 +453,6 @@ pub mod test_utils { exec_scopes_ref!(), &any_box!(hint_data), &crate::stdlib::collections::HashMap::new(), - &mut RunResources::default(), ) }}; } @@ -605,15 +597,15 @@ pub mod test_utils { #[cfg(test)] mod test { + use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::stdlib::{cell::RefCell, collections::HashMap, rc::Rc, string::String, vec::Vec}; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ hint_processor::{ builtin_hint_processor::{ builtin_hint_processor_definition::{BuiltinHintProcessor, HintProcessorData}, dict_manager::{DictManager, DictTracker}, }, - hint_processor_definition::{HintProcessor, HintReference}, + hint_processor_definition::HintReference, }, serde::deserialize_program::{BuiltinName, ReferenceManager}, types::{exec_scope::ExecutionScopes, program::Program, relocatable::MaybeRelocatable}, diff --git a/vm/src/vm/errors/vm_exception.rs b/vm/src/vm/errors/vm_exception.rs index f08d13b165..dd268c5f46 100644 --- a/vm/src/vm/errors/vm_exception.rs +++ b/vm/src/vm/errors/vm_exception.rs @@ -298,7 +298,6 @@ impl Location { #[cfg(test)] mod test { use crate::stdlib::{boxed::Box, collections::HashMap}; - use crate::vm::runners::cairo_runner::RunResources; use assert_matches::assert_matches; #[cfg(feature = "std")] use std::path::Path; @@ -650,12 +649,7 @@ mod test { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); #[cfg(all(feature = "std"))] @@ -669,12 +663,7 @@ mod test { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); assert_eq!(get_traceback(&vm, &cairo_runner), Some(expected_traceback)); } @@ -712,12 +701,7 @@ cairo_programs/bad_programs/bad_usort.cairo:64:5: (pc=0:60) let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); assert_eq!( get_traceback(&vm, &cairo_runner), @@ -876,12 +860,7 @@ cairo_programs/bad_programs/bad_range_check.cairo:11:5: (pc=0:6) let end = cairo_runner.initialize(&mut vm).unwrap(); let error = cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .unwrap_err(); let vm_excepction = VmException::from_vm_error(&cairo_runner, &vm, error); assert_eq!(vm_excepction.to_string(), expected_error_string); @@ -926,12 +905,7 @@ cairo_programs/bad_programs/bad_usort.cairo:64:5: (pc=0:60) let end = cairo_runner.initialize(&mut vm).unwrap(); let error = cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .unwrap_err(); let vm_excepction = VmException::from_vm_error(&cairo_runner, &vm, error); assert_eq!(vm_excepction.to_string(), expected_error_string); diff --git a/vm/src/vm/hooks.rs b/vm/src/vm/hooks.rs index 62a507c0cb..b902d8cc2f 100644 --- a/vm/src/vm/hooks.rs +++ b/vm/src/vm/hooks.rs @@ -125,7 +125,6 @@ impl VirtualMachine { #[cfg(test)] mod tests { use super::*; - use crate::vm::runners::cairo_runner::RunResources; use crate::{ hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, types::program::Program, @@ -146,12 +145,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_ok()); } @@ -199,12 +193,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); // Pre step fail @@ -215,12 +204,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); // Post step fail @@ -231,12 +215,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); } @@ -287,12 +266,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_ok()); } } diff --git a/vm/src/vm/runners/builtin_runner/bitwise.rs b/vm/src/vm/runners/builtin_runner/bitwise.rs index 496b23c888..d09347bac2 100644 --- a/vm/src/vm/runners/builtin_runner/bitwise.rs +++ b/vm/src/vm/runners/builtin_runner/bitwise.rs @@ -189,7 +189,6 @@ mod tests { use crate::stdlib::collections::HashMap; use crate::vm::errors::memory_errors::MemoryError; use crate::vm::runners::builtin_runner::BuiltinRunner; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_core::VirtualMachine; use crate::{ hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, @@ -360,12 +359,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 5))); @@ -410,12 +404,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(5)); diff --git a/vm/src/vm/runners/builtin_runner/ec_op.rs b/vm/src/vm/runners/builtin_runner/ec_op.rs index 9935352b67..65e753c7e2 100644 --- a/vm/src/vm/runners/builtin_runner/ec_op.rs +++ b/vm/src/vm/runners/builtin_runner/ec_op.rs @@ -281,7 +281,7 @@ mod tests { use crate::utils::{test_utils::*, CAIRO_PRIME}; use crate::vm::errors::cairo_run_errors::CairoRunError; use crate::vm::errors::vm_errors::VirtualMachineError; - use crate::vm::runners::cairo_runner::{CairoRunner, RunResources}; + use crate::vm::runners::cairo_runner::CairoRunner; use crate::vm::{ errors::{memory_errors::MemoryError, runner_errors::RunnerError}, @@ -445,12 +445,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 7))); @@ -495,12 +490,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(7)); diff --git a/vm/src/vm/runners/builtin_runner/hash.rs b/vm/src/vm/runners/builtin_runner/hash.rs index d2f4e04cd7..0ebd19f9ff 100644 --- a/vm/src/vm/runners/builtin_runner/hash.rs +++ b/vm/src/vm/runners/builtin_runner/hash.rs @@ -188,7 +188,7 @@ mod tests { use crate::stdlib::collections::HashMap; use crate::types::program::Program; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::{CairoRunner, RunResources}; + use crate::vm::runners::cairo_runner::CairoRunner; use crate::vm::{ errors::memory_errors::MemoryError, runners::builtin_runner::BuiltinRunner, @@ -350,12 +350,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 3))); @@ -399,12 +394,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(3)); diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index 6400db38b8..cfe8c101d2 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -239,7 +239,7 @@ mod tests { use crate::stdlib::collections::HashMap; use crate::types::program::Program; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::{CairoRunner, RunResources}; + use crate::vm::runners::cairo_runner::CairoRunner; use crate::vm::{ errors::{memory_errors::MemoryError, runner_errors::RunnerError}, @@ -387,12 +387,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!( diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index c14aca4b1c..7f5297b060 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -554,7 +554,7 @@ mod tests { use crate::types::instance_definitions::keccak_instance_def::KeccakInstanceDef; use crate::types::program::Program; use crate::vm::errors::memory_errors::InsufficientAllocatedCellsError; - use crate::vm::runners::cairo_runner::{CairoRunner, RunResources}; + use crate::vm::runners::cairo_runner::CairoRunner; use crate::{ types::instance_definitions::{ bitwise_instance_def::BitwiseInstanceDef, ec_op_instance_def::EcOpInstanceDef, @@ -803,12 +803,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(5)); @@ -855,12 +850,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(7)); @@ -904,12 +894,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(3)); @@ -953,12 +938,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(1)); diff --git a/vm/src/vm/runners/builtin_runner/poseidon.rs b/vm/src/vm/runners/builtin_runner/poseidon.rs index ef8084105d..bd0a7a060f 100644 --- a/vm/src/vm/runners/builtin_runner/poseidon.rs +++ b/vm/src/vm/runners/builtin_runner/poseidon.rs @@ -172,7 +172,7 @@ mod tests { use crate::serde::deserialize_program::BuiltinName; use crate::types::program::Program; use crate::utils::test_utils::*; - use crate::vm::runners::cairo_runner::{CairoRunner, RunResources}; + use crate::vm::runners::cairo_runner::CairoRunner; use crate::vm::{runners::builtin_runner::BuiltinRunner, vm_core::VirtualMachine}; #[cfg(target_arch = "wasm32")] @@ -340,12 +340,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 6))); @@ -389,12 +384,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(6)); diff --git a/vm/src/vm/runners/builtin_runner/range_check.rs b/vm/src/vm/runners/builtin_runner/range_check.rs index 87e2797eea..b20b060088 100644 --- a/vm/src/vm/runners/builtin_runner/range_check.rs +++ b/vm/src/vm/runners/builtin_runner/range_check.rs @@ -201,7 +201,6 @@ mod tests { use crate::relocatable; use crate::serde::deserialize_program::BuiltinName; use crate::stdlib::collections::HashMap; - use crate::vm::runners::cairo_runner::RunResources; use crate::vm::vm_memory::memory::Memory; use crate::{ hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, @@ -369,12 +368,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 1))); @@ -418,12 +412,7 @@ mod tests { let address = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - address, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(address, &mut vm, &mut hint_processor) .unwrap(); assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(1)); diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 185360db1e..924a5e7064 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -80,29 +80,45 @@ pub struct RunResources { n_steps: Option, } +pub trait ResourceTracker { + fn consumed(&self) -> bool; + + fn consume_step(&mut self); + + fn get_n_steps(&self) -> Option; + + fn run_resources(&self) -> &RunResources; +} + impl RunResources { pub fn new(n_steps: usize) -> Self { - RunResources { + Self { n_steps: Some(n_steps), } } +} - pub fn consumed(&self) -> bool { +impl ResourceTracker for RunResources { + fn consumed(&self) -> bool { if self.n_steps == Some(0) { return true; } false } - pub fn consume_step(&mut self) { + fn consume_step(&mut self) { if let Some(n_steps) = self.n_steps { self.n_steps = Some(n_steps.saturating_sub(1)); } } - pub fn get_n_steps(&self) -> Option { + fn get_n_steps(&self) -> Option { self.n_steps } + + fn run_resources(&self) -> &RunResources { + self + } } #[derive(Debug)] @@ -527,7 +543,6 @@ impl CairoRunner { pub fn run_until_pc( &mut self, address: Relocatable, - run_resources: &mut RunResources, vm: &mut VirtualMachine, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError> { @@ -537,15 +552,14 @@ impl CairoRunner { #[cfg(feature = "hooks")] vm.execute_before_first_step(self, &hint_data_dictionary)?; - while vm.run_context.pc != address && !run_resources.consumed() { + while vm.run_context.pc != address && !hint_processor.consumed() { vm.step( hint_processor, &mut self.exec_scopes, &hint_data_dictionary, &self.program.constants, - run_resources, )?; - run_resources.consume_step() + hint_processor.consume_step(); } if vm.run_context.pc != address { @@ -575,7 +589,6 @@ impl CairoRunner { &mut self.exec_scopes, &hint_data_dictionary, &self.program.constants, - &mut RunResources::default(), )?; } @@ -891,7 +904,6 @@ impl CairoRunner { &mut self, entrypoint: usize, args: &[&CairoArg], - run_resources: &mut RunResources, verify_secure: bool, program_segment_size: Option, vm: &mut VirtualMachine, @@ -906,7 +918,7 @@ impl CairoRunner { self.initialize_vm(vm)?; - self.run_until_pc(end, run_resources, vm, hint_processor) + self.run_until_pc(end, vm, hint_processor) .map_err(|err| VmException::from_vm_error(self, vm, err))?; self.end_run(true, false, vm, hint_processor)?; @@ -1902,12 +1914,7 @@ mod tests { cairo_runner.initialize_vm(&mut vm).unwrap(); //Execution Phase assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); //Check final values against Python VM @@ -1983,12 +1990,7 @@ mod tests { cairo_runner.initialize_vm(&mut vm).unwrap(); //Execution Phase assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); //Check final values against Python VM @@ -2103,12 +2105,7 @@ mod tests { cairo_runner.initialize_vm(&mut vm).unwrap(); //Execution Phase assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); //Check final values against Python VM @@ -2247,12 +2244,7 @@ mod tests { cairo_runner.initialize_vm(&mut vm).unwrap(); //Execution Phase assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); //Check final values against Python VM @@ -2489,12 +2481,7 @@ mod tests { let end = cairo_runner.initialize_main_entrypoint(&mut vm).unwrap(); cairo_runner.initialize_vm(&mut vm).unwrap(); assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); vm.segments.compute_effective_sizes(); @@ -2633,12 +2620,7 @@ mod tests { let end = cairo_runner.initialize_main_entrypoint(&mut vm).unwrap(); cairo_runner.initialize_vm(&mut vm).unwrap(); assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); vm.segments.compute_effective_sizes(); @@ -2815,12 +2797,7 @@ mod tests { //Execution Phase let mut hint_processor = BuiltinHintProcessor::new_empty(); assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); @@ -2861,12 +2838,7 @@ mod tests { //Execution Phase let mut hint_processor = BuiltinHintProcessor::new_empty(); assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); @@ -2952,12 +2924,7 @@ mod tests { let mut hint_processor = BuiltinHintProcessor::new_empty(); assert_matches!( - cairo_runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ), + cairo_runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); @@ -3450,12 +3417,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor, - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .expect("Call to `CairoRunner::run_until_pc()` failed."); assert_matches!( cairo_runner.end_run(false, false, &mut vm, &mut hint_processor), @@ -3743,7 +3705,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_perm_range_check_limits_no_builtins() { let program = program!(); - let mut hint_processor = BuiltinHintProcessor::new(HashMap::new()); + let mut hint_processor = BuiltinHintProcessor::new(HashMap::new(), RunResources::default()); let mut cairo_runner = cairo_runner!(program); let mut vm = vm!(); @@ -4545,7 +4507,6 @@ mod tests { &mayberelocatable!(2).into(), &MaybeRelocatable::from((2, 0)).into() ], //range_check_ptr - &mut RunResources::default(), true, None, &mut vm, @@ -4576,7 +4537,6 @@ mod tests { &mayberelocatable!(2).into(), &MaybeRelocatable::from((2, 0)).into() ], - &mut RunResources::default(), true, None, &mut new_vm, @@ -4615,7 +4575,6 @@ mod tests { &[ &MaybeRelocatable::from((2, 0)).into() //bitwise_ptr ], - &mut RunResources::default(), true, None, &mut vm, @@ -4733,7 +4692,6 @@ mod tests { let result = cairo_runner.run_from_entrypoint( main_entrypoint, &[], - &mut RunResources::default(), true, None, &mut vm, @@ -4763,12 +4721,7 @@ mod tests { let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ) + .run_until_pc(end, &mut vm, &mut BuiltinHintProcessor::new_empty()) .unwrap(); vm.segments.compute_effective_sizes(); let initial_pointer = vm.get_ap(); @@ -4791,12 +4744,7 @@ mod tests { let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ) + .run_until_pc(end, &mut vm, &mut BuiltinHintProcessor::new_empty()) .unwrap(); vm.segments.compute_effective_sizes(); let initial_pointer = vm.get_ap(); @@ -4819,12 +4767,7 @@ mod tests { let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ) + .run_until_pc(end, &mut vm, &mut BuiltinHintProcessor::new_empty()) .unwrap(); vm.segments.compute_effective_sizes(); let initial_pointer = vm.get_ap(); @@ -4848,12 +4791,7 @@ mod tests { let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ) + .run_until_pc(end, &mut vm, &mut BuiltinHintProcessor::new_empty()) .unwrap(); vm.segments.compute_effective_sizes(); let mut exec = runner.get_execution_resources(&vm).unwrap(); @@ -4943,12 +4881,7 @@ mod tests { // program takes 80 steps assert_matches!( - runner.run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ), + runner.run_until_pc(end, &mut vm, &mut BuiltinHintProcessor::new_empty(),), Ok(()) ) } @@ -4964,19 +4897,14 @@ mod tests { let mut runner = cairo_runner!(program); let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); - let mut run_resources = RunResources::new(81); - // program takes 80 steps + let mut hint_processor = BuiltinHintProcessor::new(HashMap::new(), RunResources::new(81)); + // program takes 81 steps assert_matches!( - runner.run_until_pc( - end, - &mut run_resources, - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ), + runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); - assert_eq!(run_resources.get_n_steps(), Some(1)); + assert_eq!(hint_processor.run_resources().get_n_steps(), Some(1)); } #[test] @@ -4990,19 +4918,14 @@ mod tests { let mut runner = cairo_runner!(program); let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); - let mut run_resources = RunResources::new(80); + let mut hint_processor = BuiltinHintProcessor::new(HashMap::new(), RunResources::new(80)); // program takes 80 steps assert_matches!( - runner.run_until_pc( - end, - &mut run_resources, - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ), + runner.run_until_pc(end, &mut vm, &mut hint_processor), Ok(()) ); - assert_eq!(run_resources, RunResources::new(0)); + assert_eq!(hint_processor.run_resources(), &RunResources::new(0)); } #[test] @@ -5016,17 +4939,12 @@ mod tests { let mut runner = cairo_runner!(program); let mut vm = vm!(); let end = runner.initialize(&mut vm).unwrap(); - let mut run_resources = RunResources::new(9); - // program takes 80 steps + let mut hint_processor = BuiltinHintProcessor::new(HashMap::new(), RunResources::new(9)); + // program takes 9 steps assert_matches!( - runner.run_until_pc( - end, - &mut run_resources, - &mut vm, - &mut BuiltinHintProcessor::new_empty(), - ), + runner.run_until_pc(end, &mut vm, &mut hint_processor,), Err(VirtualMachineError::UnfinishedExecution) ); - assert_eq!(run_resources, RunResources::new(0)); + assert_eq!(hint_processor.run_resources(), &RunResources::new(0)); } } diff --git a/vm/src/vm/vm_core.rs b/vm/src/vm/vm_core.rs index 427087d24f..9773e5df69 100644 --- a/vm/src/vm/vm_core.rs +++ b/vm/src/vm/vm_core.rs @@ -29,7 +29,6 @@ use num_traits::{ToPrimitive, Zero}; use super::errors::trace_errors::TraceError; use super::runners::builtin_runner::OUTPUT_BUILTIN_NAME; -use super::runners::cairo_runner::RunResources; const MAX_TRACEBACK_ENTRIES: u32 = 20; @@ -449,12 +448,11 @@ impl VirtualMachine { exec_scopes: &mut ExecutionScopes, hint_data_dictionary: &HashMap>>, constants: &HashMap, - run_resources: &mut RunResources, ) -> Result<(), VirtualMachineError> { if let Some(hint_list) = hint_data_dictionary.get(&self.run_context.pc.offset) { for (hint_index, hint_data) in hint_list.iter().enumerate() { hint_executor - .execute_hint(self, exec_scopes, hint_data, constants, run_resources) + .execute_hint(self, exec_scopes, hint_data, constants) .map_err(|err| VirtualMachineError::Hint(Box::new((hint_index, err))))? } } @@ -488,15 +486,8 @@ impl VirtualMachine { exec_scopes: &mut ExecutionScopes, hint_data_dictionary: &HashMap>>, constants: &HashMap, - run_resources: &mut RunResources, ) -> Result<(), VirtualMachineError> { - self.step_hint( - hint_executor, - exec_scopes, - hint_data_dictionary, - constants, - run_resources, - )?; + self.step_hint(hint_executor, exec_scopes, hint_data_dictionary, constants)?; #[cfg(feature = "hooks")] self.execute_pre_step_instruction( @@ -2669,7 +2660,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -2899,7 +2889,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -2982,7 +2971,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -3079,7 +3067,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -3101,7 +3088,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -3124,7 +3110,6 @@ mod tests { exec_scopes_ref!(), &HashMap::new(), &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -3690,7 +3675,6 @@ mod tests { exec_scopes_ref!(), &hint_data_dictionary, &HashMap::new(), - &mut RunResources::default(), ), Ok(()) ); @@ -4167,12 +4151,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); let expected_traceback = vec![ (Relocatable::from((1, 3)), Relocatable::from((0, 97))), @@ -4197,12 +4176,7 @@ mod tests { let end = cairo_runner.initialize(&mut vm).unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut vm, - &mut hint_processor - ) + .run_until_pc(end, &mut vm, &mut hint_processor) .is_err()); let expected_traceback = vec![(Relocatable::from((1, 2)), Relocatable::from((0, 34)))]; assert_eq!(vm.get_traceback_entries(), expected_traceback); @@ -4291,12 +4265,7 @@ mod tests { .unwrap(); assert!(cairo_runner - .run_until_pc( - end, - &mut RunResources::default(), - &mut virtual_machine_from_builder, - &mut hint_processor - ) + .run_until_pc(end, &mut virtual_machine_from_builder, &mut hint_processor) .is_err()); } }