如需获取本内容的最新版本,请参见 Cyfrin.io 上的Payable(代码示例)
声明为 payable 的函数和地址可以接收以太币转入合约。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Payable {
// 可支付的地址可以通过转账或发送方式发送以太币。
address payable public owner;
// Payable 构造函数可以接收 Ether
constructor() payable {
owner = payable(msg.sender);
}
// 向该合约存入以太币的函数。
// 调用此函数时需附带一定数量的以太币。
// 该合约的余额将自动更新。
function deposit() public payable {}
// 调用此函数时附带一些以太币。
// 由于该函数不可支付,调用将抛出错误。
function notPayable() public {}
// 提取该合约中所有以太币的函数。
function withdraw() public {
// 获取此合约中存储的以太币数量
uint256 amount = address(this).balance;
// 将所有以太币发送给所有者
(bool success,) = owner.call{value: amount}("");
require(success, "发送以太币失败");
}
// 将Ether从该合约转移到输入地址的函数
function transfer(address payable _to, uint256 _amount) public {
// 请注意,"to"被声明为可支付的。
(bool success,) = _to.call{value: _amount}("");
require(success, "发送以太币失败");
}
}
Remix Lite 尝试一下
END