From 97cf83d3897e5d8051a7a2302798b49eac8356ac Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 10:59:50 -0400 Subject: [PATCH] refactor: generic fallback ante decorator (backport #102) (#106) * refactor: generic fallback ante decorator (#102) (cherry picked from commit 04c7e6f84b96ef88cb82aa475c90b5572c24a4c3) # Conflicts: # tests/app/app.go * ok --------- Co-authored-by: Alex Johnson --- tests/app/ante.go | 10 ++++++---- tests/app/app.go | 1 - x/feemarket/ante/fee.go | 20 +++++++++++++------- x/feemarket/ante/suite/suite.go | 10 ++++++---- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/tests/app/ante.go b/tests/app/ante.go index e2d92e0..69d0e4d 100644 --- a/tests/app/ante.go +++ b/tests/app/ante.go @@ -46,10 +46,12 @@ func NewAnteHandler(options AnteHandlerOptions) (sdk.AnteHandler, error) { authante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), feemarketante.NewFeeMarketCheckDecorator( // fee market check replaces fee deduct decorator options.FeeMarketKeeper, - options.AccountKeeper, - options.BaseOptions.BankKeeper, - options.BaseOptions.FeegrantKeeper, - options.BaseOptions.TxFeeChecker, + authante.NewDeductFeeDecorator( + options.AccountKeeper, + options.BaseOptions.BankKeeper, + options.BaseOptions.FeegrantKeeper, + options.BaseOptions.TxFeeChecker, + ), ), // fees are deducted in the fee market deduct post handler authante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators authante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/tests/app/app.go b/tests/app/app.go index ab3de82..c80dce6 100644 --- a/tests/app/app.go +++ b/tests/app/app.go @@ -63,7 +63,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/upgrade" upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" - feemarketmodule "github.com/skip-mev/feemarket/x/feemarket" feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" diff --git a/x/feemarket/ante/fee.go b/x/feemarket/ante/fee.go index 75ded5c..a3b4546 100644 --- a/x/feemarket/ante/fee.go +++ b/x/feemarket/ante/fee.go @@ -7,7 +7,6 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/x/auth/ante" feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" ) @@ -32,22 +31,23 @@ func newFeeMarketCheckDecorator(fmk FeeMarketKeeper) feeMarketCheckDecorator { // // CONTRACT: Tx must implement FeeTx interface type FeeMarketCheckDecorator struct { - feemarketKeeper FeeMarketKeeper + feemarketKeeper FeeMarketKeeper + feemarketDecorator feeMarketCheckDecorator - cosmosDecorator ante.DeductFeeDecorator + fallbackDecorator sdk.AnteDecorator } -func NewFeeMarketCheckDecorator(fmk FeeMarketKeeper, ak AccountKeeper, bk BankKeeper, fgk FeeGrantKeeper, txfc ante.TxFeeChecker) FeeMarketCheckDecorator { +func NewFeeMarketCheckDecorator(fmk FeeMarketKeeper, fallbackDecorator sdk.AnteDecorator) FeeMarketCheckDecorator { return FeeMarketCheckDecorator{ feemarketKeeper: fmk, feemarketDecorator: newFeeMarketCheckDecorator( fmk, ), - cosmosDecorator: ante.NewDeductFeeDecorator(ak, bk, fgk, txfc), + fallbackDecorator: fallbackDecorator, } } -// AnteHandle calls the feemarket internal antehandler if the keeper is enabled. If disabled, the Cosmos SDK +// AnteHandle calls the feemarket internal antehandler if the keeper is enabled. If disabled, the fallback // fee antehandler is fallen back to. func (d FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { params, err := d.feemarketKeeper.GetParams(ctx) @@ -57,7 +57,13 @@ func (d FeeMarketCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate if params.Enabled { return d.feemarketDecorator.anteHandle(ctx, tx, simulate, next) } - return d.cosmosDecorator.AnteHandle(ctx, tx, simulate, next) + + // only use fallback if not nil + if d.fallbackDecorator != nil { + return d.fallbackDecorator.AnteHandle(ctx, tx, simulate, next) + } + + return next(ctx, tx, simulate) } // anteHandle checks if the tx provides sufficient fee to cover the required fee from the fee market. diff --git a/x/feemarket/ante/suite/suite.go b/x/feemarket/ante/suite/suite.go index f044898..a2e33a2 100644 --- a/x/feemarket/ante/suite/suite.go +++ b/x/feemarket/ante/suite/suite.go @@ -99,10 +99,12 @@ func (s *TestSuite) SetupHandlers(mock bool) { authante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first feemarketante.NewFeeMarketCheckDecorator( // fee market replaces fee deduct decorator s.FeeMarketKeeper, - s.AccountKeeper, - s.BankKeeper, - s.FeeGrantKeeper, - nil, + authante.NewDeductFeeDecorator( + s.AccountKeeper, + s.BankKeeper, + s.FeeGrantKeeper, + nil, + ), ), authante.NewSigGasConsumeDecorator(s.AccountKeeper, authante.DefaultSigVerificationGasConsumer), }