Skip to content
Finance Lessons

Order-Flow Auctions & MEV Redistribution

Intents & Solvers

Stop signing the route, start signing the outcome. How intent-based trading and competing solvers — with UniswapX's Dutch auction as the worked example — push execution surplus and MEV protection back to the user.

11 min Updated Jun 20, 2026

In the last two lessons, order-flow auctions and backrun refunds gave you a powerful trick: when someone profits off your trade, make them bid for the right and hand the surplus back to you. But notice the quiet assumption baked into all of it — you still wrote the trade. You picked the pool, the route, the slippage tolerance, the gas. The OFA just refunded value created around a transaction you had already fully specified.

Intents tear up that assumption. Instead of signing how to get what you want — an exact path through an exact pool — you sign what you want: the outcome. “I’ll give 1 ETH; I must walk away with at least 1,950 USDC; figure out the rest.” A crowd of competing fillers then races to make it true, and the winner of that race is the one who gives you the best deal. This lesson is about that flip — and why it turns out to be one of the cleanest ways yet to route MEV back to the person who created it.

Before you read — take a guess

Which of these is an *intent* rather than a plain transaction?

Transactions vs intents

A transaction is imperative. It is a precise, executable recipe: call this exact function, on this exact contract, with these exact arguments, in this order. The chain does literally what you said — no more, no less. If the pool you named moved against you, your transaction reverts (and you may still eat the gas). You are the router, the strategist, and the one holding the risk.

An intent is declarative. You describe the desired end state and the constraints it must satisfy, and you stay silent on the method. “I will give 1 ETH. I must receive at least 1,950 USDC. Satisfy this however you like, before the deadline.” How that gets done — which pools, which chains, which private inventory — is somebody else’s problem.

The analogy writes itself. A transaction is dictating turn-by-turn directions to a taxi driver: “left here, right at the lights, take the third exit.” If a road’s closed, you’re stuck barking new directions. An intent is telling the driver your destination and your budget and letting them pick the route — and if there’s a faster road, they take it and you arrive sooner. You signed the destination, not the roads.

And here’s the kicker: you sign that intent off-chain, usually gasless. It’s a signed message, not a broadcast transaction. Nothing hits the chain until a filler decides to make it real — on their dime.

DimensionPlain transactionIntent
What you signThe exact route + args (a recipe)The outcome + constraints (a goal)
Who picks the routeYou, in advanceThe filler/solver, at execution time
Who pays gasYouThe solver (it’s their transaction)
Failed-tx riskYou — a revert can still cost you gasThe solver — they eat reverts
MEV exposureYou’re a sitting target for sandwichersThe solver internalizes or returns it
FormOn-chain broadcastOff-chain signed message

Match each piece of the intent world to what it actually is.

Pick a term, then click its definition.

Solvers: the competitive fillers

So who are these mysterious route-pickers? Solvers (also called fillers) are third parties — usually sophisticated trading firms running heavy optimization software — who take your signed intent and compete to fill it. Each one searches for the best way to satisfy your goal: routing across dozens of AMMs, tapping their own private inventory, splitting your order across venues, and even netting it against other users’ intents. Whatever they do, they are contractually bound to deliver at least your minimum output, or the settlement contract rejects their fill.

The magic isn’t any single solver’s cleverness — it’s the competition between them. When ten firms are all trying to win the right to fill your order, the way they win is by offering you a better price than the next firm. That pressure squeezes the execution surplus out of the solvers and into your wallet. A lone solver would pocket the edge; a crowd of them coughs most of it up to you.

Think of the travel-booking sites that race to beat each other on the same flight. None of them is doing it for love — each wants your click — but the competition is exactly why the fare you see is lower than what any one of them would quote alone. Solvers are that, for your swap.

Info:

How a solver can beat a naive AMM swap. A plain swap just shoves your order through one pool and accepts whatever price impact it causes. A solver has more moves: it can internalize the backrun value (capture the arbitrage your trade creates instead of leaving it for a sandwicher), net your order against an opposite-direction order so neither touches an AMM and both skip the fees, and reach off-chain or private liquidity an AMM can’t see. Each of those lets it quote you better than the pool and still turn a profit — which is precisely the surplus competition forces it to share.

UniswapX: a Dutch auction over your trade

UniswapX is the headline example, and its mechanism is elegant: your intent becomes a Dutch auction.

A Dutch auction is a descending-price auction. It starts at a price too good for any seller and drops over time until the first buyer says “yes.” Here the roles invert nicely: the thing being auctioned is the right to fill your order, and the “price” is the output guaranteed to you. It starts above the current market price — so high that no solver would touch it, because filling there means filling at a loss — and decays block by block toward a floor.

Solvers sit and watch the curve fall. The instant it drops to a level where the cheapest solver can fill profitably, they pounce and execute. Because solvers compete on cost, the most efficient one breaks even soonest — so the fill lands earlier and higher on the decay curve, which means more of the surplus stays with you. Add more (and cheaper) solvers and the fill happens even sooner, even higher.

A Dutch auction over your intent
Output guaranteed to youMarket value
2,000 USDC
You receive
1,990 USDC
Winning solver keeps· Solver A (cheapest)
4 USDC

Press play. You signed an intent to sell 1 ETH for as much USDC as possible. The output guaranteed to you starts above the 2,000 USDC market price — no solver fills at a loss — and decays each block. The instant the curve drops to where the cheapest solver can fill profitably, they execute. More and cheaper solvers competing means the fill lands earlier and higher, so you keep more — the winning solver pockets only their sliver of edge.

