For educational purposes only; not transaction or security advice. A mempool view is local, volatile and policy-dependent; verify the exact chain, client, nonce, fee caps, submission route, receipt and finality before treating a transaction as accepted or complete.
Direct answer
A mempool, or transaction pool, is a node’s temporary in-memory and sometimes persisted set of signed transactions that the node has accepted under its current validation and policy rules but that are not in its canonical chain. It is not a consensus object, a global queue or a promise of inclusion. Two honest nodes can hold different transactions because they received different gossip, run different clients or settings, restarted, evicted entries, or use different public and private submission paths.
On an Ethereum execution client, an executable transaction with the next account nonce is commonly described as pending; a later nonce blocked by a gap is commonly described as queued. These labels are client interfaces, not final protocol states. A transaction can be rejected before admission, propagated, replaced by another signed transaction with the same sender and nonce, evicted, dropped, included successfully, included and reverted, or reconsidered after a reorganization.
A wallet constructs a transaction with destination, value, fee parameters, and replay-protection data such as spent inputs or a nonce.
How it works
- Pin the environment: chain ID, execution client and version, current head and base fee, transaction type, sender, nonce, value, calldata, gas limit, fee caps and submission route. Distinguish public gossip, a private relay or builder, and an ERC-4337
UserOperationpath; they do not share one universal pool. - Decode the signed bytes and perform pre-admission checks. Verify signature and sender, chain ID, type and encoding, intrinsic gas, nonce relation, balance for value plus maximum fee exposure, fee fields and any required blob sidecar. A rejection here is not an EVM
REVERTand normally creates no receipt or onchain fee. - Map the local pool policy. Record whether the client classifies the transaction as pending or queued, its per-account and global capacity, minimum fee filters, lifetime, local-account exemptions, replacement bump and persistence behavior. Geth’s flags and defaults document Geth, not Ethereum consensus or every provider.
- Observe propagation without inventing a global view. Compare the raw transaction hash and signed bytes across independent nodes, but treat absence as ambiguous: the node may not have received it, may reject it under local policy, may have evicted it, or may not expose its pool. A private route can bypass public gossip while sharing the transaction with its operators and builders.
- Model block eligibility and ordering at the candidate block. For a type-2 transaction, execution gas price is
min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas); if the base fee exceeds the maximum fee, the transaction is ineligible under that cap. Nonce dependencies, gas and blob limits, state validity, builder bundles and MEV can matter more than first-seen time. - Manage the lifecycle deliberately. Wait, or submit a documented same-nonce replacement only after confirming the active chain, sender and replacement policy. A self-transfer with the same nonce is merely another replacement candidate, not a cancellation primitive. Never repeat a value transfer because one explorer stopped showing the original.
- Reconcile against consensus state. Preserve every signed hash and replacement lineage, then check the canonical receipt, block hash, status, gas used, logs, consumed nonce and account or contract state at the required confirmation or finality level. If a reorganization removes the block, a still-valid transaction may return to some local pools, but that behavior is client- and state-dependent.
Worked examples
- Fee-cap eligibility. A type-2 transfer has
gasUsed = 21,000,baseFeePerGas = 32 gwei,maxPriorityFeePerGas = 3 gweiandmaxFeePerGas = 34 gwei. Its effective price ismin(34, 32 + 3) = 34 gwei, so the actual tip is2 gwei. The fee is21,000 * 34 = 714,000 gwei = 0.000714 ETH, split into a0.000672 ETHbase-fee burn and0.000042 ETHtip. If the candidate block’s base fee rises to35 gwei, the34 gweicap is insufficient for that block. - Nonce gap. The canonical account nonce is
10. A local pool receives transactions with nonces10and12, but none with11; it can classify10as pending and12as queued. After nonce10is included, the canonical nonce becomes11, and12remains blocked until a valid nonce-11transaction is included. Seeing nonce12in a pool does not make it independently executable. - Policy-specific replacement. Under a teaching Geth configuration with
txpool.pricebump = 10, an old transaction hasmaxFeePerGas = 40 gweiandmaxPriorityFeePerGas = 2 gwei. A replacement threshold computed as a 10% bump is44 gweiand2.2 gwei. A proposal with43 gweiand3 gweican still be rejected because one cap misses the configured bump;44 gweiand2.2 gweireaches both teaching thresholds. Exact integer rounding, transaction type and acceptance logic are version-specific, and another node may retain a different candidate. - No global pool. Node A reports
120,000distinct transaction hashes, node B reports100,000, and their intersection is80,000. Their union is120,000 + 100,000 - 80,000 = 140,000; the Jaccard overlap is80,000 / 140,000 = 57.1428571429%. There are40,000hashes visible only to A and20,000only to B. Neither count proves what a builder, private relay or the rest of the network can see.
Risks
- Signing or broadcasting on the wrong chain ID or network.
- Trusting a malicious, stale or misconfigured RPC endpoint.
- Invalid signature, transaction type, encoding or blob sidecar.
- Insufficient balance for value plus maximum fee exposure.
- Intrinsic-gas or calldata rules causing pre-admission rejection.
- A nonce that is already consumed or too low.
- A nonce gap leaving later transactions queued.
- A same-nonce replacement rejected as underpriced by local policy.
- A maximum fee below the candidate block’s base fee.
- Low effective priority or resource constraints delaying inclusion.
- Client, provider, version or configuration policy mismatch.
- Pool capacity, expiry, restart or eviction removing a transaction.
- Poor peer propagation, eclipse or selective relay behavior.
- Private-relay leakage, censorship, outage or builder nonparticipation.
- Public-order-flow frontrunning, sandwiching or other MEV.
- Builder reordering, bundles or private transactions changing execution state.
- Simulation becoming stale before inclusion.
- Blind duplicate submission or loss of replacement lineage.
- Included
REVERT, out-of-gas or caught subcall failure despite pool acceptance. - Reorganization, finality confusion or treating an ERC-4337 alternate mempool as the ordinary txpool.
Common misconceptions
- The mempool is one globally synchronized first-in, first-out queue.
- A transaction hash proves that the network accepted or propagated the transaction.
- Pending means included, successful, irreversible or paid to the recipient.
- A sufficiently high fee guarantees inclusion and successful execution.
- A private submission route is automatically confidential, censorship-resistant and guaranteed to land.
Related topics
Sources
- Transactions - Ethereum.org (accessed: 2026-08-13)
- EIP-1559: Fee market change for ETH 1.0 chain - Ethereum Improvement Proposals (accessed: 2026-08-13)
- txpool Namespace - go-ethereum (accessed: 2026-08-13)
- Command-line Options - go-ethereum (accessed: 2026-08-13)
- JSON-RPC API - Ethereum.org (accessed: 2026-08-13)
- EIP-4844: Shard Blob Transactions - Ethereum Improvement Proposals (accessed: 2026-08-13)
- ERC-4337: Account Abstraction Using Alt Mempool - Ethereum Improvement Proposals (accessed: 2026-08-13)
- MEV Protection Overview - Flashbots Documentation (accessed: 2026-08-13)