USDC vs USDT on the Same Chain: 0.08% and 228×
Same nine chains, same minute: at $1,000 USDC paid 0.079% more XMR than USDT. But USDT caps at $726 on Base while USDC takes $165,541, and the contract behind the ticker is not always the token you think.
Two tickers, 54 quotes, three layers. USDC and USDT look identical in a wallet: one ticker, one network, one balance. On 2026-11-08 between 10:03 and 10:16 UTC I sent 54 quotes through VeilSwap's /api/quote — both tickers, nine shared networks, three amounts — and then read the contracts directly from the chains. The quote layer is almost a tie: at $1,000, USDC paid 0.079–0.093% more XMR than USDT on every chain where both could quote. The ceiling layer is not a tie: on Base, USDT stopped at $726.48 while USDC accepted $165,540.96. That is 228 times. The contract layer is not a tie either: on BSC both tokens use 18 decimals, and on Polygon and Arbitrum the contract behind the 'USDT' ticker reports its name as USDT0. A ticker is a brand; an order is built on a contract. (XMR to USDT exit)
At $100, the chain wins. At $100 the picture flips: the chain matters more than the ticker. The best 100-USDC quote was Base at 0.15494143 XMR, the worst Avalanche at 0.15216704 — a 1.82% spread, about $12 of XMR on a $100 order. USDT's spread was 1.53%. The same-chain difference between the two tickers ranged from -0.43% (Aptos) to +0.58% (Base); no ticker won consistently, because at this size the fixed deduction dominates. In dollar terms, 100 USDC on Base implied $645.41 per XMR, on Avalanche $657.17, while the spot reference was $600.89. So at $100, pick the chain first; the ticker is a rounding error. (XMR to USDT exit)
At $1,000 the slope shows. At 1,000 and 5,000 the fixed noise washes out and a clean line appears. On Ethereum, 1,000 USDC bought 1.646994 XMR; 1,000 USDT bought 1.645459 — USDC ahead by 0.0933%. On Polygon, Solana, BSC, Avalanche and Arbitrum the same pair read 1.647024 against 1.645717, or +0.0794%. At 5,000 the gap is identical: 8.23522 against 8.227547 on Ethereum (+0.0933%), 8.23525 against 8.228716 on Polygon (+0.0794%). A fixed fee would shrink as a percentage when the amount grows fivefold; a rate difference does not. Fitting the 1,000 and 5,000 points gives a slope of 0.001647057 XMR per USDC against 0.00164575 per USDT — 607.15 versus 607.71 USD per XMR. That is the whole quote-layer difference: 7.9 basis points of slope, 9.3 on Ethereum. (SOL to XMR guide)
The exit leg runs the other way. The direction reverses on the way out. At 10:14 UTC, 1 XMR sold for 594.2248 USDC on Ethereum but 595.376 USDT — USDT paid 0.1937% more. Solana read 594.0339 against 595.186, the same 0.1939%. A 1,000-dollar round trip therefore keeps 97.87% with USDC and 97.97% with USDT: 2.13% versus 2.03% lost to the band. On Base the exception is reversed again: 1 XMR bought 594.2298 USDC but only 587.425894 USDT, because the Base USDT route is a single bridged line. The practical rule: if you are buying XMR, USDC is marginally cheaper; if you are selling XMR for a stablecoin, USDT is marginally better — except on Base, where USDC wins the exit leg by 1.15%. (SOL to XMR guide)
Ceilings split the two tickers. Ceilings are where the two tickers stop being comparable. In the same 10:14–10:16 snapshot, USDC on Ethereum, Base, Solana and Arbitrum tops out at 165,541–165,619; Polygon at 71,977.35; BSC at 21,579.77; Avalanche at 3,454.20. Six of the thirteen USDC networks — Aptos 724.65, Asset Hub 725.14, Sui 725.16, Monad 724.86, Sei 724.29 and ARC 724.29 — cannot take a $1,000 order at all. The sharpest case is Base: USDT, which the catalogue labels 'Bridged Tether USD (Base)', has a maximum of 726.48 dollars, while native USDC on the same chain accepts 165,540.96. Same chain, same minute, 228 times the ceiling. The network list tells you where a token exists; the max tells you where it is actually usable. (SOL to XMR guide)
The contract decides the decimals. Then there is the contract. Reading decimals() from the chains directly: Ethereum's USDC and USDT both return 6; Base USDC returns 6; Solana's two mints return 6. BSC is the exception — both its USDC and its USDT return 18. One 'USDC' is 1,000,000 base units on Ethereum and 1,000,000,000,000,000,000 on BSC. Wallets read the contract and display the same '1.00', so you never see the difference; an integration that hardcodes 6 decimals will be off by a factor of a trillion. The BSC contracts also share an owner: getOwner() on both returns 0xf68a4b64162906eff0ff6ae34e2bb1cd42fef62d, which is not true of Ethereum's two issuers. Same ticker, same chain family, different administration. (SOL to XMR guide)
The name on the contract is not the ticker. The names are the last layer, and the most misleading. On Polygon, the contract at 0xc213…e8F answers name() with 'USDT0' and symbol() with 'USDT0', not 'Tether USD'. On Arbitrum the answer is 'USD₮0' and 'USD₮0'. On Avalanche it is 'TetherToken' and 'USDt'; only Ethereum and BSC return 'Tether USD'. USDC is not uniform either: Polygon carries two contracts both named 'USD Coin' — the native one (6 decimals, 614.2 million supply) and the bridged USDC.e (6 decimals, 1,059.0 million supply), which is still the larger of the two. Arbitrum has the opposite ratio: native 2,402.3 million against USDC.e 46.3 million. The safe move is not to trust the ticker or the network name; copy the token contract from the venue, or send a tiny test amount and confirm what actually arrives. (XMR to USDT exit)
Neither token is private; the fee is still real. Neither token is a privacy asset, and the chains say so. Solana's USDC mint keeps a freezeAuthority at 7dGbd…RCrar and its USDT mint at Q6Xpr…9Gi; on EVM chains both issuers retain blacklist controls. Choosing USDC over USDT does not change that; the privacy in a swap comes from the XMR leg, not the dollar leg. What does change is the deposit bill. At 10:06 UTC, Ethereum gas was 0.0675 gwei (about $0.0095 for a 63,000-gas ERC20 transfer at $2,233 ETH), BSC 0.05 gwei ($0.0022), Polygon 234.4 gwei ($0.000002), Arbitrum 0.02 gwei ($0.0028), Base 0.006 gwei ($0.0008) and Avalanche 2.5 gwei ($0.0013). Solana adds 5,000 lamports plus 0.00148844 SOL of refundable token-account rent ($0.13). USDC has no TRON network at all, so it also avoids TRON's 6.43–13.03 TRX energy bill — the one place where the ticker changes the fee by dollars rather than basis points. (SOL to XMR guide)
Three checks, then send. Put together, the choice is a three-step check, not a brand preference. First, direction: buying XMR, USDC on the same chain is 0.079% cheaper at size; selling XMR, USDT pays about 0.19% more, except on Base where USDC wins the exit leg. Second, size: under $725 any of the thirteen USDC networks works; $725–3,454 drop the six ~$725 routes and Avalanche; $3,454–21,580 drop Avalanche; above $21,580 drop BSC; above $71,977 drop Polygon; above $165,541 nothing on this list quotes. Third, contract: on BSC expect 18 decimals, on Polygon and Arbitrum expect a contract that calls itself USDT0, and on Polygon check whether your balance is native USDC or USDC.e. The numbers above are a snapshot from 2026-11-08 10:03–10:16 UTC; prices and caps move every few minutes, so the live order page is the authority. (XMR to USDT exit)