第2节:返回值校验

小白入门:https://github.com/dukedaily/solidity-expert ,欢迎star转发,文末加V入群。

调用外部合约函数时,有些函数调用失败不会抛出错误回滚交易而是返回 false,如果忘记检查函数返回值会导致误以为调用成功。

例如:approve等方法就是不安全的,因此引入了safeApprove

当使用call方法调用approve时,如果没有校验返回值,则即使失败,也不会抛出异常。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

contract ReturnValue {
  function callchecked(address callee) public {
    (bool success, ) = callee.call("");
    require(success, "call failed!");
  }

  function callnotchecked(address callee) public {
    // 未校验
    (bool success, ) = callee.call("");
  }
}