Skip to content

Commit 9f03c43

Browse files
authored
Add events summary and signature lengths to trace file (#3645)
<!-- Reference any GitHub issues resolved by this PR --> Related to software-mansion/cairo-profiler#91 ## Introduced changes <!-- A brief description of the changes --> - wite info about signatures and events into the trace file; required for l2 gas estimations in profiler ## Checklist <!-- Make sure all of these are complete --> - [X] Linked relevant issue - [ ] Updated relevant documentation - [ ] Added relevant tests - [X] Performed self-review of the code - [ ] Added changes to `CHANGELOG.md`
1 parent 13348b0 commit 9f03c43

File tree

5 files changed

+48
-10
lines changed

5 files changed

+48
-10
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ cairo-lang-starknet-classes = "2.12.0"
4545
cairo-lang-parser = "2.12.0"
4646
cairo-lang-sierra-to-casm = "2.12.0"
4747
cairo-vm = "2.2.0"
48-
cairo-annotations = "=0.5.0"
48+
cairo-annotations = "0.5.1"
4949
dirs = "6.0.0"
5050
dialoguer = "0.11.0"
5151
starknet-types-core = { version = "0.1.7", features = ["hash", "prime-bigint"] }

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub fn execute_call_entry_point(
7777
// We skip recursion depth validation here.
7878
cheatnet_state
7979
.trace_data
80-
.enter_nested_call(entry_point.clone(), cheated_data);
80+
.enter_nested_call(entry_point.clone(), cheated_data.clone());
8181

8282
if let Some(cheat_status) = get_mocked_function_cheat_status(entry_point, cheatnet_state)
8383
&& let CheatStatus::Cheated(ret_data, _) = (*cheat_status).clone()
@@ -94,6 +94,8 @@ pub fn execute_call_entry_point(
9494
},
9595
&[],
9696
None,
97+
vec![],
98+
vec![],
9799
);
98100
let tracked_resource = *context
99101
.tracked_resource_stack
@@ -199,6 +201,7 @@ pub fn execute_call_entry_point(
199201
context,
200202
cheatnet_state,
201203
vm_trace,
204+
cheated_data.tx_info.signature.unwrap_or_default(),
202205
);
203206
Ok(call_info)
204207
}
@@ -302,6 +305,7 @@ fn remove_syscall_resources_and_exit_non_error_call(
302305
context: &mut EntryPointExecutionContext,
303306
cheatnet_state: &mut CheatnetState,
304307
vm_trace: Option<Vec<RelocatedTraceEntry>>,
308+
signature: Vec<Felt>,
305309
) {
306310
let versioned_constants = context.tx_context.block_context.versioned_constants();
307311
// We don't want the syscall resources to pollute the results
@@ -341,6 +345,8 @@ fn remove_syscall_resources_and_exit_non_error_call(
341345
CallResult::from_non_error(call_info),
342346
&call_info.execution.l2_to_l1_messages,
343347
vm_trace,
348+
signature,
349+
call_info.execution.events.clone(),
344350
);
345351
}
346352

@@ -362,6 +368,8 @@ fn exit_error_call(
362368
CallResult::from_err(error, &identifier),
363369
&[],
364370
vm_trace,
371+
vec![],
372+
vec![],
365373
);
366374
}
367375

crates/cheatnet/src/state.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::runtime_extensions::forge_runtime_extension::cheatcodes::cheat_execut
1010
};
1111
use crate::runtime_extensions::forge_runtime_extension::cheatcodes::spy_events::Event;
1212
use crate::runtime_extensions::forge_runtime_extension::cheatcodes::spy_messages_to_l1::MessageToL1;
13-
use blockifier::execution::call_info::OrderedL2ToL1Message;
13+
use blockifier::execution::call_info::{OrderedEvent, OrderedL2ToL1Message};
1414
use blockifier::execution::contract_class::RunnableCompiledClass;
1515
use blockifier::execution::entry_point::CallEntryPoint;
1616
use blockifier::execution::syscalls::vm_syscall_utils::SyscallUsageMap;
@@ -219,6 +219,8 @@ pub struct CallTrace {
219219
pub used_syscalls_sierra_gas: SyscallUsageMap,
220220
pub vm_trace: Option<Vec<RelocatedTraceEntry>>,
221221
pub gas_consumed: u64,
222+
pub events: Vec<OrderedEvent>,
223+
pub signature: Vec<Felt>,
222224
}
223225

224226
impl CairoSerialize for CallTrace {
@@ -249,6 +251,8 @@ impl CallTrace {
249251
result: CallResult::Success { ret_data: vec![] },
250252
vm_trace: None,
251253
gas_consumed: u64::default(),
254+
events: vec![],
255+
signature: vec![],
252256
}
253257
}
254258

