fix(call): overwrite gas when exceed the RPC_DEFAULT_GAS_CAP (#17847)

This commit is contained in:
georgehao
2025-08-13 22:04:20 +08:00
committed by GitHub
parent f1da87e3e6
commit 3fe6c0c3c6

View File

@@ -37,7 +37,7 @@ use reth_rpc_eth_types::{
cache::db::{StateCacheDbRefMutWrapper, StateProviderTraitObjWrapper},
error::{api::FromEvmHalt, ensure_success, FromEthApiError},
simulate::{self, EthSimulateError},
EthApiError, RevertError, RpcInvalidTransactionError, StateCacheDb,
EthApiError, RevertError, StateCacheDb,
};
use reth_storage_api::{BlockIdReader, ProviderTx};
use revm::{
@@ -48,7 +48,7 @@ use revm::{
Database, DatabaseCommit,
};
use revm_inspectors::{access_list::AccessListInspector, transfer::TransferInspector};
use tracing::trace;
use tracing::{trace, warn};
/// Result type for `eth_simulateV1` RPC method.
pub type SimulatedBlocksResult<N, E> = Result<Vec<SimulatedBlock<RpcBlock<N>>>, E>;
@@ -728,11 +728,12 @@ pub trait Call:
DB: Database + DatabaseCommit + OverrideBlockHashes,
EthApiError: From<<DB as Database>::Error>,
{
if request.as_ref().gas_limit() > Some(self.call_gas_limit()) {
// configured gas exceeds limit
return Err(
EthApiError::InvalidTransaction(RpcInvalidTransactionError::GasTooHigh).into()
)
if let Some(requested_gas) = request.as_ref().gas_limit() {
let global_gas_cap = self.call_gas_limit();
if global_gas_cap != 0 && global_gas_cap < requested_gas {
warn!(target: "rpc::eth::call", ?request, ?global_gas_cap, "Capping gas limit to global gas cap");
request.as_mut().set_gas_limit(global_gas_cap);
}
}
// apply configured gas cap