Somente para fins educacionais; não é aconselhamento de investimento ou segurança. Os decimais não comprovam identidade, valor, lastro ou segurança de um token.
Resposta direta
Em um token ERC-20, decimals() é um metadado opcional que informa às interfaces como exibir unidades inteiras. Se retornar d, o valor exibido por convenção é raw / 10^d. Isso não altera a aritmética do contrato nem autentica o token. Antes de confiar no resultado, verifique a rede, o endereço exato, o código ou implementação do proxy e o bloco.
Leia decimals() diretamente por um RPC independente em um bloco definido, decodifique o retorno ABI como uint8 e compare com o registro oficial do emissor e um explorador confiável. Depois confira a escala com valores brutos de balanceOf, transferências, aprovações, recibos e eventos. Não presuma 18 se a chamada não existir, reverter, retornar dados malformados ou divergir de outras evidências.
Como funciona
O ERC-20 armazena e transfere valores inteiros sem sinal. A camada de exibição insere o separador decimal; o contrato continua recebendo inteiros. Converta entradas com strings decimais ou inteiros de precisão arbitrária, nunca com ponto flutuante binário. Uma quantidade só é representável quando a multiplicação por 10^d gera um inteiro.
Como decimals() é opcional, um token compatível pode omiti-lo. Uma implementação personalizada ou atualizável pode retornar valor inesperado ou mudar após uma atualização. Em um proxy ERC-1967, examine endereço proxy, implementação ou beacon, administrador e eventos de atualização; leia o estado do token no endereço proxy e fixe comparações no mesmo bloco.
Aprovações e valores ERC-2612 permit também são inteiros brutos. Uma transferência exibida corretamente não prova que aprovação, mínimo do roteador, valor da ponte ou banco contábil usou a mesma escala. Contratos de origem e destino de uma ponte podem usar decimais diferentes; compare valor legível e unidades brutas em cada lado conforme as regras documentadas de conversão e arredondamento.
Use este processo:
- Fixe ID da rede ou domínio, contrato do token, número do bloco, endpoint RPC e horário de observação.
- Confirme o endereço no registro oficial do emissor; nome, símbolo, ícone e busca não são evidências autorizadas.
- Verifique o código implantado e se o endereço é proxy; registre implementação ou beacon, administrador e atualizações recentes.
- Chame
decimals(), decodifiqueuint8por ABI e registre sucesso, reversão, vazio ou saída malformada sem substituir um padrão. - Leia
balanceOf,totalSupply, aprovação, calldata, recibo e eventos brutos em blocos compatíveis; formate-os com a escala observada. - Recalcule transferências, aprovações, cotações e pontes com inteiros, incluindo taxas, arredondamento, resíduos, rebases ou taxas de transferência.
- Simule e envie uma operação pequena e concilie saldos brutos antes e depois; pare diante de divergência entre interface, RPC, evento ou saldo.
Exemplos
- Um valor bruto, duas escalas. Com
raw = 123456789,d = 6exibe123.456789; comd = 18,0.000000000123456789. A diferença é um fator de10^12. - A representabilidade importa. Com
d = 6,1.25tokens são1250000unidades brutas.0.0000001token é menor que uma unidade e deve ser rejeitado ou arredondado por regra explícita. - Escala errada na aprovação. Uma aprovação de
100tokens comd = 6é100000000. Codificá-la comd = 18gera100000000000000000000, uma aprovação10^12vezes maior. - Reescala na ponte. Se uma rota documentada
1:1converte token de origem comd = 6para representação de destino comd = 18,2500000bruto representa2.5tokens e2500000000000000000no destino representa2.5. Taxas, limites, resíduos e saldo recebido ainda precisam ser verificados.
Riscos
- O endereço correto é consultado na rede errada.
- Nome, símbolo ou ícone copiado esconde outro contrato.
- A implementação proxy ou beacon muda após a verificação.
- RPC ou explorador entrega estado antigo, não finalizado ou inconsistente.
- Metadados ausentes ou malformados são substituídos silenciosamente por
18. - Ponto flutuante binário arredonda valor grande ou preciso.
- A carteira formata a transferência corretamente, mas erra aprovação ou permit.
- Um banco de dados mistura unidades brutas e valores legíveis.
- Uma ponte presume decimais iguais ou não revela arredondamento de resíduos.
- Taxa de transferência, rebase, emissão, queima, pausa ou congelamento rompe a conciliação simples.
- Calldata, eventos, recibos e alterações reais de saldo não coincidem.
- A checagem de decimais é confundida com prova de emissor, reservas, liquidez ou segurança.
Equívocos comuns
- Todo ERC-20 tem
18decimais. O metadado é opcional e uma implementação pode retornar outro valor. - Decimais são bits de precisão usados pela EVM. São uma convenção decimal de exibição; a aritmética continua inteira.
- O saldo formatado do explorador é confirmação independente. Pode depender da mesma chamada e compartilhar o mesmo erro.
- Símbolo e decimais iguais identificam o mesmo ativo. Também são necessários rede correta, contrato exato e evidência do emissor.
- Uma transferência pequena valida todas as integrações. Aprovações, roteadores, pontes, exchanges e contabilidade podem aplicar escalas separadamente.
Tópicos relacionados
- Verificação do contrato do token
- Decodificação de calldata na carteira
- Verificação de token de ponte
- Risco de token com taxa de transferência
- Contrato proxy
Fontes
- ERC-20: Token Standard - Ethereum Improvement Proposals (acessado: 2026-08-21)
- ERC-20 - OpenZeppelin Docs (acessado: 2026-08-21)
- JSON-RPC API - ethereum.org (acessado: 2026-08-21)
- ERC-1967: Proxy Storage Slots - Ethereum Improvement Proposals (acessado: 2026-08-21)
- ERC-2612: Permit Extension for EIP-20 Signed Approvals - Ethereum Improvement Proposals (acessado: 2026-08-21)