Cross-Chain Intents: How Solver Oligopolies Quietly Widen Your Slippage
Intent-based bridges promise you a guaranteed outcome, but the price of that guarantee depends on how hard a small group of solvers is actually competing for your order.
Key takeaways
- →An intent is a signed promise of the minimum you'll accept. Solvers compete to fill it, and they can only be paid down to the floor you set.
- →Execution drag is the gap between a fair cross-chain price and what you receive. Part of it is real cost, part of it can be rent.
- →When few solvers dominate, they don't need to openly collude. They can all let the auction decay toward your minimum.
- →Set your own minimum-out from a reference price and an estimate of real costs instead of trusting default slippage.
- →Log your fills. If they keep landing near your floor, competition is weak and you should tighten the floor or switch routes.
Sign a cross-chain intent and you're not trading against a pool. You're asking a small group of solvers to compete for your order. If they stop competing hard, you cover the difference. Nothing on your screen will say so.
Here's how intent routing works, where the costs come from, how a concentrated solver market can push your fills toward the worst price you agreed to, and what you can do about it.
What a cross-chain intent actually is
A normal swap is an instruction: go to this pool, trade this much, take this path. An intent describes an outcome instead.
A typical one reads like this. I'll give 1,000 USDC on Chain A. I want at least 0.39 ETH delivered to my address on Chain B. The offer expires in two minutes.
You sign that message. You don't choose the route. Someone else does.
That someone is a solver, which some protocols call a filler or relayer. Usually it's a professional trading firm or bot operator holding inventory on many chains. When a solver takes your intent, it sends ETH to you on Chain B from its own wallet, immediately. Later it proves the fill and collects your USDC on Chain A, often after a settlement or verification delay.
So the solver fronts the capital and carries the risk. You get speed and a guaranteed minimum. The solver keeps the spread between what you gave and what it paid out, less its costs.
How routing and batching work
Details vary by protocol, but most share the same moving parts.
- The auction. Your intent is broadcast to solvers. Some systems run a Dutch auction: the payout offered to you starts generous and decays toward your minimum over a few seconds or blocks, and the first solver willing to fill at the current level wins. Others use sealed quotes. Solvers submit prices and the best one wins.
- Exclusivity windows. Some designs give the winning quoter a short exclusive period to fill. If it doesn't, the order opens to everyone.
- Batching and netting. Solvers rarely move funds across a bridge for every order. If one user wants USDC to go A to B and another wants it B to A, the solver can match them internally and rebalance only the net difference. That cuts costs substantially.
- Settlement. The solver is eventually repaid on the origin chain, once an oracle, a proof or an optimistic challenge window confirms the fill.
Batching is the efficiency engine, and it's also why scale matters. A solver with deep inventory on every chain nets more flow, rebalances less and can quote tighter than a newcomer. That advantage pulls the market toward a few large players.
Execution drag: real cost versus rent

