Como Ler Smart Contracts: Guia para Iniciantes

Aprenda a identificar funções perigosas e vulnerabilidades em contratos inteligentes

Avançado20 min de leituraAtualizado em Janeiro 2025

Por Que Aprender a Ler Smart Contracts?

Você não precisa ser programador para identificar sinais de alerta em contratos. Este guia ensina o essencial para detectar 90% das vulnerabilidades comuns sem conhecimento profundo de Solidity.

Fundamentos: O Que é Um Smart Contract?

Um smart contract é código que roda na blockchain. Uma vez implantado, ele executa automaticamente conforme programado. O problema: se houver bugs ou funções maliciosas, eles também executarão automaticamente - e não podem ser revertidos.

Exemplo de contrato básico ERC20:

contract SimpleToken {
    string public name = "My Token";
    mapping(address => uint256) public balances;
    
    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount);
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}

Onde Encontrar o Código do Contrato

Passo 1: Acessar Block Explorer

  1. 1. Copie o endereço do contrato (começa com 0x...)
  2. 2. Vá ao block explorer apropriado:
    • • Ethereum: Etherscan.io
    • • BSC: BSCScan.com
    • • Polygon: PolygonScan.com
  3. 3. Cole o endereço na busca
  4. 4. Clique na aba "Contract" → "Read Contract" ou "Code"
⚠️ Sinal de Alerta: Se o contrato NÃO estiver verificado, você não pode ver o código. Isso é um red flag enorme - não invista!

Funções Perigosas: O Que Procurar

🚨 CRÍTICO: Função mint()

O que faz: Cria novos tokens do nada, aumentando o supply total.

function mint(address account, uint256 amount) public onlyOwner { _totalSupply += amount; balances[account] += amount; }

Perigo: Owner pode criar tokens ilimitados e desvalorizar seu investimento.

Seguro se: Função renunciada ou com limites claros e auditados.

🚨 CRÍTICO: Taxas Variáveis

O que faz: Permite owner mudar taxas de compra/venda a qualquer momento.

uint256 public sellTax = 5; function setSellTax(uint256 newTax) public onlyOwner { sellTax = newTax; // Pode ser mudado para 99%! }

Perigo: Owner pode aumentar taxa de venda para 99%, tornando impossível vender (honeypot).

Seguro se: Taxas fixas ou com limite máximo hard-coded (ex: max 10%).

🚨 CRÍTICO: Blacklist / Pausable

O que faz: Permite owner congelar endereços específicos ou pausar todo o contrato.

mapping(address => bool) public blacklist; function transfer(address to, uint256 amount) public { require(!blacklist[msg.sender], "Blacklisted"); // ... restante da função }

Perigo: Owner pode impedir qualquer endereço de vender.

Aceitável se: Usado apenas para compliance (KYC/AML) em projetos regulados com equipe doxxada.

⚠️ CUIDADO: onlyOwner

O que faz: Modificador que restringe função apenas ao owner (criador do contrato).

modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; } function withdrawFunds() public onlyOwner { // Owner pode retirar fundos }

Análise: Não é inerentemente ruim, mas verifique O QUE o owner pode fazer.

Melhor cenário: Ownership renunciada após deploy (renounceOwnership).

Checklist de Análise: Passo-a-Passo

Análise Rápida (5 minutos)

  1. 1.
    Contrato Verificado?

    ❌ Não verificado = RED FLAG absoluto. Não invista!
    ✅ Verificado = Continue a análise

  2. 2.
    Busque Funções Perigosas

    Use Ctrl+F para procurar: mint, blacklist, pause, onlyOwner, setTax, withdraw

  3. 3.
    Verifique Ownership

    Procure por: renounceOwnership() ou transferOwnership()
    ✅ Melhor: Ownership renunciada (owner = 0x0000...)
    ⚠️ Cuidado: Owner ainda tem controle

  4. 4.
    Analise Taxas

    Procure: buyTax, sellTax, transferTax
    ✅ Seguro: Taxas fixas < 10%
    ❌ Perigoso: Taxas variáveis ou > 20%

  5. 5.
    Verifique Liquidez

    Na aba "Read Contract", procure por funções de LP
    Confirme que liquidez está bloqueada (locked) no Unicrypt ou similar

Padrões Seguros vs. Padrões Perigosos

✅ Sinais Positivos

  • ✓ Código verificado e aberto
  • ✓ Auditoria por empresa respeitada
  • ✓ Ownership renunciada
  • ✓ Taxas fixas e razoáveis
  • ✓ Sem funções mint() ou pause()
  • ✓ Liquidez bloqueada verificável
  • ✓ Código limpo e bem comentado
  • ✓ Usa bibliotecas padrão (OpenZeppelin)

❌ Red Flags

  • ✗ Contrato não verificado
  • ✗ Função mint() ativa sem limitação
  • ✗ Taxas variáveis controláveis
  • ✗ Funções de blacklist sem justificativa
  • ✗ Owner com poderes excessivos
  • ✗ Código ofuscado ou confuso
  • ✗ Funções de "backdoor"
  • ✗ Liquidez não bloqueada

Ferramentas de Análise Automatizada

Use Ferramentas, Não Confie Cegamente

Ferramentas automatizam muito do processo, mas entender o básico te protege melhor:

GuardScan (Recomendado)

Scanner completo com teste de honeypot, análise de funções maliciosas e verificação de liquidez.

Token Sniffer

Detector automático de scams com score de segurança e análise de similaridade.

Honeypot.is

Focado especificamente em detectar honeypots através de simulação de trades.

Etherscan Contract Reader

Visualize funções, eventos e variáveis diretamente no explorer.

Exemplo Prático: Analisando Um Contrato Real

Caso de Estudo: Token Suspeito

Passo 1: Cole endereço no Etherscan → Contrato verificado ✅
Passo 2: Busque "mint" → Encontrou função mint() com onlyOwner ⚠️
Passo 3: Verifique se owner foi renunciado → Owner = 0x1234... (não renunciado) ❌
Passo 4: Busque "tax" → Encontrou setTaxes() com onlyOwner ❌
Passo 5: Cole no GuardScan → Honeypot detectado ❌
Conclusão: NÃO INVESTIR. Múltiplos red flags indicam alto risco de rug pull ou honeypot.

Regra de Ouro

Se você não entende o contrato, não invista.

Ler contratos não precisa ser complicado. Com este guia, você já pode identificar 90% dos scams. Use GuardScan para automatizar, mas sempre faça sua própria verificação básica.

Parabéns! 🎓

Você completou todos os guias essenciais de segurança crypto. Agora você tem o conhecimento para investir com muito mais segurança.

← Voltar para o Hub de Aprendizado