Skip to content

Commit bcfca70

Browse files
authored
Exclude syscall resources when building trace data to save (#3752)
Closes #3399 Related #3744 commit-id:40786103 --- **Stack**: - #3756 - #3755 - #3752⚠️ *Part of a stack created by [spr](https://github.com/ejoffe/spr). Do not merge manually using the UI - doing so may have unexpected results.*
1 parent f754adc commit bcfca70

File tree

3 files changed

+34
-34
lines changed

3 files changed

+34
-34
lines changed

crates/cheatnet/src/runtime_extensions/call_to_blockifier_runtime_extension/execution/entry_point.rs

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::cairo1_execution::execute_entry_point_call_cairo1;
22
use crate::runtime_extensions::call_to_blockifier_runtime_extension::execution::deprecated::cairo0_execution::execute_entry_point_call_cairo0;
33
use crate::runtime_extensions::call_to_blockifier_runtime_extension::rpc::{AddressOrClassHash, CallResult};
44
use crate::runtime_extensions::call_to_blockifier_runtime_extension::CheatnetState;
5-
use crate::runtime_extensions::common::{get_relocated_vm_trace, get_syscalls_gas_consumed, sum_syscall_usage};
5+
use crate::runtime_extensions::common::{get_relocated_vm_trace, sum_syscall_usage};
66
use crate::state::CheatStatus;
77
use blockifier::execution::call_info::{CallExecution, Retdata, StorageAccessTracker};
88
use crate::runtime_extensions::forge_runtime_extension::{get_nested_calls_syscalls_sierra_gas, get_nested_calls_syscalls_vm_resources};
@@ -196,11 +196,10 @@ pub fn execute_call_entry_point(
196196
syscall_usage_sierra_gas,
197197
vm_trace,
198198
}) => {
199-
remove_syscall_resources_and_exit_non_error_call(
199+
exit_non_error_call(
200200
&call_info,
201201
&syscall_usage_vm_resources,
202202
&syscall_usage_sierra_gas,
203-
context,
204203
cheatnet_state,
205204
vm_trace,
206205
cheated_data.tx_info.signature.unwrap_or_default(),
@@ -301,38 +300,19 @@ fn call_info_from_pre_execution_error(
301300
}
302301
}
303302

304-
fn remove_syscall_resources_and_exit_non_error_call(
303+
fn exit_non_error_call(
305304
call_info: &CallInfo,
306305
syscall_usage_vm_resources: &SyscallUsageMap,
307306
syscall_usage_sierra_gas: &SyscallUsageMap,
308-
context: &mut EntryPointExecutionContext,
309307
cheatnet_state: &mut CheatnetState,
310308
vm_trace: Option<Vec<RelocatedTraceEntry>>,
311309
signature: Vec<Felt>,
312310
) {
313-
let versioned_constants = context.tx_context.block_context.versioned_constants();
314-
// We don't want the syscall resources to pollute the results
315-
let mut resources = call_info.resources.clone();
316-
let mut gas_consumed = call_info.execution.gas_consumed;
317-
318-
// Remove resources consumed by syscalls from the current call
319-
// `syscall_usage_vm_resources` and `syscall_usage_sierra_gas` are flat, meaning they only include syscalls from the specific call
320-
resources -=
321-
&versioned_constants.get_additional_os_syscall_resources(syscall_usage_vm_resources);
322-
gas_consumed -= get_syscalls_gas_consumed(syscall_usage_sierra_gas, versioned_constants);
323-
324-
// Below syscall usages are cumulative.
325311
let nested_syscall_usage_vm_resources =
326312
get_nested_calls_syscalls_vm_resources(&cheatnet_state.trace_data.current_call_stack.top());
327313
let nested_syscall_usage_sierra_gas =
328314
get_nested_calls_syscalls_sierra_gas(&cheatnet_state.trace_data.current_call_stack.top());
329315

330-
// Remove resources consumed by syscalls from nested calls
331-
resources -= &versioned_constants
332-
.get_additional_os_syscall_resources(&nested_syscall_usage_vm_resources);
333-
gas_consumed -=
334-
get_syscalls_gas_consumed(&nested_syscall_usage_sierra_gas, versioned_constants);
335-
336316
let syscall_usage_vm_resources = sum_syscall_usage(
337317
nested_syscall_usage_vm_resources,
338318
syscall_usage_vm_resources,
@@ -341,8 +321,8 @@ fn remove_syscall_resources_and_exit_non_error_call(
341321
sum_syscall_usage(nested_syscall_usage_sierra_gas, syscall_usage_sierra_gas);
342322

343323
cheatnet_state.trace_data.exit_nested_call(
344-
resources,
345-
gas_consumed,
324+
call_info.resources.clone(),
325+
call_info.execution.gas_consumed,
346326
syscall_usage_vm_resources,
347327
syscall_usage_sierra_gas,
348328
CallResult::from_non_error(call_info),

crates/forge-runner/src/build_trace_data.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use blockifier::execution::syscalls::vm_syscall_utils::{
55
SyscallSelector, SyscallUsage, SyscallUsageMap,
66
};
77

8+
use blockifier::blockifier_versioned_constants::VersionedConstants;
89
use blockifier::execution::call_info::OrderedEvent;
910
use cairo_annotations::trace_data::{
1011
CairoExecutionInfo, CallEntryPoint as ProfilerCallEntryPoint,
@@ -20,6 +21,7 @@ use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
2021
use cairo_vm::vm::trace::trace_entry::RelocatedTraceEntry;
2122
use camino::{Utf8Path, Utf8PathBuf};
2223
use cheatnet::forking::data::ForkData;
24+
use cheatnet::runtime_extensions::common::{get_syscalls_gas_consumed, sum_syscall_usage};
2325
use cheatnet::runtime_extensions::forge_runtime_extension::contracts_data::ContractsData;
2426
use cheatnet::state::{CallTrace, CallTraceNode};
2527
use conversions::IntoConv;
@@ -68,8 +70,9 @@ pub fn build_profiler_call_trace(
6870
ProfilerCallTrace {
6971
entry_point,
7072
cumulative_resources: build_profiler_execution_resources(
71-
value.used_execution_resources.clone(),
72-
value.get_total_used_syscalls(),
73+
&value.used_execution_resources,
74+
&value.used_syscalls_vm_resources,
75+
&value.used_syscalls_sierra_gas,
7376
value.gas_consumed,
7477
),
7578
used_l1_resources: value.used_l1_resources.clone(),
@@ -133,10 +136,21 @@ fn build_profiler_call_trace_node(
133136

134137
#[must_use]
135138
pub fn build_profiler_execution_resources(
136-
execution_resources: ExecutionResources,
137-
syscall_usage: SyscallUsageMap,
139+
execution_resources: &ExecutionResources,
140+
syscall_usage_vm_resources: &SyscallUsageMap,
141+
syscall_usage_sierra_gas: &SyscallUsageMap,
138142
gas_consumed: u64,
139143
) -> ProfilerExecutionResources {
144+
// Subtract syscall related resources to get the values expected by the profiler.
145+
// The profiler operates on resources excluding syscall overhead.
146+
let versioned_constants = VersionedConstants::latest_constants();
147+
let execution_resources = execution_resources
148+
- &versioned_constants.get_additional_os_syscall_resources(syscall_usage_vm_resources);
149+
let gas_consumed =
150+
gas_consumed - get_syscalls_gas_consumed(syscall_usage_sierra_gas, versioned_constants);
151+
152+
let syscall_usage =
153+
sum_syscall_usage(syscall_usage_vm_resources.clone(), syscall_usage_sierra_gas);
140154
let profiler_syscall_counter = syscall_usage
141155
.into_iter()
142156
.map(|(key, val)| {

crates/forge-runner/src/running.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ use anyhow::{Result, bail};
77
use blockifier::execution::call_info::CallInfo;
88
use blockifier::execution::contract_class::TrackedResource;
99
use blockifier::execution::entry_point::EntryPointExecutionContext;
10-
use blockifier::execution::entry_point_execution::{prepare_call_arguments, run_entry_point};
10+
use blockifier::execution::entry_point_execution::{
11+
extract_vm_resources, prepare_call_arguments, run_entry_point,
12+
};
1113
use blockifier::execution::errors::EntryPointExecutionError;
1214
use blockifier::state::cached_state::CachedState;
1315
use cairo_vm::Felt252;
@@ -289,10 +291,14 @@ pub fn run_test_case(
289291
)?;
290292

291293
// TODO(#3744): Confirm if this is needed for the profiler
292-
let vm_resources_without_inner_calls = runner
293-
.get_execution_resources()
294-
.expect("Execution resources missing")
295-
.filter_unused_builtins();
294+
let vm_resources_without_inner_calls = extract_vm_resources(
295+
&runner,
296+
&forge_runtime
297+
.extended_runtime
298+
.extended_runtime
299+
.extended_runtime
300+
.hint_handler,
301+
)?;
296302

297303
add_resources_to_top_call(
298304
&mut forge_runtime,

0 commit comments

Comments
 (0)