SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
18.11.2024

Lição: 060: Tipo de Endereço e Endereço Pagável em Solidity

Nesta aula, vamos explorar o tipo address e o tipo address payable em Solidity. Ambos são essenciais para gerenciar endereços Ethereum ao trabalhar com contratos inteligentes, especialmente quando lidamos com transações em Ether.

Compreendendo o Tipo Address

Em Solidity, o tipo address é usado para armazenar endereços Ethereum. Um endereço é um valor hexadecimal de 20 bytes, manipulado como uma string de 40 caracteres. O tipo address vem com métodos embutidos que permitem a interação com outros contratos ou o envio de Ether.

Exemplo do Tipo Address

Aqui está um contrato básico que demonstra o uso do tipo address:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract ExemploEndereço {
    address public dono;

    constructor() {
        dono = msg.sender;  // Define o dono como a conta que implantou o contrato
    }

    function getDono() public view returns (address) {
        return dono;
    }
}

Neste exemplo, o construtor define a variável dono para o endereço que implantou o contrato. A função getDono retorna esse endereço quando chamada.

Compreendendo o Tipo Address Pagável

O tipo address payable é uma versão especializada de address que permite enviar e receber Ether. Você pode converter um address em address payable, mas não o contrário diretamente.

Exemplo do Tipo Address Pagável

Vamos modificar o exemplo anterior para incluir a capacidade de enviar Ether ao dono do contrato. Usaremos o tipo address payable para o dono:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract ExemploEndereçoPagável {
    address payable public dono;

    constructor() {
        dono = payable(msg.sender);  // Define o dono como quem implantou e faz a conversão para pagável
    }

    function retirar(uint256 quantia) public {
        require(msg.sender == dono, "Apenas o dono pode retirar fundos");
        require(address(this).balance >= quantia, "Saldo insuficiente");

        dono.transfer(quantia);  // Transfere Ether ao dono
    }

    // Função para receber Ether
    receive() external payable {}
}

Análise do Exemplo

  1. Construtor: Definimos o dono como o endereço que implantou o contrato e o convertendo para payable.

  2. Função Retirar: A função retirar permite que o dono retire uma quantia específica de Ether do contrato. Ela verifica se o chamar é o dono e se o contrato possui saldo suficiente antes de transferir os fundos.

  3. Função Receber: A função receive é definida para permitir que o contrato aceite Ether enviado a ele.

Observações Importantes

  • Apenas address payable pode iniciar transferências com os métodos .transfer() ou .send().
  • Enviar Ether utilizando o método transfer requer que o destinatário tenha gás suficiente; falhas reverterão a transação.

Conclusão

Nesta aula, cobrimos os tipos address e address payable em Solidity. Lembre-se, quando precisar lidar com transferências de Ether em seus contratos inteligentes, utilize address payable para garantir o funcionamento adequado.

Com esses conceitos, você pode começar a construir contratos inteligentes Ethereum mais complexos que gerenciam transações de criptomoeda entre usuários e contratos de forma eficaz.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!