🇧🇷
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
  • Funções payable
  • Função receive
  • Função fallback
  1. Módulo 2
  2. Fundamentos de Solidity

Como os contratos e funções recebem Ether.

Em Solidity, os conceitos de funções payable, receive e fallback desempenham papéis cruciais na interação dos contratos inteligentes com Ether (ETH) e na gestão de chamadas de função inesperadas ou dados enviados a um contrato. Vamos detalhar cada um desses conceitos para entender sua importância e uso no desenvolvimento de contratos inteligentes.

Funções payable

Uma função marcada como payable é capaz de receber Ether junto com a chamada da função. Esse modificador é necessário para que qualquer função aceite transações de Ether; sem ele, se um contrato receber Ether em uma chamada a uma função que não é payable, a transação será rejeitada.

function deposit() public payable {
// Lógica para lidar com o depósito de Ether
}

O uso de payable é essencial em contratos que precisam lidar com fundos de Ether, como carteiras, jogos ou qualquer sistema que exija pagamentos ou doações.

Função receive

O Solidity permite definir uma função especial receive() dentro de um contrato inteligente. Essa função não pode ter argumentos, não retorna nada e deve ter visibilidade externa e o modificador payable. Ela é executada em transações de Ether que não incluem dados (ou seja, transações puras de Ether) e não pode ser chamada diretamente.

receive() external payable {
// Lógica específica para lidar com o Ether recebido
}

Se um contrato receber Ether e não tiver uma função receive() definida (ou se a transação incluir dados que não correspondam a nenhuma função), a função fallback() será executada, se estiver presente.

Função fallback

A função fallback() em Solidity é invocada quando um contrato recebe Ether sem dados ou quando nenhuma de suas funções corresponde à assinatura da função chamada. É uma função de segurança que permite ao contrato lidar com Ether ou chamadas de função arbitrárias. Assim como receive(), fallback() não pode ter argumentos, não retorna nada e deve ter visibilidade externa. No entanto, ao contrário de receive(), fallback() pode ou não ser payable.

fallback() external payable {
// Lógica para lidar com chamadas inesperadas ou Ether recebido sem dados
}

Se fallback() for payable, o contrato poderá receber Ether por meio dessa função. Se não for payable, o contrato ainda poderá processar chamadas de função que não correspondem, mas rejeitará qualquer tentativa de envio de Ether.

Considerações de Uso e Segurança

  • Gerenciamento de Fundos: É crucial implementar adequadamente a lógica de gerenciamento de fundos nas funções payable, receive() e fallback() para evitar a perda de Ether e garantir que o contrato apenas execute ações esperadas.

  • Segurança de fallback(): Como fallback() é executada em chamadas de função inesperadas ou no envio de Ether sem dados, é importante limitar sua complexidade e as operações que ela realiza para prevenir vulnerabilidades, como ataques de reentrância.

  • Gas e fallback(): As chamadas para fallback() têm um limite de gás mais baixo do que chamadas de funções normais. Portanto, qualquer operação que consuma muito gás pode falhar.

PreviousAddress PayableNextTransferências de Ether

Last updated 5 months ago