Solidity – fallback(回退) 函数

fallback(回退) 函数是合约中的特殊函数。它有以下特点

  • 当合约中不存在的函数被调用时,将调用fallback函数。
  • 被标记为外部函数。
  • 它没有名字。
  • 它没有参数。
  • 它不能返回任何东西。
  • 每个合约定义一个fallback函数。
  • 如果没有被标记为payable,则当合约收到无数据的以太币转账时,将抛出异常。

语法

// 没有名字,没有参数,不返回,标记为external,可以标记为payable
function() external { 
    // statements
}

下面的示例展示了合约中的回退函数概念。

示例

pragma solidity ^0.5.0;

contract Test {
   uint public x ;
   function() external { x = 1; }    
}
contract Sink {
   function() external payable { }
}
contract Caller {

   function callTest(Test test) public returns (bool) {
      (bool success,) = address(test).call(abi.encodeWithSignature("nonExistingFunction()"));
      require(success);
      // test.x 是 1

      address payable testPayable = address(uint160(address(test)));

      // 发送以太测试合同,
      // 转账将失败,也就是说,这里返回false。
      return (testPayable.send(2 ether));
   }

   function callSink(Sink sink) public returns (bool) {
      address payable sinkPayable = address(sink);
      return (sinkPayable.send(2 ether));
   }
}


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载