Pagável
WEB3DEV Team
# Pagável
Funções e endereços declarados payable
podem receber ether
nesse contrato.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
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 desse 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 nesse 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, "Failed to send Ether");
}
// Função para transferir Ether deste contrato para o endereço de entrada
function transfer(address payable _to, uint _amount) public {
// Note que "to" está declarada como pagável
(bool success, ) = _to.call{value: _amount}("");
require(success, "Failed to send Ether");
}
}