Every time you get a quote from a DEX aggregator, you are actually watching two different liquidity systems compete for your order, and most people never notice because the interface just shows one number. You type in the amount, you get a price, you sign. But under that single price there is a routing engine deciding whether to fill you from an automated market maker pool, from a professional market maker who quoted your order directly, or from some blend of both. Which one wins changes your fill materially, and knowing how to read that decision is one of the cheaper edges available to anyone trading on-chain.
I got interested in this after noticing that two aggregators would quote me almost identical routes on some tokens and wildly different fills on others. The pattern turned out to be simple once I understood what was happening behind the quote. When RFQ was in play, one aggregator would beat the other by more than gas could explain. When it was not, they converged. So the whole thing comes down to when RFQ shows up and when it goes quiet.
The two liquidity sources under one quote
AMM liquidity is the thing most people picture when they think DeFi. A pool holds two assets, a formula sets the price, and your trade moves along that curve. The larger your order relative to the pool, the more the price moves against you as you go, which is slippage. It is deterministic and it is on-chain and it is always available, but it charges you for size. Big order into a thin pool, you eat the curve.
RFQ, request for quote, works nothing like that. Your aggregator sends your intended trade out to a set of professional market makers off-chain, and they respond with a firm price they are willing to fill at. If you accept, the market maker signs an order and it settles on-chain against your trade. The price is a fixed number, quoted for your specific size, and because it does not walk along a bonding curve, a clean RFQ fill has effectively zero slippage. The market maker is pricing off their own inventory and their own hedge on centralized venues, so they can often quote inside the pool spread and still make money.
That is the part worth internalizing. A market maker who is already running a book on a major exchange can hedge your fill in milliseconds and price you off the real mid, not off a pool that may be stale or thin. On liquid pairs, in normal conditions, RFQ tends to give you the better number and it gives it to you with none of the size penalty an AMM would charge.
Why RFQ often beats the pool
A few reasons stack up. The market maker prices off a deeper, faster reference than any single pool. They quote your exact size instead of making you slide down a curve. They compete against each other inside the aggregator's auction, so you tend to get the best of several quotes rather than one venue's price. And they carry no impermanent-loss risk on your trade the way a passive liquidity provider does, so their required edge per fill is thinner.
The practical result is that for a mid-to-large order on a blue-chip pair, an RFQ fill can save you meaningfully versus routing the same size through pools, and the savings grow with your order size because the AMM penalty grows while the RFQ price does not. Small dust trades are the opposite. The market maker has fixed costs to quote and settle, so on tiny orders the pool usually wins and the router will route you there.
Where RFQ quietly declines to quote
Here is the half nobody puts in the marketing. RFQ is a privilege the market maker extends, not a right you have, and they pull it exactly when you would most want it. The failure modes are consistent once you know to look for them.
- Illiquid or long-tail tokens. If a market maker cannot hedge the asset cleanly on a real venue, they will not quote it, or they quote it so wide the router ignores them. You fall back to the pool by default.
- Fast or volatile conditions. When the market is ripping, market makers widen or stop quoting rather than get run over. So the moment you most want a firm off-chain price, RFQ thins out and you are back on the AMM curve, slippage and all.
- Odd trade shapes. Exotic pairs, unusual sizes, or tokens with transfer taxes and rebasing mechanics often just get no RFQ response because they break the market maker's hedging assumptions.
- Quote expiry. RFQ quotes are firm only for a short window. Sign late, or sit in a congested mempool, and the quote can expire and the fill silently reverts to a worse path or fails.
None of these throw an error that says RFQ declined. The aggregator just routes you through pools instead and shows you a price, and unless you read the breakdown you never know you got the fallback.
Reading the route breakdown
Every serious aggregator shows you the route if you look. It will name the sources filling your order and the split between them. That breakdown is the whole ballgame. If you see a named market maker or an RFQ source taking most of the fill, you are getting professional pricing. If you see the order fanned out across a handful of pools, RFQ either declined or lost, and you are paying the curve.
The habit I would build is short. Before signing anything that matters, do this.
- Open the route detail and read the sources, not just the output amount.
- Note whether an RFQ or named market maker is present and what share it fills.
- Check the quoted price impact. Near zero usually means RFQ. A visible number means you are on pool liquidity.
- If it is a pool fill and the size is large, split the order or wait, because RFQ often returns once conditions calm.
- Mind the quote timer and do not let a firm RFQ price go stale in a slow mempool.
Some aggregators let you force or exclude a source. Forcing RFQ on a liquid pair in calm conditions is usually free money on size. Forcing it on a long-tail token in a fast tape is how you end up with no fill at all, so let the router fall back there. The rule of thumb I use is lean on RFQ when the pair is deep and the tape is quiet, and let the AMM catch you everywhere else.
The reason any of this matters for real money is that the difference compounds. A few basis points saved per fill, across a lot of rebalances and executions, is the kind of leakage that quietly decides whether a strategy that backtested well actually clears its costs in production. When we wire non-custodial execution into Blockcircle, reading the route the same way, source by source, is exactly the check that keeps a good signal from getting eaten by a lazy fill. You do not need any special tooling to start. Read the breakdown, know which of the two sources you got, and treat the fallback to pools as information rather than noise.