Every few months someone messages me in a mild panic because they sent USDT to an exchange and it never arrived. The story is the same each time. The address was triple checked, the transaction shows confirmed on a block explorer, and the balance on the receiving end stays at zero. In nearly every one of these cases the funds are sitting exactly where the sender put them, on a network the receiving side was not watching. The address was right and the rail was wrong, and this keeps happening because most wallet and exchange interfaces do a genuinely bad job of explaining that the token and the network it travels on are two separate decisions.
One asset, many rails
USDT is the cleanest example. It lives on Ethereum, Tron, Solana, and a growing list of other chains, some issued directly by Tether and some as pegged versions maintained by bridges or exchanges. Each one is a separate ledger entry on a separate blockchain. A USDT balance on Tron does not exist on Ethereum and never will unless somebody moves it across. So a withdrawal form is really asking you three questions, how much, to which address, and on which network, and the third answer decides which ledger the money actually moves on.
The interface labels make this harder than it should be. ERC20, TRC20, BEP20, and SPL are token standards on Ethereum, Tron, BNB Chain, and Solana respectively, and if nobody ever told you that, the dropdown reads like alphabet soup. Fees differ a lot between them, which is exactly what tempts people into switching. Tron transfers have historically cost cents while Ethereum transfers can cost dollars, and picking the cheap option feels smart right up until the receiving platform turns out to only watch the expensive one.
Why the same address exists on five chains
Here is the part that catches experienced people too. Ethereum and the chains that copied its design, which includes BNB Chain, Polygon, Arbitrum, Optimism, Base, and Avalanche, all share the same address format. The 0x address in your MetaMask is valid on every one of them, because the same private key produces the same address everywhere, while the ledgers underneath stay completely separate. So when you send tokens to a correct looking 0x address on the wrong network, nothing rejects the transaction. It confirms, the explorer shows success, and the tokens now sit at your address on a chain neither side was thinking about.
Whether that is a disaster depends entirely on who holds the key. If the receiving address is a self custody wallet where you control the seed phrase, the mistake is usually a non event. Add the missing network in your wallet software and the tokens are right there waiting, since your key works on every EVM chain. If the receiving address belongs to an exchange, you need the exchange to go get the funds for you, and that can range from routine to impossible, which I will get to below.
Mistakes across incompatible address formats mostly cannot happen, which is a small mercy. A Tron address starts with T, a Solana address uses a different length and alphabet, and a Bitcoin address fails validation in any Ethereum wallet. Software catches those before broadcast. The dangerous mistakes are precisely the ones where the address is valid in both places, so no alarm ever goes off.
Memos and destination tags, the quieter trap
XRP, Stellar, Cosmos, Hedera, and a few other networks produce their own class of losses through a completely different mechanism. Exchanges on these chains typically do not create a fresh deposit address for each user. They run one big shared address for everyone and tell deposits apart using a memo or destination tag, a short number or string attached to the transaction. Your deposit instructions on these networks are two fields, and both are load bearing.
Send XRP to the correct address with a missing or wrong tag and the funds arrive safely at the exchange's wallet with no way for their system to figure out the deposit is yours. No error fires anywhere in that flow, the coins just sit uncredited until you open a support ticket, prove the sending wallet is yours, possibly pay a recovery fee, and wait out a queue that can run from days to weeks. The funds are usually recoverable because the exchange really does control that address, but the process is slow and entirely at their discretion.
The confusion runs the other way too. People withdrawing from an exchange to their own private XRP or XLM wallet see a memo field, assume it is mandatory, and freeze. For a self custody wallet with its own unique address the tag is generally unnecessary. Tags exist to route deposits inside shared custodial wallets, and when the address belongs to you alone there is nothing to route.
The checklist and the test send
My routine before any meaningful transfer, in the order I actually do it:
- Open the deposit screen on the receiving side first and check which networks it supports for that exact token. What the receiver supports is the only list that matters.
- Generate the deposit address fresh from that screen, on that network. Addresses saved in old withdrawal history can point at wallets or chains the platform has since retired.
- Match the network label on the withdrawal side to the deposit side exactly. If the two screens do not obviously agree, stop and work out why before sending anything.
- Paste the address, then compare the first six and last six characters against the source. Clipboard malware that swaps addresses mid paste exists in the wild, and it produces addresses that pass every format check.
- If the deposit screen shows a memo or destination tag, treat it as part of the address and copy both.
- For any amount that would hurt to lose, send a small test first, wait until it is fully credited on the receiving side, then send the remainder without editing a single field.
The test send is the one habit I would keep if I had to drop the rest. It costs a little in fees and a few minutes of waiting, and it converts an irreversible mistake into a cheap lesson. My rough rule is that if losing the transfer would bother me more than paying the network fee twice, I test. In practice that means I test nearly everything.
What is actually recoverable
An honest map, from best case to worst. Wrong EVM network into a wallet you control is the good outcome, and it is barely a mistake at all. Add the chain in your wallet and the tokens appear. You may need a small amount of that chain's gas token to move them anywhere, which is a minor errand, but nothing is lost.
Wrong EVM network into an exchange deposit address depends entirely on the exchange. If they support the chain you used, the deposit often gets credited automatically or after a ticket. If they hold the key but do not operate on that chain, recovery becomes a manual job on their side, and policies range from doing it free, to charging a fee that can be substantial, to declining outright. There is also an ugly corner case where the deposit address is a smart contract rather than a plain wallet, because a contract deployed on one chain does not exist on another, and funds sent to that address on the wrong chain can be unrecoverable even with full goodwill from everyone involved.
A missing memo or tag into an exchange is usually fixable through support, since they hold the funds, though a wrong tag that happens to match another customer's tag can get your deposit credited to a stranger, and then you are relying on policy rather than engineering. And tokens sent to a token's own contract address are mostly gone for good. People copy the contract address off an explorer page thinking it is a deposit address, and unless that specific contract happens to include a rescue function, nobody holds a key that can move the funds back out.
The pattern underneath all of these is that recoverability tracks key control. When you hold the key to where the funds landed, you are fine. When an exchange holds it, you are filing tickets and negotiating. When nobody holds it, no amount of persistence helps. Thirty seconds on the deposit screen and a cheap test send are what keep you out of the last two buckets, and after years of moving funds around I still run the full checklist every single time.