第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("");
}
}