open beta·DYOR
$FILL CA:0xcA8EcC2B64464109672229885eC5AD2eE7c5BCBFBuy on Uniswap ↗
FILL
live on mainnet · open beta

Every swap.
An auction.

Sign your trade. Solvers fight over who gets to fill it. Whatever extra they squeeze out vs. the AMM is yours, not the bot's. We don't skim.

  • v4 hookopt in per pool. no router migration, no aggregator lock-in.
  • gaszero on submit. you sign, you don't pay. fee comes out of surplus.
  • mev rebateevery fill goes through Flashbots MEV-Share. backrun MEV captured by searchers is refunded 90% to you.
  • if nothing fillsyour tokens never moved. order expires, wallet unchanged.
ready
you sellbal:
 
min @ 0.1% slipno route
 
slippage
deadline
solvers online
0
open orders
0
fills · 24h
0
fills · all-time
0
v4 hook · ships as a single contract·solver bot competing across 6 venues·surplus → user · always·fee → stakers · 0% today, ≤2% cap·permit2 means zero gas on submit·mev-share rebate · 90% backrun MEV refunded to user·order didn't fill? wallet didn't move.·103 forge tests · CI blocks red·per-token balance invariant · drainage impossible·live on mainnet · open beta · DYOR·v4 hook · ships as a single contract·solver bot competing across 6 venues·surplus → user · always·fee → stakers · 0% today, ≤2% cap·permit2 means zero gas on submit·mev-share rebate · 90% backrun MEV refunded to user·order didn't fill? wallet didn't move.·103 forge tests · CI blocks red·per-token balance invariant · drainage impossible·live on mainnet · open beta · DYOR·
// what actually happens

Three solvers walk into a bar.
You pocket the tip.

The diagram on the left isn't a mockup — that's the auction shape. Solver A is fastest, B stalls mid-race, C is just bad today. Whichever one quotes the best price wins the order. The bit they beat the AMM by? That's the surplus. It goes to you.

ready · gates closed
step 01
sign · zero gas
step 02
solvers race · best bid wins
step 03
surplus · 100% to user
orderbook idle · waiting for the next fill
// in plain english

It's just signing a piece of paper. No new router.

STEP 01v4-hook

You sign

One off-chain signature. Tokens stay in your wallet — never custodied, never locked, never approved to a new router. Permit2 pulls only when a winning solver locks in a fill, and never more than what you signed for. Zero gas to submit.

STEP 02v4-hook

Every venue fights

Your order races in parallel across 50+ liquidity sources: Uniswap V3 (all four fee tiers probed), Uniswap V2, SushiSwap, Balancer, Curve — plus the 0x aggregator, which itself routes through PancakeSwap, Maverick, Bebop, Maker PSM, Fluid, Bancor, Lido, and ~40 more. The deepest pool wins. Always.

STEP 03v4-hook

You get paid (twice)

Settlement transfers Y to your wallet — 100% of the route's output, surplus auto-rebated by the v3 contract. Then the solver's tx runs through Flashbots MEV-Share with you as the refund recipient: 90% of any backrun MEV captured by searchers lands in your wallet in the same block. Protocol fee — 0% today, capped 2% — flows to $FILL stakers. Zero team skim.

// how we compare

The v4-native one.

Intent-based execution is the right answer. We're the one that ships it as a v4 hook — opt in per pool, no new router, AMM fallback if no solver beats the curve. 100% of surplus to the user. Always.

 AMMUniswapXCoWFill
solver competition
surplus to userpartial100%100%
v4 pool native
aggregator-compatible
no new router
amm fallback safen/a
// the $FILL token

The token does
two things. That's it.

01 · SOLVER BOND

Solvers post a bond

If you want to settle batches at any kind of scale, you put $FILL up as collateral. Misbehave — settle a bad batch, fail to deliver — and your bond gets slashed. The slashed $FILL goes straight to stakers. Solvers eat the loss, stakers eat the cake.

min bond
1,000 $FILL
unbond delay
14 days
slashed →
to stakers
02 · STAKE

Stakers get the fees

The protocol charges a small fee on each fill, paid in whatever the user sold. We don't keep it. Anyone can push the accrued fees to the staking contract with a permissionless call — they get distributed pro-rata, in the original token, same block.

stake lock
7 days
protocol fee
≤ 2% (gov-tunable, starts at 0)
reward tokens
up to 16, paid in the real asset
// fee flow, end to end
you sign an ordersolver fills it · pays feefee → stakers, pro-rata

