Skip to main content

The 5-layer fee stack of every cross-chain swap (3 routes, 2026-06-26)

Every cross-chain swap quote has five fee layers: source-chain gas, solver spread, destination-chain gas (plus Solana ATA rent), slippage band, and refund-tx fee if anything goes wrong. We name who collects each, when it triggers, and the dollar range on three real routes (Route 1 from project archived sampling; Routes 2-3 from industry-typical bands).

· 13 min read

Key takeaways

Frequently asked questions

Is a "zero platform fee" cross-chain swap actually free?

<p>No. "No service fee" means UpSwap doesn't add a line item on top of the quote — the widget number is what lands in your wallet. The other four layers are still there: source-chain gas, solver spread (this is how the aggregator and solver actually earn), destination-chain gas or rent, and the slippage band the solver internally prices in. Honest framing: the quoted out-amount already has the spread baked in. On a 1,000 USDT ERC20 to TRC20 route, the project's archived UpSwap quote of 994.79 USDT out implies a spread of about 0.521% (5.21 USDT) — archived sampling, not a live 2026-06-26 quote.</p>

Why is my swap quote worse than the CoinGecko mid-price?

<p>Because CoinGecko shows the market midpoint (an average of bid/ask). Your quote includes solver spread (Layer 2) plus an internal slippage band (Layer 4) the solver uses to absorb price drift between bid time and on-chain fill. Industry-typical bands at the 2026-06-26 sampling date were 0.05-0.30% on liquid same-chain stablecoin routes, 0.10-0.60% on major L1 swaps, and 1.0-3.0% on long-tail or small-size routes; the solver-internal slippage band typically runs 0.2-0.8% on major routes and is absorbed inside the quoted spread (distinct from the user-side floating-quote slippage tolerance in FAQ #3). BTC-involved or long-tail routes show wider gaps because the solver waits for confirmations and prices in finality risk. Live quotes are the only authoritative number.</p>

What's the difference between solver spread and slippage?

<p><strong>Solver spread</strong> is the implicit margin the solver and aggregator share between market mid and the quoted out-amount; it's their revenue. <strong>Slippage</strong> is price movement between when the quote is made and when the swap fills on-chain. In a fixed-quote intent system (NEAR Intents 1Click, Relay), the solver eats slippage and prices that risk into the spread. In a floating-quote DEX aggregator, you eat slippage up to your user-side tolerance band (commonly 0.5-1% default) — this is distinct from the solver-internal 0.2-0.8% band cited in FAQ #2, which the solver absorbs. Same economic event, different party absorbs it.</p>

Why does receiving on Solana cost an extra ~14 cents?

<p>Solana requires every SPL token holder to have an Associated Token Account (ATA), and the ATA must hold a rent-exempt minimum deposit: 0.00203928 SOL (about $0.135 at SOL = $66.37, 2026-06-26). This is a one-time charge the first time you receive a given SPL token to a wallet. The rent is recoverable — close the ATA and the SOL comes back. After the first deposit, subsequent receives of the same token to the same wallet cost only the ~5,000 lamport base fee (under $0.001).</p>

Why did my refund arrive smaller than what I sent?

<p>The refund transaction pays its own source-chain gas, and the aggregator does not subsidize it (the miners or validators get those fees, not UpSwap). At 2026-06-26 sampling: ETH refunds cost $0.01-$0.03 at sub-gwei rates; BTC refunds run $0.34-$0.60 at 3-4 sat/vB and can hit $2-$5 during peak mempool; TRC20 refunds cost ~$2.00-$2.20 if the sender pays TRX burn (6.5 TRX × $0.323915 = $2.11) instead of using staked energy. Note: the NEAR Intents <code>min_deadline_ms</code> 60s default is a minimum signing window, not a cap. For why refunds happen at all and where the coins live in the meantime, see <a href="/guides/non-custodial-vs-custodial-where-funds-go-when-swap-fails">Guide #1</a>.</p>

Do I pay gas on both the source chain AND the destination chain?

<p>It depends on the destination. <strong>Solana receive:</strong> yes (one-time ATA rent ~$0.135 plus 5,000 lamports base fee). <strong>Ethereum receive:</strong> yes (21,000 gas for EOA, ~$0.01 at 0.32 gwei × ETH $1,567.97 on 2026-06-26). <strong>BSC receive:</strong> yes but trivial (~$0.0006). <strong>Tron receive:</strong> no direct fee to the receiver — the sender's energy or TRX burn covers the contract execution. <strong>Bitcoin receive:</strong> no direct fee to you on arrival — the solver pays the BTC-side miner fee and bakes it into the quoted out-amount. You only pay BTC L1 fee when YOU later spend the UTXO (each input costs sat/vB).</p>

How can I see the solver spread before I confirm?

<p>Compare the quote's out-amount against the CoinGecko mid for the same pair at the same instant. Compute the effective rate: <code>(out_amount × destination_price) / (in_amount × source_price)</code>; the gap from 1.000 is the all-in cost — spread plus any chain gas the solver netted out. For the archived 1,000 USDT ERC20 → 994.79 USDT TRC20 route, mid out ≈ 1,000 (both legs at $0.99866), so (1000 − 994.79)/1000 = 0.521%. Industry-typical bands at the 2026-06-26 sampling date were 0.05-0.30% (liquid same-chain stablecoin), 0.10-0.60% (major L1), and 1.0-3.0% (long-tail). Anything wider, screenshot it and ask <a href="https://t.me/upswapservice">@upswapservice</a> before signing.</p>

Are NEAR Intents fixed quotes really locked, or can the price change?

<p>Locked, with a minimum signing window. Per NEAR Intents 1Click docs (sampled 2026-06-26): solvers bid for 3,000 ms, the winning quote carries a <code>quote_hash</code>, <code>expiration_time</code>, <code>amount_in</code>, and <code>amount_out</code>; the default <code>min_deadline_ms</code> is 60,000 ms (a minimum, not a maximum), and the solver is committed to honor the quoted out-amount. If the market moves against the solver between bid and fill, the solver absorbs it; the risk premium is priced into the L2 spread, and the user receives the certain <code>amount_out</code>. If you don't sign before <code>expiration_time</code>, the quote dies and you re-quote at the new market. Relay's model is similar with <code>permitExpiry</code> defaulting to 600 seconds.</p>

Swap routes referenced in this guide

Related comparisons

Other guides

Ready to swap?

Pick your tokens and swap directly — non-custodial, no KYC, all-in fixed quote.