Skip to contentGuide + verified token list · Updated October 21, 2026
How to Import a Token to MetaMask (and the Real USDC, USDT & WETH Addresses)
Short answer · Updated October 21, 2026
Switch MetaMask to the network the token is on, open Manage tokens (Mobile: the + in the tokens section), search for it or choose Add custom token, paste the contract address and Import. Use the issuer’s address: native USDC is 0x8335…2913 on Base and 0xA0b8…eB48 on Ethereum; USDT is 0xdAC1…1ec7 on Ethereum. Or press Add to MetaMask below.
Privacy: We never ask to connect your account. Add to MetaMask only sends the token’s address, symbol and decimals to your own wallet for approval. The checker reads public contract data from the network’s RPC in your browser.
Search a token (USDC, USDT, WETH…) or pick a network. Add to MetaMask switches your wallet to the right network if needed and asks it to import the token (you approve it in the wallet). Every address was read on-chain and matched to the issuer’s docs or a major token list.
Showing 24 of 79 matching (82 total)
USDC on Ethereum Mainnet
Stablecoin
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
On-chain: USD Coin (USDC) · 6 decimals · chain ID 1. Native USDC issued by Circle.
Paste a token contract address and pick its network. We read its name, symbol, decimals and supply from the network’s public RPC, straight from your browser, and compare it with the verified list. No wallet connection.
82
token contracts verified on-chain across 24 networks
21
USDC contracts: Circle’s own on 18 mainnets and 2 testnets, plus Binance-Peg on BNB Chain
6 vs 18
decimals: USDC/USDT on most chains vs Binance-Peg on BNB Smart Chain
0x4200…0006
the same WETH address on Base, OP Mainnet, Unichain, Ink and World Chain
How to import a token to MetaMask, step by step
1
Switch MetaMask to the token’s network
A token contract exists on one network only. USDC on Base and USDC on Ethereum are different contracts at different addresses. Select the network the token was sent on first; if it isn’t in MetaMask yet, add it (see our add-a-network guide).
2
Check whether MetaMask already found it
MetaMask’s token detection runs on Ethereum and, with Basic Functionality on, on Linea, Avalanche, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base and zkSync. If the token isn’t on your Tokens list, MetaMask’s Help Center suggests refreshing the list from the three-dot menu first.
3
Get the contract address from a source you trust
Use the issuer’s own site (Circle for USDC, Tether for USDT), the network’s block explorer, CoinGecko or the verified list on this page. Never use an address from a DM, an airdrop or a “support” chat.
4
Open Import / Manage tokens
Extension: click the three dots in the tokens section and choose “Manage tokens”, then search by name, or scroll to the bottom and choose “Add custom token”. Mobile: expand the tokens section and tap “+”, search, or switch to the “Custom token” tab.
5
Paste the address, check the details, Import
Paste the contract address. MetaMask fills in the symbol and decimals from the contract. Check they match the verified list (USDC and USDT use 6 decimals on most networks, but 18 on BNB Smart Chain), then click Next and Import.
6
Still zero? Check the network and the transaction
If the balance is 0, look up your address on the explorer for that network. If the tokens are on another network, switch to it. If there is no incoming transfer at all, nothing arrived yet.
Native USDC is issued by Circle; these addresses match Circle’s list and were read on-chain. Older bridged versions (USDC.e, USDbC) are different tokens at different addresses. On BNB Smart Chain, Circle doesn’t issue USDC; the common token there is Binance-Peg USDC with 18 decimals.
Network
Contract address
Decimals
Notes
Ethereum Mainnet
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
6
Native USDC issued by Circle
Arbitrum One
0xaf88d065e77c8cC2239327C5EDb3A432268e5831
6
Native USDC issued by Circle
OP Mainnet
0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
6
Native USDC issued by Circle
Base
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
6
Native USDC issued by Circle
Polygon PoS
0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359
6
Native USDC issued by Circle
BNB Smart Chain
0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
18
Binance-Peg token issued by Binance, not by the original issuer; uses 18 decimals, not 6
Avalanche C-Chain
0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E
6
Native USDC issued by Circle
ZKsync Era
0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4
6
Native USDC issued by Circle
Linea
0x176211869cA2b568f2A7D4EE941E073a821EE1ff
6
Native USDC issued by Circle
Unichain
0x078D782b760474a361dDA0AF3839290b0EF57AD6
6
Native USDC issued by Circle
Celo
0xcebA9300f2b948710d2653dD7B07f33A8B32118C
6
Native USDC issued by Circle
Sonic
0x29219dd400f2Bf60E5a23d13Be72B486D4038894
6
Native USDC issued by Circle
World Chain
0x79A02482A880bCE3F13e09Da970dC34db4CD24d1
6
Native USDC issued by Circle
Ink
0x2D270e6886d130D724215A266106e6832161EAEd
6
Native USDC issued by Circle
Monad
0x754704Bc059F8C67012fEd69BC8A327a5aafb603
6
Native USDC issued by Circle
HyperEVM (Hyperliquid)
0xb88339CB7199b77E23DB6E890353E22632Ba630f
6
Native USDC issued by Circle
Sei
0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392
6
Native USDC issued by Circle
Plasma
0x2d661C89D812261039AF9764eceaAee884f5F67F
6
Native USDC issued by Circle
Cronos EVM
0x3D7F2C478aAfdB65542BCB44bCeeC05849999d2D
6
Native USDC issued by Circle
Sepolia (testnet)
0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
6
Native USDC issued by Circle
Base Sepolia (testnet)
0x036CbD53842c5426634e7929541eC2318f3dCF7e
6
Native USDC issued by Circle
USDT contract address by network
On Ethereum, Avalanche and Celo, USDT is Tether’s own token. On Arbitrum, OP Mainnet, Polygon, HyperEVM, Ink, MegaETH and Berachain, Tether’s current version is USDT0 (an omnichain USDT). The old bridged USDT on OP Mainnet still exists and is marked legacy.
Network
Contract address
Decimals
Notes
Ethereum Mainnet
0xdAC17F958D2ee523a2206206994597C13D831ec7
6
USDT issued by Tether
Arbitrum One
0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
OP Mainnet
0x01bFF41798a0BcF287b996046Ca68b395DbC1071
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
OP Mainnet
0x94b008aA00579c1307B0EF2c499aD98a8ce58e58
6
Older bridged USDT from the OP standard bridge; Tether's current OP Mainnet token is USDT0
Polygon PoS
0xc2132D05D31c914a87C6611C10748AEb04B58e8F
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
BNB Smart Chain
0x55d398326f99059fF775485246999027B3197955
18
Binance-Peg token issued by Binance, not by the original issuer; uses 18 decimals, not 6
Avalanche C-Chain
0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7
6
USDT issued by Tether
Celo
0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e
6
USDT issued by Tether
Ink
0x0200C29006150606B650577BBE7B6248F58470c1
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
HyperEVM (Hyperliquid)
0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
MegaETH
0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
Berachain
0x779Ded0c9e1022225f8E0630b35a9b54bE713736
6
USDT0, Tether's omnichain USDT (LayerZero); wallets show it as USD₮0 or USDT0
WETH contract address by network
WETH is ETH wrapped as an ERC-20 token. You don’t need to import it to hold ETH: plain ETH, the gas coin, always shows automatically. Import WETH only if you received or swapped into it.
Network
Contract address
Decimals
Notes
Ethereum Mainnet
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
18
The original WETH9 contract
Arbitrum One
0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
18
Bridged WETH from the Arbitrum token bridge
OP Mainnet
0x4200000000000000000000000000000000000006
18
OP Stack predeploy: same address on every OP Stack chain
Base
0x4200000000000000000000000000000000000006
18
OP Stack predeploy: same address on every OP Stack chain
Polygon PoS
0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619
18
Bridged WETH (Polygon PoS bridge)
ZKsync Era
0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91
18
Bridged WETH (ZKsync canonical bridge)
Linea
0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f
18
Bridged WETH (Linea canonical bridge)
Scroll
0x5300000000000000000000000000000000000004
18
Scroll predeploy
Unichain
0x4200000000000000000000000000000000000006
18
OP Stack predeploy: same address on every OP Stack chain
World Chain
0x4200000000000000000000000000000000000006
18
OP Stack predeploy: same address on every OP Stack chain
Ink
0x4200000000000000000000000000000000000006
18
OP Stack predeploy: same address on every OP Stack chain
Sepolia (testnet)
0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14
18
Testnet WETH (no value)
DAI, WBTC, stETH, wstETH, LINK and other token addresses
Token
Network
Contract address
Dec.
DAI
Ethereum Mainnet
0x6B175474E89094C44Da98b954EedeAC495271d0F
18
DAI
Arbitrum One
0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1
18
DAI
OP Mainnet
0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1
18
DAI
Base
0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb
18
DAI
Polygon PoS
0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063
18
USDS
Ethereum Mainnet
0xdC035D45d973E3EC169d2276DDab16f1e407384F
18
EURC
Ethereum Mainnet
0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c
6
EURC
Base
0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42
6
PYUSD
Ethereum Mainnet
0x6c3ea9036406852006290770BEdFcAbA0e23A0e8
6
USDe
Ethereum Mainnet
0x4c9EDD5852cd905f086C759E8383e09bff1E68B3
18
WBTC
Ethereum Mainnet
0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
8
WBTC
Arbitrum One
0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f
8
cbBTC
Ethereum Mainnet
0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf
8
cbBTC
Base
0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf
8
stETH
Ethereum Mainnet
0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
18
wstETH
Ethereum Mainnet
0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
18
wstETH
Arbitrum One
0x5979D7b546E38E414F7E9822514be443A4800529
18
wstETH
OP Mainnet
0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb
18
wstETH
Base
0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452
18
rETH
Ethereum Mainnet
0xae78736Cd615f374D3085123A210448E74Fc6393
18
cbETH
Ethereum Mainnet
0xBe9895146f7AF43049ca1c1AE358B0541Ea49704
18
ETH (Binance-Peg)
BNB Smart Chain
0x2170Ed0880ac9A755fd29B2688956BD959F933F8
18
WETH.e
Avalanche C-Chain
0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB
18
WBNB
BNB Smart Chain
0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
18
WPOL
Polygon PoS
0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
18
WAVAX
Avalanche C-Chain
0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7
18
LINK
Ethereum Mainnet
0x514910771AF9Ca656af840dff83E8264EcF986CA
18
UNI
Ethereum Mainnet
0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984
18
AAVE
Ethereum Mainnet
0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9
18
POL
Ethereum Mainnet
0x455e53CBB86018Ac2B8092FdCd39d8444aFFC3F6
18
ARB
Ethereum Mainnet
0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1
18
ARB
Arbitrum One
0x912CE59144191C1204E64559FE8253a0e49E6548
18
OP
OP Mainnet
0x4200000000000000000000000000000000000042
18
LDO
Ethereum Mainnet
0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32
18
ENS
Ethereum Mainnet
0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72
18
SHIB
Ethereum Mainnet
0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE
18
PEPE
Ethereum Mainnet
0x6982508145454Ce325dDbE47a25d4ec3d2311933
18
Token not showing in MetaMask? Six reasons and fixes
Cause
Fix
You’re on a different network
Your 0x address is the same on every EVM network, but each balance is per network. Switch to the network the tokens were sent on.
The token isn’t detected automatically
MetaMask only auto-detects tokens on a list of supported networks, using community token lists. Import it by contract address.
You imported the wrong contract
Bridged and native versions have different addresses (e.g. native USDC vs USDC.e, USDT0 vs old bridged USDT on OP Mainnet). Use the address from the issuer.
The decimals are wrong
A wrong decimals value shows a tiny or huge balance. Remove the token and re-import it; MetaMask reads decimals from the contract.
The token was hidden
Hidden tokens stay hidden until you turn them back on in Manage tokens.
The transfer never happened
Explorers show every incoming transfer. If there’s no transfer to your address, the sender didn’t send it, or sent it to another network or address.
Fake tokens: how to tell a real USDT from a copy
The name and symbol of a token prove nothing: anyone can deploy a contract called “Tether USD” with the symbol USDT in minutes. MetaMask itself says it doesn’t keep a list of “valid” tokens; detection uses community lists. The contract address is the only identity a token has.
Unknown tokens that appear in your wallet are usually airdropped bait. Don’t visit the site in the token name.
A “claim” or “swap” page that asks you to approve or sign is the drain. Check what you’ve approved with the token approval checker.
Compare every character of the address, not just the start and end; scammers create look-alike addresses (address poisoning). Our ETH address checker has a compare mode.
The checker in the tool above reads a pasted contract’s symbol and flags it when it claims to be a token we have verified on that network but sits at a different address.
For developers: prompt users to add a token (wallet_watchAsset)
EIP-747’s wallet_watchAsset asks the wallet to track a token. It works on the network the wallet is currently on, so switch first with wallet_switchEthereumChain. The symbol can be at most 11 characters. This is what the Add to MetaMask buttons above do.
// Ask the wallet to show native USDC on Base (EIP-747)
await window.ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: '0x2105' }], // Base, 8453
})
await window.ethereum.request({
method: 'wallet_watchAsset',
params: {
type: 'ERC20',
options: {
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
symbol: 'USDC',
decimals: 6,
},
},
}) // resolves true if the user approved
How we verified the list
On October 21, 2026 we called eth_getCode on every address (each has contract code) and read name(), symbol(), decimals() and totalSupply() from the network’s public RPC. We then matched each address to the issuer’s documentation (Circle, Tether/USDT0, Lido, Chainlink, Paxos, Ethena, Coinbase, Scroll, Arbitrum) or to the Uniswap, Optimism or Linea token lists. We list what the contract reports, so USDT0 shows as USD₮0 or USDT0, as it will in your wallet.
Free to reuse in articles, research, reports and apps under CC BY 4.0. Copy a ready-made citation below; the HTML version includes the credit link the license asks for.
Plain text (APA style)
GrowYourEthereum. (2026). Verified ERC-20 Token Contract Addresses (82 contracts, 24 networks) [Data set]. Updated October 21, 2026. https://growyourethereum.com/guides/import-token-to-metamask. Licensed CC BY 4.0.
HTML with credit link
<a href="https://growyourethereum.com/guides/import-token-to-metamask">Verified ERC-20 Token Contract Addresses (82 contracts, 24 networks)</a> by GrowYourEthereum, licensed under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
BibTeX
@misc{growyourethereum_token_contract_addresses_2026,
author = {{GrowYourEthereum}},
title = {Verified ERC-20 Token Contract Addresses (82 contracts, 24 networks)},
year = {2026},
howpublished = {\url{https://growyourethereum.com/guides/import-token-to-metamask}},
note = {Data set, updated October 21, 2026. CC BY 4.0}
}
Switch MetaMask to the token’s network. In the Extension, click the three dots in the tokens section and choose Manage tokens, search for the token, or choose Add custom token and paste the contract address, then Next and Import. On Mobile, expand the tokens section, tap +, search or use the Custom token tab. The Add to MetaMask buttons on this page do the same thing with one approval.
What is the USDC contract address on Base?
Native USDC on Base is 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (6 decimals), as listed by Circle. On Ethereum it is 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, on Arbitrum One 0xaf88d065e77c8cC2239327C5EDb3A432268e5831, on OP Mainnet 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 and on Polygon PoS 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359. We read each one on-chain on October 21, 2026.
What is the USDT contract address on Ethereum?
Tether USD on Ethereum is 0xdAC17F958D2ee523a2206206994597C13D831ec7 (6 decimals). On Arbitrum One, OP Mainnet and Polygon PoS, Tether’s token is now USDT0 (shown as USD₮0 or USDT0): 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 on Arbitrum, 0x01bFF41798a0BcF287b996046Ca68b395DbC1071 on OP Mainnet and 0xc2132D05D31c914a87C6611C10748AEb04B58e8F on Polygon. On BNB Smart Chain, the USDT most people hold is the Binance-Peg token 0x55d398326f99059fF775485246999027B3197955 with 18 decimals.
What is the WETH address on Base and Optimism?
WETH is 0x4200000000000000000000000000000000000006 on Base, OP Mainnet, Unichain, Ink and World Chain, because it is an OP Stack predeploy with the same address on every OP Stack chain. On Ethereum, WETH is 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 and on Arbitrum One 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1.
Why do I need to import tokens at all?
Wallets don’t scan for every token. MetaMask uses community token lists to detect popular tokens on supported networks and shows nothing for the rest. Importing only adds the token to your view; it doesn’t move or create anything, and your tokens were on-chain at your address all along.
Is it safe to import a token to MetaMask?
Importing a real token by its correct address is safe; it only changes what your wallet displays. The danger is fake tokens: anyone can deploy a token called “USDT” or “USDC”. Scammers airdrop them and point you to a website to “claim” or “swap” them, which asks you to sign an approval that drains your wallet. Check the address against the issuer or the verified list, and don’t interact with tokens you didn’t expect.
Why is my token showing 0 balance in MetaMask?
Usually you’re on the wrong network, or you imported a different contract (for example bridged USDC.e instead of native USDC). Open your address on the explorer for that network and look at the token transfers; the contract shown there is the one to import.
What decimals should I enter for USDC and USDT?
Circle’s USDC and Tether’s USDT use 6 decimals on Ethereum, Arbitrum, Base, OP Mainnet, Polygon and most other networks. The Binance-Peg USDC and USDT on BNB Smart Chain use 18. You rarely need to type decimals: MetaMask reads them from the contract when you paste the address.
Can I import a token by its name instead of the address?
Yes, MetaMask lets you search by name or symbol in Manage tokens (Extension) or after tapping + (Mobile) for tokens on its lists. Searching by symbol can still return look-alikes, so compare the contract address before you trust the result.
Is stETH or wstETH better to hold in MetaMask?
Both are Lido staked ETH. stETH (0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84 on Ethereum) rebases, so your balance grows a little every day. wstETH (0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0) keeps a fixed balance whose value in stETH rises, which is easier for DeFi and is the version bridged to L2s.
Educational guide, not financial advice. GrowYourEthereum is not affiliated with MetaMask, Consensys, Circle, Tether, Lido or any token issuer named here. Listing a token is not an endorsement; issuers can upgrade or change contracts, so check the issuer’s page for anything large.