No buy-back-and-burn theatre. No "treasury allocation." No emission schedules that pretend to be yield. The fee literally moves from one contract to the other in a single pushFeesToStaking() call. If that call doesn't fit the kind of yield you like, we're not the protocol for you, that's fine.

// security

Built like it has to survive forever.

Full regression suite on every commit. Settlement balance invariant per-token. Permit2 with single-use nonces. Live on mainnet · open beta. Internal audit done, 103/103 tests green, drainage impossible by construction.

forge tests
103 / 103
every commit. CI blocks merges on a single red.
balance invariant
PER-TOKEN
settlement reverts if any token balance drops below the post-fee floor. drainage impossible.
mev rebate
90%
every fill submitted via Flashbots MEV-Share. searcher backruns refunded 90% to you in same block.
permit2 replay
NONE
nonces are single-use per signer · canonical Permit2 enforces it
contractroleaddress (mainnet)
FillSettlementbatch settlement · pulls via Permit2 · pays users0x8209…2f2A
FillHookv4 hook · routes opted-in pools through Fill0x8032…00cC
$FILL tokensolver bond + staker reward0xcA8E…BCBF

live on mainnet · open beta. code is small, 103/103 tests green, internal audit done. contracts are verified · use at your own risk · DYOR · sign small.

$FILL token stack hardened separately: atomic factory deploy (no same-block sniper window), 2% max-wallet anti-snipe (auto-expires), time-limited guardian pause, non-renounceable Treasury ownership.

// questions we kept getting

Stuff people ask.

How is this different from just swapping on Uniswap?
Uniswap pays you the curve price — the math says 1000 USDC gets you 0.32 ETH, you get 0.32 ETH. Fill makes solvers compete to beat that math. If one of them can find a path that gives you 0.3208 ETH, you get 0.3208. Same minimum protection (you set your own minOut), but if there's any slack between the curve and the real market, it ends up in your wallet instead of an MEV bot's.
Do I have to trust the solver not to rug me?
No. The signed order has a minimum-out you set. The settlement contract pulls your tokens via Permit2 inside the same transaction that pays you the output — atomically. If the solver can't deliver your minimum, the whole transaction reverts and your wallet looks exactly like it did 5 seconds before you signed. There is no "send first, hope later" state.
What if no solver shows up?
Nothing happens. Your order has a deadline (default 60s for market, up to 7d for limit). When it passes, the orderbook marks it expired and forgets it. Your wallet is untouched — Permit2 hasn't pulled anything, you paid no gas. Worst case: you walk back to Uniswap and swap there.
What's the fee right now?
Zero. We're leaving it off through open beta — no skim while the protocol is unaudited. Once the external audit publishes, governance can set it up to 2% (hard-capped in the contract). Whatever it lands at, the fee goes to $FILL stakers — not to us.
How is this a v4 thing?
FillSwap is a v4 hook. A v4 pool opts in by passing a flag in hookData on swap; the hook checks the orderbook, and if there's a Fill quote that beats the curve, the swap routes through us. If not, it falls back to the AMM. We're not asking anyone to migrate liquidity or replace their router — just to opt in per pool.
Is the code open and verified?
The mainnet contracts are verified on Etherscan (links above). Our internal audit notes live in AUDIT.md — 103 forge tests, per-token balance invariant, Permit2 single-use nonces. We're unaudited externally for now; that audit's in flight, not gating launch. The public repo opens alongside it. Until then: read the verified source, sign small, DYOR.
Who's behind this?
Two of us, working remotely. We're not raising, we're not selling points, we don't have a token sale page. The orderbook and solver bot are running on a single Linux server we pay for. Live on mainnet today as an open beta — unaudited externally, internal audit done, external audit in flight.
// why we built this

Every public swap leaks 5-30 bps to MEV bots.
That's your money.
We got tired.

// how it works

You sign once. Our solver races every order across 50+ venues — UniV3, 0x aggregator, Curve, Balancer, V2, Sushi, plus direct CoW matches. Best output wins.

// what you keep

100% of route output. 100% of positive slippage. 90% of any backrun MEV, refunded by Flashbots in the same block. No team skim. No fee on top.

// where the protocol fee goes

When governance turns it on — capped 2%, 0% today — every basis point flows to $FILL stakers. No allocation to "team," no schedule to "advisors," no points farms.

// security

103 forge tests. Per-token balance invariant — drainage impossible by construction. Permit2 single-use nonces. Small surface, verified contracts. Sign small. DYOR.

— two of usmainnet · 2026
// early access

First 500 wallets in. Then we slow down on purpose.

If we onboard everyone at once we'll discover bugs the loud way. We'd rather do it the quiet way — small group, real fills, fix things before scaling.