diff --git a/contracts/protocols/erc20.sol b/contracts/protocols/erc20.sol index f11ac46..b0377d2 100644 --- a/contracts/protocols/erc20.sol +++ b/contracts/protocols/erc20.sol @@ -7,7 +7,6 @@ interface TokenInterface { function decimals() external view returns (uint); function name() external view returns (string memory); function symbol() external view returns (string memory); - } contract Resolver { @@ -30,21 +29,32 @@ contract Resolver { ); } else { TokenInterface token = TokenInterface(tknAddress[i]); + bool isToken = true; + + try token.symbol() { + } catch { + isToken = false; + continue; + } + try token.name() { - tokenDatas[i] = TokenData( + } catch { + isToken = false; + continue; + } + + try token.decimals() { + } catch { + isToken = false; + continue; + } + + tokenDatas[i] = TokenData( true, token.name(), token.symbol(), token.decimals() - ); - } catch { - tokenDatas[i] = TokenData( - false, - "", - "", - 0 - ); - } + ); } } return tokenDatas; @@ -81,6 +91,6 @@ contract Resolver { contract InstaERC20Resolver is Resolver { - string public constant name = "ERC20-Resolver-v1"; + string public constant name = "ERC20-Resolver-v1.1"; } \ No newline at end of file diff --git a/contracts/protocols/uniswapV2.sol b/contracts/protocols/uniswapV2.sol index c725460..69febde 100644 --- a/contracts/protocols/uniswapV2.sol +++ b/contracts/protocols/uniswapV2.sol @@ -541,6 +541,8 @@ contract Resolver is UniswapHelpers { uint reserveB; uint tokenAShareAmt; uint tokenBShareAmt; + uint tokenABalance; + uint tokenBBalance; uint lpAmount; uint totalSupply; } @@ -570,17 +572,23 @@ contract Resolver is UniswapHelpers { uint amtA = wmul(reserveA, share); uint amtB = wmul(reserveB, share); poolData[i] = PoolData( - tokenPairs[i].tokenA, - tokenPairs[i].tokenB, + address(0), + address(0), address(lpToken), reserveA, reserveB, amtA, amtB, + 0, + 0, lpAmount, totalSupply ); } + poolData[i].tokenA = tokenPairs[i].tokenA; + poolData[i].tokenB = tokenPairs[i].tokenB; + poolData[i].tokenABalance = tokenPairs[i].tokenA == getEthAddr() ? owner.balance : tokenA.balanceOf(owner); + poolData[i].tokenBBalance = tokenPairs[i].tokenB == getEthAddr() ? owner.balance : tokenB.balanceOf(owner); } return poolData; } @@ -592,6 +600,8 @@ contract Resolver is UniswapHelpers { { uint _len = lpTokens.length; PoolData[] memory poolData = new PoolData[](_len); + address wethAddr = getAddressWETH(); + address ethAddr = getEthAddr(); for (uint i = 0; i < _len; i++) { IUniswapV2Pair lpToken = IUniswapV2Pair(lpTokens[i]); (uint256 reserveA, uint256 reserveB, ) = lpToken.getReserves(); @@ -603,13 +613,15 @@ contract Resolver is UniswapHelpers { uint amtA = wmul(reserveA, share); uint amtB = wmul(reserveB, share); poolData[i] = PoolData( - tokenA, - tokenB, + tokenA == wethAddr ? ethAddr : tokenA, + tokenB == wethAddr ? ethAddr : tokenB, address(lpToken), reserveA, reserveB, amtA, amtB, + tokenA == wethAddr ? owner.balance : TokenInterface(tokenA).balanceOf(owner), + tokenB == wethAddr ? owner.balance : TokenInterface(tokenB).balanceOf(owner), lpAmount, totalSupply );