3分钟Solidity: 5.1 Payable 可支付的

17 阅读1分钟

如需获取本内容的最新版本,请参见 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 尝试一下

solidity-payable

END