From 50e463725ea043e65bd19cbce1681ce8322b2e47 Mon Sep 17 00:00:00 2001 From: yihuang Date: Wed, 15 Dec 2021 10:10:52 +0800 Subject: [PATCH] feemarket: update base fee in `BeginBlock` (#822) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update base fee in begin blocker Closes: #820 * changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> --- CHANGELOG.md | 1 + app/app.go | 1 + rpc/ethereum/backend/backend.go | 2 +- rpc/ethereum/namespaces/eth/filters/api.go | 4 ++-- x/feemarket/keeper/abci.go | 11 +++++++---- x/feemarket/keeper/eip1559.go | 2 +- x/feemarket/module.go | 4 +++- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffc7597d..0d56be1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### State Machine Breaking - (evm) [tharsis#840](https://github.com/tharsis/ethermint/pull/840) Store empty topics as empty array rather than nil. +- (feemarket) [tharsis#822](https://github.com/tharsis/ethermint/pull/822) Update EIP1559 base fee in `BeginBlock`. ### Improvements diff --git a/app/app.go b/app/app.go index a998acaa..5d00dc78 100644 --- a/app/app.go +++ b/app/app.go @@ -439,6 +439,7 @@ func NewEthermintApp( app.mm.SetOrderBeginBlockers( upgradetypes.ModuleName, capabilitytypes.ModuleName, + feemarkettypes.ModuleName, evmtypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName, diff --git a/rpc/ethereum/backend/backend.go b/rpc/ethereum/backend/backend.go index 828f9767..77ce8f65 100644 --- a/rpc/ethereum/backend/backend.go +++ b/rpc/ethereum/backend/backend.go @@ -955,7 +955,7 @@ func (e *EVMBackend) BaseFee(height int64) (*big.Int, error) { return nil, err } - baseFee := types.BaseFeeFromEvents(blockRes.EndBlockEvents) + baseFee := types.BaseFeeFromEvents(blockRes.BeginBlockEvents) if baseFee != nil { return baseFee, nil } diff --git a/rpc/ethereum/namespaces/eth/filters/api.go b/rpc/ethereum/namespaces/eth/filters/api.go index 4da5a286..2fb3a73d 100644 --- a/rpc/ethereum/namespaces/eth/filters/api.go +++ b/rpc/ethereum/namespaces/eth/filters/api.go @@ -258,7 +258,7 @@ func (api *PublicFilterAPI) NewBlockFilter() rpc.ID { continue } - baseFee := types.BaseFeeFromEvents(data.ResultEndBlock.Events) + baseFee := types.BaseFeeFromEvents(data.ResultBeginBlock.Events) header := types.EthHeaderFromTendermint(data.Header, ethtypes.Bloom{}, baseFee) api.filtersMu.Lock() @@ -310,7 +310,7 @@ func (api *PublicFilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, er continue } - baseFee := types.BaseFeeFromEvents(data.ResultEndBlock.Events) + baseFee := types.BaseFeeFromEvents(data.ResultBeginBlock.Events) // TODO: fetch bloom from events header := types.EthHeaderFromTendermint(data.Header, ethtypes.Bloom{}, baseFee) diff --git a/x/feemarket/keeper/abci.go b/x/feemarket/keeper/abci.go index 8c99b6f2..4ad50e8f 100644 --- a/x/feemarket/keeper/abci.go +++ b/x/feemarket/keeper/abci.go @@ -9,10 +9,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -// EndBlock also retrieves the bloom filter value from the transient store and commits it to the -// KVStore. The EVM end block logic doesn't update the validator set, thus it returns -// an empty slice. -func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) { +// BeginBlock updates base fee +func (k *Keeper) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { baseFee := k.CalculateBaseFee(ctx) // return immediately if base fee is nil @@ -29,7 +27,12 @@ func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) { sdk.NewAttribute(types.AttributeKeyBaseFee, baseFee.String()), ), }) +} +// EndBlock update block gas used. +// The EVM end block logic doesn't update the validator set, thus it returns +// an empty slice. +func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) { if ctx.BlockGasMeter() == nil { k.Logger(ctx).Error("block gas meter is nil when setting block gas used") return diff --git a/x/feemarket/keeper/eip1559.go b/x/feemarket/keeper/eip1559.go index 68261c9b..93fd055a 100644 --- a/x/feemarket/keeper/eip1559.go +++ b/x/feemarket/keeper/eip1559.go @@ -10,7 +10,7 @@ import ( ) // CalculateBaseFee calculates the base fee for the current block. This is only calculated once per -// block during EndBlock. If the NoBaseFee parameter is enabled or below activation height, this function returns nil. +// block during BeginBlock. If the NoBaseFee parameter is enabled or below activation height, this function returns nil. // NOTE: This code is inspired from the go-ethereum EIP1559 implementation and adapted to Cosmos SDK-based // chains. For the canonical code refer to: https://github.com/ethereum/go-ethereum/blob/master/consensus/misc/eip1559.go func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int { diff --git a/x/feemarket/module.go b/x/feemarket/module.go index 88939671..3abf7c76 100644 --- a/x/feemarket/module.go +++ b/x/feemarket/module.go @@ -135,7 +135,9 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd } // BeginBlock returns the begin block for the fee market module. -func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {} +func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { + am.keeper.BeginBlock(ctx, req) +} // EndBlock returns the end blocker for the fee market module. It returns no validator // updates.