mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
fix eth->eth repay with collateral
This commit is contained in:
parent
480e1a22a8
commit
9f94f04b6c
|
@ -24,6 +24,7 @@ import {IBaseUniswapAdapter} from './interfaces/IBaseUniswapAdapter.sol';
|
|||
abstract contract BaseUniswapAdapter is FlashLoanReceiverBase, IBaseUniswapAdapter, Ownable {
|
||||
using SafeMath for uint256;
|
||||
using PercentageMath for uint256;
|
||||
|
||||
using SafeERC20 for IERC20;
|
||||
|
||||
// Max slippage percent allowed
|
||||
|
@ -346,6 +347,18 @@ abstract contract BaseUniswapAdapter is FlashLoanReceiverBase, IBaseUniswapAdapt
|
|||
// Subtract flash loan fee
|
||||
uint256 finalAmountIn = amountIn.sub(amountIn.mul(FLASHLOAN_PREMIUM_TOTAL).div(10000));
|
||||
|
||||
if (reserveIn == reserveOut) {
|
||||
uint256 reserveDecimals = _getDecimals(reserveIn);
|
||||
return
|
||||
AmountCalc(
|
||||
finalAmountIn,
|
||||
finalAmountIn.mul(10**18).div(amountIn),
|
||||
_calcUsdValue(reserveIn, amountIn, reserveDecimals),
|
||||
_calcUsdValue(reserveIn, finalAmountIn, reserveDecimals),
|
||||
[reserveIn]
|
||||
);
|
||||
}
|
||||
|
||||
address[] memory simplePath = new address[](2);
|
||||
simplePath[0] = reserveIn;
|
||||
simplePath[1] = reserveOut;
|
||||
|
@ -420,6 +433,20 @@ abstract contract BaseUniswapAdapter is FlashLoanReceiverBase, IBaseUniswapAdapt
|
|||
address reserveOut,
|
||||
uint256 amountOut
|
||||
) internal view returns (AmountCalc memory) {
|
||||
if (reserveIn == reserveOut) {
|
||||
// Add flash loan fee
|
||||
uint256 amountIn = amountOut.add(amountOut.mul(FLASHLOAN_PREMIUM_TOTAL).div(10000));
|
||||
uint256 reserveDecimals = _getDecimals(reserveIn);
|
||||
return
|
||||
AmountCalc(
|
||||
amountIn,
|
||||
amountOut.mul(10**18).div(amountIn),
|
||||
_calcUsdValue(reserveIn, amountIn, reserveDecimals),
|
||||
_calcUsdValue(reserveIn, amountOut, reserveDecimals),
|
||||
[reserveIn]
|
||||
);
|
||||
}
|
||||
|
||||
(uint256[] memory amounts, address[] memory path) =
|
||||
_getAmountsInAndPath(reserveIn, reserveOut, amountOut);
|
||||
|
||||
|
|
|
@ -187,16 +187,16 @@ contract UniswapLiquiditySwapAdapter is BaseUniswapAdapter {
|
|||
* @param permitSignature List of struct containing the permit signature
|
||||
* @param useEthPath true if the swap needs to occur using ETH in the routing, false otherwise
|
||||
*/
|
||||
|
||||
|
||||
struct SwapLiquidityLocalVars {
|
||||
address aToken;
|
||||
uint256 aTokenInitiatorBalance;
|
||||
uint256 amountToSwap;
|
||||
uint256 receivedAmount;
|
||||
uint256 flashLoanDebt;
|
||||
uint256 amountToPull;
|
||||
address aToken;
|
||||
uint256 aTokenInitiatorBalance;
|
||||
uint256 amountToSwap;
|
||||
uint256 receivedAmount;
|
||||
uint256 flashLoanDebt;
|
||||
uint256 amountToPull;
|
||||
}
|
||||
|
||||
|
||||
function _swapLiquidity(
|
||||
address assetFrom,
|
||||
address assetTo,
|
||||
|
@ -208,19 +208,22 @@ contract UniswapLiquiditySwapAdapter is BaseUniswapAdapter {
|
|||
PermitSignature memory permitSignature,
|
||||
bool useEthPath
|
||||
) internal {
|
||||
|
||||
SwapLiquidityLocalVars memory vars;
|
||||
|
||||
|
||||
vars.aToken = _getReserveData(assetFrom).aTokenAddress;
|
||||
|
||||
vars.aTokenInitiatorBalance = IERC20(vars.aToken).balanceOf(initiator);
|
||||
vars.amountToSwap =
|
||||
swapAllBalance && vars.aTokenInitiatorBalance.sub(premium) <= amount
|
||||
? vars.aTokenInitiatorBalance.sub(premium)
|
||||
: amount;
|
||||
vars.amountToSwap = swapAllBalance && vars.aTokenInitiatorBalance.sub(premium) <= amount
|
||||
? vars.aTokenInitiatorBalance.sub(premium)
|
||||
: amount;
|
||||
|
||||
vars.receivedAmount =
|
||||
_swapExactTokensForTokens(assetFrom, assetTo, vars.amountToSwap, minAmountToReceive, useEthPath);
|
||||
vars.receivedAmount = _swapExactTokensForTokens(
|
||||
assetFrom,
|
||||
assetTo,
|
||||
vars.amountToSwap,
|
||||
minAmountToReceive,
|
||||
useEthPath
|
||||
);
|
||||
|
||||
// Deposit new reserve
|
||||
IERC20(assetTo).safeApprove(address(LENDING_POOL), 0);
|
||||
|
@ -277,4 +280,4 @@ contract UniswapLiquiditySwapAdapter is BaseUniswapAdapter {
|
|||
useEthPath
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -200,7 +200,13 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
|||
);
|
||||
|
||||
// Swap collateral asset to the debt asset
|
||||
_swapTokensForExactTokens(collateralAsset, debtAsset, amounts[0], neededForFlashLoanDebt, useEthPath);
|
||||
_swapTokensForExactTokens(
|
||||
collateralAsset,
|
||||
debtAsset,
|
||||
amounts[0],
|
||||
neededForFlashLoanDebt,
|
||||
useEthPath
|
||||
);
|
||||
} else {
|
||||
// Pull aTokens from user
|
||||
_pullAToken(
|
||||
|
@ -256,4 +262,4 @@ contract UniswapRepayAdapter is BaseUniswapAdapter {
|
|||
useEthPath
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user