How do I move tokens between chains without getting wrecked?
I lost about forty dollars in February 2023 doing exactly the thing most guides tell you to do. I bridged USDC from Ethereum to Arbitrum, picked the first option in the list, paid a gas fee I didn't check, and ended up sending the tokens to a contract address I'd copied from a three-year-old Reddit thread. The bridge worked. The destination didn't. That was the lesson I kept: the bridge itself is rarely where the mistake happens.
Since then I've moved tokens across chains maybe sixty or seventy times, mostly USDC, USDT, and ETH between Ethereum, Arbitrum, Base, Optimism, and a handful of smaller networks. The pattern that actually works, the one I'd hand to someone on their second or third attempt, looks like this.
Confirm what you actually hold on the destination chain
Before you click anything, check the token contract on the chain you're sending to, not the chain you're sending from. The USDC contract on Arbitrum is not the USDC contract on Base. They're both real USDC, both backed, but they have different addresses. If your wallet shows a balance of zero on the destination after the bridge settles, this is almost always why. The bridge did its job; the address didn't exist where you expected it to.
Two things I check every time, without exception:
- The exact contract address on the destination chain, pasted from the token's official docs or a block explorer I trust, not from a search result.
- That the wallet I'm sending to supports that specific contract. Some wallets auto-detect; some show a zero balance and let you add the token manually. If it's the second kind, you have to add it.
Set a sane slippage and don't race the mempool
On a quiet Sunday afternoon I can bridge USDC from Ethereum to Base in under three minutes and pay less than a dollar. On a busy Friday during an airdrop, the same bridge might quote me twelve dollars and take twenty minutes. The instinct to bump the gas and speed it up is how you overpay. Most bridges will tell you an estimated time. If it's under ten minutes, just wait.
For larger amounts, I send a test transaction first. Not a dollar — that doesn't tell you anything useful because it gets treated as dust. I send something like fifty dollars of the token, confirm it arrived at the right contract on the other side, and only then send the rest. The cost of the test is usually a few cents. The cost of sending a thousand dollars to the wrong contract is a thousand dollars.
One more thing, and this is the part most people skip: read the bridge's status page before you start. If a crypto bridge is showing degraded performance or paused withdrawals on your destination chain, the problem isn't on your end. Wait it out, or pick a different route. The bridge will still be there in an hour. Your funds, if you send them during an incident, might not be.