Skip to content

Commit c691cb1

Browse files
committed
Apply code review suggestions
1 parent 65c6297 commit c691cb1

File tree

7 files changed

+68
-42
lines changed

7 files changed

+68
-42
lines changed

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -225,16 +225,6 @@ pub fn execute_call_entry_point(
225225
cheatnet_state.trace_data.exit_nested_call();
226226
}
227227

228-
let resources_from_inner_calls = &res
229-
.call_info
230-
.inner_calls
231-
.iter()
232-
.fold(ExecutionResources::default(), |acc, call_info| {
233-
&acc + &call_info.resources
234-
});
235-
let resources_from_current_call = &res.call_info.resources - resources_from_inner_calls;
236-
cheatnet_state.add_used_resources(&resources_from_current_call);
237-
238228
Ok(res.call_info)
239229
}
240230
Err(EntryPointExecutionError::PreExecutionError(err))

crates/cheatnet/src/runtime_extensions/call_to_blockifier_runtime_extension/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,6 @@ fn execute_syscall<Request: ExecuteCall + SyscallRequest>(
192192
// Increment, since the selector was peeked into before
193193
syscall_handler.syscall_ptr += 1;
194194
syscall_handler.increment_syscall_count_by(&selector, 1);
195-
196-
cheatnet_state.add_used_syscall(&selector, 1);
197195
// endregion
198196

199197
let syscall_gas_cost = syscall_handler

crates/cheatnet/src/runtime_extensions/cheatable_starknet_runtime_extension.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,6 @@ impl CheatableStarknetRuntimeExtension<'_> {
195195
syscall_handler.syscall_ptr += 1;
196196
syscall_handler.increment_syscall_count_by(&selector, 1);
197197

198-
self.cheatnet_state.add_used_syscall(&selector, 1);
199-
200198
let syscall_gas_cost = syscall_handler
201199
.get_gas_cost_from_selector(&selector)
202200
.map_err(|error| SyscallExecutorBaseError::GasCost { error, selector })?;

crates/cheatnet/src/runtime_extensions/forge_runtime_extension/cheatcodes/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub mod replace_bytecode;
2020
pub mod spy_events;
2121
pub mod spy_messages_to_l1;
2222
pub mod storage;
23+
pub mod testing;
2324

2425
/// A structure used for returning cheatcode errors in tests
2526
#[derive(Debug)]
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
use std::{cell::RefCell, rc::Rc};
2+
3+
use blockifier::{
4+
blockifier_versioned_constants::VersionedConstants,
5+
execution::syscalls::vm_syscall_utils::SyscallUsageMap,
6+
};
7+
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
8+
9+
use crate::{
10+
runtime_extensions::common::sum_syscall_usage,
11+
trace_data::{CallTrace, CallTraceNode},
12+
};
13+
14+
pub fn calculate_steps_from_calls(
15+
top_call: &Rc<RefCell<CallTrace>>,
16+
top_call_syscalls: &SyscallUsageMap,
17+
) -> usize {
18+
let used_resources =
19+
&top_call
20+
.borrow()
21+
.nested_calls
22+
.iter()
23+
.fold(ExecutionResources::default(), |acc, node| match node {
24+
CallTraceNode::EntryPointCall(call_trace) => {
25+
&acc + &call_trace.borrow().used_execution_resources
26+
}
27+
CallTraceNode::DeployWithoutConstructor => acc,
28+
});
29+
30+
let inner_calls_syscalls = &top_call.borrow().nested_calls.iter().fold(
31+
SyscallUsageMap::new(),
32+
|acc, node| match node {
33+
CallTraceNode::EntryPointCall(call_trace) => sum_syscall_usage(
34+
acc,
35+
&sum_syscall_usage(
36+
call_trace.borrow().used_syscalls_sierra_gas.clone(),
37+
&call_trace.borrow().used_syscalls_vm_resources,
38+
),
39+
),
40+
CallTraceNode::DeployWithoutConstructor => acc,
41+
},
42+
);
43+
44+
let total_syscalls = sum_syscall_usage(inner_calls_syscalls.clone(), top_call_syscalls);
45+
46+
let total_syscalls_exeucution_resources = &VersionedConstants::latest_constants()
47+
.get_additional_os_syscall_resources(&total_syscalls);
48+
49+
let resources_from_calls = used_resources + total_syscalls_exeucution_resources;
50+
51+
resources_from_calls.n_steps
52+
}

crates/cheatnet/src/runtime_extensions/forge_runtime_extension/mod.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use self::contracts_data::ContractsData;
22
use crate::runtime_extensions::call_to_blockifier_runtime_extension::rpc::UsedResources;
33
use crate::runtime_extensions::common::sum_syscall_usage;
44
use crate::runtime_extensions::forge_runtime_extension::cheatcodes::replace_bytecode::ReplaceBytecodeError;
5+
use crate::runtime_extensions::forge_runtime_extension::cheatcodes::testing::calculate_steps_from_calls;
56
use crate::runtime_extensions::{
67
call_to_blockifier_runtime_extension::{
78
CallToBlockifierRuntime,
@@ -19,7 +20,6 @@ use crate::runtime_extensions::{
1920
};
2021
use crate::trace_data::{CallTrace, CallTraceNode, GasReportData};
2122
use anyhow::{Context, Result, anyhow};
22-
use blockifier::blockifier_versioned_constants::VersionedConstants;
2323
use blockifier::bouncer::vm_resources_to_sierra_gas;
2424
use blockifier::context::TransactionContext;
2525
use blockifier::execution::call_info::{
@@ -555,21 +555,23 @@ impl<'a> ExtensionLogic for ForgeExtension<'a> {
555555
Ok(CheatcodeHandlingResult::from_serializable(()))
556556
}
557557
"get_current_step" => {
558-
let used_resources = &extended_runtime
558+
let top_call = extended_runtime
559559
.extended_runtime
560560
.extension
561561
.cheatnet_state
562-
.used_resources;
563-
let execution_resources_from_used_syscalls =
564-
&VersionedConstants::latest_constants().get_additional_os_syscall_resources(
565-
&extended_runtime
566-
.extended_runtime
567-
.extension
568-
.cheatnet_state
569-
.used_syscalls,
570-
);
571-
let resources_from_calls = used_resources + execution_resources_from_used_syscalls;
572-
let total_steps = resources_from_calls.n_steps + vm.get_current_step();
562+
.trace_data
563+
.current_call_stack
564+
.top();
565+
566+
let top_call_syscalls = &extended_runtime
567+
.extended_runtime
568+
.extended_runtime
569+
.hint_handler
570+
.base
571+
.syscalls_usage;
572+
573+
let steps_from_calls = calculate_steps_from_calls(&top_call, top_call_syscalls);
574+
let total_steps = steps_from_calls + vm.get_current_step();
573575

574576
Ok(CheatcodeHandlingResult::from_serializable(total_steps))
575577
}

crates/cheatnet/src/state.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ use crate::runtime_extensions::forge_runtime_extension::cheatcodes::spy_events::
1010
use crate::runtime_extensions::forge_runtime_extension::cheatcodes::spy_messages_to_l1::MessageToL1;
1111
use crate::trace_data::{CallTrace, NotEmptyCallStack, TraceData};
1212
use blockifier::execution::contract_class::RunnableCompiledClass;
13-
use blockifier::execution::syscalls::vm_syscall_utils::{SyscallSelector, SyscallUsageMap};
1413
use blockifier::state::errors::StateError::UndeclaredClassHash;
1514
use blockifier::state::state_api::{StateReader, StateResult};
1615
use cairo_vm::Felt252;
17-
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
1816
use conversions::serde::deserialize::CairoDeserialize;
1917
use conversions::string::TryFromHexStr;
2018
use indexmap::IndexMap;
@@ -248,8 +246,6 @@ pub struct CheatnetState {
248246
pub fuzzer_args: Vec<String>,
249247
pub block_hash_contracts: HashMap<(ContractAddress, u64), (CheatSpan, Felt)>,
250248
pub global_block_hash: HashMap<u64, (Felt, Vec<ContractAddress>)>,
251-
pub used_resources: ExecutionResources,
252-
pub used_syscalls: SyscallUsageMap,
253249
}
254250

255251
pub type EncounteredErrors = IndexMap<ClassHash, Vec<usize>>;
@@ -281,8 +277,6 @@ impl Default for CheatnetState {
281277
fuzzer_args: Vec::default(),
282278
block_hash_contracts: HashMap::default(),
283279
global_block_hash: HashMap::default(),
284-
used_resources: ExecutionResources::default(),
285-
used_syscalls: SyscallUsageMap::default(),
286280
}
287281
}
288282
}
@@ -406,13 +400,4 @@ impl CheatnetState {
406400
pub fn clear_error(&mut self, class_hash: ClassHash) {
407401
self.encountered_errors.shift_remove(&class_hash);
408402
}
409-
410-
pub fn add_used_resources(&mut self, resources: &ExecutionResources) {
411-
self.used_resources += resources;
412-
}
413-
414-
pub fn add_used_syscall(&mut self, syscall: &SyscallSelector, count: usize) {
415-
let usage = self.used_syscalls.entry(*syscall).or_default();
416-
usage.call_count += count;
417-
}
418403
}

0 commit comments

Comments
 (0)