Direcciones oficiales y verificadas de los smart contracts de Tether (USDT) y Circle (USDC) en TRON, Ethereum, BSC, Polygon, Arbitrum, Base, Optimism, Avalanche, Solana, TON y Stellar. Evita scams y enlaza cada token a su explorador.
Este documento es la referencia canónica para cualquier desarrollador, comerciante o auditor que necesite verificar la dirección real del smart contract de USDT o USDC en las blockchains que soporta TronDealer. Consolidamos en un solo lugar los contratos oficialmente emitidos por Tether y Circle, con enlace directo al explorador de cada red y una nota sobre decimales, para que nunca caigas en un token clon o un scam.
Los atacantes publican tokens con el mismo ticker (USDT, USDC) pero una dirección distinta, esperando que alguien envíe fondos reales o acepte pagos en un token sin respaldo. La única forma de evitarlo es confirmar la dirección del contrato antes de firmar una transacción, integrar un webhook o mostrar un QR a un cliente.
app/utils/v2-config.js, que alimenta la detección on-chain de depósitos en nuestra pasarela.Una pasarela de pagos cripto es tan segura como su token-allowlist. Si aceptas transferencias a una dirección sin validar que corresponde al contrato oficial, estás abriendo la puerta a:
La lista canónica que sigue es la que nuestra pasarela usa internamente para escanear depósitos. Úsala como allowlist en tu propio sistema.
Emisor oficial: Tether Holdings Limited. Símbolo on-chain: USDT. Respaldo 1:1 con reservas reportadas trimestralmente.
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| Ethereum | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | 6 | etherscan.io |
| BSC (Binance Smart Chain) | 0x55d398326f99059fF775485246999027B3197955 | 18 | bscscan.com |
| Polygon | 0xc2132D05D31c914a87C6611C10748AEb04B58e8F | 6 | polygonscan.com |
| Arbitrum One | |
En todas las redes USDT usa 6 decimales, excepto en BSC donde usa 18. Si tu integración asume 6 decimales fijos, vas a ver saldos distorsionados por 10¹² en BSC. La config de TronDealer (CHAINS.bsc.tokens.USDT.decimals = 18) lo maneja automáticamente.
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| TRON | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t | 6 | tronscan.org |
El USDT en TRON (TRC20) mueve el mayor volumen diario de Tether. Es el preferido en mercados hispanos y LatAm por sus fees muy bajos, razón por la que TronDealer integra energy renting para abaratar aún más los envíos.
| Red | Mint address | Decimales | Explorador |
|---|---|---|---|
| Solana | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB | 6 | solscan.io |
| Red | Jetton Master | Decimales | Explorador |
|---|---|---|---|
| TON | EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs | 6 | tonscan.org |
En TON, USDT se implementa como un Jetton: existe un master contract (emisor) y cada holder tiene su propia jetton wallet derivada. TronDealer resuelve la jetton wallet a partir del owner address usando @ton/ton.
Emisor oficial: Circle Internet Financial. Símbolo on-chain: USDC. Totalmente respaldado y auditado mensualmente.
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| Ethereum | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 6 | etherscan.io |
| BSC | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | 18 | bscscan.com |
| Polygon (Native) | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | 6 | polygonscan.com |
| Arbitrum (Native) | |
En Polygon, Arbitrum y Optimism existen dos versiones de USDC. La lista de arriba contiene el Native USDC emitido directamente por Circle — el que deberías usar en nuevas integraciones y el que soporta Cross-Chain Transfer Protocol (CCTP). El bridged USDC.e (0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 en Polygon, por ejemplo) es legado y está siendo desplazado. TronDealer sólo escanea Native USDC en estas redes.
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| TRON | TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8 | 6 | tronscan.org |
| Red | Mint address | Decimales | Explorador |
|---|---|---|---|
| Solana | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | 6 | solscan.io |
| Red | Asset code | Issuer | Explorador |
|---|---|---|---|
| Stellar | USDC | GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN | stellar.expert |
En Stellar un asset se identifica por el par (código, issuer). Cualquier dirección Stellar puede emitir un asset con código "USDC" —por eso el issuer es el identificador real. Sólo el emitido por GA5ZSEJY... está respaldado por Circle.
Además de USDT y USDC, TronDealer soporta stablecoins regionales y EUR en redes específicas.
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| Base | 0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42 | 6 | basescan.org |
| Red | Dirección del contrato | Decimales | Explorador |
|---|---|---|---|
| Rootstock (RSK) | 0xe700691dA7b9851F2F35f8b8182c69c53CcaD9Db | 18 | explorer.rootstock.io |
DoC (Dollar on Chain) es una stablecoin colateralizada 1:1 con USD soportada por rBTC, la moneda nativa de Rootstock (la red EVM asegurada por los mineros de Bitcoin).
La forma canónica de comprobar que una dirección es un ERC-20 vivo es llamar a sus métodos view (symbol, decimals, totalSupply) y compararlos con los valores esperados.
Si symbol devuelve algo distinto a USDT o USDC, o si la llamada falla porque no existe ABI en esa dirección, es señal inequívoca de que la dirección no es el contrato oficial.
Si estás construyendo tu propio escáner de depósitos o un wallet, te recomendamos hardcodear la allowlist en lugar de confiar en configuración dinámica. Es un vector de ataque menos:
export const STABLECOINS = {
bsc: {
USDT: { address: '0x55d398326f99059fF775485246999027B3197955', decimals: 18 },
USDC: { address: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', decimals: 18 },
},
eth: {
USDT: { address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', decimals: 6 },
USDC: { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', decimals: 6 },
},
pol: {
USDT: { address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', decimals: 6 },
USDC: { address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', decimals: 6 },
},
arb: {
USDT: { address: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', decimals: 6 },
USDC: { address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', decimals:
Esta estructura es justo la que utiliza TronDealer internamente (CHAINS en app/utils/v2-config.js) para filtrar logs Transfer en su escáner de depósitos.
Si tu objetivo es aceptar pagos en cualquiera de estas stablecoins sin escribir tu propio escáner on-chain, configurar RPCs, ni gestionar gas, la forma más rápida es usar la API de TronDealer directamente. El flujo completo de registro, asignación de wallets, webhooks HMAC y sweep automático está cubierto en la guía de integración en 6 pasos.
Si sólo necesitas validar contratos en tu dApp o wallet, esta página es tu fuente. Guárdala, mantén la allowlist actualizada, y nunca aceptes una dirección que no esté aquí sin cotejarla con Tether Transparency o Circle.
| 6 |
| arbiscan.io |
| Base | 0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 | 6 | basescan.org |
| Optimism | 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 | 6 | optimistic.etherscan.io |
| Avalanche C-Chain | 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7 | 6 | snowtrace.io |
| 6 |
| arbiscan.io |
| Base | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 6 | basescan.org |
| Optimism (Native) | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 | 6 | optimistic.etherscan.io |
| Avalanche C-Chain | 0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E | 6 | snowtrace.io |
import { ethers } from 'ethers'
const ERC20_ABI = [
'function symbol() view returns (string)',
'function decimals() view returns (uint8)',
'function totalSupply() view returns (uint256)',
'function balanceOf(address) view returns (uint256)',
]
const provider = new ethers.JsonRpcProvider(process.env.ETH_RPC_URL)
const usdt = new ethers.Contract(
'0xdAC17F958D2ee523a2206206994597C13D831ec7',
ERC20_ABI,
provider
)
const [symbol, decimals, supply] = await Promise.all([
usdt.symbol(),
usdt.decimals(),
usdt.totalSupply(),
])
console.log({ symbol, decimals, supply })
// { symbol: 'USDT', decimals: 6n, supply: ...n }