core/vm: check readonly guard before charging for access list

This commit is contained in:
Marius van der Wijden 2026-03-11 13:15:36 +01:00
parent 057723ca03
commit 1cd9d4dec7

View file

@ -165,6 +165,12 @@ func makeCallVariantGasCall(oldCalculatorStateful, oldCalculatorStateless gasFun
err error
)
// Compute stateless gas (memory expansion, value transfer)
eip150BaseGas, err := oldCalculatorStateless(evm, contract, stack, mem, memorySize)
if err != nil {
return 0, err
}
// EIP-2929: cold/warm access list charge
if evm.chainRules.IsEIP2929 && !evm.StateDB.AddressInAccessList(addr) {
evm.StateDB.AddAddressToAccessList(addr)
@ -179,12 +185,6 @@ func makeCallVariantGasCall(oldCalculatorStateful, oldCalculatorStateless gasFun
eip2929Gas = coldCost
}
// Compute stateless gas (memory expansion, value transfer)
eip150BaseGas, err := oldCalculatorStateless(evm, contract, stack, mem, memorySize)
if err != nil {
return 0, err
}
// Ensure the stateless portion is covered
if contract.Gas < eip150BaseGas {
return 0, ErrOutOfGas