🇧🇷
Ethereum Developer Pack - PT
  • Ethereum Developer Pack - PT
  • Módulo 1
    • Introdução a Smart Contracts
      • Fundamentos de Blockchain
        • Histórico
        • Bitcoin
        • O que é Blockchain
        • Conceitos-chave em Blockchain
        • Como funciona a Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • A nova Internet
        • Web 3
        • Elementos Fundamentais
        • Impacto do Ethereum em Diversos Setores
      • Wallets
        • Componentes de uma wallet
        • Tipos de Wallet
        • Códigos Mnemônicos
      • Ethereum 101
        • Smart Contracts
        • Contas
          • Tipos de contas
          • Conteúdo das contas
        • Transações
          • Componentes
          • Ciclo de vida
        • Gás
        • Solidity
        • EVM
          • A máquina de estados
          • Opcodes
          • Como funciona a EVM
          • Clientes de execução
          • DApps
      • Blockchain Explorer
        • Funções de um blockchain explorer
        • Beneficios de utilizar um blockchain explorer
      • Remix
        • Características do Remix
        • Workspaces ou espaços de trabalho
        • Carregar e compilar um contrato
        • Implantar na máquina virtual do Remix (Remix VM)
        • Interagindo com funções
        • Deployar em uma rede pública
      • Crie seu primeiro Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Dados
      • Funções
      • Variáveis
        • Exercício 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Exercício 3
      • Convenções de nomenclatura
      • Tipos de armazenamento para variáveis
      • Estruturas de Controle
        • Exercício 4
      • Modificadores
      • Eventos
        • Exercício 5
      • Tipos de Referencia
        • Arrays
          • Exercício 6
        • Mappings
          • Exercício 7
        • Structs
          • Exercício 8
      • Address Payable
      • Como os contratos e funções recebem Ether.
      • Transferências de Ether
      • Conceitos Avançados
        • Codificação de ABI
        • Hashing
        • This
        • Herança
        • Abstract
        • Interface
        • Chamada entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • ERCs, Bibliotecas e Padrões de Desenvolvimento
      • Boas Práticas de Desenvolvimento
      • Padrões de Desenvolvimento
      • EIP & ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crie um Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Kit de ferramentas para desenvolvimento na Ethereum
      • Requisitos para o módulo 4
        • Terminal
        • Git e Github
        • Node.js e npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Exercício
        • Hardhat
          • Implantação de um contrato no Hardhat
          • Implantação de um contrato em uma rede pública
        • Scaffold-ETH
          • Características do Scaffold-ETHCaracterísticas
          • Como instalar o Scaffold-ETH
  • Módulo 5
    • Segurança, Testes e Auditorias
      • Testes
        • Importância de realizar testes
        • Métodos para testar contratos inteligentes
          • Testes automatizados
          • Testes manuais
        • Conceitos importantes em testes
        • Ferramentas para testes
        • Testes com Hardhat
        • Recursos adicionais
      • Segurança
        • Uma mentalidade diferente de design
        • Principais vulnerabilidades em contratos inteligentes
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Quebra de Invariantes)
          • Mishandling of ETH (Má gestão de ETH)
          • Denial of Service (DoS - Negação de Serviço)
          • Integer overflow and underflow (Overflow e Underflow de inteiros)
          • Phishing y Typosquatting
        • Recursos adicionais
      • Auditoria de smart contracts
        • Processo de Auditoria
        • Ferramentas
        • Como se preparar para uma auditoria
        • O teste Rekt
        • Desafios
        • Recursos adicionais
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page
  1. Módulo 3
  2. ERCs, Bibliotecas e Padrões de Desenvolvimento

Boas Práticas de Desenvolvimento

O design de contratos inteligentes em Solidity exige uma abordagem cuidadosa para garantir a segurança, eficiência e manutenção do código. Abaixo estão algumas boas práticas de design em Solidity que podem ajudar a desenvolver contratos inteligentes mais robustos e confiáveis:

