Skip to content

Commit be1890a

Browse files
authored
Get gas costs directly from syscall handler (#3672)
commit-id:07f28871 --- **Stack**: - #3682 - #3672⚠️ *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 0c26470 commit be1890a

File tree

2 files changed

+9
-28
lines changed

2 files changed

+9
-28
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ fn execute_syscall<Request: ExecuteCall + SyscallRequest>(
176176
);
177177

178178
// Refund `SYSCALL_BASE_GAS_COST` as it was pre-charged.
179+
// Note: It is pre-charged by the compiler: https://github.com/starkware-libs/sequencer/blob/v0.15.0-rc.2/crates/blockifier/src/blockifier_versioned_constants.rs#L1057
179180
let required_gas = syscall_gas_cost - syscall_base_cost;
180181

181182
if gas_counter < required_gas {

crates/cheatnet/src/runtime_extensions/cheatable_starknet_runtime_extension.rs

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ use crate::runtime_extensions::call_to_blockifier_runtime_extension::execution::
33
};
44
use crate::state::CheatnetState;
55
use anyhow::Result;
6-
use blockifier::blockifier_versioned_constants::SyscallGasCost;
7-
use blockifier::execution::entry_point::EntryPointExecutionContext;
86
use blockifier::execution::syscalls::hint_processor::OUT_OF_GAS_ERROR;
97
use blockifier::execution::syscalls::syscall_base::SyscallResult;
108
use blockifier::execution::syscalls::syscall_executor::SyscallExecutor;
119
use blockifier::execution::syscalls::vm_syscall_utils::{
12-
RevertData, SyscallRequest, SyscallRequestWrapper, SyscallResponse, SyscallResponseWrapper,
13-
SyscallSelector,
10+
RevertData, SyscallExecutorBaseError, SyscallRequest, SyscallRequestWrapper, SyscallResponse,
11+
SyscallResponseWrapper, SyscallSelector,
1412
};
1513
use blockifier::execution::{
1614
common_hints::HintExecutionResult,
@@ -136,23 +134,6 @@ pub fn felt_from_ptr_immutable(
136134
Ok(felt)
137135
}
138136

139-
fn get_syscall_cost(
140-
syscall_selector: SyscallSelector,
141-
context: &EntryPointExecutionContext,
142-
) -> SyscallGasCost {
143-
let gas_costs = context.gas_costs();
144-
match syscall_selector {
145-
SyscallSelector::LibraryCall => gas_costs.syscalls.library_call,
146-
SyscallSelector::CallContract => gas_costs.syscalls.call_contract,
147-
SyscallSelector::Deploy => gas_costs.syscalls.deploy,
148-
SyscallSelector::GetExecutionInfo => gas_costs.syscalls.get_execution_info,
149-
SyscallSelector::GetBlockHash => gas_costs.syscalls.get_block_hash,
150-
SyscallSelector::StorageRead => gas_costs.syscalls.storage_read,
151-
SyscallSelector::StorageWrite => gas_costs.syscalls.storage_write,
152-
_ => unreachable!("Syscall has no associated cost"),
153-
}
154-
}
155-
156137
impl CheatableStarknetRuntimeExtension<'_> {
157138
// crates/blockifier/src/execution/syscalls/vm_syscall_utils.rs:677 (execute_syscall)
158139
fn execute_syscall<Request, Response, ExecuteCallback>(
@@ -177,20 +158,18 @@ impl CheatableStarknetRuntimeExtension<'_> {
177158
syscall_handler.syscall_ptr += 1;
178159
syscall_handler.increment_syscall_count_by(&selector, 1);
179160

161+
let syscall_gas_cost = syscall_handler
162+
.get_gas_cost_from_selector(&selector)
163+
.map_err(|error| SyscallExecutorBaseError::GasCost { error, selector })?;
164+
180165
let SyscallRequestWrapper {
181166
gas_counter,
182167
request,
183168
} = SyscallRequestWrapper::<Request>::read(vm, &mut syscall_handler.syscall_ptr)?;
184169

185-
let syscall_gas_cost = get_syscall_cost(selector, syscall_handler.base.context);
186170
let syscall_gas_cost =
187171
syscall_gas_cost.get_syscall_cost(u64_from_usize(request.get_linear_factor_length()));
188-
let syscall_base_cost = syscall_handler
189-
.base
190-
.context
191-
.gas_costs()
192-
.base
193-
.syscall_base_gas_cost;
172+
let syscall_base_cost = syscall_handler.get_syscall_base_gas_cost();
194173

195174
// Sanity check for preventing underflow.
196175
assert!(
@@ -199,6 +178,7 @@ impl CheatableStarknetRuntimeExtension<'_> {
199178
);
200179

201180
// Refund `SYSCALL_BASE_GAS_COST` as it was pre-charged.
181+
// Note: It is pre-charged by the compiler: https://github.com/starkware-libs/sequencer/blob/v0.15.0-rc.2/crates/blockifier/src/blockifier_versioned_constants.rs#L1057
202182
let required_gas = syscall_gas_cost - syscall_base_cost;
203183

204184
if gas_counter < required_gas {

0 commit comments

Comments
 (0)