The mempool holds submitted transactions before they are included in a block, handling ordering, nonce gap queuing, and fee-based prioritization across both EVM and Cosmos transactions. The EVM mempool is enabled by default inDocumentation Index
Fetch the complete documentation index at: https://cosmos-docs-sync-security-docs.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
evmd. For conceptual information about mempool design and architecture, see the Mempool Concepts page.
The mempool setup is split across two locations:
evmd/mempool.go—configureEVMMempoolmust be called from yourapp.goaftersetAnteHandlermempool/— the mempool implementation (EVMMempool,TxPool,Rechecker,ReapList,RecheckPool, etc)
MinTip are exposed via
app.toml and require no code changes. The legacy
pool (legacypool.LegacyPool) is a port of go-ethereum’s transaction pool and
handles all EVM transaction ordering and fee enforcement. Some advanced
settings are not covered by app.toml, and require modifying
createMempoolConfig in evmd/mempool.go. BlockGasLimit is read from
consensus_params.block.max_gas in genesis.json.
Configuration Options
TheConfig struct controls mempool behavior:
mempool/mempool.go
Defaults and Fallbacks
- If
BlockGasLimitis0, the mempool uses a fallback of100_000_000gas. - If
LegacyPoolConfigis not provided, defaults fromlegacypool.DefaultConfigare used. - If
CosmosPoolConfigis not provided, a defaultPriorityNonceMempoolis created with:- Priority =
(fee_amount / gas_limit)in the EVM coin denom - Comparator = big-int comparison (higher is selected first)
MinValue = 0
- Priority =
MinTipis optional. If unset, selection uses the effective tip from each tx (min(gas_tip_cap, gas_fee_cap - base_fee)).- If
PendingTxProposalTimeoutis not provided, 0 is used. This means unlimited timeout and always wait for all tx rechecking to finish before creating a proposal. - If
InsertQueueSizeis 0, the mempool uses a fallback of 5000. - If
EnableTxTrackeris not provided, it is kept false.
Custom Legacy Pool Configuration
Customize EVM transaction pool parameters:evmd/mempool.go
Custom Cosmos Mempool Configuration
The mempool uses aPriorityNonceMempool for Cosmos transactions by default. You can customize the priority calculation:
evmd/mempool.go
Custom Block Gas Limit
BlockGasLimit is read automatically from consensus_params.block.max_gas in genesis.json — it is not an app.toml setting. To change it, update the genesis file before chain start. The value can also be overridden in code:
evmd/mempool.go
Event Bus Integration
Users must connect the mempool to CometBFT’s EventBus so it can react to finalized blocks:evmd/app.go
app.toml Configuration
The following settings can be configured inapp.toml and take effect at node startup without code changes:
| Key | Default | Description |
|---|---|---|
evm.min-tip | 0 | Minimum tip (priority fee) in wei; transactions below this are excluded from block selection |
evm.mempool.price-limit | 1 | Minimum gas price in wei to accept a transaction into the pool |
evm.mempool.price-bump | 10 | Minimum % increase required to replace a pending transaction with the same nonce |
evm.mempool.account-slots | 16 | Max executable transactions per account |
evm.mempool.global-slots | 5120 | Max total executable transactions across all accounts |
evm.mempool.account-queue | 64 | Max queued (non-executable) transactions per account |
evm.mempool.global-queue | 1024 | Max total queued transactions across all accounts |
evm.mempool.lifetime | 3h | Max time a transaction can remain queued before eviction |
evm.mempool.included-nonce-cache-size | 4096 | Max amount of nonces to track for eviction. Should be set to the maximum number of accounts you expect to see in a single block, given your chains block gas limit. |
evm.mempool.pending-tx-proposal-timeout | 0ms | Max time to wait for fetching pending execution transaction when creating a proposal. 0 means wait for all transactions to be validated before creating a proposal. Note that this may take a significant amount of time under high load and can degrade performance. We’ve found setting this to ~250ms strikes the right balance between performance and rechecking a sufficient amount of transactions per block. |
evm.mempool.check-tx-timeout | 5s | Timeout to wait for CheckTx on Cosmos txs insertion. |
evm.mempool.insert-queue-size | 5000 | Max amount of transactions that can be pending insertion before returning an error. Note that EVM & Cosmos transaction use separate queues. So you may have insert-queue-size EVM transactions pending insertion, and insert-queue-size Cosmos transactions pending insertion. |
evm.mempool.enable-tx-tracker | false | If metrics for tracking EVM transaction inclusion latencies should be enabled. |
Monitoring and Debugging
Use the txpool RPC methods to monitor mempool state:txpool_status: Get pending and queued transaction countstxpool_content: View all transactions in the pooltxpool_inspect: Get human-readable transaction summariestxpool_contentFrom: View transactions from specific addresses
Related Documentation
- Mempool Concepts - Understanding mempool behavior and design
- EVM Module Integration - Prerequisites for mempool integration
- JSON-RPC Methods - Mempool query methods