重点只有一句: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属性查看合约的余额
