Pular para o conteúdo
Skillpedia
Machine learning280 mil · #187

evm-token-decimals

Ajuda seu agente a evitar erros com números decimais em diferentes redes blockchain. Garante que os valores de tokens sejam precisos em transações e cálculos.

O que ela faz

Essa ferramenta ajuda a garantir que os valores de moedas digitais (tokens) em diferentes redes blockchain sejam calculados corretamente. Ela evita erros que fazem com que os valores pareçam muito maiores ou menores do que realmente são.

Quando usar

  • ✓Ao verificar o saldo de uma moeda digital.
  • ✓Ao calcular o valor em dinheiro de seus ativos digitais.
  • ✓Ao comparar valores de moedas digitais entre diferentes redes blockchain.

Exemplo do que pedir para a IA

“Qual o saldo real de tokens UNI na minha carteira na rede Polygon?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/skills/evm-token-decimals/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/skills/evm-token-decimals/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela consulta a informação correta sobre a moeda digital em tempo real e armazena essa informação para uso futuro. Isso garante que os cálculos sejam sempre precisos, mesmo que a mesma moeda digital tenha representações diferentes em redes distintas.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill evm-token-decimals

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/evm-token-decimals/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Decimais de Tokens EVM

Divergências silenciosas de decimais são uma das maneiras mais fáceis de enviar saldos ou valores em USD com ordens de magnitude de diferença, sem gerar um erro.

Quando Usar

  • Lendo saldos de ERC-20 em Python, TypeScript ou Solidity
  • Calculando valores em moeda fiduciária a partir de saldos on-chain
  • Comparando quantidades de tokens entre múltiplas cadeias EVM
  • Lidando com ativos "bridged" (transferidos entre cadeias)
  • Construindo rastreadores de portfólio, bots ou agregadores

Como Funciona

Nunca assuma que stablecoins usam os mesmos decimais em todos os lugares. Consulte decimals() em tempo de execução, armazene em cache por (chain_id, token_address) e use matemática segura para decimais em cálculos de valor.

Exemplos

Consultar decimais em tempo de execução

from decimal import Decimal
from web3 import Web3

ERC20_ABI = [
    {"name": "decimals", "type": "function", "inputs": [],
     "outputs": [{"type": "uint8"}], "stateMutability": "view"},
    {"name": "balanceOf", "type": "function",
     "inputs": [{"name": "account", "type": "address"}],
     "outputs": [{"type": "uint256"}], "stateMutability": "view"},
]

def get_token_balance(w3: Web3, token_address: str, wallet: str) -> Decimal:
    contract = w3.eth.contract(
        address=Web3.to_checksum_address(token_address),
        abi=ERC20_ABI,
    )
    decimals = contract.functions.decimals().call()
    raw = contract.functions.balanceOf(Web3.to_checksum_address(wallet)).call()
    return Decimal(raw) / Decimal(10 ** decimals)

Não codifique embutido 1_000_000 porque um símbolo geralmente tem 6 decimais em outro lugar.

Armazenar em cache por cadeia e token

from functools import lru_cache

@lru_cache(maxsize=512)
def get_decimals(chain_id: int, token_address: str) -> int:
    w3 = get_web3_for_chain(chain_id)
    contract = w3.eth.contract(
        address=Web3.to_checksum_address(token_address),
        abi=ERC20_ABI,
    )
    return contract.functions.decimals().call()

Lidar com tokens incomuns de forma defensiva

try:
    decimals = contract.functions.decimals().call()
except Exception:
    logging.warning(
        "decimals() reverted on %s (chain %s), defaulting to 18",
        token_address,
        chain_id,
    )
    decimals = 18

Registre o fallback e mantenha-o visível. Tokens antigos ou não padronizados ainda existem.

Normalizar para WAD de 18 decimais em Solidity

interface IERC20Metadata {
    function decimals() external view returns (uint8);
}

function normalizeToWad(address token, uint256 amount) internal view returns (uint256) {
    uint8 d = IERC20Metadata(token).decimals();
    if (d == 18) return amount;
    if (d < 18) return amount * 10 ** (18 - d);
    return amount / 10 ** (d - 18);
}

TypeScript com ethers

import { Contract, formatUnits } from 'ethers';

const ERC20_ABI = [
  'function decimals() view returns (uint8)',
  'function balanceOf(address) view returns (uint256)',
];

async function getBalance(provider: any, tokenAddress: string, wallet: string): Promise<string> {
  const token = new Contract(tokenAddress, ERC20_ABI, provider);
  const [decimals, raw] = await Promise.all([
    token.decimals(),
    token.balanceOf(wallet),
  ]);
  return formatUnits(raw, decimals);
}

Verificação rápida on-chain

cast call <token_address> "decimals()(uint8)" --rpc-url <rpc>

Regras

  • Sempre consulte decimals() em tempo de execução
  • Armazene em cache por cadeia mais endereço do token, não por símbolo
  • Use Decimal, BigInt ou matemática exata equivalente, não ponto flutuante
  • Reconsulte os decimais após mudanças de "bridging" ou "wrapper"
  • Normalize a contabilidade interna de forma consistente antes da comparação ou precificação
Perguntas frequentes

Por que o saldo de uma moeda digital aparece errado?

Isso pode acontecer porque diferentes redes blockchain usam um número diferente de 'casas decimais' para representar a mesma moeda digital. Essa ferramenta corrige essa diferença.

O que são 'casas decimais' no contexto de moedas digitais?

É como a moeda digital é dividida. Por exemplo, 1 Bitcoin pode ser representado como 1.000.000.000.000.000.000 unidades menores, dependendo das 'casas decimais' definidas.

Essa ferramenta funciona para todas as moedas digitais?

Ela é projetada para moedas digitais na rede EVM (Ethereum Virtual Machine), que inclui redes populares como Ethereum, Polygon, Binance Smart Chain, entre outras.

Detalhes

Descrição original do autor

Prevent silent decimal mismatch bugs across EVM chains. Covers runtime decimal lookup, chain-aware caching, bridged-token precision drift, and safe normalization for bots, dashboards, and DeFi tools. Use when handling token amounts across EVM chains, or when a balance, price, or transfer amount is off by orders of magnitude.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#187
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas