Live on Base mainnetETHGlobal Tokyo 2026Uniswap v4 · 1inch Aqua

A Partially Active AMM. In any block, arbitrageurs can reach only a fraction λ of the reserves. The rest stays frozen below the waterline, and earns yield in Morpho.

Scroll to sink it
01 · The problem

A normal AMM leaves the whole pool exposed.

Every time ETH moves, arbitrageurs trade the pool back to the market price, and their profit comes straight out of the LPs. In a real 24-hour replay, a plain Uniswap v4 pool lost $1.077 that way.

02 · The split

Every block, Iceberg freezes 1 − λ of the reserves.

On the first trade of a block the reserves split. Every trade in that block sees only λ·R, priced on a constant-product curve with a 5 bps fee. Quotes never write storage, so quote == swap.

active · λ·Rfrozen · (1 − λ)·R
03 · The yield

The frozen part doesn't sit idle.

Passive reserves are parked in Morpho vaults (Steakhouse USDC, Moonwell ETH) and pulled back out inside the swap, the moment a trade needs them. LPs can always exit.

earning in Morphounparked mid-swap when needed
04 · The keeper

λ isn't a constant. It's chosen.

Every ~10 minutes a fee-aware keeper replays the last 6 hours of real ETH/USD at the pool's fee, simulates every λ down to the floor, and publishes the one that loses least to both venues.

The keeper's search, re-run in your browser on the real 21 Sep prices at 5 bps: λ 40% loses 19.1% less than fully active.

Measured, not modelled

−0.0%
less LP loss to arbitrage at λ 50%, vs a real plain Uniswap v4 pool at the same 5 bps fee
−0.0%
at λ 39%. 1,440 one-minute steps on a Base mainnet fork, real PoolManager and official Aqua
0
Solidity tests, including 22 fork tests against the real Base contracts
$0.00
of gas for the full 64-transaction mainnet flow, rehearsed on a fork first
0
wei of price difference between the Aqua position and the v4 hook at the same λ and fee
0.0%
of the 872 Aqua strategies on Base never got a single fill. Idle liquidity is the default
One kernel, two venues

● Uniswap v4

IcebergHook

A hook on OpenZeppelin's BaseCustomCurve that owns the reserves as ERC-6909 claims. Each block the passive part freezes; idle reserves are parked in Morpho and unparked inside the swap.

  • Pricingx·y = k on the active reserves only
  • Idle fundsparked in Morpho, never more than 1 − max λ
  • Address0xe5a6…eA88
● 1inch Aqua · SwapVM

PAActiveReserves 0x92

A SwapVM instruction in a free opcode slot, followed by 1inch's stock FeeFlatIn and XYCSwap. The maker holds only Morpho vault shares; each fill withdraws exactly what it needs.

  • ProgramSalt → guard → PAActiveReserves → FeeFlatIn → XYCSwap
  • Shared liquiditythe same vault shares back a strategy on 1inch's official router
  • Address0xE498…84b5
quotev4 == quoteaqua
LP loss λ 50%, hook: $0.888LP loss λ 50%, Aqua: $0.888
Go deeper

Partially Active AMM (Ko 2026, arXiv 2602.09887) on 1inch Aqua & Uniswap v4 · Base mainnetBuilt at ETHGlobal Tokyo 2026 · GitHub ↗