Less lost to arbitrage than a real plain Uniswap v4 pool at the same 5 bps fee, at λ 39%. Replayed minute by minute on a Base mainnet fork against the real PoolManager and official Aqua.
λ 100% reproduces the plain pool to 0.09%. The v4 hook and the Aqua position at λ 50% lose exactly the same: one kernel, two venues.
Real replay, 21 Sep 2026
1,440 minutes at 5 bps on a Base fork. LP loss vs a perfectly rebalanced portfolio: plain v4 $1.077 · λ 50% $0.888 · λ 39% $0.869. The Aqua position at λ 50% lost exactly what the hook did.
REPLAY_MINUTES=1440 BASE_RPC_URL=https://mainnet.base.org forge test --match-contract Replay21Sep -vvFee-aware λ, 7 days
On a week of real ETH/USD: −32% loss at 1 bps, −17% at 5 bps. At 30 bps the best λ is 100%, so the keeper tunes λ to each pool's fee.
node research/lambda_policy.mjsKernel matches the paper
λ* within 1e-16, Theorem 1 within 5e-15, ln within 8e-11 of the float reference.
forge test --match-path test/unit/IcebergMath.t.sol -vv1inch's own invariants hold
CoreInvariants (symmetry, additivity, quote == swap, monotonicity, rounding favours maker, balance sufficiency) at λ = 1, 0.5 and 0.25, with and without fee.
forge test --match-path test/invariant/PAInvariants.t.solWorks on real Base contracts
11 Aqua fork tests and 11 v4 hook fork tests among 52 in total, against the real PoolManager, Aqua, Morpho and Chainlink.
BASE_RPC_URL=https://mainnet.base.org forge testMainnet run rehearsed first
The exact mainnet flow on a fork with the real wallet: 64 transactions, then the withdraw script returned every USDC and all ETH except gas.
./scripts/rehearse_mainnet.shIceberg's idle side earns in Morpho instead of waiting. node research/aqua_base_study.mjs