Re-scoped 2026-07-22: originally "build OP Stack devnet + general stress test". Now focused on RPC request stress testing — in this project every real capacity incident has been on the read path, not tx throughput. Chain-level TPS/gas-saturation testing and the full Eris-workload run are deferred to follow-up issues (the latter is blocked on #33 anyway). Sequencer tip-ordering verification is tracked in #35.
Motivation
Eris's workload is read-heavy: every agent reconstructs its observation via eth_call/multicall each block, the coordinator reads venue state continuously, and post-run scoring replays historical blocks. Operational history confirms the read path is the thing that breaks: fork-mode runs were bottlenecked by cold-state RPC roundtrips (~270ms), and a full 36-agent roster's observe barrage overloaded and crashed a single anvil. Before committing to an OP Stack target (#35), we need to know how much read load one op-geth node sustains and whether read pressure disrupts sequencing.
Setup
- OP Stack devnet on EC2 (reuse spot-skills /
eris AWS profile patterns), genesis allocs prefunding test accounts.
- Tooling status (verified 2026-07-22):
ethpandaops/optimism-package (Kurtosis) is not archived but stale — last main-branch commit 2025-09-19, and OP Labs removed kurtosis-devnet from the optimism monorepo in 2026-03 (PR #19506) in favor of the Go-based op-devstack. Treat it as an at-risk dependency: try it first (declarative, fits our ephemeral single-L2 need), fall back to manual op-deployer + docker-compose, or op-devstack.
Measurements
- Pure read capacity — concurrent
eth_call/multicall QPS vs p50/p99 latency, using Eris-shaped access patterns (per-block observation reconstruction × N agents), warm vs cold state.
- Read/write interference — saturate reads while sustaining an Eris-sized tx stream (oracle + keeper + agents + flow per block): does block production stall or jitter? This is the main risk of a sequencer that also serves RPC.
- Historical reads — archive/state-history configuration for op-geth; scoring reconstruction issues
eth_call at old blocks, measure feasible depth and latency under load.
Architecture outcome
Decide sequencer-only vs sequencer + read replica (agent/coordinator reads on a replica, writes to the sequencer). If a replica is needed, the env contract must distribute separate read/write RPC URLs — that decision feeds the #35 interface requirements.
Deliverables
Capacity numbers vs the Eris requirement profile (N agents × per-block multicalls at 1–2s block time), a replica-or-not recommendation, and a go/no-go input for #35. Configs/scripts to the infra repo; findings recorded here.
Related: #35 (approach selection & interface), #33 (cheatcode-free env).
Motivation
Eris's workload is read-heavy: every agent reconstructs its observation via
eth_call/multicall each block, the coordinator reads venue state continuously, and post-run scoring replays historical blocks. Operational history confirms the read path is the thing that breaks: fork-mode runs were bottlenecked by cold-state RPC roundtrips (~270ms), and a full 36-agent roster's observe barrage overloaded and crashed a single anvil. Before committing to an OP Stack target (#35), we need to know how much read load one op-geth node sustains and whether read pressure disrupts sequencing.Setup
erisAWS profile patterns), genesis allocs prefunding test accounts.ethpandaops/optimism-package(Kurtosis) is not archived but stale — last main-branch commit 2025-09-19, and OP Labs removedkurtosis-devnetfrom the optimism monorepo in 2026-03 (PR #19506) in favor of the Go-basedop-devstack. Treat it as an at-risk dependency: try it first (declarative, fits our ephemeral single-L2 need), fall back to manual op-deployer + docker-compose, or op-devstack.Measurements
eth_call/multicall QPS vs p50/p99 latency, using Eris-shaped access patterns (per-block observation reconstruction × N agents), warm vs cold state.eth_callat old blocks, measure feasible depth and latency under load.Architecture outcome
Decide sequencer-only vs sequencer + read replica (agent/coordinator reads on a replica, writes to the sequencer). If a replica is needed, the env contract must distribute separate read/write RPC URLs — that decision feeds the #35 interface requirements.
Deliverables
Capacity numbers vs the Eris requirement profile (N agents × per-block multicalls at 1–2s block time), a replica-or-not recommendation, and a go/no-go input for #35. Configs/scripts to the infra repo; findings recorded here.
Related: #35 (approach selection & interface), #33 (cheatcode-free env).