Solidity学习之payable

重点只有一句:payable表明合约有接收eth的能力

相信我们大家都对发送eth到合约地址这个操作不陌生了吧,涉及到金钱操作,solidity规定只有声明了payable的函数才能接收eth,如下面的例子

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract test{
    //创建合约时就能发送eth到合约
    constructor() payable{

    }

    //查询合约余额
    function getBalance() external view returns (uint){
        return address(this).balance;
    }

    //合约可以接收eth
    receive() external payable{}

    //调用函数失败时会执行这个函数
    fallback() external payable{}
}
  • 当我们将构造器声明为payable,那么在创建合约的同时就可以发送eth到合约

  • 声明receive()函数,这是一个固定函数名,表明合约支持接收eth

  • 声明fallback函数,当调用合约一个不存在的函数并同时发送了eth,那么声明了payable的fallback函数就会接收到eth

  • 最后,我们利用address.balance属性查看合约的余额