Exchange Stablecoin Cross-Chain Migration: Why Total Reserves Stay the Same

 / 
5

You swap 10,000 USDT from ERC-20 to TRC-20 on your exchange. Then you check the exchange's published reserve addresses on-chain and see that neither the Ethereum pool nor the Tron pool has changed at all—the total is exactly the same. It looks odd, but it actually shows that the cross-chain migration never moved any on-chain funds. It's purely an internal record update on the platform.

Step 1: Understand the Exchange's "Big Pool" Ledger System

Exchanges don't give each user a separate on-chain address. Instead, they pool the same asset from all users into a few hot and cold wallets, and use a database to track who owns what share.

What to do: Confirm that the exchange keeps separate reserve pools for stablecoins like USDT on each chain.

How to do it: Go to Binance's or OKX's official proof-of-reserves page. Look for "Asset Distribution" or "On-chain Distribution." You will see entries like "USDT (ERC-20)" and "USDT (TRC-20)" with the corresponding on-chain address and current balance. Those addresses are the exchange's public pools.

Completion standard: You can clearly explain that the exchange's USDT isn't stored separately for each user on each chain; instead, there is one big pool per chain, and your balance is just an internal quota within that pool.

Risk reminder: If you find an address holding billions of USDT on a blockchain explorer, don't assume it's a whale—it's almost certainly the exchange's reserve pool address. Using such addresses to "verify" cross-chain migration is fine, but if someone tells you to send funds directly to such an address to "complete a cross-chain transfer," stop immediately—exchanges never ask users to do that.

Step 2: Cross-Chain Migration Happens Only in the Database

When you click "Cross-chain swap" or "Switch network" in the app, no on-chain transaction is created. The exchange simply deducts the ERC-20 amount from your account and adds the same amount to your TRC-20 balance.

What to do: Break your action down into simple ledger movements.

How to do it:

  • When you start the migration, the platform checks if you have enough ERC-20 USDT.
  • It deducts the amount from your ERC-20 balance.
  • It adds the same amount to your TRC-20 balance.
  • During this process, no funds leave the on-chain ERC-20 pool address, and none enter the on-chain TRC-20 pool address.

Completion standard: You can confirm that as long as you use the exchange's internal feature (like "Cross-chain transfer" under "Funds"), there are no on-chain fees, no block confirmation worries—everything stays within the platform's database.

Common mistake: Some people think "cross-chain migration" means withdrawing ERC-20 USDT to MetaMask, using a third-party bridge to move to Tron, and then depositing the TRC-20 back to the exchange. If you do this, there will be on-chain transactions. When you deposit TRC-20, the exchange credits you from its Tron pool. You will see your funds on both chains at different stages, but you'll pay all the on-chain fees and take on bridge risks yourself. Also, if the bridge gives you a wrapped token instead of native USDT, the exchange may reject the deposit and your funds could get stuck.

Step 3: Direct Verification That Total Reserves Stay the Same

Since migration is just internal accounting, neither the ERC-20 pool nor the TRC-20 pool changes its balance, so their sum stays the same.

What to do: Capture data from the proof-of-reserves page at two different times and verify that the total hasn't moved.

How to do it:

  • Before migrating, open the exchange's public on-chain asset list and add the balances of USDT (ERC-20) and USDT (TRC-20).
  • After migration, wait 5 minutes and do the same addition again.
  • You will see that ERC-20 balance might drop because of other users' withdrawals, but your own operation had zero effect on the pool balances—the money in the pools didn't move; only the network label of your internal quota changed.

Completion standard: The two totals are roughly the same (tiny variations may appear from normal deposits/withdrawals), and your personal USDT balance hasn't changed at all after the migration. That's verification done.

Some exchanges release audited reserve snapshots every month, including on-chain addresses and balances. If you check a snapshot from a day when many users did cross-chain migrations, you'll see that the total balances of the ERC-20 and TRC-20 addresses didn't change because of those migrations. Snapshots are usually published around the 1st of the following month (Source: Binance Proof of Reserves announcements, 2025-03; OKX Monthly Proof of Reserves page, 2025-02).

Step 4: The Case That Actually Changes Reserve Totals

There is one case that looks like cross-chain migration but is completely different: you withdraw USDT (ERC-20) to a personal wallet, use a third-party bridge to swap to TRC-20, and then deposit it back into the exchange.

What to do: Distinguish between internal migration and external on-chain transfer.

How to do it:

  • When you withdraw, the exchange's ERC-20 reserve address balance genuinely drops by that amount.
  • When you eventually deposit TRC-20, the exchange's TRC-20 reserve address balance rises by that amount.
  • So, after the whole external round trip, the total reserves remain unchanged (what left came back from the other side). However, the on-chain balances of the two addresses show a real shift. This requires block confirmations, costs fees, and can easily get stuck if a wrapped token isn't accepted.

Completion standard: You can clearly tell a beginner: if the screen says "Cross-chain transfer" or "Switch network" and does not ask for an on-chain address or gas fee, it's internal bookkeeping. If it mentions "Withdrawal address," "Network fee," or "Contract interaction," it definitely involves on-chain activity and will actually move the reserve pools.

If You Don't Have an Account Yet

On Binance, go to "Transfer" under assets to find cross-chain conversion. Type "USDT" in the search bar and select the target network. If you need a referral code when signing up, you can use Binance code: FYLK9104. On OKX, the path is "Assets—Transfer—Cross-chain bridge." The invitation code is 24U2795. Both tools work entirely within the platform and do not create any on-chain transactions.

FAQ

1. Are there any fees for internal migration?

Most exchanges do not charge a fee for internal cross-chain swaps; they just balance the internal debt between the two pools. However, if one chain's reserve pool gets tight because many users move funds in one direction, the platform may limit daily amounts or show "temporarily unavailable." This is not an on-chain fee—just risk control.

2. I see no on-chain record of my migration. Is that safe?

Yes, it's safe. Your assets stay inside the exchange's overall reserve pool. Internal ledgers are protected by database encryption and audits, with no risk of private key leaks. If you're still unsure, you can regularly check the reserve proof reports from external audit firms instead of expecting to see your migration transaction on a block explorer.

3. Are there minimum or maximum limits for migration?

Platforms typically set a minimum of 1 USDT per internal cross-chain transfer, and daily limits range from 500,000 to 2,000,000 USDT depending on your account verification level and the real-time health of the chain's reserves. (No verified uniform standard could be found, so check the system prompt after entering an amount on the interface.)

Next, you can go directly to the exchange's proof-of-reserves page, find the latest snapshot, record the reserve balances of ERC-20 USDT and TRC-20 USDT, and do the same after 24 hours. A side-by-side comparison will show that the total pool hasn't moved. If you happen to check on the day the exchange releases its monthly report, the verification will be cleanest—usually updated around 10:00 (UTC+8) on the 1st of the following month.