- Category
- Performance
- Reading time
- 7 minutes
- Published
- Updated
eth_getLogs performance comparison
eth_getLogs is one of the most important RPC methods for indexers, analytics platforms, explorers, and data pipelines. It is also one of the easiest methods to benchmark badly.
A provider may look fast for simple calls but struggle with wide block ranges, busy contracts, historical logs, or repeated backfills. If your business depends on logs, you need to test eth_getLogs directly.
Why eth_getLogs is hard
eth_getLogs is not just a basic lookup. The node must search event logs across a block range and apply address and topic filters. Performance depends on:
- block range size
- event density
- topic selectivity
- chain size
- node client
- archive/full node behavior
- provider limits
- cache state
- retries and concurrency
This means one benchmark result does not represent all workloads.
What to measure
Latency distribution
Do not only track average latency. Measure:
- p50
- p95
- p99
- max latency
- timeout rate
For production systems, p95 and p99 often matter more than the average.
Error rate
Track:
- 429 responses
- timeouts
- invalid range errors
- inconsistent responses
- partial failures
- provider-specific limits
A slower but consistent provider may be better than a fast provider that fails unpredictably under load.
Range behavior
Test multiple block range sizes:
- small recent ranges
- medium historical ranges
- large backfill ranges
- dense event ranges
- sparse event ranges
Many systems perform fine on small ranges and fail when backfills begin.
Cost per successful result
Cost should be measured per useful result, not only per RPC call. If a provider has high timeout or retry rates, the effective cost goes up.
How to structure an eth_getLogs benchmark
Use a repeatable test matrix:
- Select real contracts from your workload.
- Pick recent and historical block ranges.
- Include dense and sparse event periods.
- Run tests with realistic concurrency.
- Record latency, errors, and retries.
- Compare cost based on actual method billing.
- Repeat at different times of day.
Avoid synthetic-only tests. They may tell you the endpoint is alive, but not whether it can support your indexer.
Where SolidRPC fits
SolidRPC is built for teams where eth_getLogs is not an edge case but a core workload. One application endpoint covers live reads and historical backfills while SolidRPC routes by block range and capability, monitors the upstream layer, fails over, and owns recovery.
The platform focuses on:
- full and archive capacity behind one integration
- predictable response quotas
- heavy method support
- continuous monitoring and recovery
- managed routing and node operations
- direct engineer support
The goal is not to win a toy latency test. The goal is to let production workloads scan logs and backfill history without the application team operating a provider pool.
Common eth_getLogs mistakes
Avoid these patterns:
- using very large block ranges without testing provider limits
- treating all chains the same
- retrying too aggressively
- measuring only current blocks
- ignoring response size
- ignoring empty ranges
- ignoring failed requests in cost calculations
- assuming archive and full node behavior is identical
Bottom line
eth_getLogs performance should be benchmarked with real contracts, real block ranges, realistic concurrency, and method-level cost analysis.