harb/onchain/test
openhands 26b8876691 fix: feat: revm-based fitness evaluator for evolution at scale (#604)
Replace per-candidate Anvil+forge-script pipeline with in-process EVM
execution using Foundry's native revm backend, achieving 10-100× speedup
for evolutionary search at scale.

New files:
- onchain/test/FitnessEvaluator.t.sol — Forge test that forks Base once,
  deploys the full KRAIKEN stack, then for each candidate uses vm.etch to
  inject the compiled optimizer bytecode, UUPS-upgrades the proxy, runs all
  attack sequences with in-memory vm.snapshot/revertTo (no RPC overhead),
  and emits one {"candidate_id","fitness"} JSON line per candidate.
  Skips gracefully when BASE_RPC_URL is unset (CI-safe).

- tools/push3-evolution/revm-evaluator/batch-eval.sh — Wrapper that
  transpiles+compiles each candidate sequentially, writes a two-file
  manifest (ids.txt + bytecodes.txt), then invokes FitnessEvaluator.t.sol
  in a single forge test run and parses the score JSON from stdout.

Modified:
- tools/push3-evolution/evolve.sh — Adds EVAL_MODE env var (anvil|revm).
  When EVAL_MODE=revm, batch-scores every candidate in a generation with
  one batch-eval.sh call instead of N sequential fitness.sh processes;
  scores are looked up from the JSONL output in the per-candidate loop.
  Default remains EVAL_MODE=anvil for backward compatibility.

Key design decisions:
- Per-candidate Solidity compilation is unavoidable (each Push3 candidate
  produces different Solidity); the speedup is in the evaluation phase.
- vm.snapshot/revertTo in forge test are O(1) memory operations (true
  revm), not RPC calls — this is the core speedup vs Anvil.
- recenterAccess is set in bootstrap so TWAP stability checks are bypassed
  during attack sequences (mirrors the existing fitness.sh bootstrap).
- Test skips cleanly when BASE_RPC_URL is absent, keeping CI green.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 11:54:41 +00:00
..
abstracts feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
helpers fix: LM: accrue fees as liquidity when feeDestination is self (#533) 2026-03-10 10:11:41 +00:00
libraries Add Solidity linting with solhint, Foundry formatter, and pre-commit hooks (#51) 2025-10-04 15:17:09 +02:00
mocks feat: protocol stats display + parameter sweep fuzzing infrastructure (#106) 2026-02-13 18:09:11 +00:00
EthScarcityAbundance.t.sol fix: resolve stack-too-deep in EthScarcityAbundance test 2026-02-23 17:10:01 +00:00
FitnessEvaluator.t.sol fix: feat: revm-based fitness evaluator for evolution at scale (#604) 2026-03-12 11:54:41 +00:00
FuzzingAnalyzerBugs.t.sol feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
Kraiken.t.sol fix: Test coverage: Kraiken + VWAPTracker to 100% (#283) 2026-02-26 05:12:48 +00:00
LiquidityManager.t.sol fix: LM: accrue fees as liquidity when feeDestination is self (#533) 2026-03-10 10:11:41 +00:00
Optimizer.t.sol fix: Backtesting #5: Position tracking + P&L metrics (#319) 2026-02-27 11:23:18 +00:00
OptimizerV3Push3.t.sol fix: PR #551 review findings - OptimizerV3Push3.sol + Optimizer.sol 2026-03-10 23:13:57 +00:00
ReplayProfitableScenario.t.sol feat: protocol stats display + parameter sweep fuzzing infrastructure (#106) 2026-02-13 18:09:11 +00:00
Stake.t.sol fix: Test coverage: Stake.sol to 100% (#284) 2026-02-26 03:59:20 +00:00
SupplyCorruption.t.sol fix(onchain): resolve KRK token supply corruption during recenter (#98) 2026-02-04 16:20:57 +00:00
VWAPFloorProtection.t.sol fix: fix: Restore proper VWAP — gas-efficient volume-weighted pricing (revert TWAP) (#603) 2026-03-12 08:50:07 +00:00
VWAPTracker.t.sol fix: Backtesting #5: Position tracking + P&L metrics (#319) 2026-02-27 11:23:18 +00:00