Trading

DEX Stop Orders (Chainlink-triggered)

8 min read

What it is

Pre-signed stop-loss and take-profit orders on DEX. Sign once with EIP-712, the order sits dormant until a Chainlink price feed crosses your trigger. When it does, the order is submitted to CoW or Velora and filled gas-free for you by a solver. Fire latency: ~3 seconds from trigger crossing to orderbook submission (live-validated May 2026).

How to think about it

Stop orders close the gap where DEX limit orders aren't enough. A limit order fills when the PROTOCOL'S orderbook sees your price; a stop order fires when CHAINLINK'S oracle sees your price — far more reliable for downside protection because it's manipulation-resistant. Two directions: Stop-loss (sell when price drops BELOW trigger) and Take-profit (sell when price rises ABOVE trigger). Both protocols supported (CoW + Velora).

Step-by-step

  1. Connect wallet + pick direction

    Connect Wallet first. Pick Stop-loss (red, down arrow — for capital preservation: "sell my WETH if ETH drops below $2,800") or Take-profit (green, up arrow — for profit-taking: "sell my WETH if ETH rises above $3,500"). The page validates direction against current price and warns you if your trigger would fire immediately.

  2. Pick protocol + network

    Same picker as Limit Orders. CoW for Ethereum / Arbitrum / Base. Velora for those plus Polygon / BSC / Optimism / Avalanche. The dropdown filters chains by protocol — pick CoW, and Polygon disappears from the list.

  3. Pick sell + buy tokens

    Sell = the token you want to exit (usually WETH / WBTC / a stablecoin). Buy = what you receive on fill (usually a stablecoin like USDC). For custom tokens not in the dropdown, paste the contract address into the custom-token input.

  4. Set sell amount + trigger price

    Sell amount = how much of the sell-token to dump on trigger. Trigger price = the USD price per 1 sell-token (e.g., 2800 USD per 1 WETH). The page shows your distance to trigger in % once you connect a live price feed.

  5. Set slippage + watch duration

    Slippage tolerance default 1% — the order fills at AT LEAST (1 - slippage)% × trigger × sell amount. Watch for: 24h / 7d / 30d / 90d. Order auto-expires if trigger never hits. For longer-term hedges, pick 30d or 90d.

  6. Arm the order (approval + signature)

    Click Arm stop-loss / Arm take-profit. First-time sell-token: Approval transaction (gas, ~$0.50-3 on Base). Then EIP-712 signature (no gas). Backend stores the signed order. The Chainlink watcher takes over from here.

  7. Watch the row + trigger event

    Order list shows Armed status with current price vs trigger distance %. When within 2% of trigger, "near trigger" pulsing badge appears. When Chainlink crosses your trigger: the watcher submits the signed order to CoW/Velora within seconds, status flips to Triggered, then to Filled once the solver completes the swap. Track the post-trigger fill on the Limit Orders tab.

Tips & pitfalls

  • Chainlink ≠ CoinGecko ≠ DEX market. Chainlink feeds are STICKY — they only update when the price moves more than a deviation threshold (typically 0.5%-1%) OR after a heartbeat period (~1 hour). This is intentional manipulation resistance but means your stop may fire 30-60 seconds AFTER the spot DEX price already crossed your trigger. For most users this is fine; for flash-crash protection, it is a known limit.
  • Stop-loss MUST be BELOW current price; Take-profit MUST be ABOVE current price. The page warns you in amber if you misconfigure it — read the warning and don't bypass it. Submitting a trigger that would fire immediately wastes gas.
  • Live-validated May 2026 on CoW Base with WETH/USDC: fire happened in 3 seconds from Chainlink crossing the trigger. Median fill latency including solver execution is 10-30 seconds. This is real on-chain machinery, not a paper bot.
  • When triggered, your stop order becomes a NORMAL limit order on the chosen protocol. If the protocol can't fill it within minutes (illiquid pair, market moved too far), it may stay open at the orderbook for hours until solvers find a match. Use slippage to control how far below trigger you accept being filled.
  • Approval is gas-paid ONCE per sell-token + protocol combo. You can stack 20 different stop orders on the same WETH approval — all gas-free after the initial approval.
  • Stop orders are non-custodial. Your wallet retains the funds until trigger. We don't hold them. If we go offline, the off-chain order is dead BUT your funds are untouched — you can submit fresh orders to CoW/Velora directly through their UIs as a fallback.
  • For Polygon stop orders, use Velora (CoW has no Polygon support). Velora on Ethereum tends to be slower than CoW because it has fewer solvers; if speed matters, prefer CoW on the supported chains.
  • The "near trigger" pulsing badge is your visual alert. If you see it, the order will likely fire within minutes — make sure you have the wallet that signed it accessible in case manual intervention is needed for a failed fill.