@@ -563,6 +567,8 @@ impl TraceData {
563567
result: CallResult,
564568
l2_to_l1_messages: &[OrderedL2ToL1Message],
565569
vm_trace: Option<Vec<RelocatedTraceEntry>>,
570+
signature: Vec<Felt>,
571+
events: Vec<OrderedEvent>,
566572
) {
567573
let CallStackElement {
568574
call_trace: last_call,
@@ -582,6 +588,8 @@ impl TraceData {
582588

583589
last_call.result = result;
584590
last_call.vm_trace = vm_trace;
591+
last_call.signature = signature;
592+
last_call.events = events;
585593
}
586594

587595
pub fn add_deploy_without_constructor_node(&mut self) {

crates/forge-runner/src/build_trace_data.rs

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

8+
use blockifier::execution::call_info::OrderedEvent;
89
use cairo_annotations::trace_data::{
910
CairoExecutionInfo, CallEntryPoint as ProfilerCallEntryPoint,
1011
CallTraceNode as ProfilerCallTraceNode, CallTraceV1 as ProfilerCallTrace,
1112
CallType as ProfilerCallType, CasmLevelInfo, ContractAddress,
1213
DeprecatedSyscallSelector as ProfilerDeprecatedSyscallSelector,
1314
EntryPointSelector as ProfilerEntryPointSelector, EntryPointType as ProfilerEntryPointType,
14-
ExecutionResources as ProfilerExecutionResources, SyscallUsage as ProfilerSyscallUsage,
15-
TraceEntry as ProfilerTraceEntry, VersionedCallTrace as VersionedProfilerCallTrace,
16-
VmExecutionResources,
15+
ExecutionResources as ProfilerExecutionResources, SummedUpEvent,
16+
SyscallUsage as ProfilerSyscallUsage, TraceEntry as ProfilerTraceEntry,
17+
VersionedCallTrace as VersionedProfilerCallTrace, VmExecutionResources,
1718
};
1819
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
1920
use cairo_vm::vm::trace::trace_entry::RelocatedTraceEntry;
@@ -27,6 +28,7 @@ use runtime::starknet::constants::{TEST_CONTRACT_CLASS_HASH, TEST_ENTRY_POINT_SE
2728
use starknet::core::utils::get_selector_from_name;
2829
use starknet_api::contract_class::EntryPointType;
2930
use starknet_api::core::{ClassHash, EntryPointSelector};
31+
use starknet_types_core::felt::Felt;
3032
use std::cell::RefCell;
3133
use std::fs;
3234
use std::path::PathBuf;
@@ -45,8 +47,13 @@ pub fn build_profiler_call_trace(
4547
) -> ProfilerCallTrace {
4648
let value = value.borrow();
4749

48-
let entry_point =
49-
build_profiler_call_entry_point(value.entry_point.clone(), contracts_data, fork_data);
50+
let entry_point = build_profiler_call_entry_point(
51+
value.entry_point.clone(),
52+
contracts_data,
53+
fork_data,
54+
&value.events,
55+
&value.signature,
56+
);
5057
let vm_trace = value
5158
.vm_trace
5259
.as_ref()
@@ -160,6 +167,8 @@ pub fn build_profiler_call_entry_point(
160167
value: CallEntryPoint,
161168
contracts_data: &ContractsData,
162169
fork_data: &ForkData,
170+
events: &[OrderedEvent],
171+
signature: &[Felt],
163172
) -> ProfilerCallEntryPoint {
164173
let CallEntryPoint {
165174
class_hash,
@@ -174,6 +183,7 @@ pub fn build_profiler_call_entry_point(
174183
let contract_name = get_contract_name(class_hash, contracts_data);
175184
let function_name = get_function_name(&entry_point_selector, contracts_data, fork_data);
176185
let calldata_len = calldata.0.len();
186+
let signature_len = signature.len();
177187

178188
ProfilerCallEntryPoint {
179189
class_hash: class_hash.map(|ch| cairo_annotations::trace_data::ClassHash(ch.0)),
@@ -184,6 +194,8 @@ pub fn build_profiler_call_entry_point(
184194
contract_name,
185195
function_name,
186196
calldata_len: Some(calldata_len),
197+
events_summary: Some(to_summed_up_events(events)),
198+
signature_len: Some(signature_len),
187199
}
188200
}
189201

@@ -344,3 +356,13 @@ pub fn save_trace_data(
344356
.context("Failed to write call trace to a file")?;
345357
Ok(dir_to_save_trace.join(&filename))
346358
}
359+
360+
fn to_summed_up_events(events: &[OrderedEvent]) -> Vec<SummedUpEvent> {
361+
events
362+
.iter()
363+
.map(|ev| SummedUpEvent {
364+
keys_len: ev.event.keys.len(),
365+
data_len: ev.event.data.0.len(),
366+
})
367+
.collect()
368+
}

0 commit comments

Comments
 (0)