package genexchain import ( "fmt" "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdkmempool "github.com/cosmos/cosmos-sdk/types/mempool" evmconfig "github.com/cosmos/evm/config" evmmempool "github.com/cosmos/evm/mempool" evmtypes "github.com/cosmos/evm/x/vm/types" ) // configureEVMMempool sets up the EVM mempool and related handlers func (app *GenexApp) configureEVMMempool(appOpts servertypes.AppOptions, logger log.Logger) error { if evmtypes.GetChainConfig() == nil { logger.Debug("evm chain config is not set, skipping mempool configuration") return nil } cosmosPoolMaxTx := evmconfig.GetCosmosPoolMaxTx(appOpts, logger) if cosmosPoolMaxTx < 0 { logger.Debug("app-side mempool is disabled, skipping evm mempool configuration") return nil } mempoolConfig, err := app.createMempoolConfig(appOpts, logger) if err != nil { return fmt.Errorf("failed to get mempool config: %w", err) } evmMempool := evmmempool.NewExperimentalEVMMempool( app.CreateQueryContext, logger, app.EVMKeeper, app.FeeMarketKeeper, app.txConfig, app.clientCtx, mempoolConfig, cosmosPoolMaxTx, ) app.EVMMempool = evmMempool app.SetMempool(evmMempool) checkTxHandler := evmmempool.NewCheckTxHandler(evmMempool) app.SetCheckTxHandler(checkTxHandler) abciProposalHandler := baseapp.NewDefaultProposalHandler(evmMempool, app) abciProposalHandler.SetSignerExtractionAdapter( evmmempool.NewEthSignerExtractionAdapter( sdkmempool.NewDefaultSignerExtractionAdapter(), ), ) app.SetPrepareProposal(abciProposalHandler.PrepareProposalHandler()) return nil } // createMempoolConfig creates EVMMempoolConfig from app options func (app *GenexApp) createMempoolConfig(appOpts servertypes.AppOptions, logger log.Logger) (*evmmempool.EVMMempoolConfig, error) { return &evmmempool.EVMMempoolConfig{ AnteHandler: app.GetAnteHandler(), LegacyPoolConfig: evmconfig.GetLegacyPoolConfig(appOpts, logger), BlockGasLimit: evmconfig.GetBlockGasLimit(appOpts, logger), MinTip: evmconfig.GetMinTip(appOpts, logger), }, nil }