Execution drag is the gap between a fair price for your trade and what you actually receive. Treat the fair price as the spot rate on the destination chain, with no costs included.
Part of that gap is legitimate. Solvers have real expenses:
- Gas to deliver funds on the destination chain.
- Their share of settlement gas on the origin chain.
- Capital cost. Their money is locked until settlement clears.
- Rebalancing. Inventory drifts toward popular destinations and has to be moved back.
- Price risk while the trade is in flight and settlement is pending.
Anything above those costs, plus a reasonable margin, is rent. In a competitive market, rent gets bid away. In a concentrated one, it doesn't.
How solver oligopolies widen your slippage
Your minimum-out isn't only protection. It's also the floor the auction is allowed to sink to. With real competition, solvers fill well above it. Without competition, your floor becomes their target.
Solver markets concentrate for structural reasons. Running one takes a lot of capital spread across many chains, solid infrastructure and sometimes a place on a permissioned whitelist. The result is often a handful of firms winning most of the flow.
A few players don't need a back-room deal to cost you money. The common patterns:
- Waiting out the Dutch auction. If the payout decays every second, a competitive solver fills early to beat rivals. If every solver knows the others will also wait, nobody fills until the price is near your minimum. No communication required. Repeated games teach patience.
- Quote shading. In sealed-quote systems, solvers who've learned each other's behavior submit quotes that are just good enough to win, not their best price.
- Exclusivity abuse. A solver wins exclusivity with a decent quote, then fills late or lets the window lapse on trades that moved against it. You get delays and re-auctions instead of a better price.
- Rotation. Winners take turns, order by order, so each firm keeps a stable share. From one user's view, that's hard to see.
- Flow information. Solvers who see a large share of orders can anticipate your trade and position ahead of it on the destination chain.
None of this breaks your signed terms. You asked for at least X and you got at least X. That's exactly why it's hard to spot, and harder to complain about.
Worked example: the same trade, two kinds of market
All numbers below are hypothetical and chosen for easy math. They aren't real prices or real protocol fees.
Say you want to move 10,000 USDC from Chain A into ETH on Chain B. The destination spot price is 2,500 USDC per ETH, so the cost-free fair amount is 4.000 ETH.
Estimate the solver's real costs on this order:
| Cost item | Hypothetical amount (USDC) |
|---|---|
| Destination gas | 2.00 |
| Share of origin settlement gas | 1.00 |
| Capital cost (10,000 locked ~30 min at 10% a year) | 0.57 |
| Rebalancing allowance | 3.00 |
| Price risk premium | 4.00 |
| Total | 10.57 (about 0.0042 ETH) |
A fair, competitive fill therefore lands around 3.995 ETH, with a small margin left over.
You leave the wallet's default 1% slippage on. Your minimum-out becomes 3.960 ETH. The Dutch auction starts near 4.000 and decays to 3.960 over 60 seconds.
- Competitive market: Several solvers race. One fills a couple of seconds in at 3.995 ETH. Total drag is about 0.13%, almost all of it real cost.
- Concentrated market: Three solvers dominate, and all have learned that waiting pays. The order fills near the end at 3.962 ETH. Total drag is about 0.95%.
The gap is 0.033 ETH, or about 82.50 USDC at the assumed price. On a single trade. Your terms were honored both times.
Now run it again with a minimum-out of 3.990 ETH. Even patient solvers can't go below that. The worst case shrinks from 82.50 USDC of rent to about 12.50 USDC. The floor you set is the most direct lever you have.
How to route a cross-chain trade without getting milked
- Get a reference price on the destination chain. Check what the output asset trades for there, using a major DEX or aggregator on that chain. Note it.
- Estimate real costs. Look at current destination gas and assume a modest allowance for settlement, capital and risk. For mid-sized trades between major chains, real costs are usually a small fraction of a percent. Use that as a rough sanity check, not a rule.
- Calculate your own minimum-out. Take the reference amount, subtract estimated costs, subtract a small buffer for price movement during the auction. Type that number in. Don't accept a default percentage blindly.
- Keep the deadline short. A long expiry gives solvers more room to wait and watch the market. Use the shortest window that still fills reliably.
- Get a second route. Compare against another intent protocol, or a canonical bridge plus a swap on arrival. If the intent quote isn't clearly better after fees and time, you've learned something.
- Sign, then record the result. Write down the amount received, time to fill, and which solver address filled it. Block explorers show this.
- Compare against your floor. Did the fill land well above your minimum or right on top of it? One trade proves nothing. Five trades that all land within a hair of the floor tell you competition is thin.
- Adjust. If fills cluster at the floor, tighten it next time or switch protocols. If orders start failing to fill, you went too tight, so loosen slightly.
- Split large trades. Big orders strain solver inventory and invite wider pricing. Several mid-sized intents spread over a few minutes often fill better than one large one.
Common mistakes
- Trusting default slippage. A 0.5% or 1% default is built to avoid failed trades, not to get you a good price. On a competitive route it's often far looser than you need.
- Falling for zero fee. An intent route with no visible fee can still cost more than a route that charges one. The solver's margin lives in the exchange rate.
- Long expiries. More time rarely helps you. It helps whoever holds the option to fill.
- Counting solvers instead of winners. A protocol might list dozens of registered solvers. If three of them fill nearly everything, that's the market you're actually in.
- Setting a tight floor during volatility. When prices swing, a strict minimum may just not fill. That's a failed order, not a loss. Still, know how and when your funds get refunded before you rely on it.
- Judging from one fill. Drag is a pattern. You need a handful of trades to see whether fills land well above the floor or right on it.
- Ignoring the destination. If you're moving funds to a betting or trading site on another chain, check whether a direct deposit on your current chain is possible. The cheapest bridge is often the one you skip.
Why this matters more than it looks
A percent here or there feels like noise. But traders and gamblers often move funds between chains again and again: deposit, withdraw, chase a better market, come back. A 0.8% leak paid ten times is close to 8% of your money gone, and none of it shows up as a fee line.
Protocols know this. Some are experimenting with permissionless solver entry, stricter penalties for late fills, and auction designs that reward filling early. Those designs help only if enough independent solvers actually show up. Design can invite competition. It can't create it.
FAQ
Is solver collusion provable or punishable?
Rarely, from a user's seat. Most of the behavior described here is tacit. Solvers learn to wait without ever agreeing to. Since every fill met your signed terms, there's usually nothing to dispute. Your protection is economic: set a tighter floor, and move flow to routes where fills land well above it.
Won't a tight minimum-out just make my trade fail?
Sometimes, and that's the trade-off. A floor set from a real reference price plus realistic costs should fill in normal conditions. If it fails repeatedly in calm markets, solvers want more margin than you're offering. That doesn't automatically mean your number was wrong. Check refund mechanics first so a failed order doesn't strand your funds for long.
Are intents worse than using a bridge and swapping myself?
Not inherently. A competitive intent route is often faster and cheaper than doing it yourself, because solvers net flows you can't. The point is to verify instead of assume. Price both routes on a few trades and let the numbers decide.
The open question for every intent protocol is the one you should ask before signing: if the auction runs all the way to my floor, who exactly was supposed to stop it?