fix: fixed behavior in case the asset withdrawn was already being used as collateral

This commit is contained in:
The3D 2021-05-10 14:02:36 +02:00
parent 50ea61fe70
commit 2dac7fbd80
2 changed files with 19 additions and 15 deletions

View File

@ -936,6 +936,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address to
) internal returns (uint256) {
DataTypes.ReserveData storage reserve = _reserves[asset];
DataTypes.UserConfigurationMap storage userConfig = _usersConfig[msg.sender];
address aToken = reserve.aTokenAddress;
@ -953,21 +954,24 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.updateInterestRates(asset, aToken, 0, amountToWithdraw);
if (amountToWithdraw == userBalance) {
_usersConfig[msg.sender].setUsingAsCollateral(reserve.id, false);
emit ReserveUsedAsCollateralDisabled(asset, msg.sender);
}
IAToken(aToken).burn(msg.sender, to, amountToWithdraw, reserve.liquidityIndex);
ValidationLogic.validateHealthFactor(
msg.sender,
_reserves,
_usersConfig[msg.sender],
_reservesList,
_reservesCount,
_addressesProvider.getPriceOracle()
);
if (userConfig.isUsingAsCollateral(reserve.id)) {
ValidationLogic.validateHealthFactor(
msg.sender,
_reserves,
userConfig,
_reservesList,
_reservesCount,
_addressesProvider.getPriceOracle()
);
if (amountToWithdraw == userBalance) {
userConfig.setUsingAsCollateral(reserve.id, false);
emit ReserveUsedAsCollateralDisabled(asset, msg.sender);
}
}
emit Withdraw(asset, msg.sender, to, amountToWithdraw);

View File

@ -283,7 +283,7 @@ library ValidationLogic {
IERC20 stableDebtToken,
IERC20 variableDebtToken,
address aTokenAddress
) internal view {
) external view {
(bool isActive, , , ) = reserve.configuration.getFlags();
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
@ -315,7 +315,7 @@ library ValidationLogic {
*/
function validateSetUseReserveAsCollateral(
DataTypes.ReserveData storage reserve
) internal view {
) external view {
uint256 underlyingBalance = IERC20(reserve.aTokenAddress).balanceOf(msg.sender);
require(underlyingBalance > 0, Errors.VL_UNDERLYING_BALANCE_NOT_GREATER_THAN_0);