Walk the numbers. Market price is $2,000 per ETH. Your Dutch auction starts the guaranteed output at $2,030 and decays toward a floor of $1,970. At $2,030, a solver who fills would have to source ETH→USDC worth $2,000 and hand you $2,030 — a $30 loss, so nobody bites. As the curve falls, it crosses $2,000 (still break-even after costs — no) and keeps dropping. The cheapest solver’s all-in cost (gas, fees, slippage) is about $6. The moment the guaranteed output decays to roughly $1,994, that solver’s math turns positive: they can fill, deliver you the guaranteed output, and keep the gap. With competition shaving timing tight, the fill lands near $1,990 — you pocket $1,990 (well above your floor and only $10 under mid-market), and the winning solver keeps their thin ~$4 sliver of edge. No competing solver, and that auction would have crawled all the way to the $1,970 floor before anyone bothered — costing you $20 instead of $10.

Fill in the Dutch-auction mechanics.

Pick the right option for each blank, then check.

In a UniswapX Dutch auction, the output guaranteed to the user starts the market price, so that no solver fills at a , and then over time. The fill happens the moment the curve reaches the point where the solver can fill profitably — and more competition makes the fill land , leaving more surplus with the user.

Why intents help the user

Stack up what the user actually gains:

  • Price improvement via competition. As above: solvers bidding against each other surrender most of the execution edge to you. The $1,990 fill versus a $1,970-floor crawl is $20 of surplus that competition handed back.
  • Gasless, no failed-tx gas. You sign a message, not a transaction. The solver broadcasts and pays gas — and if the fill reverts, the solver eats the wasted gas, not you. Your downside on a failed fill is simply… nothing happens.
  • Built-in MEV protection. Your intent never sits in the public mempool as a fat, sandwichable target. The solver internalizes the backrun/arbitrage value (or is forced by competition to price it back to you) instead of a sandwicher skimming it. The MEV your trade creates becomes your price improvement.
  • Cross-chain and complex multi-step actions in one signature. “Sell ETH on Arbitrum, bridge, and buy this token on Base, ending with at least X” is a single intent. The solver stitches together the bridges and swaps; you sign one outcome instead of orchestrating five fragile transactions.

Sort each property into where it belongs.

Place each item in the right group.

  • You pay gas even if the swap reverts
  • A multi-chain, multi-step goal is expressed in one signature
  • You pick the exact pool and route in advance
  • Competing fillers bid to give you a better price
  • Your order sits in the public mempool, sandwichable
  • You sign an off-chain message and usually pay no gas
  • The filler eats the gas on a failed/reverted fill

The catch

Intents are not magic, and pretending otherwise would be exactly the kind of thing this course exists to puncture.

  • You depend on the solver set. “Best execution” is only as good as the solvers who actually bid. If the competitive crowd thins out, the surplus that was flowing to you stays with the filler instead.
  • Solver centralization risk. Running a competitive solver takes serious capital, infrastructure, and order flow. That favors a handful of sophisticated firms — and a small set of solvers can quietly behave like an oligopoly, filling closer to the floor and keeping more of the edge. (We’ll dig into solver/searcher centralization head-on in lesson 6.)
  • Verifiability / trust. Did the winning solver really give you the best possible fill, or just one that cleared your minimum while it kept the rest? You signed a floor, not a guarantee of optimality. Proving you got the genuine best execution is hard, and the system leans on competition — not cryptographic proof — to keep solvers honest.
Warning:

An intent protects you at the floor, not at the ceiling. The min-output you signed is the worst you’ll accept — it says nothing about whether the solver squeezed out every last basis point of surplus or skimmed some for itself. With a deep, competitive solver pool that skim is tiny; with a thin or colluding one it can be quietly large. Intents move trust from “the mempool won’t rob me” to “the solver market is competitive and honest.” Better trust to rely on — but still trust.

Big picture

  • Intents & Solvers
    • Transaction vs intent
      • Transaction = imperative recipe (exact route/args)
      • Intent = declarative goal (outcome + constraints)
      • Intent signed off-chain, gasless
    • Solvers (fillers)
      • Compete to fill best, bound to your min-output
      • Route AMMs / private inventory / net intents
      • Competition pushes surplus to the user
    • UniswapX Dutch auction
      • Output starts above market, decays to a floor
      • Cheapest solver fills the instant it's profitable
      • More competition → earlier/higher fill
    • User benefits
      • Price improvement
      • Gasless, no failed-tx gas
      • MEV protection built in
      • Cross-chain / multi-step in one signature
    • The catch
      • Only as good as the solver set
      • Solver centralization / oligopoly risk
      • Best-execution is hard to verify

Check yourself: intents & solvers

Question 1 of 50 correct

What is the defining difference between a transaction and an intent?

Check your answer to continue.

A single-order Dutch auction is a beautiful way to squeeze surplus out of competing solvers and hand it to you. But it’s still one order, fought over in isolation. What if your “sell 1 ETH for USDC” and someone else’s “buy 1 ETH with USDC” are sitting in the same batch at the same moment? A one-at-a-time auction can’t see that — it’ll route both through AMMs and pay fees twice. Next lesson, CoW Protocol settles many intents together, unlocking the coincidence of wants (your trade directly offsetting someone else’s, no AMM in the middle) and a uniform clearing price for everyone in the batch — a kind of surplus a one-shot auction simply can’t reach.

Mark lesson as complete