From 9ec4a5a0bbadaed2bccbad25484e6ab0cf0fb3b6 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 22 May 2020 01:02:30 +0530 Subject: [PATCH] Fixed repay issue --- contracts/connectors/aave.sol | 39 +++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/contracts/connectors/aave.sol b/contracts/connectors/aave.sol index bc451db..9920ec0 100644 --- a/contracts/connectors/aave.sol +++ b/contracts/connectors/aave.sol @@ -131,8 +131,6 @@ contract BasicResolver is AaveHelpers { AaveCoreInterface aaveCore = AaveCoreInterface(getAaveCoreAddress()); ATokenInterface atoken = ATokenInterface(aaveCore.getReserveATokenAddress(token)); - _amt = _amt == uint(-1) ? atoken.balanceOf(address(this)) : _amt; - uint initialBal = token == getEthAddr() ? address(this).balance : TokenInterface(token).balanceOf(address(this)); atoken.redeem(_amt); uint finialBal = token == getEthAddr() ? address(this).balance : TokenInterface(token).balanceOf(address(this)); @@ -178,19 +176,34 @@ contract BasicResolver is AaveHelpers { uint _amt = getUint(getId, amt); AaveInterface aave = AaveInterface(getAaveAddress()); - _amt = _amt == uint(-1) ? getPaybackBalance(aave, token) : _amt; - - uint ethAmt; - if (token == getEthAddr()) { - require(address(this).balance >= _amt, "not-enough-eth"); - ethAmt = _amt; + if (_amt == uint(-1)) { + if (token == getEthAddr()) { + uint ethAmt = getPaybackBalance(aave, token) + 100000000; + require(address(this).balance >= ethAmt, "not-enough-eth"); + aave.repay.value(ethAmt)(token, ethAmt, payable(address(this))); + } else { + TokenInterface tokenContract = TokenInterface(token); + require(tokenContract.balanceOf(address(this)) >= _amt, "not-enough-token"); + tokenContract.approve(getAaveCoreAddress(), uint(-1)); + uint initalBal = tokenContract.balanceOf(address(this)); + aave.repay(token, uint(-1), payable(address(this))); + uint finalBal = tokenContract.balanceOf(address(this)); + tokenContract.approve(getAaveCoreAddress(), 0); + _amt = sub(initalBal, finalBal); + } } else { - TokenInterface tokenContract = TokenInterface(token); - require(tokenContract.balanceOf(address(this)) >= _amt, "not-enough-token"); - tokenContract.approve(getAaveCoreAddress(), _amt); + uint ethAmt; + if (token == getEthAddr()) { + require(address(this).balance >= _amt, "not-enough-eth"); + ethAmt = _amt; + } else { + TokenInterface tokenContract = TokenInterface(token); + require(tokenContract.balanceOf(address(this)) >= _amt, "not-enough-token"); + tokenContract.approve(getAaveCoreAddress(), _amt); + } + aave.repay.value(ethAmt)(token, _amt, payable(address(this))); } - - aave.repay.value(ethAmt)(token, _amt, payable(address(this))); + setUint(setId, _amt);