Cross-chain · Ethereum → Polygon

Swap WETH from Ethereum to USDC on Polygon

Swap WETH from Ethereum to USDC on Polygon. Holders of wrapped ETH who need Circle's native USDC on chain 137 spend WETH and receive that dollar.

You approve WETH at 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 on Etherscan. Withdrawing from that contract unwraps to native ETH and stays on Ethereum. This route spends the WETH and delivers 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 on Polygonscan, Circle's native USDC, 6 decimals. Bridged USDC.e at 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 is not the receipt. Gas to start is still ETH on chain id 1. Import the native USDC from Polygonscan after you switch to chain id 137. USDC.e will not reflect this route, and Etherscan will not show the new dollars either. Hold POL on the destination wallet before you try to deposit those dollars. Confirm it on Polygonscan.

Diagram for Swap WETH from Ethereum to USDC on Polygon
WETH leaves Ethereum. USDC is what can arrive on Polygon.

Unwrapping is the wrong tool

If you want native ETH on Ethereum, withdraw from 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 and stop. If you want Circle USDC on Ethereum, swap WETH there. This page is for a wallet that must hold Polygon native USDC. A mainnet trade never creates 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359.

Native USDC versus USDC.e

The credit to expect is 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 on Polygonscan. The bridged dollar is 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174. Depositing into the wrong row will not credit an app that listed the other address. WETH in is 18 decimals. This USDC is 6.

ETH gas beside the WETH

WETH cannot pay the Ethereum fee. Hold native ETH for the approval. How to bridge assets between chains walks through that signature. On chain 137 the fee is POL, and native USDC does not cover it. Blocks there are about 2 seconds.

After the 6 decimal dollar arrives

Switch to chain id 137 and read Polygonscan before you deposit. Apps that want USDT at 0xc2132D05D31c914a87C6611C10748AEb04B58e8F will ignore this USDC. Apps that want Ethereum USDC are on the wrong network. Mainnet blocks are about 12 seconds on the way out.

Legal

Risk disclosure

XAUConnect is a non-custodial swap aggregator. Digital assets are volatile and may lose value rapidly. Content on this page is educational and not investment advice. Verify every contract address on the official block explorer before approving a transaction.

Frequently asked questions

What is the best way to swap WETH from Ethereum to USDC on Polygon?

You approve WETH at 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 on Etherscan. Withdrawing from that contract unwraps to native ETH and stays on Ethereum.

Can I unwrap WETH and then bridge the ETH?

You can, and that is a different route. Withdrawing 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 returns native ETH on chain id 1. This page spends the WETH contract and pays Polygon native USDC at 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359. Choose the output the destination wallet is supposed to hold.

What do I approve on Etherscan?

Approve 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2. Do not approve Circle's Ethereum USDC for this pair. You still need native ETH for gas on chain id 1. Blocks are about 12 seconds. WETH is the asset being sold. ETH is only the fee. ETH is only the fee on chain id 1.

Which USDC will the wallet show?

Circle's native USDC at 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359, 6 decimals, on Polygonscan. USDC.e will not move. If the balance looks enormous or tiny, the decimal field is wrong. Re-import the contract from Polygonscan before you send it to a pool. Then switch the wallet to chain id 137.

Live execution

Trade on XAUConnect

Open the swap page with this cross-chain route pre-selected, then connect your wallet on the source chain to quote and execute. You keep the keys.

Continue exploring

Related markets, guides & networks

Next pages on this subject. Read them before you trade.

Build programmatically

Swap via API for bots and AI agents: quotes, builds, and cross-chain routes.

Developer quickstart