5.5 KiB
Mempool Service Architecture Specification
Overview
This document specifies the mempool service that tracks pending transactions, monitors transaction propagation, and provides real-time mempool insights.
Architecture
flowchart TB
subgraph RPC[RPC Node]
WS[WebSocket<br/>New Pending Tx]
Poll[Poll<br/>Pending Tx]
end
subgraph Ingest[Ingestion]
Listener[Transaction Listener]
Validator[Transaction Validator]
Queue[Message Queue]
end
subgraph Process[Processing]
Tracker[Propagation Tracker]
RBF[RBF Detector]
Fee[Fee Calculator]
Storage[Storage]
end
subgraph Output[Output]
API[API Endpoints]
WS_Out[WebSocket<br/>Subscriptions]
Metrics[Metrics]
end
WS --> Listener
Poll --> Listener
Listener --> Validator
Validator --> Queue
Queue --> Tracker
Queue --> RBF
Queue --> Fee
Tracker --> Storage
RBF --> Storage
Fee --> Storage
Storage --> API
Storage --> WS_Out
Storage --> Metrics
Transaction Ingestion
Sources
1. WebSocket Subscription:
- Subscribe to
pendingTransactionsviaeth_subscribe - Real-time updates as transactions enter mempool
2. Polling:
- Poll
eth_pendingTransactionsevery 1-2 seconds - Fallback if WebSocket unavailable
3. Transaction Submission:
- Track transactions submitted via our API
- Link user submissions to mempool status
Transaction Validation
Validation Checks:
- Valid transaction format
- Valid signature
- Sufficient nonce (account state check)
- Sufficient balance (for value transfers)
- Valid gas price (above minimum)
Invalid Transactions: Log but don't track (will be rejected by network)
Transaction Tracking
Transaction State
States:
pending: In mempoolconfirmed: Included in blockdropped: Removed from mempool (replaced or expired)replaced: Replaced by higher gas price transaction (RBF)
Propagation Tracking
Metrics Tracked:
- First seen timestamp
- Last seen timestamp
- Propagation time (first seen → confirmed)
- Propagation path (which nodes saw it first)
Method:
- Track when transaction first appears
- Monitor mempool across multiple nodes
- Calculate propagation statistics
RBF (Replace-by-Fee) Detection
Detection:
- Monitor transactions with same nonce
- Detect higher gas price replacements
- Link old transaction to new transaction
Data Stored:
- Original transaction hash
- Replacement transaction hash
- Gas price increase
- Replacement timestamp
Bundle/MEV Visibility
Detection (where supported):
- Identify transaction bundles
- Detect MEV patterns
- Track front-running/back-running
Limitations: Depends on chain/node capabilities
Private Transaction Markers
Detection:
- Identify private transaction services (Flashbots, etc.)
- Mark transactions as private
- Track private vs public mempool
Storage Schema
See ../database/timeseries-schema.md for detailed schema.
Key Fields:
- Transaction hash
- From/to addresses
- Value, gas price, gas limit
- Nonce
- First seen timestamp
- Status
- Confirmed block number (when confirmed)
- Confirmed timestamp
Fee Estimation
Fee Calculation
Methods:
- Historical Analysis: Analyze recent block fees
- Percentile Method: Calculate percentiles of recent transactions
- Market-Based: Track current mempool competition
Fee Estimates:
- Slow: 25th percentile
- Standard: 50th percentile (median)
- Fast: 75th percentile
- Urgent: 95th percentile
Update Frequency: Every block (real-time)
API Endpoints
Get Pending Transactions
GET /api/v1/mempool/{chain_id}/transactions
Query Parameters:
from_address: Filter by senderto_address: Filter by recipientmin_value: Minimum valuemin_gas_price: Minimum gas pricelimit: Max results (default: 100)
Response: Array of pending transactions
Get Transaction Status
GET /api/v1/mempool/{chain_id}/transactions/{hash}
Response: Transaction status and propagation info
Get Fee Estimates
GET /api/v1/mempool/{chain_id}/fees
Response:
{
"slow": "20000000000",
"standard": "30000000000",
"fast": "50000000000",
"urgent": "100000000000"
}
WebSocket Subscriptions
See ../api/websocket-api.md for WebSocket API details.
Channels:
pending_transactions: New pending transactionstransaction_status: Status updates for specific transactionsfee_updates: Fee estimate updates
Data Retention
Raw Data: 7 days (detailed transaction data) Aggregated Data: 30 days (fee statistics, propagation metrics) Archived Data: Move to data lake after retention period
Performance Considerations
Throughput
Target: Process 1000 transactions/second Scalability: Horizontal scaling with message queue
Latency
Target:
- Ingestion latency: < 1 second
- API response time: < 100ms (p95)
Storage Optimization
Strategy:
- Time-series database for efficient queries
- Partition by time (daily partitions)
- Automatic cleanup of old data
Monitoring
Metrics
- Pending transaction count
- Transaction ingestion rate
- Confirmation rate
- Average propagation time
- Fee estimate accuracy
Alerts
- High pending transaction count (> 10,000)
- Low confirmation rate (< 50% within 5 minutes)
- Fee estimate errors
References
- Time-Series Schema: See
../database/timeseries-schema.md - WebSocket API: See
../api/websocket-api.md - Fee Oracle: See
fee-oracle.md