Commit 7c06c20
perf: skip AccessListInspector when blocklist is empty
When the blocklist is empty and no used_state_tracer is active, bypass
the RBuilderEVMInspector entirely and run the EVM with NoOpInspector.
The AccessListInspector calls step() on every EVM opcode to track which
addresses are accessed, solely to check them against the blocklist.
Profiling shows this inspector overhead consumes ~52% of total CPU time
during block building (AccessListInspector::step + Inspector::step +
inspect_instructions).
With this change, block fill time at 100 TPS drops from 98.8ms p50 to
53.0ms p50 (-46%), blocks built increases by 33%, and transactions
included per slot increases by 31%.
When a blocklist IS configured, the original code path with full
inspector runs unchanged.
Benchmark (builder-lab, 100 TPS contender, 60s profiling window):
| Metric | Before | After | Change |
|---------------------|----------|----------|--------|
| Block fill p50 | 98.8ms | 53.0ms | -46% |
| Block fill p95 | 144.9ms | 96.9ms | -33% |
| E2E latency p50 | 101ms | 55ms | -46% |
| Blocks submitted | 226 | 308 | +36% |
| Txs included | 15,972 | 20,871 | +31% |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent c66f845 commit 7c06c20
1 file changed
Lines changed: 19 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1162 | 1162 | | |
1163 | 1163 | | |
1164 | 1164 | | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
1165 | 1184 | | |
1166 | 1185 | | |
1167 | 1186 | | |
| |||
0 commit comments