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