Added getPositionByPair() & Updated getPosition()

This commit is contained in:
Thrilok Kumar 2021-01-03 03:17:07 +05:30
parent 4374042ac4
commit 29dc49fcbd

View File

@ -534,13 +534,18 @@ contract Resolver is UniswapHelpers {
} }
struct PoolData { struct PoolData {
address tokenA;
address tokenB;
address lpAddress;
uint reserveA;
uint reserveB;
uint tokenAShareAmt; uint tokenAShareAmt;
uint tokenBShareAmt; uint tokenBShareAmt;
uint uniAmt; uint lpAmount;
uint totalSupply; uint totalSupply;
} }
function getPosition( function getPositionByPair(
address owner, address owner,
TokenPair[] memory tokenPairs TokenPair[] memory tokenPairs
) public view returns (PoolData[] memory) ) public view returns (PoolData[] memory)
@ -555,22 +560,62 @@ contract Resolver is UniswapHelpers {
address(tokenB) address(tokenB)
); );
if (exchangeAddr != address(0)) { if (exchangeAddr != address(0)) {
TokenInterface uniToken = TokenInterface(exchangeAddr); IUniswapV2Pair lpToken = IUniswapV2Pair(exchangeAddr);
uint uniAmt = uniToken.balanceOf(owner); (uint256 reserveA, uint256 reserveB, ) = lpToken.getReserves();
uint totalSupply = uniToken.totalSupply(); (reserveA, reserveB) = lpToken.token0() == address(tokenA) ? (reserveA, reserveB) : (reserveB, reserveA);
uint share = wdiv(uniAmt, totalSupply);
uint amtA = wmul(tokenA.balanceOf(exchangeAddr), share); uint lpAmount = lpToken.balanceOf(owner);
uint amtB = wmul(tokenB.balanceOf(exchangeAddr), share); uint totalSupply = lpToken.totalSupply();
uint share = wdiv(lpAmount, totalSupply);
uint amtA = wmul(reserveA, share);
uint amtB = wmul(reserveB, share);
poolData[i] = PoolData( poolData[i] = PoolData(
tokenPairs[i].tokenA,
tokenPairs[i].tokenB,
address(lpToken),
reserveA,
reserveB,
amtA, amtA,
amtB, amtB,
uniAmt, lpAmount,
totalSupply totalSupply
); );
} }
} }
return poolData; return poolData;
} }
function getPosition(
address owner,
address[] memory lpTokens
) public view returns (PoolData[] memory)
{
uint _len = lpTokens.length;
PoolData[] memory poolData = new PoolData[](_len);
for (uint i = 0; i < _len; i++) {
IUniswapV2Pair lpToken = IUniswapV2Pair(lpTokens[i]);
(uint256 reserveA, uint256 reserveB, ) = lpToken.getReserves();
(address tokenA, address tokenB) = (lpToken.token0(), lpToken.token1());
uint lpAmount = lpToken.balanceOf(owner);
uint totalSupply = lpToken.totalSupply();
uint share = wdiv(lpAmount, totalSupply);
uint amtA = wmul(reserveA, share);
uint amtB = wmul(reserveB, share);
poolData[i] = PoolData(
tokenA,
tokenB,
address(lpToken),
reserveA,
reserveB,
amtA,
amtB,
lpAmount,
totalSupply
);
}
return poolData;
}
} }