Trade with CoW Swap (Coincidence of Wants)
How to use CoW Swap: gasless swaps, MEV protection via batch auctions, and limit orders — plus exactly how the protocol charges you, and the cases where a different venue is the better tool.
What CoW Swap actually is
CoW Swap is the trading interface built on top of CoW Protocol. It is not an automated market maker and it does not hold its own liquidity pools. Instead it is an intent-based exchange: you do not submit a swap transaction, you sign a message describing the outcome you want. In CoW Protocol's own terminology that signed message is an intent (also called an order), and it carries fields such as sellToken, buyToken, sellAmount, buyAmount, the order kind (sell or buy), partiallyFillable, a receiver address, and validTo — the timestamp after which the order expires.
Because that intent is a signature rather than a transaction, placing an order normally costs you no gas and cannot fail on-chain at your expense. A third party called a solver takes on the job of finding execution and paying the gas to settle it. The settlement contract, GPv2Settlement, is deployed at the same deterministic address on every supported chain, and the token-moving helper contract is GPv2VaultRelayer — that relayer, not the settlement contract, is the address your ERC-20 approval is granted to.
CoW Protocol's core contracts are deployed across a wide set of EVM networks, including Ethereum mainnet, Gnosis Chain, Arbitrum One, Base, Optimism, Polygon, BNB Chain, Avalanche, Linea and others, plus Sepolia for testing. The exact chain list changes as new deployments land, so treat the network selector inside the app as the authoritative list rather than any article — including this one.
How the batch auction works
Orders are not executed one by one in the order they arrive. They are collected off-chain into a batch auction. Solvers — independent, bonded actors who compete for the right to settle — look at the whole batch at once and submit bids: proposed settlements for individual orders or for groups of orders together. The protocol picks the combination of winning bids that maximises the surplus delivered to the orders in the auction, and filters out batched bids that would deliver a worse result to any order than an available non-batched bid.
Three properties fall out of that design, and they are the actual reason to use CoW Swap rather than a router:
- Uniform clearing prices. If the same directed token pair appears several times in one batch, every one of those trades clears at the same price. Position within the block stops being worth anything, which removes the ordering advantage that sandwich attacks depend on.
- Coincidence of Wants (the "CoW"). If one trader is selling ETH for DAI and another is selling DAI for ETH in the same batch, the solver can match them peer-to-peer. That portion of the trade never touches an AMM, so it pays no LP fee and consumes far less gas.
- You never enter the public mempool. Your signed intent goes to the protocol's order book, not to a public transaction pool where searchers can see and front-run it. The solver's settlement transaction is the only thing that appears on-chain.
The trade-off is that you give up certainty of immediate execution. A router transaction either reverts or fills within one block. A CoW Swap intent sits in an auction until a solver finds a settlement that satisfies your limit — which is usually seconds, occasionally minutes, and for an aggressively priced limit order possibly never.
What you'll need (prerequisites)
- Self-custodial wallet (MetaMask, Rabby, etc.)
- ETH or native gas token
- Tokens to gasless swap with
- Familiarity with transaction approvals
Two of those deserve a note. The wallet must be able to produce an off-chain signature: an EOA signs with EIP-712 (preferred, because your wallet can display the full order fields) or eth_sign. A smart-contract wallet such as a Safe cannot do either, and instead signs via ERC-1271, or uses PreSign — an on-chain call to setPreSignature, which does cost gas. If you are setting up from scratch, our guides to MetaMask, Rabby and Safe cover the wallet side.
The native gas token matters less than people expect but is not optional. The swap itself is gasless, but the first ERC-20 approval for a given token is an ordinary on-chain transaction you pay for, and selling native ETH (rather than WETH) always requires an on-chain transaction. Keep a modest buffer of the chain's native token.
Recommended for this tutorial
Tools and accounts referenced in the steps below:
Step-by-step
-
Step 1: Connect a self-custodial wallet
Open CoW Swap's official site and verify the URL character by character — cloned front-ends that harvest approvals are a persistent problem across every DEX. Click
Connect walletand choose your wallet (browser extension, hardware, WalletConnect, or a smart-contract wallet such as Safe). Connecting is a read-only handshake and does not move funds. -
Step 2: Select the correct network
Switch your wallet to the chain you intend to trade on and confirm the app's network selector agrees. CoW Protocol runs the same contracts on many EVM chains, so an order signed on the wrong chain will simply sit against liquidity you did not mean to use. The token lists, fee tiers and available solvers all differ per chain.
-
Step 3: Fund the account and pick your tokens
Select the sell and buy tokens. If you plan to sell native ETH, be aware this uses the separate eth-flow path: it wraps and places the order in a single on-chain transaction that you pay gas for, and that gas is not refunded if the order later fails to fill. If you swap ETH regularly, wrap once into WETH and trade WETH thereafter — one wrap is usually cheaper than repeated eth-flow transactions.
-
Step 4: Approve the vault relayer
The first time you sell a given ERC-20, you must approve
GPv2VaultRelayerto move it. The interface will detect whether the token supports gasless (permit-style) approval — USDC, DAI and COW among others do — in which case the approval is another signature rather than a transaction. Otherwise it is a normal transaction that costs gas. The app defaults to an unlimited allowance to avoid repeat approvals; set an exact amount instead if you prefer to cap your exposure, and read the spender address on the confirmation screen before signing. -
Step 5: Review the quote and sign the order
Enter the amount and open the order details. Check the slippage tolerance the interface has applied (the default has historically been 0.5%; whatever value is shown is the one that binds you), the estimated fee, and the
receiveraddress — it should be your own address or the zero address, never anything you do not recognise. ClickSwapand sign in your wallet. You are signing an intent, not broadcasting a transaction. A solver then settles it on-chain. -
Step 6: Track, and verify on-chain
The app shows a notification when the order executes, and your recent activity is available by clicking your address in the top right; full order history is on CoW Explorer. Once filled, open the settlement transaction on the chain's block explorer and confirm the balance change matches what you expected. Save the transaction hash — under most tax regimes each swap is a disposal and you will need the record.
How CoW Swap fees are actually charged
This is the part most guides get wrong, because CoW Swap does not bill you the way an AMM does. There is no separate fee transfer and no fixed percentage on every trade. Per CoW Protocol's governance documentation, protocol fees are charged in the surplus token — the buy token for sell orders, the sell token for buy orders — and they are applied by adjusting the executed amounts, not by taking a second transfer out of your wallet.
The documented fee policies are:
- Surplus fee on out-of-market limit orders. 50% of the surplus generated, capped at 0.98% of the order's total volume. It applies only to orders that were not executable at the moment they were created.
- Quote improvement fee on market orders. 50% of any positive difference between the quoted price and the price actually achieved, again capped at 0.98% of volume. If your order executes at exactly the quote, there is nothing to share and this component is zero.
- Volume fee. A flat component on volume — documented at 2 basis points (0.02%) for standard assets and 0.3 basis points (0.003%) for correlated assets such as stablecoin and RWA pairs.
- Partner or widget fee. If you reach CoW Swap through an integration — a wallet's built-in swap tab, for example — that integrator may add its own fee on top, calculated separately from the protocol fee. Trading on the CoW Swap front-end directly avoids it.
- Network costs. The solver pays the settlement gas and prices that cost into the execution you receive. You do not send a gas payment for the swap itself. The exceptions are the initial non-gasless approval, the eth-flow transaction when selling native ETH,
PreSignorders, and on-chain cancellations.
Because the surplus and quote-improvement components depend on the price a solver actually achieves, the exact euro or dollar amount cannot be known before execution. The fee rate is shown in the interface before you sign, and the executed amounts are visible afterwards on CoW Explorer. Fee parameters are set by CoW DAO governance and have changed more than once; verify the current numbers in the interface and in the protocol docs rather than trusting a figure written down at any point in the past.
Order types beyond the simple swap
Market order (swap). Fill as soon as a solver can beat your minimum. This is the default tab and behaves closest to a familiar DEX swap, minus the mempool exposure.
Limit order. You set a price and a validity duration, and the order rests until a solver can fill it or it expires. Placing and cancelling limit orders off-chain is free. CoW Swap sets limit orders to partially fillable by default, so a large order can be worked down as liquidity appears; you can switch to fill-or-kill in the swap panel settings. The interface shows an "Executes at" column and a traffic-light indicator for how close each open order is to its execution range. Note the fee model above: on an out-of-market limit order, the protocol takes a share of the surplus rather than charging you up front, which is why limit orders can be placed without paying anything.
TWAP. A large order split into equal parts executed at intervals, to reduce market impact. TWAP on CoW Swap requires a Safe wallet — plain EOAs are not supported — and older Safes may need their fallback handler upgraded first. You set price protection, the number of parts and the total duration; part duration and per-part amounts are derived. Minimum order sizes apply and differ by chain, and each part settles on-chain, so more parts means more total settlement cost.
Cross-chain swap (swap and bridge). Sells your token on the source chain, then routes the proceeds through a bridge provider to a different chain. Funds pass through your CoW Shed account proxy, so a failed leg leaves assets recoverable in your proxy rather than lost. The quote breaks out the bridge provider's fee and an estimated bridging time separately from the swap. Bridging the same token between two networks is not supported, ENS names are not accepted as recipients, and once the bridge leg has started it cannot be cancelled — only the swap phase can be soft-cancelled.
Security and pitfalls
- The approval is the real risk surface, not the swap. An unlimited allowance to the vault relayer is only as safe as that contract. It is heavily reviewed and CoW DAO runs a public bug bounty on Immunefi with rewards scaling to seven figures for critical smart-contract findings, but "audited" is not "safe". Review your allowances periodically — see how to revoke token approvals.
- Phishing front-ends. Because the whole flow is signature-based, a malicious clone can get you to sign something that looks like an order. Bookmark the real URL. Read the signature payload your wallet displays; EIP-712 exists precisely so you can.
- Check the receiver field. CoW Swap supports sending output to an address other than the signer. That is a legitimate feature and also an obvious abuse vector. If the receiver is not you and you did not set it, do not sign.
- Slippage still binds you. MEV protection is not the same as slippage protection. Your order carries a minimum output, and a wide tolerance on a thin market can still produce a poor fill. Tighten it for stable pairs; check depth first for anything illiquid, using our note on checking token liquidity.
- Verify the token contract. Nothing about batch auctions prevents you buying a worthless or malicious token. Confirm the contract address independently — verifying a smart contract takes two minutes — and be sceptical of tokens with transfer taxes or rebasing supply, which interact badly with fixed-amount intents.
- Residual protocol risk is real. In February 2023 an attacker exploited insufficient validation in a settlement interaction and drained roughly $180,000; contemporaneous analysis indicated the loss fell on the solver/protocol side rather than on traders' balances. The code has changed substantially since, but the general lesson stands: size positions so that a contract failure is survivable.
Troubleshooting
- The order never fills. For a limit order this is normal — your price is out of market and no solver can profitably settle it. For a market order, it usually means liquidity moved away from your minimum, or the pair is too thin for any solver to route. Cancel and re-quote rather than waiting.
- Cancellation did not work. Off-chain cancellation is free but not instantaneous, and an order can be matched in the window between your request and its processing. On-chain cancellation costs gas and still races the settlement transaction. Neither method can claw back an order that has already settled.
- Quote shown, but no quote on confirm. Quotes expire. Refresh and re-read the numbers; do not sign a stale screen.
- Approval transaction stuck pending. The approval is an ordinary transaction, so ordinary remedies apply: speed it up with a replacement at a higher gas price, or cancel it by replacing the same nonce with a zero-value self-transfer.
- You approved something you should not have. Revoke the allowance immediately, then move remaining balances to a fresh wallet if you believe the compromise is ongoing rather than a single bad approval.
- Smart-contract wallet cannot sign. Safes and other contract accounts use ERC-1271 or
PreSign. If your Safe cannot place an order, check that the app supports contract signatures on that chain and that your Safe's fallback handler is current. - Native ETH order failed and the gas is gone. Expected behaviour for eth-flow: the placement transaction is on-chain and is not refunded when the order does not fill. Wrap to WETH if you are going to retry.
When not to use CoW Swap
CoW Swap is a strong default for size on liquid pairs, and a poor choice in several specific situations:
- You need guaranteed execution in this block. Liquidating a leveraged position, defending a loan against liquidation, or racing a mint — an intent that waits for a solver is the wrong instrument. Use a direct router where a revert is immediate and a fill is certain.
- Very small trades on mainnet. The solver's gas cost is embedded in your price. On a $20 swap that cost dominates, and the CoW matching benefit is negligible. Trade on an L2, or accept a direct route.
- Non-EVM chains. CoW Protocol is EVM-only. For Solana, an aggregator such as Jupiter is the equivalent tool.
- Exotic token mechanics. Fee-on-transfer and rebasing tokens do not fit cleanly into fixed sell and buy amounts. If a token takes a cut on transfer, expect failures or surprises; trade it on the venue its community actually uses.
- You want to compare routes yourself. A classic aggregator like 1inch or a direct pool trade on Uniswap gives you an explicit route you can inspect before signing. CoW Swap deliberately abstracts the route away.
- Simple bridging. Moving the same asset between chains is not supported by the cross-chain flow, and a dedicated bridge is better suited — see bridging to Base or to Arbitrum.
FAQ
Is CoW Swap really gasless?
The swap is. You sign an off-chain intent and a solver pays the settlement gas, pricing that cost into your execution. You still pay gas directly in four cases: a first-time ERC-20 approval on a token without permit support, selling native ETH via eth-flow, orders signed with PreSign, and on-chain cancellations.
What are the fees for CoW Swap?
Protocol fees are charged in the surplus token by adjusting the executed amounts, not as a separate transfer. The documented policies are 50% of surplus on out-of-market limit orders and 50% of quote improvement on market orders — both capped at 0.98% of volume — plus a volume component (2 bps for standard assets, 0.3 bps for correlated pairs such as stables). Integrators may add a partner fee. Governance changes these, so read the rate shown in the interface before signing.
Can I cancel an order?
Yes, until it settles. Off-chain cancellation is free but not instant, so an order can still be matched in the gap. On-chain cancellation costs gas and also races the settlement transaction. Once a settlement is confirmed it is irreversible like any on-chain trade.
How does CoW Swap protect against MEV?
Three mechanisms. Uniform clearing prices mean every trade of the same directed pair in a batch settles at the same price, so ordering within the block carries no advantage. Your intent never enters the public mempool. And Coincidence of Wants matches opposing orders peer-to-peer, bypassing AMM pools entirely. This is protection against sandwiching and front-running — it is not protection against setting a bad slippage tolerance or buying a bad token.
Which chains does CoW Swap support?
The GPv2Settlement and GPv2VaultRelayer contracts are deployed at deterministic addresses across a broad set of EVM networks — Ethereum, Gnosis Chain, Arbitrum One, Base, Optimism, Polygon, BNB Chain, Avalanche and Linea among them, plus Sepolia for testing. It is EVM-only; there is no Solana or Bitcoin support. Use the app's network selector as the current list.
Why has my limit order not executed?
Almost always because it is out of market: no solver can settle it profitably at your price. The interface shows an "Executes at" price and a traffic-light indicator of how far away you are. Limit orders are partially fillable by default, so you may also see a partial fill sitting open while the remainder waits.