solidity 0.8.0版本 每次执行approve时都会遇到revert。改成0.6.0就不会,什么原因

当在0.8.0版本的编译器中时, 合约中专门写了一个处理apprve的函数,

function set_all_approve() public {
        IERC20(USDC).approve(UNI_V2_router, uint(0)-1);
    }

部署好合约之后,我想第一步操作就给router授权,所以执行了set_all_approve() , 但是返回报错:VM Exception while processing transaction: reverted 这是什么原因呢。

我把编译器版本改为0.6.0这个函数就能通过执行。 不懂其中的原因,求大佬帮忙解释一下。

请先 登录 后评论

最佳答案 2022-05-10 18:38

0.8.0 默认会对数学计算做溢出检查,代码中 0 减 1 是会溢出的。

而在0.8.0之前的编译器中, 是不会进行溢出检查,因此可以成功。

如果要使用最大值,建议使用type(uint).max , 参考文档:https://learnblockchain.cn/docs/solidity/types.html#integers

而不是使用 -1 ,尽管他们存储值一样。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,2138 浏览
  • linsanity 提出于 2022-05-10 17:25