diff --git a/core/state_transition.go b/core/state_transition.go index bbb73167b16..60d5f95d3f4 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -268,7 +268,8 @@ func (st *StateTransition) preCheck(gasBailout bool) error { // Make sure the transaction gasFeeCap is greater than the block's baseFee. if st.evm.ChainRules().IsLondon { // Skip the checks if gas fields are zero and baseFee was explicitly disabled (eth_call) - if !st.evm.Config().NoBaseFee || !st.gasFeeCap.IsZero() || !st.tip.IsZero() { + skipCheck := st.evm.Config().NoBaseFee && st.gasFeeCap.IsZero() && st.tip.IsZero() + if !skipCheck { if err := CheckEip1559TxGasFeeCap(st.msg.From(), st.gasFeeCap, st.tip, st.evm.Context.BaseFee, st.msg.IsFree()); err != nil { return err } @@ -280,7 +281,7 @@ func (st *StateTransition) preCheck(gasBailout bool) error { return fmt.Errorf("%w: Cancun is active but ExcessBlobGas is nil", ErrInternalFailure) } maxFeePerBlobGas := st.msg.MaxFeePerBlobGas() - if blobGasPrice.Cmp(maxFeePerBlobGas) > 0 { + if !st.evm.Config().NoBaseFee && blobGasPrice.Cmp(maxFeePerBlobGas) > 0 { return fmt.Errorf("%w: address %v, maxFeePerBlobGas: %v < blobGasPrice: %v", ErrMaxFeePerBlobGas, st.msg.From().Hex(), st.msg.MaxFeePerBlobGas(), blobGasPrice) } diff --git a/core/vm/evm.go b/core/vm/evm.go index 66bcb608c67..a133392cc22 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -100,6 +100,12 @@ type EVM struct { // NewEVM returns a new EVM. The returned EVM is not thread safe and should // only ever be used *once*. func NewEVM(blockCtx evmtypes.BlockContext, txCtx evmtypes.TxContext, state evmtypes.IntraBlockState, chainConfig *chain.Config, vmConfig Config) *EVM { + if vmConfig.NoBaseFee { + if txCtx.GasPrice.IsZero() { + blockCtx.BaseFee = new(uint256.Int) + } + } + evm := &EVM{ Context: blockCtx, TxContext: txCtx, diff --git a/turbo/adapter/ethapi/api.go b/turbo/adapter/ethapi/api.go index 1a0fd726909..b05a34f0f55 100644 --- a/turbo/adapter/ethapi/api.go +++ b/turbo/adapter/ethapi/api.go @@ -111,7 +111,7 @@ func (args *CallArgs) ToMessage(globalGasCap uint64, baseFee *uint256.Int) (type gasFeeCap, gasTipCap = gasPrice, gasPrice } else { // User specified 1559 gas fields (or none), use those - gasFeeCap = new(uint256.Int).Set(baseFee) + gasFeeCap = new(uint256.Int) if args.MaxFeePerGas != nil { overflow := gasFeeCap.SetFromBig(args.MaxFeePerGas.ToInt()) if overflow { diff --git a/turbo/jsonrpc/eth_call.go b/turbo/jsonrpc/eth_call.go index 8527f81f2cd..92c2fb6fc6b 100644 --- a/turbo/jsonrpc/eth_call.go +++ b/turbo/jsonrpc/eth_call.go @@ -177,8 +177,6 @@ func (api *APIImpl) EstimateGas(ctx context.Context, argsOrNil *ethapi2.CallArgs feeCap = args.GasPrice.ToInt() } else if args.MaxFeePerGas != nil { feeCap = args.MaxFeePerGas.ToInt() - } else if header.BaseFee != nil { - feeCap = new(big.Int).Set(header.BaseFee) } else { feeCap = libcommon.Big0 } diff --git a/turbo/transactions/tracing.go b/turbo/transactions/tracing.go index eeb57244517..2ef0836913a 100644 --- a/turbo/transactions/tracing.go +++ b/turbo/transactions/tracing.go @@ -160,7 +160,7 @@ func ExecuteTraceTx( execCb func(evm *vm.EVM, refunds bool) (*evmtypes.ExecutionResult, error), ) error { // Run the transaction with tracing enabled. - evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer}) + evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer, NoBaseFee: true}) var refunds = true if config != nil && config.NoRefunds != nil && *config.NoRefunds {