Cross Chain

Cross-chain swaps explained: how intent-based routing works

A practical explainer of intent-based cross-chain swaps — what gets sent where, how the route is decided, and where the failure modes hide.

uSwap blog hero — cross-chain swaps explained

Most people who use a “cross-chain swap” don’t think about how it works. They paste a destination, send a source asset, the destination asset shows up. Good UX makes the underlying machinery invisible. But if you’re going to send non-trivial value across chains, knowing how the routing decision is made (and where the failure modes hide) is worth the five minutes.

The two models

There are two ways services have historically done cross-chain swaps:

Bridge model. You wrap your source asset into a bridge-issued representation on the destination chain. e.g. send ETH on mainnet, receive wETH on Polygon. The “swap” is a deposit + a mint, and it works as long as the bridge is solvent. The bridge is the critical dependency — and the historical risk: most of the biggest hacks in crypto have been on bridges.

Trade model. You sell the source asset for the destination asset on a market that holds liquidity in both. e.g. send ETH on mainnet, receive XMR on Monero. There’s no wrapping — your ETH gets sold for XMR, the XMR is sent to your wallet from a pool that already holds it. The market is the critical dependency: depth and slippage matter.

The trade model is what most no-signup cross-chain swaps actually do — even when the UX looks bridge-like. The pool you’re trading against just happens to be on the destination chain.

Intent-based routing

“Intent-based” is the design pattern that’s emerged over the last 2 years for trade-model cross-chain swaps. The shape is:

  1. User declares an intent. “I want X on chain Y.” Not a transaction, not a route — a goal.
  2. A solver network competes. Multiple parties (called solvers, fillers, or routers depending on the protocol) propose ways to fulfil the intent. They quote rates against their inventory or liquidity-source choices.
  3. The best route wins. The user (or the routing service on their behalf) accepts the best quote. Best is usually a combination of rate, time-to-finality, and reliability.
  4. The route executes. The winning solver pulls from their inventory and sends the destination asset to the user’s specified address.

The user’s role ends at step 1. They don’t pick the route; they don’t see which DEXes are involved (unless they want to); they don’t sign multiple transactions across chains. They send the source asset, they receive the destination asset.

NEAR Intents is the protocol this is built on for uSwap — but the same shape exists at Across, Squid, Li.Fi, and others with different solver networks.

What happens when you swap on uSwap

Here’s the same step-by-step, applied to a uSwap trade (say, BTC → SOL):

  1. You send BTC to your lifetime BTC deposit address on uSwap.
  2. Solvers re-quote against the actual amount that landed (in case fees changed it). 7+ partner solvers / DEXes propose a path: “I’ll give you N SOL for your M BTC, route through these pools, total time X minutes.”
  3. The best path is locked. uSwap selects the winning route, surfaces it in the UI so you can see what’s happening.
  4. The solver fulfils. They pull SOL from their inventory and send it to your Solana destination address. The matching BTC settlement happens on their side.

You see two on-chain transactions: your BTC deposit (you initiated it) and the SOL inbound to your wallet (the solver initiated it). The intermediate hops (if any) happen inside the solver’s network and are invisible to you.

Where failure modes hide

Intent-based routing is robust at the happy path but has a few edge cases worth knowing:

Solver inventory shortage. If the destination asset has limited liquidity that day, the rate degrades or the trade doesn’t fill. Modern routing layers (including uSwap) re-quote across multiple solvers and fall back automatically if the top quote evaporates.

Source chain finality. Bitcoin needs to confirm before the solver will trigger. Faster-finality source chains (Ethereum, Solana, BNB) get faster swaps.

Destination chain congestion. If Ethereum mainnet is congested, an ETH-receive swap can sit pending in the solver’s send queue while gas spikes pass.

Wrong-asset / wrong-amount / wrong-network deposits. If you send the wrong thing, modern routing surfaces let you re-quote against what landed or refund. (See the BTC→XMR walkthrough for what this looks like in UI.)

Solver outage. The honest one: if every solver on a route is degraded simultaneously, the trade waits. This is rare and usually scoped to specific pairs.

What it doesn’t do

Two things people sometimes confuse:

Cross-chain swap ≠ bridging. No wrapped asset is created. You’re not minting wXMR on Solana; you’re selling your input for native XMR sitting in a pool that already had XMR.

Cross-chain swap ≠ MEV exposure on your side. The MEV exposure (front-running, sandwich attacks) sits on the solver’s side, not yours. You’re not signing approvals against your wallet on a destination chain.

uSwap glass composition — abstract

The economics: who pays for the route

A side note worth understanding because it explains why some services can charge 0% while others charge a spread.

In an intent-based architecture, the routing layer doesn’t usually take a direct fee from the trade. The economic model splits into three parts:

  1. DEX trading fees (paid on-chain, baked into the partner pool’s price) — these go to liquidity providers on the underlying DEX. ~0.01-0.3% typical.
  2. Solver profit (the difference between what the solver buys at and what they quote you) — solvers compete, so this is typically very small. Sometimes called the “winner’s curse” — solvers win by quoting the tightest spread.
  3. Routing-layer fee (operator markup) — this is where services vary. uSwap charges 0% here; aggregator widgets typically charge 0.1-0.3%; custodial swap aggregators bake 0.4-1% into their quote.

The first two are unavoidable architectural costs. The third is the operator’s choice. When you see “0% fee” claims, what matters is whether they apply to the third item only or whether they’re claiming to dodge the first two (which would be impossible).

What happens when a solver is wrong

Solver networks are economically incentivized to quote accurately and fulfil the trade — they post collateral, get slashed if they don’t deliver. But occasionally a solver wins a quote and then can’t fulfil it (their inventory shifted, gas spiked, the destination chain congested).

The recovery for this is “re-auction” — the intent gets re-quoted across the remaining solvers and a new winner is chosen. The user experience is a slight delay; the trade still fills.

The failure mode is when every solver fails simultaneously, which usually means the destination chain itself is degraded. In that case the routing layer surfaces a refund flow rather than letting the trade sit indefinitely.

This is one of the practical advantages of intent-based routing over bridge-based — bridges have a single contract that either works or doesn’t. Intent routes have fallback partners.

How uSwap differs from a typical aggregator widget

Widget aggregators (the ones embedded in wallets) typically:

  • Operate on one chain at a time (or one chain pair).
  • Require wallet-connect, signing.
  • Quote across a fixed set of DEXes on that chain.
  • Don’t handle deposit-address-style “send and forget” interactions.

uSwap is intent-based across chains, no wallet-connect required, deposit-address-shaped, with full wrong-asset/wrong-amount/wrong-network recovery surfaced to the user. The tradeoff: there’s an operator (us, doing the routing) where pure-protocol approaches have none. The compensation: no signup, no KYC, account-free architecture (see The wallet is the account).

Same engine, different destinations

The fact that “cross-chain swap” is the underlying primitive is what makes the rest of the product possible. The same routing layer that sends you SOL when you deposit BTC is what sends an Amazon gift code, Telegram Premium credit, Mullvad VPN time, or a Discord Nitro activation. The destination type just decides which solver/partner pool the engine routes into.

The full primitive tour: Swap anything to anything. For a side-by-side ranking of the actual cross-chain swap services in 2026: Best cross-chain crypto swaps 2026.

Keep reading