diff --git a/Cargo.lock b/Cargo.lock index 569967a7d15..232347caa3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2433,7 +2433,6 @@ dependencies = [ [[package]] name = "cairo-native" version = "0.5.0-rc.6" -source = "git+https://github.com/lambdaclass/cairo_native?rev=26f1f915d6be979898ed08544c0f1b127c4501bc#26f1f915d6be979898ed08544c0f1b127c4501bc" dependencies = [ "anyhow", "aquamarine", @@ -10415,7 +10414,6 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "sierra-emu" version = "0.5.0-rc.6" -source = "git+https://github.com/lambdaclass/cairo_native?rev=26f1f915d6be979898ed08544c0f1b127c4501bc#26f1f915d6be979898ed08544c0f1b127c4501bc" dependencies = [ "cairo-lang-compiler", "cairo-lang-filesystem", diff --git a/Cargo.toml b/Cargo.toml index 7d0e215002b..830c9c914c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -100,8 +100,8 @@ cairo-lang-sierra = "2.12.0-dev.1" cairo-lang-sierra-to-casm = "2.12.0-dev.1" cairo-lang-starknet-classes = "2.12.0-dev.1" cairo-lang-utils = "2.12.0-dev.1" -cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "26f1f915d6be979898ed08544c0f1b127c4501bc" } -sierra-emu = { git = "https://github.com/lambdaclass/cairo_native", rev = "26f1f915d6be979898ed08544c0f1b127c4501bc" } +cairo-native = { path = "../cairo_native"} +sierra-emu = { path = "../cairo_native/debug_utils/sierra-emu" } cairo-vm = "2.0.1" camelpaste = "0.1.0" chrono = "0.4.26" diff --git a/crates/blockifier/src/execution/entry_point_execution.rs b/crates/blockifier/src/execution/entry_point_execution.rs index 59bcfda18fb..3ef3a1b78de 100644 --- a/crates/blockifier/src/execution/entry_point_execution.rs +++ b/crates/blockifier/src/execution/entry_point_execution.rs @@ -19,12 +19,12 @@ use crate::execution::entry_point::{ }; use crate::execution::errors::{EntryPointExecutionError, PostExecutionError, PreExecutionError}; use crate::execution::execution_utils::{ - read_execution_retdata, - write_felt, - write_maybe_relocatable, Args, ReadOnlySegments, SEGMENT_ARENA_BUILTIN_SIZE, + read_execution_retdata, + write_felt, + write_maybe_relocatable, }; use crate::execution::syscalls::hint_processor::SyscallHintProcessor; use crate::state::state_api::State; diff --git a/crates/blockifier/src/execution/native/entry_point_execution.rs b/crates/blockifier/src/execution/native/entry_point_execution.rs index 66687e9773c..b89ea0df10e 100644 --- a/crates/blockifier/src/execution/native/entry_point_execution.rs +++ b/crates/blockifier/src/execution/native/entry_point_execution.rs @@ -1,4 +1,7 @@ -use cairo_native::execution_result::ContractExecutionResult; +use std::fs::OpenOptions; +use std::io::Write; + +use cairo_native::execution_result::{BuiltinStats, ContractExecutionResult}; use cairo_native::utils::BuiltinCosts; use crate::execution::call_info::{CallExecution, CallInfo, Retdata}; @@ -84,7 +87,30 @@ fn create_callinfo( } let gas_consumed = syscall_handler.base.call.initial_gas - remaining_gas; - let vm_resources = CallInfo::summarize_vm_resources(syscall_handler.base.inner_calls.iter()); + let vm_resources = { + let mut inner_calls_resources = + CallInfo::summarize_vm_resources(syscall_handler.base.inner_calls.iter()); + let BuiltinStats { + bitwise: _, + ec_op: _, + range_check, + pedersen: _, + poseidon: _, + segment_arena: _, + range_check_96: _, + circuit_add: _, + circuit_mul: _, + } = call_result.builtin_stats; + let range_check_count = range_check + + inner_calls_resources + .builtin_instance_counter + .get(&cairo_vm::types::builtin_name::BuiltinName::range_check) + .unwrap_or(&0); + inner_calls_resources + .builtin_instance_counter + .insert(cairo_vm::types::builtin_name::BuiltinName::range_check, range_check_count); + inner_calls_resources + }; Ok(CallInfo { call: syscall_handler.base.call.into(), diff --git a/crates/blockifier/src/execution/native/executor.rs b/crates/blockifier/src/execution/native/executor.rs index 1a41624ece1..df40a13712f 100644 --- a/crates/blockifier/src/execution/native/executor.rs +++ b/crates/blockifier/src/execution/native/executor.rs @@ -1,14 +1,13 @@ use std::fs::{self, File}; use std::io::Write; use std::path::PathBuf; -use std::sync::atomic::AtomicU64; use std::sync::Arc; +use std::sync::atomic::AtomicU64; -use cairo_lang_sierra::ids::ConcreteLibfuncId; use cairo_lang_sierra::program::Program; use cairo_lang_starknet_classes::compiler_version::VersionId; use cairo_lang_starknet_classes::contract_class::ContractEntryPoints; -use cairo_native::execution_result::ContractExecutionResult; +use cairo_native::execution_result::{BuiltinStats, ContractExecutionResult}; use cairo_native::executor::AotContractExecutor; use cairo_native::starknet::StarknetSyscallHandler; use cairo_native::utils::BuiltinCosts; @@ -97,7 +96,8 @@ impl ContractExecutor { let args = args.to_owned(); virtual_machine.call_contract(selector, gas, args, builtin_costs); - let result = if cfg!(feature = "with-trace-dump") { + let result = if cfg!(any(feature = "with-trace-dump", feature = "with-sierra-emu")) + { static COUNTER: AtomicU64 = AtomicU64::new(0); let counter = COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed); @@ -123,6 +123,7 @@ impl ContractExecutor { failure_flag: result.failure_flag, return_values: result.return_values, error_msg: result.error_msg, + builtin_stats: BuiltinStats::default(), }) } #[cfg(any(feature = "with-trace-dump", feature = "with-libfunc-profiling"))] @@ -130,16 +131,16 @@ impl ContractExecutor { #[cfg(feature = "with-trace-dump")] use { cairo_lang_sierra::program_registry::ProgramRegistry, + cairo_native::metadata::trace_dump::TraceBinding, cairo_native::metadata::trace_dump::trace_dump_runtime::{ - TraceDump, TRACE_DUMP, + TraceDump, }, - cairo_native::metadata::trace_dump::TraceBinding, }; #[cfg(feature = "with-libfunc-profiling")] use { cairo_native::metadata::profiler::ProfilerBinding, - cairo_native::metadata::profiler::{ProfilerImpl, LIBFUNC_PROFILE}, + cairo_native::metadata::profiler::{LIBFUNC_PROFILE, ProfilerImpl}, }; static COUNTER: AtomicU64 = AtomicU64::new(0);