Pagável

# Pagável

Funções e endereços declarados payable podem receber ether neste contrato.

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

contract Payable {
    // Endereço pagável pode receber Ether
    address payable public owner;

    // Constructor pagável pode receber Ether
    constructor() payable {
        owner = payable(msg.sender);
    }

    // Função para depositar Ether neste contrato.
    // Chamar essa função junto com algum Ether.
    // O saldo deste contrato será automaticamente atualizado.
    function deposit() public payable {}

    // Chamar essa função junto com algum Ether.
    // A função vai lançar um erro já que ela não é pagável.
    function notPayable() public {}

    // Função para retirar todo Ether deste contrato.
    function withdraw() public {
        // pega a quantidade de Ether armazenado neste contrato
        uint amount = address(this).balance;

        // envia todo Ether para o proprietário
        // Proprietário pode receber Ether já que o endereço dele é pagável
        (bool success, ) = owner.call{value: amount}("");
        require(success, "Falha ao enviar Ether");
    }

    // Função para transferir Ether deste contrato para o endereço de entrada
    function transfer(address payable _para, uint _quantidade) public {
        // Note que "to" está declarada como pagável
        (bool success, ) = _para.call{value: _quantidade}("");
        require(success, "Falha ao enviar Ether");
    }
}

# Teste no Remix

Last Updated: 22/01/2024 22:26:13