@@ -252,24 +252,27 @@ func makeSelfdestructGasFn(refundsEnabled bool) gasFunc {
252252}
253253
254254var (
255- gasCallEIP7702 = makeCallVariantGasCallEIP7702 (gasCall )
255+ innerGasCallEIP7702 = makeCallVariantGasCallEIP7702 (gasCall )
256256 gasDelegateCallEIP7702 = makeCallVariantGasCallEIP7702 (gasDelegateCall )
257257 gasStaticCallEIP7702 = makeCallVariantGasCallEIP7702 (gasStaticCall )
258258 gasCallCodeEIP7702 = makeCallVariantGasCallEIP7702 (gasCallCode )
259259)
260260
261+ func gasCallEIP7702 (evm * EVM , contract * Contract , stack * Stack , mem * Memory , memorySize uint64 ) (uint64 , error ) {
262+ transfersValue := ! stack .Back (2 ).IsZero ()
263+ if evm .readOnly && transfersValue {
264+ return 0 , ErrWriteProtection
265+ }
266+ return innerGasCallEIP7702 (evm , contract , stack , mem , memorySize )
267+ }
268+
261269func makeCallVariantGasCallEIP7702 (oldCalculator gasFunc ) gasFunc {
262270 return func (evm * EVM , contract * Contract , stack * Stack , mem * Memory , memorySize uint64 ) (uint64 , error ) {
263271 var (
264- total uint64 // total dynamic gas used
265- addr = common .Address (stack .Back (1 ).Bytes20 ())
266- transfersValue = ! stack .Back (2 ).IsZero ()
272+ total uint64 // total dynamic gas used
273+ addr = common .Address (stack .Back (1 ).Bytes20 ())
267274 )
268275
269- if evm .readOnly && transfersValue {
270- return 0 , ErrWriteProtection
271- }
272-
273276 // Check slot presence in the access list
274277 if ! evm .StateDB .AddressInAccessList (addr ) {
275278 evm .StateDB .AddAddressToAccessList (addr )
0 commit comments