Filler Overview
UniswapX is a permissionless auction-based protocol where fillers compete to execute user swaps at the best prices. Anyone can participate as a filler by winning these auctions.
This overview covers:
- The difference between quoters (Ethereum) and fillers (all chains)
- How to get started quoting or filling orders
- Common questions and troubleshooting
Getting Started:
- Join our Announcements Channel on Telegram for updates
- Join our Fillers Group on Telegram for discussion
- To quote on Ethereum, join the waitlist or email
Quoters vs. Fillers
Ethereum Mainnet uses a two-role system (Quoters + Fillers) due to its 12-second blocks and high gas costs, while L2 chains use only Fillers thanks to their fast block times.
- On Ethereum Mainnet
- Quoters (Permissioned): Provide off-chain quotes through RFQ and compete for exclusive fill rights
- Fillers (Permissionless): Execute orders during Dutch auction if quoters fade or decline
- On L2 Chains
- Fillers only (Permissionless): All participants compete directly onchain without RFQ
This design ensures optimal price discovery: Ethereum needs off-chain quoting to avoid slow auctions, while L2s can efficiently discover prices onchain.
Become a Quoter or Filler
Become a Quoter
In the current Uniswap Labs interface implementation of UniswapX, some fillers may choose to help parameterize orders on Ethereum by participating as quoters. These fillers can only win a quote if they guarantee improved swap execution over Uniswap v2, v3 or v4 liquidity pools. Fillers who win a quote will receive execution priority for a limited period to fill orders for which they submitted winning quotes.
To ensure a smooth swapping experience for traders, the set of quoters are vetted by Uniswap Labs. To read about expectations for quoters, please see Become a Quoter. If you are interested in participating as a quoter, please reach out here or join the waitlist.
Become a Filler
This documentation contains specific integration guides for each chain. Choose your chain to see specific integration details:
- Ethereum - RFQ system with exclusive fill periods
- Arbitrum - Direct Dutch auction with 0.25s blocks
- Unichain, Base - Priority gas auctions
To learn about the different auction mechanics, please see the Auction Types Overview page.
Fillers should start with polling for orders and rate limit at 6rps. If after polling, a filler's performance is degraded due to the polling rate limit, please see the Webhook Support documentation to learn about registering webhooks for orders.
Filler FAQ
Getting Started
Which IPs do I need to whitelist?
IPs to whitelist:
Beta Test Environment
- Quote requests:
3.135.148.114
- Order notification webhooks:
3.129.136.245
Production Environment
- Quote requests:
3.138.88.28
- Order notification webhooks:
3.14.56.90
Why don’t I get quote requests for Unichain/Base/Arbitrum?
On Ethereum, we use RFQ to accurately parameterize the order which often results in exclusive orders. On L2s, we don’t use RFQ and instead parameterize the auction solely based on the AMM price. As a result, we will only notify fillers of orders that are ready to be executed via the orders API or your registered webhook endpoint. Fill out this onboarding form if you would like your endpoint to be notified via webhook, but it is recommended that fillers try polling first and only pursue a webhook as needed.
For more information, please see our Webhook Support Page.
What's the expected RPS for quoting on Ethereum?
1 RPS.
Which tokens are supported in RFQ?
All tokens are supported, except those on the unsupported token list.
Technical Issues
I’m getting 404, no quotes available?
There are several reasons why you might receive this error:
-
Price Impact: UniswapX has filters that route trades to the AMM when direct AMM execution would be superior. If the price impact is too high or the benefit of routing through UniswapX isn't significant enough, no quote will be returned for this pair.
-
Order Size: Very small orders may not be economical to fill through UniswapX due to gas costs. Similarly, extremely large orders might exceed available liquidity from quoters.
-
Response Latency: If your filler responds but takes longer than 500ms, your quote will be rejected. Ensure your infrastructure can consistently respond within this latency requirement. The quote server is located in AWS
US-EAST-2
if you wish to co-locate to reduce latency.
The transaction is reverting for a certain reason (e.g. InvalidOrderFields
). What does this mean?
Check the KNOWN_ERRORS in the SDK to see what the likely causes are.
Why did my server stop receiving quote requests?
Your server may be temporarily blocked due to our fade-rate monitor. If you win an RFQ but don't fill the order, this counts as a "fade." After too many fades, we temporarily stop sending you RFQs.
You'll know you're blocked when quote requests include a blockUntilTimestamp
field indicating when you'll start receiving requests again.
Why does my fill transaction fail the permit2 nonce check?
A permit2 nonce check failure typically means:
- The order has already been filled by another filler
- The user cancelled the order
- The signature has expired
Before attempting to fill, verify the order is still valid. See: "How do I know if an order is still fillable?"
Order Mechanics
How do I know if an order is still fillable?
The simulation using the UniswapXOrderQuoter will tell you whether the order is still fillable.
How is the OrderHash generated? Is it guaranteed to be unique?
OrderHashes are generated from the hash of the witness information from the order, and are thus guarenteed to be cryptographically unique.
Why do I receive inverse requests for every quote (e.g. USDC<>ETH and ETH<>USDC)?
We perform two quote requests per actual quote to obfuscate the swappers actual request to reduce the chances of front-running.