1. Priorizar a segurança 🔑

  • Implementar controle de acessos: Proteja funções críticas contra acessos não autorizados. Use controles baseados em funções para garantir que apenas pessoas autorizadas possam executar determinadas ações.

  • Validar entradas externas: Sempre valide os inputs das funções para evitar condições inesperadas ou maliciosas. Use verificações como limites de intervalo, comprimento e tipos de dados para prevenir acessos não autorizados e vulnerabilidades.

  • Gerenciar erros corretamente: Utilize require, revert e assert para tratar condições inválidas e garantir o comportamento esperado do contrato.

  • Evitar reentrância: Adote o padrão de verificação-efeito-interação e considere o uso de modificadores como nonReentrant para prevenir ataques de reentrância. Prefira o envio de tokens no padrão "pull" em vez de "push" para evitar falhas.

  • Definir a visibilidade de funções e variáveis: Use public, internal, external ou private para melhorar a segurança e clareza do código.

2. Minimizar custos de gas

  • Otimizar o uso de armazenamento: Variáveis de estado são caras; reutilize espaço de armazenamento e agrupe variáveis para economizar slots.

  • Limitar o uso de loops: Loops podem aumentar significativamente os custos de gas. Evite ou redesenhe contratos para reduzir a escalabilidade dos custos.

  • Fornecer estimativas de gas: Informe usuários sobre os custos potenciais antes de executar funções, aumentando transparência e confiança.

  • Usar tipos de valor: Tipos como uint256 e bool são mais eficientes que arrays ou structs.

  • Declarar funções como view e pure: Sempre que possível, indique que não alteram o estado para reduzir o consumo de gas.

3. Garantir clareza e manutenção

  • Seguir uma estrutura clara: Organize o código logicamente, agrupando funções relacionadas e adicionando comentários explicativos.

  • Usar nomes descritivos: Escolha nomes significativos para funções, variáveis e contratos para facilitar a leitura.

  • Evitar lógica complexa: Divida funções complexas em partes menores e reutilizáveis para facilitar a compreensão e manutenção.

  • Limitar o tamanho do contrato: Separe contratos grandes em menores que possam interagir entre si.

4. Preparar para atualizações

  • Design para atualização: Considere o uso de proxies ou padrões similares para permitir atualizações sem perder dados, mas esteja atento aos riscos de segurança.

5. Realizar testes extensivos

  • Testar o código: Escreva testes unitários e de integração para cobrir todos os cenários possíveis, incluindo casos extremos. Ferramentas como Truffle e Hardhat podem ajudar a automatizar esse processo.

  • Usar ferramentas de análise: Utilize ferramentas como MythX para detectar vulnerabilidades e erros.

  • Medir cobertura de código: Ferramentas como Solidity Coverage ajudam a identificar áreas não testadas.

6. Revisão e auditoria

  • Revisão de código: Faça revisões com outros desenvolvedores para melhorar lógica, segurança e eficiência.

  • Auditorias profissionais: Antes de implantar contratos críticos, contrate auditorias especializadas.

7. Utilizar bibliotecas confiáveis

  • Evitar reinventar a roda: Utilize bibliotecas como OpenZeppelin, amplamente testadas e confiáveis.

8. Tornar a atividade do contrato visível

  • Emitir eventos: Use eventos para registrar atividades-chave, aumentando a transparência e a confiança.

9. Adotar convenções de nomenclatura e formatação

  • Usar camelCase: Comece nomes de variáveis e funções com letras minúsculas e use maiúsculas para palavras subsequentes.

  • Evitar abreviações confusas: Use nomes completos para melhorar a clareza.

  • Constantes em maiúsculas: Escreva constantes em maiúsculas com sublinhados (ex.: VALOR_MAXIMO).

  • Prefixar variáveis booleanas: Use prefixos como is ou has para indicar o propósito (ex.: isOwner, hasAccess).

  • Indentação consistente: Utilize dois ou quatro espaços para indentação e mantenha consistência em todo o código.

  • Respeitar limite de linha: Limite as linhas a 80 caracteres para melhorar a legibilidade.

  • Espaços em branco: Adicione linhas em branco para separar blocos lógicos e melhorar a clareza visual.

PreviousERCs, Bibliotecas e Padrões de DesenvolvimentoNextPadrões de Desenvolvimento

Last updated 5 months ago