diff --git a/app/ante/ante.go b/app/ante/ante.go index 9fcb12c7..68fe909b 100644 --- a/app/ante/ante.go +++ b/app/ante/ante.go @@ -74,7 +74,6 @@ func NewAnteHandler( NewEthNonceVerificationDecorator(ak), NewEthGasConsumeDecorator(ak, bankKeeper, evmKeeper), NewCanTransferDecorator(evmKeeper), - NewAccessListDecorator(evmKeeper), NewEthIncrementSenderSequenceDecorator(ak), // innermost AnteDecorator. ) diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index 30b0e481..dcdeab3e 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -242,6 +242,12 @@ func (k *Keeper) ApplyMessage(evm *vm.EVM, msg core.Message, cfg *params.ChainCo } leftoverGas := msg.Gas() - intrinsicGas + // access list preparaion is moved from ante handler to here, because it's needed when `ApplyMessage` is called + // under contexts where ante handlers are not run, for example `eth_call` and `eth_estimateGas`. + if rules := cfg.Rules(big.NewInt(k.Ctx().BlockHeight())); rules.IsBerlin { + k.PrepareAccessList(msg.From(), msg.To(), vm.ActivePrecompiles(rules), msg.AccessList()) + } + if contractCreation { ret, _, leftoverGas, vmErr = evm.Create(sender, msg.Data(), leftoverGas, msg.Value()) } else {