Skip to main content

Payable

1.Payable

声明的函数和地址payable可以接收ether到合约中。

Functions and addresses declared payable can receive ether into the contract.

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

contract Payable {
// Payable address can send Ether via transfer or send
address payable public owner;

// Payable constructor can receive Ether
constructor() payable {
owner = payable(msg.sender);
}

// Function to deposit Ether into this contract.
// Call this function along with some Ether.
// The balance of this contract will be automatically updated.
function deposit() public payable {}

// Call this function along with some Ether.
// The function will throw an error since this function is not payable.
function notPayable() public {}

// Function to withdraw all Ether from this contract.
function withdraw() public {
// get the amount of Ether stored in this contract
uint amount = address(this).balance;

// send all Ether to owner
(bool success, ) = owner.call{value: amount}("");
require(success, "Failed to send Ether");
}

// Function to transfer Ether from this contract to address from input
function transfer(address payable _to, uint _amount) public {
// Note that "to" is declared as payable
(bool success, ) = _to.call{value: _amount}("");
require(success, "Failed to send Ether");
}
}