solidity ->fallback

  • arrom
  • 更新于 2022-11-14 16:49
  • 阅读 2705

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");
    }
}
点赞 1
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
arrom
arrom
江湖只有他的大名,没有他的介绍。