Done with uniswap resolver

This commit is contained in:
Thrilok Kumar 2020-07-08 15:49:45 +05:30
parent 4960ab6915
commit 656ddc98ff

View File

@ -170,6 +170,38 @@ contract UniswapHelpers is Helpers {
minAmt = wmul(_amt18, sub(WAD, slippage)); minAmt = wmul(_amt18, sub(WAD, slippage));
minAmt = convert18ToDec(token.decimals(), minAmt); minAmt = convert18ToDec(token.decimals(), minAmt);
} }
function _getWithdrawUnitAmts(
TokenInterface tokenA,
TokenInterface tokenB,
uint amtA,
uint amtB,
uint uniAmt,
uint slippage
) internal view returns (uint unitAmtA, uint unitAmtB) {
uint _amtA = convertTo18(tokenA.decimals(), amtA);
uint _amtB = convertTo18(tokenB.decimals(), amtB);
unitAmtA = wdiv(_amtA, uniAmt);
unitAmtA = wmul(unitAmtA, sub(WAD, slippage));
unitAmtB = wdiv(_amtB, uniAmt);
unitAmtB = wmul(unitAmtB, sub(WAD, slippage));
}
function _getWithdrawAmts(
TokenInterface _tokenA,
TokenInterface _tokenB,
uint uniAmt
)
public view returns (uint amtA, uint amtB)
{
IUniswapV2Router01 router = IUniswapV2Router01(getUniswapAddr());
address exchangeAddr = IUniswapV2Factory(router.factory()).getPair(address(_tokenA), address(_tokenB));
require(exchangeAddr != address(0), "pair-not-found.");
TokenInterface uniToken = TokenInterface(exchangeAddr);
uint share = wdiv(uniAmt, uniToken.totalSupply());
amtA = wmul(_tokenA.balanceOf(exchangeAddr), share);
amtB = wmul(_tokenB.balanceOf(exchangeAddr), share);
}
} }
@ -191,7 +223,7 @@ contract Resolver is UniswapHelpers {
unitAmt = getSellUnitAmt(_sellAddr, expectedRate, _buyAddr, buyAmt, slippage); unitAmt = getSellUnitAmt(_sellAddr, expectedRate, _buyAddr, buyAmt, slippage);
} }
function getDepositUnitAmt( function getDepositAmount(
address tokenA, address tokenA,
address tokenB, address tokenB,
uint amtA uint amtA
@ -209,7 +241,7 @@ contract Resolver is UniswapHelpers {
amtB = convert18ToDec(_tokenB.decimals(), amtB); amtB = convert18ToDec(_tokenB.decimals(), amtB);
} }
function getDepositUnitAmtNewPool( function getDepositAmountNewPool(
address tokenA, address tokenA,
address tokenB, address tokenB,
uint amtA, uint amtA,
@ -226,24 +258,28 @@ contract Resolver is UniswapHelpers {
unitAmt = wdiv(_amtB18, _amtA18); unitAmt = wdiv(_amtB18, _amtA18);
} }
function getUniTokenAmount( function getWithdrawAmounts(
address tokenA, address tokenA,
address tokenB, address tokenB,
uint uniAmt, uint uniAmt,
uint slippage uint slippage
) )
public view returns (uint amtA, uint amtB, uint minA, uint minB) public view returns (uint amtA, uint amtB, uint unitAmtA, uint unitAmtB)
{ {
(TokenInterface _tokenA, TokenInterface _tokenB) = changeEthAddress(tokenA, tokenB); (TokenInterface _tokenA, TokenInterface _tokenB) = changeEthAddress(tokenA, tokenB);
IUniswapV2Router01 router = IUniswapV2Router01(getUniswapAddr()); (amtA, amtB) = _getWithdrawAmts(
address exchangeAddr = IUniswapV2Factory(router.factory()).getPair(address(_tokenA), address(_tokenB)); _tokenA,
require(exchangeAddr != address(0), "pair-not-found."); _tokenB,
TokenInterface uniToken = TokenInterface(exchangeAddr); uniAmt
uint share = wdiv(uniAmt, uniToken.totalSupply()); );
amtA = wmul(_tokenA.balanceOf(exchangeAddr), share); (unitAmtA, unitAmtB) = _getWithdrawUnitAmts(
amtB = wmul(_tokenB.balanceOf(exchangeAddr), share); _tokenA,
minA = getMinAmount(_tokenA, amtA, slippage); _tokenB,
minB = getMinAmount(_tokenB, amtB, slippage); amtA,
amtB,
uniAmt,
slippage
);
} }
} }