Intermediate level
An onchain limit order is a signed instruction, such as "sell 1 ETH for at least 3,500 USDC before Friday", that a keeper, filler or solver executes once the market makes it worth doing. On most designs placing one costs no gas. DCA splits a purchase into equal buys on a schedule, and TWAP slices one large order so the pool can refill between pieces. None of them promises a fill the instant price touches your level.
Paying for speed, or waiting for price
Every swap in the guide to getting a good fill is a market order: you take what the pool offers right now and pay for that immediacy in price impact and slippage. The three tools in this guide trade immediacy for control.
- A limit order sets the worst price you will accept, then waits.
- A DCA order (dollar cost averaging) sets a schedule and deliberately ignores price.
- A TWAP order (time weighted average price) takes one large trade and spreads it thin enough that each piece barely moves the pool.
There is a puzzle hiding in the first one. An automated market maker has no order book, so there is nowhere for a resting order to sit. Onchain limit orders solve that by keeping the order somewhere else and letting a third party bring it onchain at the right moment.
How an onchain limit order works
There are two designs in wide use, and they differ in where your tokens wait.
Signed order, tokens stay home. You sign a typed message that says, in effect: sell this much of token A, receive at least this much of token B, valid until this time. The signature goes to an order service, not to the chain. Your tokens stay in your wallet, and a one time approval lets the settlement contract pull them only when someone fills an order that matches your signature exactly. The filler pays the gas. UniswapX, CoW Protocol and the 1inch Limit Order Protocol all work this way.
Vault and keeper. You deposit the tokens you are selling into a program owned account, and a keeper bot watches the price and runs the swap when your trigger is hit. Jupiter on Solana works this way, where the deposit is an ordinary low fee transaction.
| Example | Chain | Where your tokens wait | Who fills it | Cost to place |
|---|---|---|---|---|
| Jupiter Limit Order V2 | Solana | A program owned vault | Jupiter’s keeper, routed through its Ultra engine | A small Solana transaction to deposit |
| Uniswap limit orders (UniswapX) | Ethereum mainnet in the Uniswap web app | Your wallet | UniswapX fillers | No gas, beyond a one time Permit2 approval per token |
| CoW Swap limit orders | Ethereum and several layer 2s and sidechains | Your wallet | Solvers in CoW Protocol’s batch auctions | No gas after the token approval |
| 1inch limit orders | Many EVM chains | Your wallet | Anyone who submits the signed order onchain | A signature after the token approval; unfilled orders cost nothing |
Product details as of September 2026. Jupiter’s older Limit Order V1 no longer accepts new orders, and the Uniswap help center, last updated February 2026, lists Ethereum mainnet as the only network for limit orders in its web app.
Intents, in plain terms
A signed limit order is the simplest example of an intent. You sign the outcome you want, not the route to it, and independent parties compete to deliver it. What differs between systems is how that competition is run.
Dutch auction
UniswapX and 1inch Fusion start the price at the generous end and let it decay toward your minimum until a filler finds it profitable. The first filler to settle wins and pays the gas, so a failed attempt costs you nothing.
Batch auction
CoW Protocol collects orders into batches and lets solvers bid to settle each batch. Two users trading in opposite directions can be matched directly, with no pool in between.
Keeper and vault
Jupiter holds the tokens and its keeper executes when the trigger hits. Simple and fast on Solana, where fees are tiny, at the cost of trusting the keeper to act in time.
Intents come with two quiet benefits: you never pay for a transaction that fails, and there is no public swap sitting in the mempool for a sandwich bot to attack. The cost is that someone must find your order worth filling. How solvers compete, and where that competition is thin, is the subject of order books, RFQ, intents and solvers.
When price touches your level and nothing happens
This is the most common surprise with onchain limit orders, and it has four causes.
The filler needs a margin. Filling your order costs gas and the filler wants a profit, so the market has to trade through your price by enough to pay for both. The cost is roughly fixed per order, so small orders need a bigger move. Say you place a sell of ETH at 3,500 USDC and it costs a filler 4 dollars to settle (an illustrative figure):
| Order size | Order value | Market price needed | Beyond your limit by |
|---|---|---|---|
| 0.1 ETH | 350 USDC | 3,540.00 | 1.14% |
| 1 ETH | 3,500 USDC | 3,504.00 | 0.11% |
| 10 ETH | 35,000 USDC | 3,500.40 | 0.01% |
CoW Swap’s limit order documentation says this plainly: the order waits until the market price covers both your limit price and the network fees, so it may not execute exactly when the market price hits your limit.
A different price touched. The chart you watch is often an exchange price or an average. Your order is checked against onchain liquidity, or, for Jupiter’s V2 orders, against a USD price, after which the real swap still has to succeed within its slippage limit. A wick on one venue does not mean a pool traded there.
The level did not last. A wick can live for a single block with little liquidity at that price. The result is no fill or a partial one.
The keeper was too slow. Jupiter’s own FAQ lists price moves too rapid for keepers and slippage failures during settlement among the reasons an order does not execute.
Expiry, partial fills and fees
| Expiry choices | Partial fills | Canceling | |
|---|---|---|---|
| Jupiter V2 | 1 hour, 1 day, 1 week (default), 30 days or a custom date | Yes; filled parts settle, the rest stays open | Withdraw from the vault with a transaction |
| CoW Swap | Set when you place it | On by default; can switch to fill or kill | Offchain cancel is free; onchain cancel costs gas |
| Uniswap | Set when you place it | Not stated in its help pages | Canceling costs gas; expired orders cost nothing |
| 1inch | 1 hour, 1 day, 7 days, 1 month or custom | Supported by the protocol | Expires automatically; an early cancel is an onchain transaction |
Two details matter in practice. CoW notes that a partially filled order can leave a small remainder unfilled when it is too small to cover the network fee of settling it. And an offchain cancel is a request to the order service: an order can still settle in the moments before the cancel lands.
Fees vary by design. Jupiter charges its V2 limit and DCA orders a base fee of 0.03% to 0.1% plus a routing fee of 0 to 0.5%, depending on the pair. CoW takes half of any surplus above your limit price on orders placed away from the market, capped at 0.98% of volume, plus a volume fee of 0.02% on most pairs and less on stablecoin pairs. These are the published figures as of September 2026, and every interface shows the fee on the confirmation screen.
Stop losses and take profits
Jupiter’s V2 orders go beyond a plain limit: stop loss and take profit, one cancels other pairs where the first trigger cancels the second, an entry order that arms both exits, and a trailing stop that follows the price up at a distance you set, from 0.5% to 90%.
Understand what an onchain stop is: a trigger that fires a market swap, not a promise of a price. Jupiter’s limit order documentation warns that a stop loss may not execute if price moves faster than execution or liquidity runs short within your slippage tolerance.
DCA: the same amount on a schedule
Dollar cost averaging buys a fixed dollar amount at fixed intervals, whatever the price. Because a fixed amount buys more units when the price is low, your average cost lands below the simple average of the prices you bought at. Five weekly buys of 100 dollars, at illustrative prices:
| Week | Price | Units bought |
|---|---|---|
| 1 | $100 | 1.0000 |
| 2 | $80 | 1.2500 |
| 3 | $125 | 0.8000 |
| 4 | $90 | 1.1111 |
| 5 | $110 | 0.9091 |
| Total | Average price $101.00 | 5.0702 units, average cost $98.62 |
What DCA buys you is freedom from timing. Jupiter’s DCA (previously called Recurring in its web app) deposits the full amount in a vault, executes the first buy at once, then the rest at the interval you pick, such as every minute, hour, day or week, with a random offset of up to 30 seconds either way on each buy to reduce MEV exposure. The V2 minimum is 10 dollars per buy, and you can add a USD price range: a buy scheduled while the price sits outside it is skipped to the next interval.
On chains where each execution pays a network fee, the fee per buy decides whether DCA makes sense. At an illustrative 1 dollar per execution, a 20 dollar buy loses 5% and a 500 dollar buy loses 0.2%. Small amounts belong on a low fee chain. In the US, each buy also creates its own tax lot with its own cost basis, and when you pay with a stablecoin each buy is also a disposal of it, so keep the records (see cost basis).
TWAP: one large order, sliced
Price impact grows with your trade’s size relative to the pool, and arbitrageurs refill a pool after each trade. TWAP exploits both. Take the constant product pool from the fill guide, 100 ETH and 300,000 USDC, with fees ignored:
| One order of 30,000 USDC | Ten slices of 3,000 USDC | |
|---|---|---|
| ETH received | 9.091 | 9.901 |
| Average price | 3,300 | 3,030 |
| Difference | 0.81 ETH more, about 2,430 dollars at 3,000 |
The slices win by that much only if arbitrage pulls the price back to 3,000 between them. If the market trends up while you are slicing, later slices cost more. TWAP swaps price impact for timing risk, which is a good trade when the impact is large and the window is short. Modern pools are deeper than this one, so the numbers are illustrative; the shape is the lesson.
CoW Swap offers TWAP orders to Safe smart accounts. Each part settles onchain, so its documentation sets minimums in the thousands of dollars on Ethereum mainnet and a few dollars on Gnosis Chain, Arbitrum and Base (as of September 2026), and all parameters are final once signed, including a price protection limit: a part will not execute if the price has moved against you by more than the percentage you set. On Solana, a Jupiter DCA with a short interval does the same job.
Which tool for which job
| You want to | Use | Watch for |
|---|---|---|
| Trade now, at modest size | A market swap with a sensible slippage limit | Price impact and MEV |
| Trade only at a price you choose | A limit order | A touch is not a fill; pick an expiry |
| Build a position without timing it | DCA | Per execution fees and many tax lots |
| Move size without moving the pool | TWAP | The market trending while you slice |
| Cap the downside on a position | A stop loss trigger | No promised fill in a fast market |
Staying in control of open orders
An open order is a standing permission. Once signed, anyone can fill it on its terms until it expires or you cancel it. For a signed order that usually holds even if you move the tokens out of your wallet and back later. Three habits keep that under control:
- Short expiries. Pick the shortest expiry that fits the idea, so stale orders clean themselves up.
- One list. Vault deposits leave your wallet balance, and signed orders do not appear in it at all. Check each app’s open orders tab.
- Tidy approvals. The settlement contract or Permit2 approval that lets orders fill stays in place after they do. Review it with the token approvals guide.
Common questions
Do onchain limit orders cost gas to place?
On signed order designs such as UniswapX, CoW Swap and 1inch, placing the order is a free signature once the token is approved; the filler pays the gas when it settles. On Jupiter you deposit into a vault, which is an ordinary Solana transaction with a small fee. Canceling onchain usually costs gas.
Why did my limit order not fill when the price hit my level?
Because a filler needs the market to trade through your price by enough to cover gas and a profit, the touch may have happened on a different venue or price feed, or the level lasted too briefly for a keeper to act. Small orders need the biggest overshoot. Setting the limit slightly beyond your level helps.
Is DCA better than buying all at once?
Neither is better in general. DCA always gives an average cost at or below the average of the prices on your buy dates and removes the stress of timing. A single purchase at the start does better in a market that rises steadily, and worse in one that falls first.
What is the difference between DCA and TWAP?
The purpose. DCA spreads buys over weeks or months to avoid timing the market. TWAP spreads one large order over minutes or hours to reduce its price impact. The mechanics can be identical, which is why a short interval DCA works as a TWAP.
Are my tokens safe while a limit order is open?
On signed order designs they stay in your wallet and can only leave in a fill that matches the terms you signed. On vault designs they sit in a program owned account until the order fills or you withdraw. The real risks are signing a malicious order on a phishing site and forgetting orders that are still live.
Where to go next
Next: Providing liquidity: your first pool
Guide 7 of 16 in the Intermediate level. Your place is kept on this device, so you can pick up exactly here next time.