我希望能够检查一个任意地址是否是Uniswap流动性池对地址。我知道我可以用CREATE2计算LP,但是如果我不知道标记,我只是有一个地址,并且想知道它是否是Uniswap。像这样的东西会起作用吗?
IUniswapV2Pair pair = IUniswapV2Pair(0x000...some address....0000);
uint256 price=pair.price0CumulativeLast();
if (price>0) { this is a real LP... }还是有专门为此目的的Uniswap函数?
发布于 2022-10-26 21:47:06
实际上,您可以尝试调用可能的对合同的任何函数。
contract PairChecker {
function _tryPairTokens(address token, address possiblyPair)
public
view
returns (bool isPair)
{
address token0 = IUniswapV2Pair(possiblyPair).token0();
address token1 = IUniswapV2Pair(possiblyPair).token1();
return token0 == token || token1 == token;
}
function _checkPair(address token, address possiblyPair)
internal
view
returns (bool isPair)
{
try this._tryPairTokens(token, possiblyPair) returns (bool value) {
if (token == address(0)) return true;
return value;
} catch {
return false;
}
}
}只需打电话给_tryPairTokens(token, possiblePair),找出地址是否是您的令牌对。同样的事情,你可以不带任何记号
https://ethereum.stackexchange.com/questions/126156
复制相似问题