block-sdk/tests/app/ante.go
2024-01-24 09:06:20 -08:00

62 lines
2.3 KiB
Go

package app
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/skip-mev/block-sdk/v2/block"
auctionante "github.com/skip-mev/block-sdk/v2/x/auction/ante"
auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper"
)
type BSDKHandlerOptions struct {
BaseOptions ante.HandlerOptions
MEVLane auctionante.MEVLane
TxDecoder sdk.TxDecoder
TxEncoder sdk.TxEncoder
auctionkeeper auctionkeeper.Keeper
FreeLane block.Lane
}
// NewBSDKAnteHandler wraps all of the default Cosmos SDK AnteDecorators with the custom
// block-sdk AnteHandlers.
func NewBSDKAnteHandler(options BSDKHandlerOptions) sdk.AnteHandler {
if options.BaseOptions.AccountKeeper == nil {
panic("account keeper is required for ante builder")
}
if options.BaseOptions.BankKeeper == nil {
panic("bank keeper is required for ante builder")
}
if options.BaseOptions.SignModeHandler == nil {
panic("sign mode handler is required for ante builder")
}
anteDecorators := []sdk.AnteDecorator{
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
ante.NewExtensionOptionsDecorator(options.BaseOptions.ExtensionOptionChecker),
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.BaseOptions.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.BaseOptions.AccountKeeper),
block.NewIgnoreDecorator(
ante.NewDeductFeeDecorator(
options.BaseOptions.AccountKeeper,
options.BaseOptions.BankKeeper,
options.BaseOptions.FeegrantKeeper,
options.BaseOptions.TxFeeChecker,
),
options.FreeLane,
),
ante.NewSetPubKeyDecorator(options.BaseOptions.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators
ante.NewValidateSigCountDecorator(options.BaseOptions.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.BaseOptions.AccountKeeper, options.BaseOptions.SigGasConsumer),
ante.NewSigVerificationDecorator(options.BaseOptions.AccountKeeper, options.BaseOptions.SignModeHandler),
ante.NewIncrementSequenceDecorator(options.BaseOptions.AccountKeeper),
auctionante.NewAuctionDecorator(options.auctionkeeper, options.TxEncoder, options.MEVLane),
}
return sdk.ChainAnteDecorators(anteDecorators...)
}