10 如何判断外部合约是一个uniswap pair?

如题 ,最近码代码需要判断外部合约是否是一个pair,我是用try catch语句检测他是否有factory变量,这样写的:

function _isPair(address addr) public returns (bool) {
    try IUniswapV2Pair(addr).factory() returns (address factory) {
            return true;
            } catch (bytes memory returnData) {
            return false;
     } 
}

但是这样有两个问题,一个是没获取到变量的话,虽然会执行成功,但是还是会报revert错误,如图:

image.png 我理解的是虽然catch语句保证了函数虽然能在调用失败的状态下继续运行,但是被调用函数revert依然会在调用路径里显示出来,这样给人感觉不太好,有没有什么办法可以避免这种情况发生。 另一个问题就是如果外部合约实现了一个factory()方法,包含恶意代码,我岂不是要去执行一遍,这种情况我又该如何防止呢? 希望各位大佬解答一下,谢谢。

请先 登录 后评论

4 个回答

johnny
请先 登录 后评论
Tiny熊
  擅长:智能合约,以太坊
请先 登录 后评论
Ethereal - Solidity智能合约开发工程师
请先 登录 后评论
令狐 n 少侠zd
请先 登录 后评论
  • 5 关注
  • 1 收藏,2753 浏览
  • 提出于 2022-07-31 11:49