gcx/blockchain/genex-chain/mempool.go

70 lines
2.1 KiB
Go

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
}