My cross-chain swap is stuck — diagnose by symptom and source chain (BTC / ETH / SOL / TRC20 5-minute decision tree)
Most stuck swaps fall into four symptom buckets: wallet debited but order pending, source confirmed but destination silent, quote expired before signing, or refund initiated but not arrived. Match your symptom to the right row, check the on-chain wait window for your source chain, and only escalate to <code>@upswapservice</code> after the worry threshold is crossed.
Key takeaways
- ·Four symptom buckets cover 95%+ of stuck swaps: wallet-debited-but-pending (10s–15min), source-confirmed-destination-silent (30s–3min after source finality), quote-expired-before-signing (re-quote returns under 1s synchronously), refund-initiated-but-not-arrived (5–30min, minus on-chain refund tx network fee of $0.5–$5). These four cover the dominant failure modes across UpSwap's 24+ chains, 111 tokens, and 166 chain-token combinations routed through NEAR Intents + Relay.
- ·Source-chain confirmation thresholds vary by orders of magnitude: BSC finalizes in ~1.1s post-Fermi (BEP-590, deployed 2026-01-14), SOL finalizes in ~13s (32-slot supermajority), TRC20 in ~57s (19 of 27 SR blocks), ETH soft-confirms per 12s slot but bridges wait 15–35 conf heuristically (protocol finality is two epochs = 768s), BTC waits 1–6 confirmations averaging 10–60 minutes (source: en.bitcoin.it/wiki/Confirmation, sampled 2026-06-17). BTC has no protocol finality — confirmation count is a probabilistic safety threshold (Nakamoto consensus).
- ·Quote expiry is a routing fact, not a front-run: NEAR Intents 1Click defaults <code>min_deadline_ms</code> to 60,000 ms (1 minute) with a 3,000 ms solver-bid auction window; Relay defaults <code>permitExpiry</code> to 600 seconds for EIP-3009 permit deposits, and revalidates non-permit quotes at fill time. Walking away from the screen for two minutes is enough to invalidate the rate (source: docs.near-intents.org, docs.relay.link, sampled 2026-06-17).
- ·Refunds always pay their own refund tx network fee (the on-chain fee paid by the refund transaction itself). Expect to lose roughly $2–$5 on BTC, $1–$3 on ETH L1, $0.30–$1 on TRC20, $0.01–$0.10 on BSC, and under $0.10 on SOL. The miner/validator/SR collects this — it is not an UpSwap fee, and there is no way to refund 100% of the deposited amount.
- ·Real support never DMs you first. If a Telegram account writes to you claiming to be UpSwap support, an admin, or a moderator, it is a scammer — 100% of the time. Always contact <code>@upswapservice</code> on Telegram or <code>[email protected]</code> through the official site, and prepare four fields before pinging: order ID, source tx hash, destination address, widget screenshot.
<p>If you landed here from a search snippet, you are probably staring at a swap that has been pending longer than feels comfortable. Skip the panic. Cross-chain swaps almost never lose funds silently — they wait on a deterministic, observable process: source-chain confirmations, solver decision latency, and destination-chain broadcast. This guide gives you a 5-minute decision tree, four symptom-keyed diagnostic sections, and a per-chain reference for BTC / ETH / SOL / TRC20 / BSC — so you know exactly how long is normal, what to check on-chain, and when (and how) to escalate.</p><p>This is the action companion to <a href="/guides/non-custodial-vs-custodial-where-funds-go-when-swap-fails">Guide #1: where your funds physically are when a swap fails</a>. Guide #1 explains the <em>state</em>. This guide explains what to <em>do</em>. If you have not yet read Guide #1 and you are panicking, read it first — it answers "where are my funds right now" before this guide answers "what do I do next."</p>
5-minute self-diagnostic decision tree (symptom → source chain → next step)
Read your symptom on the left, find your source chain in the middle, follow the action on the right. If your symptom does not match a row here, jump to the matching symptom section below and read the full version.
| Symptom | Likely physical state | Typical wait window | Worry threshold (then act) |
|---|---|---|---|
Wallet deducted, order still pending | Deposit tx is in mempool or just included; aggregator has not yet seen N confirmations | BSC: ~1.1s finalized. SOL: ~13s finalized. ETH: 1–3 min. TRC20: ~1 min. BTC: 10–60 min | BTC: >2h with low fee, check RBF. ETH: >10 min, check nonce queue. SOL: >2 min, blockhash may have expired. TRC20: >5 min, check Energy/bandwidth |
| Source chain confirmed, destination chain shows nothing | Solver waiting for chain-specific safety-block count; destination fill not yet broadcast | 30s–3 min for fast routes; up to 15 min if source is BTC | >3× typical end-to-end SLA for the route (e.g. >15 min ETH→SOL) |
| Quote expired before you could sign | Solver-bid TTL elapsed; the rate is no longer guaranteed | Under 1s — re-quote returns synchronously; sign the new quote | If the re-quoted rate moved more than your slippage tolerance, do not sign — review the new amount first |
| Refund initiated, funds not yet back | Refund tx is broadcasting back to source-chain deposit address (or refundTo if you set one) | 5–30 min across all five chains; BTC may take up to 1–2h under congestion | >30 min on ETH/SOL/TRC20/BSC, >2h on BTC — escalate with source tx hash |
@upswapservice immediately with the source tx hash and a screenshot of the widget at the time of signing.Symptom 1 — Source chain confirmed, destination chain shows nothing yet
This is the most common false-alarm. You see your deposit confirmed on the source explorer. You refresh the swap page. The order still says processing. Nothing is broken — the aggregator is waiting on a per-chain safety-block count before releasing destination funds, because a too-early release exposes the solver to reorg risk.
Here are the per-chain thresholds that real bridges and solvers actually use (sampled 2026-06-17). Note the distinction: confirmation count (block depth, used heuristically by bridges) and protocol finality (irreversibility guaranteed by the chain's consensus) are different concepts.
| Source chain | Single-block time | Safety window most solvers wait | Typical end-to-end fill |
|---|---|---|---|
| BTC | ~10 min (Poisson-distributed, not exact) | 1–3 confirmations for small-to-medium value; 6 confirmations is the long-standing high-value default (attacker with under 10% hashrate has under 0.1% success). BTC has no protocol finality — confirmation count is a probabilistic safety threshold (Nakamoto consensus). | 10–60 min |
| ETH | 12s per slot | Bridges wait 15–35 confirmations (~3–7 min) heuristically; Wormhole waits 15. Protocol finality at 2 epochs = 768s (~12.8 min). | 30s–8 min |
| SOL | ~400 ms per slot | 32-slot supermajority finalization = ~13s | 13–45s |
| BSC | 0.45s per block (post-Fermi, 2026-01-14) | ~1.125s practical finality via BEP-590 fast-finality | 5–30s |
| TRC20 (Tron) | 3s per block | 19 of 27 SR blocks = ~57s (full solidification). Coinbase waits 19; Binance waits 1 | 30s–2 min |
Sources: en.bitcoin.it/wiki/Confirmation, blocknative.com/blog/anatomy-of-a-slot, li.fi/knowledge-hub/ethereum-finality-and-bridges, solana.com/developers/guides/advanced/confirmation, eco.com — TRC-20 confirmation time. All sampled 2026-06-17.
The worry threshold is roughly 3× the typical end-to-end fill for your route. An ETH→SOL swap that has been silent for 15 minutes after source confirmation is genuinely worth a support ping. A BTC→ETH swap still silent at 25 minutes is not — wait one more block on BTC before opening a ticket.
Symptom 2 — Quote expired, or the price changed before you signed
You opened the swap, walked away, came back to sign — and now the quoted output is different, or the page is asking you to re-fetch a quote. This is not a front-run. It's the routing model doing exactly what it's supposed to do.
Cross-chain quotes have short TTLs because they lock a price the solver/relayer has to honor. Two distinct mechanics matter here, depending on which engine routed your order (UpSwap routes through both):
- NEAR Intents (solver-bid auction). A solver bus broadcasts your intent to all connected solvers, waits up to 3,000 ms for bids, and returns the best fill. The default
min_deadline_msis 60,000 ms — one minute — though the UI may request 30s–2 min. After the deadline, deposits arriving late are refunded. Source: docs.near-intents.org — solver relay, sampled 2026-06-17. - Relay (single-relayer model). For EIP-3009 permit deposits, Relay locks a no-slippage quote with
permitExpirydefault 600s (10 minutes). For non-permit flows, quotes are revalidated at fill time — no fixed-price guarantee. Source: docs.relay.link — get-quote, sampled 2026-06-17.
Between display and execution, two things can shift:
- Underlying market price. Stable-stable pairs (USDT↔USDC) drift typically under 0.05% per minute. Volatile pairs (ETH↔BTC) can drift 0.1–0.5% per minute.
- Destination-chain gas. On ETH L1, a 10-gwei swing changes a typical swap cost by roughly $0.30–$1. On BSC/SOL/TRC20 the absolute delta is under $0.10. Aggregators show the net (post-fee) receive amount, so this shifts the number you see, not a separate fee line.
What changes on a re-quote: the receive amount updates, the quote ID rotates, a new deadline is issued, and you must sign again. That is the entire flow. If the re-quoted rate moved more than your slippage tolerance allows, do not sign — review the new number first. Quote expiry protects you from a stale rate; signing a fresh stale rate would defeat the point.
Symptom 3 — Wallet shows deducted, order still says pending
You signed the deposit transaction. The wallet immediately shows the debit locally — that is just the wallet writing to its own ledger. On-chain, the tx may be in one of three states:
- Still in mempool waiting for the next block. Most common when you used a low gas price or low BTC fee rate.
- Included in a block but the aggregator has not yet detected the required confirmations.
- Confirmed on-chain but the solver/relayer has not yet broadcast the destination fill (see Symptom 1).
Your next move depends on whether you picked the wrong network or the wrong fee. These are different problem classes — do not conflate them:
| What you actually did | How to confirm | What to do |
|---|---|---|
| Sent to the right deposit address, low fee — tx is queued in mempool | Source explorer shows tx with unconfirmed / 0 confirmations status | BTC: check RBF flag, bump fee, or use CPFP. ETH: speed-up tx (same nonce, higher gas). SOL: re-submit with fresh blockhash + priority fee. TRC20: top up TRX for Energy |
| Sent to the right deposit address, normal fee — tx confirmed but order silent | Source explorer shows tx with required confirmations | Wait the per-chain envelope from Symptom 1. If past the worry threshold, escalate with the tx hash |
| Sent on the wrong network — e.g. you used the BSC-USDT network to send funds, but the widget displayed an ETH-USDT (ERC20) deposit address | Source tx is on the wrong chain; the displayed deposit address may not exist or is not controlled by the vendor on the network you actually broadcast to | Different problem class — see Guide #2 — picking the correct USDT network for CEX wrong-network recovery policies. Usually NOT auto-refundable |
For where your funds physically sit during each of these states, jump to Guide #1. The short version: on non-custodial deposit-address flows, your funds are at an address the swap contract or solver controls — you can verify which address by inspecting the source tx hash on the explorer, then cross-checking against the deposit address the widget displayed.
Symptom 4 — Refund initiated but not arrived (5–30 min, refund tx network fee $0.5–$5)
A solver can decide it cannot fill your intent. The usual triggers: deposit arrived after the quote deadline; deposit amount fell short of amountIn; the underlying price moved past the slippage band; destination liquidity dried up; the recipient Associated Token Account (ATA) on Solana does not exist and no auto-create budget was reserved.
When that happens, source-chain funds are rebroadcast back to the original deposit address — or to refundTo if you supplied one in the intent. The refund tx is a normal on-chain transfer (the refund tx network fee is the on-chain fee paid by this refund transaction itself). You can watch it land in real time on the source-chain explorer.
Two things to expect:
- Per-chain refund window (sampled 2026-06-17):
Operationally safe envelope to quote a worried user: 5–30 min across all five chains.Source chain Typical refund window Refund tx network fee typical BTC 10–60 min, can stretch to 1–2h under high mempool fees $2–$5 (highest, mempool fee market) ETH 1–5 min for visible status $1–$3 (sub-gwei base fee era, ERC20 refund tx ~21k–65k gas) BSC ~1.1s finality post-Fermi; refund visible within 5–15s $0.01–$0.10 (sub-gwei gas, 21k–65k gas units) SOL ~13s finalization, refund visible within 30s $0.001–$0.05 (base + priority fee) TRC20 ~57s finality, refund visible within 1–2 min $0.30–$1 (Energy/bandwidth via TRX burn) - The refund pays its own network fee. Miners on BTC, validators on ETH/SOL/BSC, Super Representatives on Tron — the source-chain block producers collect the refund tx fee. There is no path to refund 100% of the deposited amount.
When the refund truly does not come back:
- Vendor bug (solver crashed mid-flow, race condition not detecting deposit). Escalate with the source tx hash. Usually resolved manually within 24–72h.
- Deep chain reorg. Rare on ETH/SOL/TRC20/BSC. Possible on BTC for under-6-confirmation deposits. Vendor must re-detect after reorg settles.
- Refund destination is a smart contract that cannot receive (Gnosis Safe without payable fallback, deprecated contract). Refund tx reverts; support reroutes to a user-supplied EOA.
- Wrong-network deposit. Different problem class — see Guide #2.
Source: docs.near-intents.org — 1Click API, docs.relay.link, sampled 2026-06-17.
Per-chain reference: BTC RBF / ETH nonce + finality / SOL rent + ATA / TRC20 Energy / BSC
If your stuck swap is genuinely a source-chain problem (tx not landing, not just waiting for confirmations), the fix lives in chain-specific mechanics. Here is the compact reference you actually need.
BTC — Replace-By-Fee (RBF) and Child-Pays-For-Parent (CPFP). A stuck BTC tx is almost always a low-fee tx losing the mempool fee market. Median sat/vB on quiet weekends has dipped as low as 0.10–2 sat/vB; medium-priority is typically 5–20 sat/vB (source: mempool.space, sampled 2026-06-17). Playbook:
- Check the tx on mempool.space — is it RBF-signaled? (Note: Bitcoin Core 28+ supports Full RBF, which makes opt-in signaling no longer strictly required if the receiving node has it enabled; BIP-125 opt-in is the older standard most wallets still flag.)
- If yes: open the sending wallet, find Bump fee / Speed up / Replace transaction. The wallet rebroadcasts the same inputs at a higher fee. Miners drop the old version (two txs cannot spend the same input).
- If no: use CPFP. The recipient — or the sender, if a change output exists — spends the unconfirmed output with a high-fee child tx. The child pulls the parent into a block.
- Worst case: wait. Bitcoin Core default
mempoolexpiryevicts unconfirmed txs after ~14 days. After eviction the input is spendable again.
RBF requires the sender to bump. The recipient cannot use RBF — they must use CPFP. Source: bitcoincore.org — opt-in RBF FAQ, sampled 2026-06-17.
ETH — nonce ordering and the 12-second slot. Ethereum executes txs from one address in strict nonce order. If nonce N is stuck pending (gas too low), nonces N+1, N+2 all stay pending even if they paid huge gas. The network will not skip ahead. Fix: replace nonce N with a new tx at the same nonce and higher gas. Most wallets call this Speed up or Cancel. To true-cancel, send a 0-ETH self-transfer with nonce=N and higher gas. Source: etherscan — cancel pending tx, sampled 2026-06-17.
On finality: a tx included in a 12s slot is the new head but not yet finalized. The Fast Confirmation Rule (2026 deployment, see fastconfirm.it) gives a hard non-revert guarantee after a single 12s slot when ≥75% of staked ETH attests with under ~3s latency. Conservative bridges still wait 15–35 conf; two-epoch finality is 768s (~12.8 min). Current median gas is roughly 0.14–0.77 gwei (snapshot 2026-06-17 09:24 UTC via etherscan gastracker) — sub-gwei is normal post-Dencun/Pectra.
BSC — EVM nonce ordering, post-Fermi speed. BSC follows the same strict nonce ordering as Ethereum (same EVM semantics — Speed up / cancel work identically). Post-Fermi (deployed 2026-01-14), block time is 0.45s with practical finality of ~1.125s via BEP-590 fast-finality. Gas is sub-gwei in normal conditions; there is no RBF mechanic (RBF is a BTC-specific concept) — replacement happens via same-nonce, higher-gas resubmission. BSC's main stuck-tx failure mode is a same-nonce race when a wallet auto-rebroadcasts; check the explorer for the actual landed tx hash.
SOL — Associated Token Account rent and dropped txs. SOL finalizes in ~13s (32 slots of Tower BFT supermajority). The two most common failure modes:
- ATA rent. Sending an SPL token to a recipient who has never held it requires creating an Associated Token Account. Standard SPL token account (165 bytes) costs 0.00203928 SOL; with the immutable-owner extension (170 bytes), 0.00207408 SOL — calculated as two years of rent at 3,480 lamports per byte per year. Rent is the chain's rent-exempt minimum, refundable if the ATA is later closed. If the swap recipient does not exist and no party budgets the rent, the destination fill cannot complete. Source: docs.gemwallet.com — Solana rent, sampled 2026-06-17.
- Dropped tx vs failed (on-chain) tx. Symptoms: wallet shows sent, signature never appears on Solscan, or shows
failedwith no balance change. Root causes: priority fee too low on a contested write-locked account (fee markets are per-account, not network-wide), compute unit budget too low, slot congestion dropping the packet before it reaches the leader, or therecent_blockhashexpired (~150 slots ≈ 60s validity). Recovery: resubmit with a fresh blockhash, higher priority fee, and correct CU limit. Base + priority fees are still consumed on a failed on-chain tx; a dropped (never-landed) tx costs nothing. Source: rpcfast — why Solana txs get dropped, sampled 2026-06-17.
TRC20 — Energy and bandwidth. Tron does not have a user-facing gas price. Each address gets 600 free bandwidth points per day; a TRC20 transfer uses Energy (TVM computation) plus ~345 bandwidth. A USDT transfer needs ~65,000 Energy if the recipient already holds USDT, or ~131,000 Energy if the recipient address is new to USDT. If you have no staked Energy and no rented Energy, the network burns TRX from your balance to cover Energy at the burn rate — approximately 6.5 TRX (existing recipient) or 13 TRX (new recipient), plus ~0.345 TRX bandwidth.
The classic failure: "Insufficient TRX to cover network fees" / "Out of Energy". Your USDT stays safe in the sender wallet — the failed broadcast does not move tokens. You may lose 100–300 sun (under $0.0001) in bandwidth on the failed attempt. Fix: top up a 3–5 TRX buffer, stake TRX for Energy, or rent Energy from a market (cheaper than burning, no lockup). Source: gasstation.ai — Insufficient TRON Energy fix, sampled 2026-06-17.
When to contact @upswapservice — 4 fields, the right trigger, the anti-phishing rule
The triggers for an actual support escalation are narrower than people assume. Most stuck swaps resolve within the chain-specific wait windows above. Open a ticket when:
- You are past 3× the typical end-to-end fill window for your route (e.g. >15 min on an ETH→SOL, >2h on BTC→USDT).
- A refund was initiated but is past 30 min on ETH/SOL/TRC20/BSC or 2h on BTC.
- You sent to a deposit address on the wrong network (this is not auto-recoverable on most flows — see Guide #2).
- The source tx hash shows the deposit confirmed at the address the widget displayed, but the order shows
failedwith no refund visible.
Four fields to prepare before pinging. A support agent with these four can usually triage in one round-trip; without them, you both lose hours:
- Order ID — the UpSwap-issued swap reference. Found in the URL or confirmation screen.
- Source transaction hash — the on-chain hash from your sender wallet. This proves the deposit was broadcast and gives the agent a chain-of-evidence anchor.
- Destination address — where you expected to receive. This confirms intent versus what was actually entered into the widget (catches typos, network mismatches).
- Screenshot of the widget at the time of failure — timestamp, displayed quote, error message if any. Reproduces the visual state the agent cannot otherwise see.
Reach support at @upswapservice on Telegram or [email protected] via the official website footer. For a small non-custodial team, expect a first reply within 30 minutes during working hours; off-hours and weekends run 2–12h. Forensic cases — wrong-network deposit, stuck across chains — take 1–5 business days because they require upstream vendor coordination.
Real support also never asks for your seed phrase, private key, or wallet password — not for verification, not for refund, not for anything. Real support never asks you to send funds to a "verification address" or to "unlock" your account by depositing more crypto. If you post your question in a public group channel, real support will respond in-thread; scammers will try to move you to DM.
Industry context: phishing campaigns in 2025 stole $410M across 132 attacks per Changelly's crypto-crime midyear report — sampled from changelly.com, 2026-06-17.
A stuck swap is not a hack — the Ledger Connect Kit boundary
For perspective: when users panic, they reach for hack narratives. The most-cited recent example is the December 2023 Ledger Connect Kit npm compromise: a former Ledger employee was phished, malicious code was injected into the Connect Kit package, and ~$600k was drained from users of SushiSwap, Revoke.cash, and other DApps embedding the widget. Source: ledger.com — security incident report. That was a widget code-supply-chain failure — the displayed deposit address itself was swapped for an attacker address by injected JavaScript. It was not a routing failure, and it was not a custody failure.
A non-custodial deposit-address model — where you send to a contract-derived or solver-derived address and the destination payout is observable on-chain — does not protect against widget-supply-chain attacks. It does protect against a separate class of failures. Here is the boundary, drawn cleanly:
| Threat class | Removed by non-custodial routing? | What still matters |
|---|---|---|
| Custodial insolvency (FTX-pattern) | Yes — funds never sit on a vendor balance sheet | n/a |
| Custodial KYC freeze on mid-swap funds | Yes — no KYC layer on the routing path | n/a |
| Custodial hot-wallet hack (Bybit-pattern, Feb 2025 ~$1.4B) | Yes — no hot wallet holds your funds | n/a |
| Widget code-supply-chain attack (Ledger Connect Kit-pattern) | No — injected JS can swap the displayed deposit address | Verify the domain; cross-check the deposit address against multiple sources; prefer hardware-wallet signing with screen verification |
| DNS hijack of the widget host | No — DNS layer is outside the routing trust boundary | Verify HTTPS cert; bookmark canonical URLs; avoid clicking ad links |
| RPC compromise (malicious node returns wrong addresses) | No — wallet may sign against attacker-supplied state | Use multiple RPC endpoints; verify on a separate explorer before signing |
The honest framing: non-custodial routing removes the FTX/Bybit failure classes while leaving widget integrity to standard browser hygiene — verify the domain on any in-browser swap interface, cross-check the deposit address, prefer hardware-wallet signing. For the full physical-location-of-funds breakdown, see Guide #1; for the comparative framing of how each vendor handles these boundaries, see UpSwap vs ChangeNOW.
If you arrived here from a high-volume mainstream pair, the same symptom triage applies — your route's specific timing envelope is what changes. The most-traveled corridors covered by UpSwap include BTC→USDT, ETH→USDT, ETH→SOL, BTC→ETH, and SOL→USDT. For network-switch USDT moves between ERC20 and TRC20 — a common stuck-transaction trigger — see USDT ERC20 → TRC20 and USDT TRC20 → ERC20 alongside Guide #2.
Frequently asked questions
How many BTC confirmations is normal before my swap moves, and when should I worry?
<p>For small-to-medium swap amounts most aggregators wait 1–3 confirmations (10–30 minutes); the high-value default is 6 confirmations (~60 minutes), chosen so an attacker with under 10% hashrate has under 0.1% success. Worry threshold: if your tx is still at 0 confirmations after 2 hours, your fee was likely below the prevailing mempool rate — check <a href="https://mempool.space">mempool.space</a> for the current sat/vB and use RBF (sender-side bump) or CPFP (recipient-side child tx). Source: <a href="https://en.bitcoin.it/wiki/Confirmation">en.bitcoin.it/wiki/Confirmation</a>, sampled 2026-06-17.</p>
My ETH deposit is on a low gas — is it really stuck or just slow?
<p>If the tx is in mempool but no block has picked it up after 10 minutes at current network gas (median 0.14–0.77 gwei sampled 2026-06-17 via <a href="https://etherscan.io/gastracker">etherscan gastracker</a>), it is genuinely stuck — and worse, it is blocking every later transaction from the same address (Ethereum executes in strict nonce order). Nonce N+1, N+2 cannot land until nonce N does. Fix: send a replacement tx at the same nonce with higher gas (wallet <em>Speed up</em> button), or true-cancel with a 0-ETH self-transfer at the same nonce and higher gas. Source: <a href="https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/">etherscan — how to cancel pending tx</a>.</p>
My quote expired before I could sign — did someone front-run me?
<p>Almost certainly not. NEAR Intents 1Click defaults <code>min_deadline_ms</code> to 60,000 ms (1 minute) with a 3,000 ms solver-bid auction window; Relay defaults <code>permitExpiry</code> to 600 seconds. These TTLs exist because the solver/relayer is committing to a price they have to honor. Two minutes of inattention is enough to invalidate a fast-pair quote. A real exploit (malicious widget swapping the deposit or destination address) would show your funds arriving at an address that is not yours — if your order still shows your address, the rate change is market drift plus gas movement, not an attack. Source: <a href="https://docs.near-intents.org/near-intents/market-makers/bus/solver-relay">docs.near-intents.org</a>, sampled 2026-06-17.</p>
The refund came back smaller than I deposited — what was deducted?
<p>The refund transaction itself is a normal on-chain transfer and must pay its own network fee. Typical refund tx network fee: $2–$5 on BTC (mempool fee market), $1–$3 on ETH L1 (sub-gwei base fee era, 21k–65k gas), $0.30–$1 on TRC20 (Energy via TRX burn), $0.01–$0.10 on BSC, under $0.10 on SOL. The miners, validators, or Super Representatives of the source chain collect this — it is not an UpSwap fee, and there is no path to refund 100% of the deposited amount. If the deducted amount looks much larger than these ranges, escalate with the refund tx hash. Source: <a href="https://etherscan.io/gastracker">etherscan gastracker</a>, sampled 2026-06-17.</p>
My wallet shows the funds deducted but UpSwap still shows the order as pending — what is happening?
<p>The wallet writes the debit locally as soon as you sign. On-chain, the tx is either still in mempool, just included in a block, or confirmed but waiting on the solver to broadcast the destination fill. Open the source-chain explorer with your tx hash — that is the source of truth, not the wallet. SOL finalizes in ~13s; BSC finalizes in ~1.1s post-Fermi; ETH soft-confirms in 12s but bridges wait 15–35 conf; BTC averages 10 minutes per block. If the explorer shows enough confirmations and the UpSwap widget still says pending past 3× the typical fill window for your route, contact <code>@upswapservice</code> with the source tx hash. For the full physical-state breakdown see <a href="/guides/non-custodial-vs-custodial-where-funds-go-when-swap-fails">Guide #1</a>.</p>
It has been an hour and nothing has moved — is my money lost?
<p>Almost certainly not. On a non-custodial deposit-address flow, your funds sit at a public on-chain address you can verify with the source tx hash. They cannot vanish silently — they are either still confirming, awaiting solver decision, or queued for refund. The four real loss paths are: wrong-network deposit (see <a href="/guides/usdt-network-decision-guide-erc20-trc20-bep20-spl">Guide #2</a>), refund destination is a smart contract that cannot receive, signing a malicious widget (verify domain), or sending the seed phrase to a fake "support" DM. None of these apply to a normal stuck swap — they apply to user-error or social-engineering paths.</p>
Will UpSwap customer support ever DM me first?
<p>No. Never. Real support never initiates a Telegram DM. If someone writes to you claiming to be UpSwap support, an admin, or a moderator — they are a scammer, 100% of the time. Real support also never asks for your seed phrase, private key, or wallet password, and never asks you to send funds to a "verification address". Always start contact yourself via <code>@upswapservice</code> on Telegram or <code>[email protected]</code> through the official website footer. If you are unsure, post your question in the public group channel — real support will respond in-thread; scammers will try to move you to DM. Phishing campaigns stole $410M across 132 attacks in 2025 per Changelly's midyear report — this is the single most common loss path in the space.</p>
Is a stuck swap the same thing as a bridge hack like the Ledger Connect Kit incident?
<p>No — different failure classes. The December 2023 Ledger Connect Kit compromise (~$600k drained from SushiSwap, Revoke.cash, and other DApp users; source: <a href="https://www.ledger.com/blog/security-incident-report">ledger.com — security incident report</a>) was a widget code-supply-chain attack — injected JavaScript swapped the displayed deposit address for an attacker address. That is a UI/integrity failure, not a routing failure. A stuck swap is the opposite: the routing is working correctly and the on-chain state is exactly what the widget claimed; it is just waiting on confirmations or solver decision. UpSwap's non-custodial deposit-address model removes custodial-insolvency and custodial-hack risk (FTX-pattern, Bybit-pattern), but does <em>not</em> remove widget code-supply-chain risk — verify the domain and check the deposit address against multiple sources before signing. The honest framing is in <a href="/compare/upswap-vs-changenow">UpSwap vs ChangeNOW</a> and <a href="/guides/non-custodial-vs-custodial-where-funds-go-when-swap-fails">Guide #1</a>.</p>
Swap routes referenced in this guide
- BTC (Bitcoin Mainnet) → USDT (Tron / TRC20) →
- ETH (Ethereum / Mainnet) → USDT (Tron / TRC20) →
- ETH (Ethereum mainnet) → SOL (Solana mainnet) →
- USDT (Ethereum / ERC20) → USDT (Tron / TRC20) →
- BTC (Bitcoin mainnet) → ETH (Ethereum mainnet) →
- SOL (Solana) → USDT (Tron / TRC20) →
- USDT (Tron / TRC20) → USDT (Ethereum / ERC20) →
Related comparisons
Other guides
- Non-Custodial vs Custodial: Where Funds Go If Swap Fails →
- Further reading: USDT ERC20 vs TRC20 vs BEP20 vs SPL: which network to send, when (2026 fee snapshot + 5-use-case decision tree) →
- Related: The 5-layer fee stack of every cross-chain swap (3 routes, 2026-06-26) →
- Binance withdrawal vs cross-chain swap: the real break-even by size, chain and asset (sampled 2026-06) →
- Further reading: Address poisoning and pre-send verification: per-chain anatomy + the 5-second check against the 2026 attack surge →
- Related: Sent USDT to the wrong network? The 2026 recovery decision matrix + DIY private-key rescue walkthrough →
Ready to swap?
Pick your tokens and swap directly — non-custodial, no KYC, all-in fixed quote.