Skip to content

Commit ae5da24

Browse files
authored
Call update_remaining_gas only once (#3735)
Closes #3701 commit-id:a7f9412c --- **Stack**: - #3736 - #3735⚠️ *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 3bc259d commit ae5da24

File tree

7 files changed

+36
-24
lines changed

7 files changed

+36
-24
lines changed

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

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
use crate::runtime_extensions::call_to_blockifier_runtime_extension::CheatnetState;
22
use blockifier::execution::call_info::CallInfo;
33
use blockifier::execution::syscalls::hint_processor::ENTRYPOINT_FAILED_ERROR;
4-
use blockifier::{
5-
execution::execution_utils::update_remaining_gas,
6-
execution::{
7-
entry_point::{CallEntryPoint, CallType},
8-
execution_utils::ReadOnlySegment,
9-
syscalls::{
10-
hint_processor::{SyscallExecutionError, SyscallHintProcessor, create_retdata_segment},
11-
syscall_base::SyscallResult,
12-
},
4+
use blockifier::execution::{
5+
entry_point::{CallEntryPoint, CallType},
6+
execution_utils::ReadOnlySegment,
7+
syscalls::{
8+
hint_processor::{SyscallExecutionError, SyscallHintProcessor, create_retdata_segment},
9+
syscall_base::SyscallResult,
1310
},
1411
};
1512
use cairo_vm::vm::vm_core::VirtualMachine;
@@ -40,8 +37,8 @@ pub fn execute_inner_call(
4037
cheatnet_state,
4138
syscall_handler.base.context,
4239
true,
40+
remaining_gas,
4341
)?;
44-
update_remaining_gas(remaining_gas, &call_info);
4542
// endregion
4643

4744
let mut raw_retdata = call_info.execution.retdata.0.clone();

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::runtime_extensions::call_to_blockifier_runtime_extension::execution::
55
use blockifier::context::TransactionContext;
66
use blockifier::execution::common_hints::ExecutionMode;
77
use blockifier::execution::execution_utils::ReadOnlySegment;
8+
use blockifier::execution::syscalls::hint_processor::create_retdata_segment;
89
use blockifier::execution::syscalls::hint_processor::{
910
INVALID_ARGUMENT, SyscallExecutionError, SyscallHintProcessor,
1011
};
@@ -27,10 +28,6 @@ use blockifier::{
2728
},
2829
state::state_api::State,
2930
};
30-
use blockifier::{
31-
execution::execution_utils::update_remaining_gas,
32-
execution::syscalls::hint_processor::create_retdata_segment,
33-
};
3431
use cairo_vm::Felt252;
3532
use cairo_vm::vm::vm_core::VirtualMachine;
3633
use conversions::string::TryFromHexStr;
@@ -118,12 +115,11 @@ pub fn deploy_syscall(
118115
syscall_handler.base.context,
119116
&ctor_context,
120117
request.constructor_calldata,
121-
*remaining_gas,
118+
remaining_gas,
122119
)?;
123120

124121
let constructor_retdata =
125122
create_retdata_segment(vm, syscall_handler, &call_info.execution.retdata.0)?;
126-
update_remaining_gas(remaining_gas, &call_info);
127123

128124
syscall_handler.base.inner_calls.push(call_info);
129125

@@ -141,7 +137,7 @@ pub fn execute_deployment(
141137
context: &mut EntryPointExecutionContext,
142138
ctor_context: &ConstructorContext,
143139
constructor_calldata: Calldata,
144-
remaining_gas: u64,
140+
remaining_gas: &mut u64,
145141
) -> EntryPointExecutionResult<CallInfo> {
146142
// Address allocation in the state is done before calling the constructor, so that it is
147143
// visible from it.

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use crate::runtime_extensions::forge_runtime_extension::{get_nested_calls_syscal
99
use blockifier::execution::contract_class::{RunnableCompiledClass, TrackedResource};
1010

1111
use blockifier::execution::entry_point::{EntryPointRevertInfo, ExecutableCallEntryPoint};
12+
use blockifier::execution::execution_utils::update_remaining_gas;
1213
use blockifier::execution::stack_trace::{
1314
Cairo1RevertHeader, extract_trailing_cairo1_revert_trace,
1415
};
@@ -59,6 +60,7 @@ pub fn execute_call_entry_point(
5960
cheatnet_state: &mut CheatnetState,
6061
context: &mut EntryPointExecutionContext,
6162
is_revertable: bool,
63+
remaining_gas: &mut u64,
6264
) -> EntryPointExecutionResult<CallInfo> {
6365
let cheated_data = if let CallType::Delegate = entry_point.call_type {
6466
cheatnet_state
@@ -203,6 +205,7 @@ pub fn execute_call_entry_point(
203205
vm_trace,
204206
cheated_data.tx_info.signature.unwrap_or_default(),
205207
);
208+
update_remaining_gas(remaining_gas, &call_info);
206209
Ok(call_info)
207210
}
208211
Err(EntryPointExecutionErrorWithTrace { source: err, trace }) => {
@@ -381,7 +384,7 @@ pub fn execute_constructor_entry_point(
381384
context: &mut EntryPointExecutionContext,
382385
ctor_context: &ConstructorContext,
383386
calldata: Calldata,
384-
remaining_gas: u64,
387+
remaining_gas: &mut u64,
385388
) -> EntryPointExecutionResult<CallInfo> {
386389
// Ensure the class is declared (by reading it).
387390
let contract_class = state.get_compiled_class(ctor_context.class_hash)?;
@@ -395,7 +398,7 @@ pub fn execute_constructor_entry_point(
395398
context,
396399
ctor_context,
397400
calldata,
398-
remaining_gas,
401+
*remaining_gas,
399402
);
400403
};
401404

@@ -408,10 +411,17 @@ pub fn execute_constructor_entry_point(
408411
storage_address: ctor_context.storage_address,
409412
caller_address: ctor_context.caller_address,
410413
call_type: CallType::Call,
411-
initial_gas: remaining_gas,
414+
initial_gas: *remaining_gas,
412415
};
413416
// region: Modified blockifier code
414-
execute_call_entry_point(&mut constructor_call, state, cheatnet_state, context, false)
417+
execute_call_entry_point(
418+
&mut constructor_call,
419+
state,
420+
cheatnet_state,
421+
context,
422+
false,
423+
remaining_gas,
424+
)
415425
// endregion
416426
}
417427

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ impl ExecuteCall for CallContractRequest {
143143
cheatnet_state,
144144
entry_point,
145145
&AddressOrClassHash::ContractAddress(contract_address),
146+
remaining_gas,
146147
)
147148
}
148149
}
@@ -173,6 +174,7 @@ impl ExecuteCall for LibraryCallRequest {
173174
cheatnet_state,
174175
entry_point,
175176
&AddressOrClassHash::ClassHash(class_hash),
177+
remaining_gas,
176178
)
177179
}
178180
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ pub fn call_l1_handler(
178178
calldata: &[Felt],
179179
) -> CallResult {
180180
let calldata = create_execute_calldata(calldata);
181-
181+
let mut remaining_gas = i64::MAX as u64;
182182
let entry_point = CallEntryPoint {
183183
class_hash: None,
184184
code_address: Some(*contract_address),
@@ -188,14 +188,15 @@ pub fn call_l1_handler(
188188
storage_address: *contract_address,
189189
caller_address: ContractAddress::default(),
190190
call_type: CallType::Call,
191-
initial_gas: i64::MAX as u64,
191+
initial_gas: remaining_gas,
192192
};
193193

194194
call_entry_point(
195195
syscall_handler,
196196
cheatnet_state,
197197
entry_point,
198198
&AddressOrClassHash::ContractAddress(*contract_address),
199+
&mut remaining_gas,
199200
)
200201
}
201202

@@ -204,13 +205,15 @@ pub fn call_entry_point(
204205
cheatnet_state: &mut CheatnetState,
205206
mut entry_point: CallEntryPoint,
206207
starknet_identifier: &AddressOrClassHash,
208+
remaining_gas: &mut u64,
207209
) -> CallResult {
208210
let exec_result = execute_call_entry_point(
209211
&mut entry_point,
210212
syscall_handler.base.state,
211213
cheatnet_state,
212214
syscall_handler.base.context,
213215
false,
216+
remaining_gas,
214217
);
215218

216219
let result = CallResult::from_execution_result(&exec_result, starknet_identifier);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,15 @@ fn execute_inner_call(
426426
syscall_handler: &mut DeprecatedSyscallHintProcessor<'_>,
427427
cheatnet_state: &mut CheatnetState,
428428
) -> DeprecatedSyscallResult<ReadOnlySegment> {
429+
let mut remaining_gas = call.initial_gas;
429430
// region: Modified blockifier code
430431
let call_info = execute_call_entry_point(
431432
call,
432433
syscall_handler.state,
433434
cheatnet_state,
434435
syscall_handler.context,
435436
false,
437+
&mut remaining_gas,
436438
)?;
437439
// endregion
438440

crates/cheatnet/tests/common/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ fn deploy_helper(
182182
syscall_handler.base.context,
183183
&ctor_context,
184184
calldata,
185-
i64::MAX as u64,
185+
&mut (i64::MAX as u64),
186186
)
187187
.unwrap();
188188
cheatnet_state.increment_deploy_salt_base();
@@ -235,6 +235,7 @@ pub fn call_contract(
235235
cheatnet_state,
236236
entry_point,
237237
&AddressOrClassHash::ContractAddress(*contract_address),
238+
&mut (i64::MAX as u64),
238239
)
239240
}
240241

@@ -278,6 +279,7 @@ pub fn call_contract_raw(
278279
cheatnet_state,
279280
syscall_hint_processor.base.context,
280281
false,
282+
&mut (i64::MAX as u64),
281283
)
282284
}
283285

0 commit comments

Comments
 (0)