Verify #306: refresh RPC benchmark baseline and operator doc #503

Merged
PlasticDigits merged 1 commit from local1/306-verify-rpc-benchmark-rerun into main 2026-06-15 02:32:14 +00:00
PlasticDigits commented 2026-06-15 02:27:07 +00:00 (Migrated from gitlab.com)

Summary

Verification rerun for GitLab #306 on main (with #307 Multicall3 batching and #308 adaptive poll spacing shipped):

  • Commits fresh 120s-scenario benchmark artifacts (rpc-benchmark-20260615T021945Z.{json,md})
  • Updates docs/indexer/rpc-load-benchmark.md with measured idle/catch-up/active-arena peaks and follow-up mitigation tradeoffs

Key findings: idle peak_calls_10s 20 (≤ 50 operator target met). Catch-up and active-arena bursts (100/10s) are ingestion-driven (eth_getBlockByNumber, eth_getLogs, podium_live/warbow_score), not chain-timer fan-out.

Verification checklist

Acceptance item Command / evidence Result
Reproducible benchmark script + runbook docs/indexer/rpc-load-benchmark.md, scripts/benchmark-indexer-rpc-anvil.sh PASS
Report: avg/peak RPC/min, ≥3 scenarios BENCHMARK_SCENARIO_SEC=120 bash scripts/benchmark-indexer-rpc-anvil.sh → rpc-benchmark-20260615T021945Z.md PASS — idle 84/min peak 20; catch-up 84/min peak 100; active arena 305/min peak 100
≥3 optimization proposals with tradeoffs docs/indexer/rpc-load-benchmark.md § Prioritized mitigation strategies PASS — log-derived podium snapshots, separate read RPC URL, ingestion-side coalescing (+ shipped #307/#308)
No regression ingestion liveness / arena APIs bash scripts/verify-podium-live-anvil.sh PASS — integration_stage2 4/4, live_rows=12
No regression indexer tests cd indexer && cargo test PASS — 74 unit + 4 integration
RPC metrics on status API bash scripts/verify-indexer-rpc-metrics.sh PASS — schema 2.13.0, rpc_metrics.by_caller.chain_timer present, peak_10s=20
chain_timer ~1 Hz when idle verify-indexer-rpc-metrics.sh warm-up 35s; total_calls=57 PASS
INV-INDEXER-306-* invariants scripts above PASS

Follow-ups

  • Ingestion-path RPC coalescing — batch block fetches during catch-up; cap concurrent podium_live/warbow_score per block (~40–60% peak reduction on active arena; monitor last_indexed_at_ms).
  • Log-derived podium snapshots — reduce podium_live/warbow_score eth_calls (~30% on active arena); requires INV-INDEXER-PODIUM-PREDICT-LIVE parity tests.
  • Mainnet baseline re-run — operator task after mitigations land; compare against Anvil numbers with real block times.
## Summary Verification rerun for GitLab #306 on main (with #307 Multicall3 batching and #308 adaptive poll spacing shipped): - Commits fresh 120s-scenario benchmark artifacts (`rpc-benchmark-20260615T021945Z.{json,md}`) - Updates `docs/indexer/rpc-load-benchmark.md` with measured idle/catch-up/active-arena peaks and follow-up mitigation tradeoffs **Key findings:** idle `peak_calls_10s` **20** (≤ 50 operator target met). Catch-up and active-arena bursts (**100**/10s) are ingestion-driven (`eth_getBlockByNumber`, `eth_getLogs`, `podium_live`/`warbow_score`), not chain-timer fan-out. ## Verification checklist | Acceptance item | Command / evidence | Result | |-----------------|-------------------|--------| | Reproducible benchmark script + runbook | `docs/indexer/rpc-load-benchmark.md`, `scripts/benchmark-indexer-rpc-anvil.sh` | **PASS** | | Report: avg/peak RPC/min, ≥3 scenarios | `BENCHMARK_SCENARIO_SEC=120 bash scripts/benchmark-indexer-rpc-anvil.sh` → `rpc-benchmark-20260615T021945Z.md` | **PASS** — idle 84/min peak 20; catch-up 84/min peak 100; active arena 305/min peak 100 | | ≥3 optimization proposals with tradeoffs | `docs/indexer/rpc-load-benchmark.md` § Prioritized mitigation strategies | **PASS** — log-derived podium snapshots, separate read RPC URL, ingestion-side coalescing (+ shipped #307/#308) | | No regression ingestion liveness / arena APIs | `bash scripts/verify-podium-live-anvil.sh` | **PASS** — integration_stage2 4/4, live_rows=12 | | No regression indexer tests | `cd indexer && cargo test` | **PASS** — 74 unit + 4 integration | | RPC metrics on status API | `bash scripts/verify-indexer-rpc-metrics.sh` | **PASS** — schema 2.13.0, `rpc_metrics.by_caller.chain_timer` present, peak_10s=20 | | chain_timer ~1 Hz when idle | `verify-indexer-rpc-metrics.sh` warm-up 35s; `total_calls=57` | **PASS** | | `INV-INDEXER-306-*` invariants | scripts above | **PASS** | ## Follow-ups - **Ingestion-path RPC coalescing** — batch block fetches during catch-up; cap concurrent `podium_live`/`warbow_score` per block (~40–60% peak reduction on active arena; monitor `last_indexed_at_ms`). - **Log-derived podium snapshots** — reduce `podium_live`/`warbow_score` `eth_call`s (~30% on active arena); requires `INV-INDEXER-PODIUM-PREDICT-LIVE` parity tests. - **Mainnet baseline re-run** — operator task after mitigations land; compare against Anvil numbers with real block times.
PlasticDigits commented 2026-06-15 02:28:47 +00:00 (Migrated from gitlab.com)

Security review — MR !503

Commit reviewed: b4c514ccded97cff8c85b1e61285a60e753c7526
Scope: docs/indexer/benchmarks/rpc-benchmark-20260615T021945Z.{json,md}, docs/indexer/rpc-load-benchmark.md (verification rerun for #306; benchmark artifacts + operator doc updates only)
Prior review threads: none on this MR; no prior security findings to re-validate.

Method

  • Inspected full MR diff (3 files, docs/artifacts only — no indexer, contract, or script code changes).
  • Traced attacker-controlled input paths: N/A (static benchmark JSON and markdown; no runtime sinks).
  • Checked artifacts for secret leakage (rpc_url is loopback Anvil only; no keys/tokens/credentials).

Outcome: FINDINGS: 0 (medium+)

Security review: no medium+ findings on this diff.

This MR adds committed benchmark measurements and updates operator documentation (SLO table, mitigation tradeoffs, #307/#308 shipped status). No authentication, authorization, injection, SSRF, deserialization, logging, dependency, or on-chain logic is introduced or modified. Benchmark JSON exposes only local RPC metrics (http://127.0.0.1:8548) and call-count telemetry — acceptable for operator baselines.

Inline threads

None (no findings to anchor).

## Security review — MR !503 **Commit reviewed:** `b4c514ccded97cff8c85b1e61285a60e753c7526` **Scope:** `docs/indexer/benchmarks/rpc-benchmark-20260615T021945Z.{json,md}`, `docs/indexer/rpc-load-benchmark.md` (verification rerun for #306; benchmark artifacts + operator doc updates only) **Prior review threads:** none on this MR; no prior security findings to re-validate. ### Method - Inspected full MR diff (3 files, docs/artifacts only — no indexer, contract, or script code changes). - Traced attacker-controlled input paths: N/A (static benchmark JSON and markdown; no runtime sinks). - Checked artifacts for secret leakage (`rpc_url` is loopback Anvil only; no keys/tokens/credentials). ### Outcome: **FINDINGS: 0** (medium+) **Security review: no medium+ findings on this diff.** This MR adds committed benchmark measurements and updates operator documentation (SLO table, mitigation tradeoffs, #307/#308 shipped status). No authentication, authorization, injection, SSRF, deserialization, logging, dependency, or on-chain logic is introduced or modified. Benchmark JSON exposes only local RPC metrics (`http://127.0.0.1:8548`) and call-count telemetry — acceptable for operator baselines. ### Inline threads None (no findings to anchor).
PlasticDigits (Migrated from gitlab.com) merged commit 52664c73bf into main 2026-06-15 02:32:14 +00:00
PlasticDigits commented 2026-06-15 02:32:15 +00:00 (Migrated from gitlab.com)

mentioned in commit 52664c73bf

mentioned in commit 52664c73bfd3a39970c6097b8218158ee9ebb3a6
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega!503
No description provided.