O que é um conversor de decimais de token?
Um conversor de decimais de token traduz entre o inteiro bruto que um contrato de token armazena e o valor legível que uma carteira exibe, usando o valor de decimals do token: valor = bruto ÷ 10decimals. Contratos ERC-20 e TRC-20 o expõem por meio de decimals(); um mint SPL o armazena na conta de mint. USDT e USDC usam 6, WBTC 8, e tokens semelhantes ao ETH 18.
Decimais de tokens comuns
| Token | Decimais | 1 token como inteiro bruto |
|---|---|---|
| USDT (Ethereum, Tron, Solana, Polygon, Arbitrum) | 6 | 1.000.000 |
| USDC (todas as principais redes) | 6 | 1.000.000 |
| USDT na BNB Smart Chain (Binance-Peg) | 18 | 1.000.000.000.000.000.000 |
| WBTC, cbBTC | 8 | 100.000.000 |
| ETH, WETH, DAI, LINK, UNI, AAVE | 18 | 1.000.000.000.000.000.000 |
| SOL e a maioria dos tokens SPL | 9 | 1.000.000.000 |
| GUSD | 2 | 100 |
Como a conversão funciona
legível = bruto ÷ 10decimals e bruto = legível × 10decimals. O detalhe é a precisão: valores com 18 decimais excedem o que um número de ponto flutuante consegue representar, então esta página usa inteiros de precisão arbitrária. Informar mais casas decimais do que o token suporta é rejeitado, porque a rede não consegue representar esse valor.
Exemplo prático
Um evento Transfer ERC-20 mostra value = 2500000. Se o token for USDC (6 decimais), isso são 2,5 USDC. Se o mesmo número viesse de uma transferência de DAI (18 decimais), seria 0,0000000000025 DAI, um valor de poeira. No sentido inverso, para enviar 0,0025 WBTC (8 decimais), o argumento de transfer deve ser 0,0025 × 108 = 250.000, e enviar 1 LINK (18 decimais) exige 1.000.000.000.000.000.000.
Erros comuns
- Presumir 18. Fixar 1018 no código transforma um pagamento de 100 USDC em 0,0000000001 USDC. Leia
decimals()do contrato. - Confiar no símbolo. Tokens bridgeados com o mesmo ticker podem usar decimais diferentes em redes diferentes. Verifique o contrato com o qual você está realmente interagindo.
- Arredondar antes de multiplicar. Converta primeiro o valor legível para o inteiro bruto e depois faça a aritmética em inteiros; o ponto flutuante pode produzir 2499999.9999 em vez de 2500000.
Em código
- ethers.js:
ethers.parseUnits("1.5", 6)→1500000n;ethers.formatUnits(1500000n, 6)→"1.5". - web3.py:
int(Decimal("1.5") * 10**6); evitefloat. - Solana web3.js: os valores em
createTransferInstructionsão inteiros brutos; multiplique por10 ** mint.decimalsusando BigInt.
Para moedas nativas, veja o conversor de unidades Ethereum, o conversor de satoshi, o conversor de lamports e o conversor de sun.