Solidity教程

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));
   }
}
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4