Skip to content

Commit 16091dc

Browse files
authored
Keep resources of failed calls in trace (#3795)
<!-- Reference any GitHub issues resolved by this PR --> Related #3660, #3624
1 parent 76acf69 commit 16091dc

File tree

2 files changed

+22
-36
lines changed

2 files changed

+22
-36
lines changed

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

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use blockifier::execution::call_info::CallInfo;
1010
use blockifier::execution::entry_point::{CallEntryPoint, CallType, ExecutableCallEntryPoint};
1111
use blockifier::execution::errors::EntryPointExecutionError;
1212
use blockifier::execution::syscalls::vm_syscall_utils::SyscallUsageMap;
13-
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
1413

1514
pub(crate) fn resolve_cheated_data_for_call(
1615
entry_point: &mut CallEntryPoint,
@@ -75,14 +74,11 @@ pub(crate) fn exit_error_call(
7574
CallType::Call => AddressOrClassHash::ContractAddress(entry_point.storage_address),
7675
CallType::Delegate => AddressOrClassHash::ClassHash(entry_point.class_hash),
7776
};
78-
cheatnet_state.trace_data.update_and_exit_nested_call(
79-
ExecutionResources::default(),
80-
u64::default(),
81-
SyscallUsageMap::default(),
82-
SyscallUsageMap::default(),
83-
CallResult::from_err(error, &identifier),
84-
&[],
85-
vec![],
86-
vec![],
87-
);
77+
let trace_data = &mut cheatnet_state.trace_data;
78+
79+
// In case of a revert, clear all events and messages emitted by the current call.
80+
trace_data.clear_current_call_events_and_messages();
81+
82+
trace_data.update_current_call_result(CallResult::from_err(error, &identifier));
83+
trace_data.exit_nested_call();
8884
}

crates/cheatnet/src/state.rs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,21 @@ impl TraceData {
588588
current_call.borrow_mut().vm_trace = Some(vm_trace);
589589
}
590590

591+
pub fn update_current_call_result(&mut self, result: CallResult) {
592+
let current_call = self.current_call_stack.top();
593+
current_call.borrow_mut().result = result;
594+
}
595+
596+
pub fn clear_current_call_events_and_messages(&mut self) {
597+
let current_call = self.current_call_stack.top();
598+
current_call.borrow_mut().events.clear();
599+
current_call
600+
.borrow_mut()
601+
.used_l1_resources
602+
.l2_l1_message_sizes
603+
.clear();
604+
}
605+
591606
#[expect(clippy::too_many_arguments)]
592607
pub fn update_current_call(
593608
&mut self,
@@ -618,31 +633,6 @@ impl TraceData {
618633
current_call.events = events;
619634
}
620635

621-
#[expect(clippy::too_many_arguments)]
622-
pub fn update_and_exit_nested_call(
623-
&mut self,
624-
execution_resources: ExecutionResources,
625-
gas_consumed: u64,
626-
used_syscalls_vm_resources: SyscallUsageMap,
627-
used_syscalls_sierra_gas: SyscallUsageMap,
628-
result: CallResult,
629-
l2_to_l1_messages: &[OrderedL2ToL1Message],
630-
signature: Vec<Felt>,
631-
events: Vec<OrderedEvent>,
632-
) {
633-
self.update_current_call(
634-
execution_resources,
635-
gas_consumed,
636-
used_syscalls_vm_resources,
637-
used_syscalls_sierra_gas,
638-
result,
639-
l2_to_l1_messages,
640-
signature,
641-
events,
642-
);
643-
self.exit_nested_call();
644-
}
645-
646636
pub fn exit_nested_call(&mut self) {
647637
self.current_call_stack.pop();
648638
}

0 commit comments

Comments
 (0)