solidity ->fallback

arrom 发布于 2022-11-14 阅读 5079

fallback是特殊的函数,无参数,无返回值。

fallback

fallback是特殊的函数,无参数,无返回值

何时会被调用:

  1. 当被调用的方法不存在时,fallback会被调用,属于default函数;
  2. 当向合约转ether但是合约不存在receive函数时;
  3. 当向合约转ether但是msg.data不为空时。(即使receive存在)

当使用transfer或者send对合约进行转账时,fallback函数的gaslimit限定为2300 gas

// SPDX-License-Identifier: SEE LICENSE IN LICENSE
pragma solidity ^0.8.9;

contract Fallback {
    event Log(uint gas);

    fallback() external payable {
        //gasleft 当前还剩的gas
        emit Log(gasleft());
    }
    function getBalance() public view returns (uint) {
        return address(this).balance;
    }
}

contract SendToFallback {
    function transferToFallback(address payable _to) public payable {
        _to.transfer(msg.value);
    }

    function callFallback(address payable _to) public payable {
        (bool sent, ) = _to.call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function callNoExistFunc(address payable _to) public payable {
        (bool sent, ) = _to.call{value: msg.value}(
            abi.encodeWithSignature("noExistFunc()")
        );
        require(sent, "Failed to call");
    }
}

相关文章

0 条评论