Walras
UHI10 HOOKATHON · SUSTAINABLE LIQUIDITY AND MEV PROTECTION
Everyone gets the same price.
A Uniswap v4 hook that replaces continuous swapping with sealed batch auctions. Orders collect for sixty seconds, opposing orders settle against each other, and the whole group clears at one price solved on-chain. Direct swaps against the pool revert.
LIVE ON UNICHAIN SEPOLIA · 97 TESTS · 89.7% LINE COVERAGE · SOLO BUILD
01 PROBLEM
Trades execute one at a time,�in an order you don't control.
Your trade sits in public for a moment before it executes. A bot sees it, gets in front, pushes the price against you and takes the difference. That is sandwiching, and it works for one reason only: somebody else decides who goes first.
Underneath sits a quieter version of the same problem — liquidity providers are continuously picked off by arbitrageurs correcting a stale pool price, which pushes them toward wider fees or out of the pool entirely.
EXTRACTED ANNUALLY
$550M+
Ethereum alone, 2026
OF DEX TRADES SANDWICHED
1.2%
Flashbots · avg loss 0.41%
ROOT CAUSE
Ordering
not pricing, not fees
02 APPROACH
So remove the ordering.
Walras does not price around the problem — it deletes the surface. Every order placed inside a sixty-second window is held, then the whole group trades at once at a single clearing price. There is no first and no last, so there is nothing to trade ahead of.
And when two people in a group want opposite sides, they trade with each other directly. That volume never touches pool liquidity at all.
WINDOW
60s
sized against human latency
ORDERS PER GROUP
up to 64
bounded for settlement gas
PRICES PER GROUP
1
uniform, for every order
WAYS TO GO FIRST
0
enforced, not incentivised
03 MECHANISM
Most volume never reaches the curve.
A real group settled on Unichain Sepolia. Four orders, two directions, one price for all of them.
selling WDA
25.00
selling WDB
12.00
Matched between people
12.44
Left over, went to the pool
12.56 WDA
SKIPPED THE POOL
67.3%
of that group's volume
PRICE THEY ALL GOT
0.96446
identical across four orders
SETTLEMENT TRIGGER
Anyone
5% of surplus covers gas
04 GUARANTEE
Grouping only helps if it is the only way in.
If anyone could skip the group and trade against the pool directly, they could still get in front of you. So beforeSwap rejects every swap that is not the hook's own settlement — including Uniswap's own routers.
A REAL CALL TO THE LIVE POOL
0.00s
Selling 1 WDA the ordinary way, skipping the group
PoolSwapTest.swap(WDA → WDB, exactIn 1.0)
0.63s
Walras checked who was asking — not a settlement
Walras.beforeSwap(sender 0x0D19dCd7…)
0.63s
Refused. The pool will not trade outside a group.
DirectSwapsDisabled() · 0x428b5d3a
This runs live in the app, against the deployed pool. Anyone can press it and watch the chain refuse.
05 PRIOR ART
Batch auctions aren't new.�Needing nobody to run them is.
CoW Protocol
Angstrom
Walras
Where it lives
CoW Swap above AMMs;�CoW AMM its own Balancer pool
Inside the pool,�as a v4 hook
Inside the pool,�as a v4 hook
Who is protected
Only flow routed through CoW
Every swap touching the pool
Every swap touching the pool
Who runs the auction
Competitive off-chain�solver network
Node network staked�via EigenLayer
Nobody — on-chain�and deterministic
Clearing price from
Solver-proposed,�competitively enforced
Computed off-chain,�verified on settle
Closed-form root,�solved on-chain
06 THE HARD PART
The price and the netting�are one fixed point.
You cannot offset token0 against token1 without a price — and the price depends on how large the leftover turns out to be. Most designs escape this with an oracle or an off-chain solver. Walras solves it directly.
Batch excess demand and the amount the curve absorbs are set equal, which clears to a quadratic in sqrt-price whose positive root is the clearing price. One equation covers both directions. No oracle appears anywhere — the price is a function of the group's own orders and the pool's own liquidity.
ORACLES USED
0
price is endogenous
KEEPERS REQUIRED
0
settlement self-triggers
HOOK SIZE
14,067 B
10,509 B under the limit
07 STATUS
Built, deployed, verified.
TESTS PASSING
97 / 97
incl. a 500-run fuzz suite
LINE COVERAGE
89.7%
100% on both libraries
CONTRACTS VERIFIED
5 / 5
readable on Uniscan
FRONTEND
6 screens
reading live chain state
WalrasHook
0x1fd0240c08Cd81f1Affc5e70ff78500e9D0DC080
Pool
0x87cc0db91c355694816d3d338ce683302a85d94ffde442837fde5757a6fa07b0
Network
Unichain Sepolia · chain 1301
08 CLOSE
A pool where going first�buys you nothing.
Sandwiching is not a pricing failure to be taxed away — it is a consequence of sequential execution. Remove the sequence and the attack has no surface. Walras does that inside an ordinary Uniswap pool, with nobody running it.
Live app
walras.vercel.app
Source
github.com/DeborahOlaboye/walras
Hook on Uniscan
sepolia.uniscan.xyz/address/0x1fd0240c…
WALRAS · UHI10 HOOKATHON · DEBORAH OLABOYE