SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

Aula 013: Tipo de Endereço em Solidity

Nesta aula, vamos nos aprofundar no tipo address em Solidity, um dos tipos de dados mais fundamentais usados em contratos inteligentes Ethereum. Compreender endereços é crucial, pois eles são usados para rastrear contas, contratos e várias interações na blockchain Ethereum.

O que é um Endereço?

Em Solidity, o tipo address é usado para representar endereços Ethereum. Ele pode apontar para a conta de um usuário ou um contrato implantado na blockchain Ethereum. Um endereço Ethereum é um valor de 20 bytes (40 caracteres hexadecimais) que identifica de forma única uma conta ou um contrato.

Declarando um Endereço

Você pode declarar uma variável de endereço em Solidity da seguinte forma:

pragma solidity ^0.8.0;

contract ExemploEndereco {
    address public proprietario;

    constructor() {
        proprietario = msg.sender; // Armazena o endereço do implantador
    }
}

Neste exemplo, declaramos uma variável pública proprietario do tipo address e a inicializamos com o endereço da conta que implantou o contrato, utilizando msg.sender.

Funções de Endereço

Solidity fornece várias funções embutidas que podem ser usadas com tipos de endereço:

  1. Transferir Ether: Você pode enviar Ether de um endereço para outro.
  2. Chamadas de Contrato: Você pode interagir com outros contratos inteligentes enviando chamadas para seus endereços.
  3. Verificação de Saldo: Você pode verificar o saldo de um endereço.

Enviando Ether

Você pode enviar Ether para outro endereço usando o método transfer, que está disponível para todos os tipos de endereço. Aqui está um exemplo de um contrato simples que permite ao proprietário enviar Ether para um usuário.

pragma solidity ^0.8.0;

contract TransferenciaEther {
    address payable public proprietario;

    constructor() {
        proprietario = payable(msg.sender); // Converte msg.sender para um endereço pagável
    }

    function enviarEther(address payable destinatario, uint256 quantia) public {
        require(msg.sender == proprietario, "Apenas o proprietário pode enviar Ether");
        require(address(this).balance >= quantia, "Saldo insuficiente no contrato");

        destinatario.transfer(quantia); // Transfere a quantia especificada para o destinatario
    }

    // Permite que o contrato receba Ether
    receive() external payable {}
}

Neste contrato:

  • O proprietário pode enviar Ether para endereços destinatario.
  • A função enviarEther verifica se o chamador é o proprietário e se o contrato possui saldo suficiente antes de transferir a quantia especificada.

Verificando Saldo

Você também pode verificar o saldo de um endereço usando a propriedade .balance. Aqui está um exemplo demonstrando como verificar saldos.

pragma solidity ^0.8.0;

contract VerificadorSaldo {
    function obterSaldo(address conta) public view returns (uint256) {
        return conta.balance; // Retorna o saldo do endereço especificado
    }
}

Neste contrato simples:

  • A função obterSaldo retorna o saldo de Ether do endereço conta especificado.

Interagindo com Outros Contratos

Você também pode usar o tipo de endereço para interagir com outros contratos, chamando suas funções. Veja como você pode fazer isso usando uma interface.

pragma solidity ^0.8.0;

interface IToken {
    function transfer(address destinatario, uint256 quantia) external returns (bool);
}

contract InteracaoToken {
    function enviarTokens(address enderecoToken, address destinatario, uint256 quantia) public {
        IToken contratoToken = IToken(enderecoToken); // Cria uma instância do contrato token
        contratoToken.transfer(destinatario, quantia); // Chama o método transfer
    }
}

Neste exemplo:

  • Definimos uma interface IToken que declara uma função transfer.
  • A função enviarTokens recebe o endereço de um contrato token, o endereço do destinatário e a quantia a ser transferida. Ela cria uma instância do contrato token e chama a função transfer nele.

Conclusão

O tipo address é um tipo de dado fundamental em Solidity que permite gerenciar contas e interagir com contratos. Você aprendeu como declarar um endereço, enviar Ether, verificar saldos e interagir com outros contratos. Compreender como trabalhar com endereços é vital para desenvolver aplicações descentralizadas na Ethereum.

Agora que você tem uma compreensão sólida do tipo address, pode começar a aplicar esse conhecimento para construir contratos inteligentes mais complexos!

Video

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

Thank you for voting!