diff --git a/CHANGELOG.md b/CHANGELOG.md index 40059c2c..77d9f945 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,20 +38,26 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## Unreleased +### Bug Fixes + +* (rpc) [tharsis#1059](https://github.com/tharsis/ethermint/pull/1059) Remove unnecessary event filtering logic on the `eth_baseFee` JSON-RPC endpoint. + +## [v0.14.0] - 2022-04-19 + +### API Breaking + +* (evm) [tharsis#1051](https://github.com/tharsis/ethermint/pull/1051) Context block height fix on TraceTx. Removes `tx_index` on `QueryTraceTxRequest` proto type. + ### Improvements * (deps) [tharsis#1046](https://github.com/tharsis/ethermint/pull/1046) Bump Cosmos SDK version to [`v0.45.3`](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.45.3) -* (rpc) [tharsis#1056](https://github.com/tharsis/ethermint/pull/1056) Make json-rpc namespaces extensible +* (rpc) [tharsis#1056](https://github.com/tharsis/ethermint/pull/1056) Make json-rpc namespaces extensible ### Bug Fixes * (rpc) [tharsis#1050](https://github.com/tharsis/ethermint/pull/1050) `eth_getBlockByNumber` fix on batch transactions * (app) [tharsis#658](https://github.com/tharsis/ethermint/issues/658) Support simulations for the EVM. -### API Breaking - -* (evm) [tharsis#1051](https://github.com/tharsis/ethermint/pull/1051) Context block height fix on TraceTx. Removes `tx_index` on `QueryTraceTxRequest` proto type. - ## [v0.13.0] - 2022-04-05 ### API Breaking diff --git a/rpc/ethereum/backend/backend.go b/rpc/ethereum/backend/backend.go index 51565b28..8057e8f3 100644 --- a/rpc/ethereum/backend/backend.go +++ b/rpc/ethereum/backend/backend.go @@ -960,7 +960,7 @@ func (e *EVMBackend) ChainConfig() *params.ChainConfig { // mitigate the base fee changes. func (e *EVMBackend) SuggestGasTipCap(baseFee *big.Int) (*big.Int, error) { if baseFee == nil { - // london hardfork not enabled or feemarket not enabeld + // london hardfork not enabled or feemarket not enabled return big.NewInt(0), nil } @@ -986,42 +986,27 @@ func (e *EVMBackend) SuggestGasTipCap(baseFee *big.Int) (*big.Int, error) { return big.NewInt(maxDelta), nil } -// BaseFee returns the base fee tracked by the Fee Market module. If the base fee is not enabled, -// it returns the initial base fee amount. Return nil if London is not activated. +// BaseFee returns the base fee tracked by the Fee Market module. +// If the base fee is not enabled globally, the query returns nil. +// If the London hard fork is not activated at the current height, the query will +// return nil. func (e *EVMBackend) BaseFee(height int64) (*big.Int, error) { cfg := e.ChainConfig() if !cfg.IsLondon(new(big.Int).SetInt64(height)) { return nil, nil } - // Checks the feemarket param NoBaseFee settings, return 0 if it is enabled. - resParams, err := e.queryClient.FeeMarket.Params(types.ContextWithHeight(height), &feemarkettypes.QueryParamsRequest{}) - if err != nil { - return nil, err - } - - if resParams.Params.NoBaseFee { - return big.NewInt(0), nil - } - - blockRes, err := e.clientCtx.Client.BlockResults(e.ctx, &height) - if err != nil { - return nil, err - } - - baseFee := types.BaseFeeFromEvents(blockRes.BeginBlockEvents) - if baseFee != nil { - return baseFee, nil - } - - // If we cannot find in events, we tried to get it from the state. - // It will return feemarket.baseFee if london is activated but feemarket is not enable + // return BaseFee if London hard fork is activated and feemarket is not enabled res, err := e.queryClient.FeeMarket.BaseFee(types.ContextWithHeight(height), &feemarkettypes.QueryBaseFeeRequest{}) - if err == nil && res.BaseFee != nil { - return res.BaseFee.BigInt(), nil + if err != nil { + return nil, err } - return nil, nil + if res.BaseFee == nil { + return nil, nil + } + + return res.BaseFee.BigInt(), nil } // GetEthereumMsgsFromTendermintBlock returns all real MsgEthereumTxs from a Tendermint block. diff --git a/x/feemarket/keeper/eip1559.go b/x/feemarket/keeper/eip1559.go index cba9121b..b39eecb5 100644 --- a/x/feemarket/keeper/eip1559.go +++ b/x/feemarket/keeper/eip1559.go @@ -16,19 +16,24 @@ import ( func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int { params := k.GetParams(ctx) - // Ignore the calculation if not enable + // Ignore the calculation if not enabled if !params.IsBaseFeeEnabled(ctx.BlockHeight()) { return nil } consParams := ctx.ConsensusParams() - // If the current block is the first EIP-1559 block, return the InitialBaseFee. + // If the current block is the first EIP-1559 block, return the base fee + // defined in the parameters (DefaultBaseFee if it hasn't been changed by + // governance). if ctx.BlockHeight() == params.EnableHeight { return params.BaseFee.BigInt() } // get the block gas used and the base fee values for the parent block. + // NOTE: this is not the parent's base fee but the current block's base fee, + // as it is retrieved from the transient store, which is committed to the + // persistent KVStore after EndBlock (ABCI Commit). parentBaseFee := params.BaseFee.BigInt() if parentBaseFee == nil { return nil @@ -37,10 +42,14 @@ func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int { parentGasUsed := k.GetBlockGasUsed(ctx) gasLimit := new(big.Int).SetUint64(math.MaxUint64) + + // NOTE: a MaxGas equal to -1 means that block gas is unlimited if consParams != nil && consParams.Block.MaxGas > -1 { gasLimit = big.NewInt(consParams.Block.MaxGas) } + // CONTRACT: ElasticityMultiplier cannot be 0 as it's checked in the params + // validation parentGasTargetBig := new(big.Int).Div(gasLimit, new(big.Int).SetUint64(uint64(params.ElasticityMultiplier))) if !parentGasTargetBig.IsUint64() { return nil