Stopped a swap halfway because I wasn't sure which USDC I had
Was sending USDC from Arbitrum through Godex swap service. The pair was listed as just "USDC (Arbitrum)" and right before the deposit step it occurred to me that my balance might be USDC.e, the bridged version, rather than native Circle USDC.
Those are separate contracts on the same chain, the .e suffix is easy to miss in a wallet list and some interfaces drop it entirely.
If the service watches one contract and you send the other to its deposit address, the transfer doesn't get credited automatically and you end up writing to support with a tx hash.
So I went through the checks exact network, native or bridged, contract address (native on Arbitrum starts with 0xaf88 and is listed in Circle's docs, USDC.e starts with 0xFF97 and Arbiscan labels it as bridged), what covers gas on the destination chain and the destination chain itself.
Turned out I held native.
Sent it, cleared normally, maybe five extra minutes total.
None of it is hard. It's just not surfaced anywhere until you go digging. The exchange screen prints the amount and estimated output in the largest font on the page and the amount is a number i typed in myself two seconds earlier. Which contract their deposit system expects is the part i had no way of knowing and that one sits behind a tooltip or nowhere at all.
One line above the deposit address with the chain and exact token variant would close the question. Native and at least one bridged version now coexist on most major chains, so this comes up constantly and printing that line costs the service nothing.
My habit going forward is pasting the contract into Arbiscan before any deposit. Slower, but I'd rather do that than open a support ticket.