diff --git a/contracts/configuration/LendingPoolAddressesProvider.sol b/contracts/configuration/LendingPoolAddressesProvider.sol index c398f578..0cc67297 100644 --- a/contracts/configuration/LendingPoolAddressesProvider.sol +++ b/contracts/configuration/LendingPoolAddressesProvider.sol @@ -21,8 +21,8 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider bytes32 private constant LENDING_POOL = 'LENDING_POOL'; bytes32 private constant LENDING_POOL_CORE = 'LENDING_POOL_CORE'; bytes32 private constant LENDING_POOL_CONFIGURATOR = 'LENDING_POOL_CONFIGURATOR'; - bytes32 private constant LENDING_POOL_MANAGER = 'LENDING_POOL_MANAGER'; - bytes32 private constant LENDING_POOL_LIQUIDATION_MANAGER = 'LIQUIDATION_MANAGER'; + bytes32 private constant AAVE_ADMIN = 'AAVE_ADMIN'; + bytes32 private constant LENDING_POOL_COLLATERAL_MANAGER = 'COLLATERAL_MANAGER'; bytes32 private constant LENDING_POOL_FLASHLOAN_PROVIDER = 'FLASHLOAN_PROVIDER'; bytes32 private constant DATA_PROVIDER = 'DATA_PROVIDER'; bytes32 private constant ETHEREUM_ADDRESS = 'ETHEREUM_ADDRESS'; @@ -65,23 +65,23 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider } /** - * @dev returns the address of the LendingPoolLiquidationManager. Since the manager is used + * @dev returns the address of the LendingPoolCollateralManager. Since the manager is used * through delegateCall within the LendingPool contract, the proxy contract pattern does not work properly hence * the addresses are changed directly. - * @return the address of the Lending pool liquidation manager + * @return the address of the Lending pool collateral manager **/ - function getLendingPoolLiquidationManager() external override view returns (address) { - return _addresses[LENDING_POOL_LIQUIDATION_MANAGER]; + function getLendingPoolCollateralManager() external override view returns (address) { + return _addresses[LENDING_POOL_COLLATERAL_MANAGER]; } /** - * @dev updates the address of the Lending pool liquidation manager - * @param manager the new lending pool liquidation manager address + * @dev updates the address of the Lending pool collateral manager + * @param manager the new lending pool collateral manager address **/ - function setLendingPoolLiquidationManager(address manager) external override onlyOwner { - _addresses[LENDING_POOL_LIQUIDATION_MANAGER] = manager; - emit LendingPoolLiquidationManagerUpdated(manager); + function setLendingPoolCollateralManager(address manager) external override onlyOwner { + _addresses[LENDING_POOL_COLLATERAL_MANAGER] = manager; + emit LendingPoolCollateralManagerUpdated(manager); } /** @@ -89,13 +89,13 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider * hence the upgradable proxy pattern is not used **/ - function getLendingPoolManager() external override view returns (address) { - return _addresses[LENDING_POOL_MANAGER]; + function getAaveAdmin() external override view returns (address) { + return _addresses[AAVE_ADMIN]; } - function setLendingPoolManager(address lendingPoolManager) external override onlyOwner { - _addresses[LENDING_POOL_MANAGER] = lendingPoolManager; - emit LendingPoolManagerUpdated(lendingPoolManager); + function setAaveAdmin(address aaveAdmin) external override onlyOwner { + _addresses[AAVE_ADMIN] = aaveAdmin; + emit AaveAdminUpdated(aaveAdmin); } function getPriceOracle() external override view returns (address) { diff --git a/contracts/interfaces/ILendingPool.sol b/contracts/interfaces/ILendingPool.sol index 85746888..d19f7ba1 100644 --- a/contracts/interfaces/ILendingPool.sol +++ b/contracts/interfaces/ILendingPool.sol @@ -111,7 +111,7 @@ interface ILendingPool { ); /** * @dev these events are not emitted directly by the LendingPool - * but they are declared here as the LendingPoolLiquidationManager + * but they are declared here as the LendingPoolCollateralManager * is executed using a delegateCall(). * This allows to have the events in the generated ABI for LendingPool. **/ @@ -439,5 +439,5 @@ interface ILendingPool { /** * @dev Returns if the LendingPool is paused */ - function paused() external view returns(bool); + function paused() external view returns (bool); } diff --git a/contracts/interfaces/ILendingPoolAddressesProvider.sol b/contracts/interfaces/ILendingPoolAddressesProvider.sol index 78e336f9..9f78edfe 100644 --- a/contracts/interfaces/ILendingPoolAddressesProvider.sol +++ b/contracts/interfaces/ILendingPoolAddressesProvider.sol @@ -9,9 +9,9 @@ pragma solidity ^0.6.8; interface ILendingPoolAddressesProvider { //events event LendingPoolUpdated(address indexed newAddress); - event LendingPoolManagerUpdated(address indexed newAddress); + event AaveAdminUpdated(address indexed newAddress); event LendingPoolConfiguratorUpdated(address indexed newAddress); - event LendingPoolLiquidationManagerUpdated(address indexed newAddress); + event LendingPoolCollateralManagerUpdated(address indexed newAddress); event EthereumAddressUpdated(address indexed newAddress); event PriceOracleUpdated(address indexed newAddress); event LendingRateOracleUpdated(address indexed newAddress); @@ -26,13 +26,13 @@ interface ILendingPoolAddressesProvider { function setLendingPoolConfiguratorImpl(address configurator) external; - function getLendingPoolLiquidationManager() external view returns (address); + function getLendingPoolCollateralManager() external view returns (address); - function setLendingPoolLiquidationManager(address manager) external; + function setLendingPoolCollateralManager(address manager) external; - function getLendingPoolManager() external view returns (address); + function getAaveAdmin() external view returns (address); - function setLendingPoolManager(address lendingPoolManager) external; + function setAaveAdmin(address aaveAdmin) external; function getPriceOracle() external view returns (address); diff --git a/contracts/lendingpool/LendingPool.sol b/contracts/lendingpool/LendingPool.sol index aa464a9f..4874398a 100644 --- a/contracts/lendingpool/LendingPool.sol +++ b/contracts/lendingpool/LendingPool.sol @@ -21,7 +21,7 @@ import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol' import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol'; import {IFlashLoanReceiver} from '../flashloan/interfaces/IFlashLoanReceiver.sol'; import {ISwapAdapter} from '../interfaces/ISwapAdapter.sol'; -import {LendingPoolLiquidationManager} from './LendingPoolLiquidationManager.sol'; +import {LendingPoolCollateralManager} from './LendingPoolCollateralManager.sol'; import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol'; import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/SafeERC20.sol'; import {ILendingPool} from '../interfaces/ILendingPool.sol'; @@ -451,10 +451,10 @@ contract LendingPool is VersionedInitializable, ILendingPool { bool receiveAToken ) external override { whenNotPaused(); - address liquidationManager = _addressesProvider.getLendingPoolLiquidationManager(); + address collateralManager = _addressesProvider.getLendingPoolCollateralManager(); //solium-disable-next-line - (bool success, bytes memory result) = liquidationManager.delegatecall( + (bool success, bytes memory result) = collateralManager.delegatecall( abi.encodeWithSignature( 'liquidationCall(address,address,address,uint256,bool)', collateral, @@ -498,10 +498,10 @@ contract LendingPool is VersionedInitializable, ILendingPool { require(!_flashLiquidationLocked, Errors.REENTRANCY_NOT_ALLOWED); _flashLiquidationLocked = true; - address liquidationManager = _addressesProvider.getLendingPoolLiquidationManager(); + address collateralManager = _addressesProvider.getLendingPoolCollateralManager(); //solium-disable-next-line - (bool success, bytes memory result) = liquidationManager.delegatecall( + (bool success, bytes memory result) = collateralManager.delegatecall( abi.encodeWithSignature( 'repayWithCollateral(address,address,address,uint256,address,bytes)', collateral, @@ -613,10 +613,10 @@ contract LendingPool is VersionedInitializable, ILendingPool { bytes calldata params ) external override { whenNotPaused(); - address liquidationManager = _addressesProvider.getLendingPoolLiquidationManager(); + address collateralManager = _addressesProvider.getLendingPoolCollateralManager(); //solium-disable-next-line - (bool success, bytes memory result) = liquidationManager.delegatecall( + (bool success, bytes memory result) = collateralManager.delegatecall( abi.encodeWithSignature( 'swapLiquidity(address,address,address,uint256,bytes)', receiverAddress, @@ -1030,7 +1030,7 @@ contract LendingPool is VersionedInitializable, ILendingPool { /** * @dev Returns if the LendingPool is paused */ - function paused() external view override returns(bool) { + function paused() external override view returns (bool) { return _paused; } } diff --git a/contracts/lendingpool/LendingPoolLiquidationManager.sol b/contracts/lendingpool/LendingPoolCollateralManager.sol similarity index 94% rename from contracts/lendingpool/LendingPoolLiquidationManager.sol rename to contracts/lendingpool/LendingPoolCollateralManager.sol index dfdcaaf6..840e8150 100644 --- a/contracts/lendingpool/LendingPoolLiquidationManager.sol +++ b/contracts/lendingpool/LendingPoolCollateralManager.sol @@ -24,12 +24,13 @@ import {Errors} from '../libraries/helpers/Errors.sol'; import {ValidationLogic} from '../libraries/logic/ValidationLogic.sol'; /** - * @title LendingPoolLiquidationManager contract + * @title LendingPoolCollateralManager contract * @author Aave - * @notice Implements the liquidation function. - * @dev LendingPoolLiquidationManager inherits Pausable from OpenZeppelin to have the same storage layout as LendingPool + * @notice Implements actions involving management of collateral in the protocol. + * @notice this contract will be ran always through delegatecall + * @dev LendingPoolCollateralManager inherits VersionedInitializable from OpenZeppelin to have the same storage layout as LendingPool **/ -contract LendingPoolLiquidationManager is VersionedInitializable { +contract LendingPoolCollateralManager is VersionedInitializable { using SafeERC20 for IERC20; using SafeMath for uint256; using WadRayMath for uint256; @@ -185,7 +186,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { vars.userVariableDebt ); - if (Errors.LiquidationErrors(vars.errorCode) != Errors.LiquidationErrors.NO_ERROR) { + if (Errors.CollateralManagerErrors(vars.errorCode) != Errors.CollateralManagerErrors.NO_ERROR) { return (vars.errorCode, vars.errorMsg); } @@ -228,7 +229,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { ); if (currentAvailableCollateral < vars.maxCollateralToLiquidate) { return ( - uint256(Errors.LiquidationErrors.NOT_ENOUGH_LIQUIDITY), + uint256(Errors.CollateralManagerErrors.NOT_ENOUGH_LIQUIDITY), Errors.NOT_ENOUGH_LIQUIDITY_TO_LIQUIDATE ); } @@ -300,7 +301,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { receiveAToken ); - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } /** @@ -349,7 +350,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { vars.userVariableDebt ); - if (Errors.LiquidationErrors(vars.errorCode) != Errors.LiquidationErrors.NO_ERROR) { + if (Errors.CollateralManagerErrors(vars.errorCode) != Errors.CollateralManagerErrors.NO_ERROR) { return (vars.errorCode, vars.errorMsg); } @@ -445,7 +446,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { vars.maxCollateralToLiquidate ); - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } /** @@ -476,7 +477,7 @@ contract LendingPoolLiquidationManager is VersionedInitializable { toAsset ); - if (Errors.LiquidationErrors(vars.errorCode) != Errors.LiquidationErrors.NO_ERROR) { + if (Errors.CollateralManagerErrors(vars.errorCode) != Errors.CollateralManagerErrors.NO_ERROR) { return (vars.errorCode, vars.errorMsg); } @@ -538,12 +539,12 @@ contract LendingPoolLiquidationManager is VersionedInitializable { if (vars.healthFactor < GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD) { return ( - uint256(Errors.LiquidationErrors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD), + uint256(Errors.CollateralManagerErrors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD), Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD ); } - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } /** diff --git a/contracts/lendingpool/LendingPoolConfigurator.sol b/contracts/lendingpool/LendingPoolConfigurator.sol index 790eca96..801523de 100644 --- a/contracts/lendingpool/LendingPoolConfigurator.sol +++ b/contracts/lendingpool/LendingPoolConfigurator.sol @@ -176,11 +176,8 @@ contract LendingPoolConfigurator is VersionedInitializable { /** * @dev only the lending pool manager can call functions affected by this modifier **/ - modifier onlyLendingPoolManager { - require( - addressesProvider.getLendingPoolManager() == msg.sender, - Errors.CALLER_NOT_LENDING_POOL_MANAGER - ); + modifier onlyAaveAdmin { + require(addressesProvider.getAaveAdmin() == msg.sender, Errors.CALLER_NOT_AAVE_ADMIN); _; } @@ -211,7 +208,7 @@ contract LendingPoolConfigurator is VersionedInitializable { address variableDebtTokenImpl, uint8 underlyingAssetDecimals, address interestRateStrategyAddress - ) public onlyLendingPoolManager { + ) public onlyAaveAdmin { address aTokenProxyAddress = _initTokenWithProxy(aTokenImpl, underlyingAssetDecimals); address stableDebtTokenProxyAddress = _initTokenWithProxy( @@ -255,7 +252,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve to be updated * @param implementation the address of the new aToken implementation **/ - function updateAToken(address asset, address implementation) external onlyLendingPoolManager { + function updateAToken(address asset, address implementation) external onlyAaveAdmin { (address aTokenAddress, , ) = pool.getReserveTokensAddresses(asset); _upgradeTokenImplementation(asset, aTokenAddress, implementation); @@ -268,10 +265,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve to be updated * @param implementation the address of the new aToken implementation **/ - function updateStableDebtToken(address asset, address implementation) - external - onlyLendingPoolManager - { + function updateStableDebtToken(address asset, address implementation) external onlyAaveAdmin { (, address stableDebtToken, ) = pool.getReserveTokensAddresses(asset); _upgradeTokenImplementation(asset, stableDebtToken, implementation); @@ -284,10 +278,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve to be updated * @param implementation the address of the new aToken implementation **/ - function updateVariableDebtToken(address asset, address implementation) - external - onlyLendingPoolManager - { + function updateVariableDebtToken(address asset, address implementation) external onlyAaveAdmin { (, , address variableDebtToken) = pool.getReserveTokensAddresses(asset); _upgradeTokenImplementation(asset, variableDebtToken, implementation); @@ -302,7 +293,7 @@ contract LendingPoolConfigurator is VersionedInitializable { **/ function enableBorrowingOnReserve(address asset, bool stableBorrowRateEnabled) external - onlyLendingPoolManager + onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); @@ -318,7 +309,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev disables borrowing on a reserve * @param asset the address of the reserve **/ - function disableBorrowingOnReserve(address asset) external onlyLendingPoolManager { + function disableBorrowingOnReserve(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setBorrowingEnabled(false); @@ -339,7 +330,7 @@ contract LendingPoolConfigurator is VersionedInitializable { uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus - ) external onlyLendingPoolManager { + ) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setLtv(ltv); @@ -355,7 +346,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev disables a reserve as collateral * @param asset the address of the reserve **/ - function disableReserveAsCollateral(address asset) external onlyLendingPoolManager { + function disableReserveAsCollateral(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setLtv(0); @@ -369,7 +360,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev enable stable rate borrowing on a reserve * @param asset the address of the reserve **/ - function enableReserveStableRate(address asset) external onlyLendingPoolManager { + function enableReserveStableRate(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setStableRateBorrowingEnabled(true); @@ -383,7 +374,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev disable stable rate borrowing on a reserve * @param asset the address of the reserve **/ - function disableReserveStableRate(address asset) external onlyLendingPoolManager { + function disableReserveStableRate(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setStableRateBorrowingEnabled(false); @@ -397,7 +388,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev activates a reserve * @param asset the address of the reserve **/ - function activateReserve(address asset) external onlyLendingPoolManager { + function activateReserve(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setActive(true); @@ -411,7 +402,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev deactivates a reserve * @param asset the address of the reserve **/ - function deactivateReserve(address asset) external onlyLendingPoolManager { + function deactivateReserve(address asset) external onlyAaveAdmin { ( uint256 availableLiquidity, uint256 totalBorrowsStable, @@ -442,7 +433,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev freezes a reserve. A freezed reserve doesn't accept any new deposit, borrow or rate swap, but can accept repayments, liquidations, rate rebalances and redeems * @param asset the address of the reserve **/ - function freezeReserve(address asset) external onlyLendingPoolManager { + function freezeReserve(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setFrozen(true); @@ -456,7 +447,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev unfreezes a reserve * @param asset the address of the reserve **/ - function unfreezeReserve(address asset) external onlyLendingPoolManager { + function unfreezeReserve(address asset) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setFrozen(false); @@ -471,7 +462,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve * @param ltv the new value for the loan to value **/ - function setLtv(address asset, uint256 ltv) external onlyLendingPoolManager { + function setLtv(address asset, uint256 ltv) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setLtv(ltv); @@ -486,10 +477,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve * @param threshold the new value for the liquidation threshold **/ - function setLiquidationThreshold(address asset, uint256 threshold) - external - onlyLendingPoolManager - { + function setLiquidationThreshold(address asset, uint256 threshold) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setLiquidationThreshold(threshold); @@ -504,7 +492,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve * @param bonus the new value for the liquidation bonus **/ - function setLiquidationBonus(address asset, uint256 bonus) external onlyLendingPoolManager { + function setLiquidationBonus(address asset, uint256 bonus) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setLiquidationBonus(bonus); @@ -519,7 +507,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @param asset the address of the reserve * @param decimals the new number of decimals **/ - function setReserveDecimals(address asset, uint256 decimals) external onlyLendingPoolManager { + function setReserveDecimals(address asset, uint256 decimals) external onlyAaveAdmin { ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset); currentConfig.setDecimals(decimals); @@ -536,7 +524,7 @@ contract LendingPoolConfigurator is VersionedInitializable { **/ function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress) external - onlyLendingPoolManager + onlyAaveAdmin { pool.setReserveInterestRateStrategyAddress(asset, rateStrategyAddress); emit ReserveInterestRateStrategyChanged(asset, rateStrategyAddress); @@ -587,7 +575,7 @@ contract LendingPoolConfigurator is VersionedInitializable { * @dev pauses or unpauses LendingPool actions * @param val the boolean value to set the current pause state of LendingPool **/ - function setPoolPause(bool val) external onlyLendingPoolManager { + function setPoolPause(bool val) external onlyAaveAdmin { pool.setPause(val); } } diff --git a/contracts/libraries/helpers/Errors.sol b/contracts/libraries/helpers/Errors.sol index 99818c3e..d25b041b 100644 --- a/contracts/libraries/helpers/Errors.sol +++ b/contracts/libraries/helpers/Errors.sol @@ -59,13 +59,13 @@ library Errors { string public constant STABLE_BORROW_RATE_OVERFLOW = '51'; // Stable borrow rate overflows uint128 //require error messages - LendingPoolConfiguration - string public constant CALLER_NOT_LENDING_POOL_MANAGER = '35'; // 'The caller must be a lending pool manager' + string public constant CALLER_NOT_AAVE_ADMIN = '35'; // 'The caller must be the aave admin' string public constant RESERVE_LIQUIDITY_NOT_0 = '36'; // 'The liquidity of the reserve needs to be 0' //require error messages - LendingPoolAddressesProviderRegistry string public constant PROVIDER_NOT_REGISTERED = '37'; // 'Provider is not registered' - //return error messages - LendingPoolLiquidationManager + //return error messages - LendingPoolCollateralManager string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '38'; // 'Health factor is not below the threshold' string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '39'; // 'The collateral chosen cannot be liquidated' string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '40'; // 'User did not borrow the specified currency' @@ -79,7 +79,7 @@ library Errors { // pausable error message string public constant IS_PAUSED = '58'; // 'Pool is paused' - enum LiquidationErrors { + enum CollateralManagerErrors { NO_ERROR, NO_COLLATERAL_AVAILABLE, COLLATERAL_CANNOT_BE_LIQUIDATED, diff --git a/contracts/libraries/logic/ValidationLogic.sol b/contracts/libraries/logic/ValidationLogic.sol index f4024946..5d201efd 100644 --- a/contracts/libraries/logic/ValidationLogic.sol +++ b/contracts/libraries/logic/ValidationLogic.sol @@ -351,12 +351,12 @@ library ValidationLogic { if ( !collateralReserve.configuration.getActive() || !principalReserve.configuration.getActive() ) { - return (uint256(Errors.LiquidationErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); + return (uint256(Errors.CollateralManagerErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); } if (userHealthFactor >= GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD) { return ( - uint256(Errors.LiquidationErrors.HEALTH_FACTOR_ABOVE_THRESHOLD), + uint256(Errors.CollateralManagerErrors.HEALTH_FACTOR_ABOVE_THRESHOLD), Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD ); } @@ -367,19 +367,19 @@ library ValidationLogic { //if collateral isn't enabled as collateral by user, it cannot be liquidated if (!isCollateralEnabled) { return ( - uint256(Errors.LiquidationErrors.COLLATERAL_CANNOT_BE_LIQUIDATED), + uint256(Errors.CollateralManagerErrors.COLLATERAL_CANNOT_BE_LIQUIDATED), Errors.COLLATERAL_CANNOT_BE_LIQUIDATED ); } if (userStableDebt == 0 && userVariableDebt == 0) { return ( - uint256(Errors.LiquidationErrors.CURRRENCY_NOT_BORROWED), + uint256(Errors.CollateralManagerErrors.CURRRENCY_NOT_BORROWED), Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER ); } - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } /** @@ -404,14 +404,14 @@ library ValidationLogic { if ( !collateralReserve.configuration.getActive() || !principalReserve.configuration.getActive() ) { - return (uint256(Errors.LiquidationErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); + return (uint256(Errors.CollateralManagerErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); } if ( msg.sender != user && userHealthFactor >= GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD ) { return ( - uint256(Errors.LiquidationErrors.HEALTH_FACTOR_ABOVE_THRESHOLD), + uint256(Errors.CollateralManagerErrors.HEALTH_FACTOR_ABOVE_THRESHOLD), Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD ); } @@ -423,7 +423,7 @@ library ValidationLogic { //if collateral isn't enabled as collateral by user, it cannot be liquidated if (!isCollateralEnabled) { return ( - uint256(Errors.LiquidationErrors.COLLATERAL_CANNOT_BE_LIQUIDATED), + uint256(Errors.CollateralManagerErrors.COLLATERAL_CANNOT_BE_LIQUIDATED), Errors.COLLATERAL_CANNOT_BE_LIQUIDATED ); } @@ -431,12 +431,12 @@ library ValidationLogic { if (userStableDebt == 0 && userVariableDebt == 0) { return ( - uint256(Errors.LiquidationErrors.CURRRENCY_NOT_BORROWED), + uint256(Errors.CollateralManagerErrors.CURRRENCY_NOT_BORROWED), Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER ); } - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } /** @@ -454,18 +454,22 @@ library ValidationLogic { ) internal view returns (uint256, string memory) { if (fromAsset == toAsset) { return ( - uint256(Errors.LiquidationErrors.INVALID_EQUAL_ASSETS_TO_SWAP), + uint256(Errors.CollateralManagerErrors.INVALID_EQUAL_ASSETS_TO_SWAP), Errors.INVALID_EQUAL_ASSETS_TO_SWAP ); } + (bool isToActive, bool isToFreezed, , ) = toReserve.configuration.getFlags(); if (!fromReserve.configuration.getActive() || !isToActive) { - return (uint256(Errors.LiquidationErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); + return (uint256(Errors.CollateralManagerErrors.NO_ACTIVE_RESERVE), Errors.NO_ACTIVE_RESERVE); } if (isToFreezed) { - return (uint256(Errors.LiquidationErrors.NO_UNFREEZED_RESERVE), Errors.NO_UNFREEZED_RESERVE); + return ( + uint256(Errors.CollateralManagerErrors.NO_UNFREEZED_RESERVE), + Errors.NO_UNFREEZED_RESERVE + ); } - return (uint256(Errors.LiquidationErrors.NO_ERROR), Errors.NO_ERRORS); + return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.NO_ERRORS); } } diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts index 9179aa21..49f0f401 100644 --- a/helpers/contracts-helpers.ts +++ b/helpers/contracts-helpers.ts @@ -21,7 +21,7 @@ import {PriceOracle} from '../types/PriceOracle'; import {MockAggregator} from '../types/MockAggregator'; import {LendingRateOracle} from '../types/LendingRateOracle'; import {DefaultReserveInterestRateStrategy} from '../types/DefaultReserveInterestRateStrategy'; -import {LendingPoolLiquidationManager} from '../types/LendingPoolLiquidationManager'; +import {LendingPoolCollateralManager} from '../types/LendingPoolCollateralManager'; import {InitializableAdminUpgradeabilityProxy} from '../types/InitializableAdminUpgradeabilityProxy'; import {MockFlashLoanReceiver} from '../types/MockFlashLoanReceiver'; import {WalletBalanceProvider} from '../types/WalletBalanceProvider'; @@ -192,16 +192,16 @@ export const deployChainlinkProxyPriceProvider = async ([ export const deployLendingRateOracle = async () => await deployContract(eContractid.LendingRateOracle, []); -export const deployLendingPoolLiquidationManager = async () => { - const liquidationManagerArtifact = await readArtifact( +export const deployLendingPoolCollateralManager = async () => { + const collateralManagerArtifact = await readArtifact( BRE.config.paths.artifacts, - eContractid.LendingPoolLiquidationManager + eContractid.LendingPoolCollateralManager ); - const factory = await linkLibrariesToArtifact(liquidationManagerArtifact); + const factory = await linkLibrariesToArtifact(collateralManagerArtifact); - const liquidationManager = await factory.deploy(); - return (await liquidationManager.deployed()) as LendingPoolLiquidationManager; + const collateralManager = await factory.deploy(); + return (await collateralManager.deployed()) as LendingPoolCollateralManager; }; export const deployInitializableAdminUpgradeabilityProxy = async () => diff --git a/helpers/types.ts b/helpers/types.ts index bad17f9b..a8d963f0 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -30,7 +30,7 @@ export enum eContractid { LendingRateOracle = 'LendingRateOracle', ChainlinkProxyPriceProvider = 'ChainlinkProxyPriceProvider', DefaultReserveInterestRateStrategy = 'DefaultReserveInterestRateStrategy', - LendingPoolLiquidationManager = 'LendingPoolLiquidationManager', + LendingPoolCollateralManager = 'LendingPoolCollateralManager', InitializableAdminUpgradeabilityProxy = 'InitializableAdminUpgradeabilityProxy', MockFlashLoanReceiver = 'MockFlashLoanReceiver', MockSwapAdapter = 'MockSwapAdapter', @@ -87,13 +87,13 @@ export enum ProtocolErrors { RESERVE_ALREADY_INITIALIZED = '34', // 'Reserve has already been initialized' //require error messages - LendingPoolConfiguration - CALLER_NOT_LENDING_POOL_MANAGER = '35', // 'The caller must be a lending pool manager' + CALLER_NOT_AAVE_ADMIN = '35', // 'The caller must be the aave admin' RESERVE_LIQUIDITY_NOT_0 = '36', // 'The liquidity of the reserve needs to be 0' //require error messages - LendingPoolAddressesProviderRegistry PROVIDER_NOT_REGISTERED = '37', // 'Provider is not registered' - //return error messages - LendingPoolLiquidationManager + //return error messages - LendingPoolCollateralManager HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '38', // 'Health factor is not below the threshold' COLLATERAL_CANNOT_BE_LIQUIDATED = '39', // 'The collateral chosen cannot be liquidated' SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '40', // 'User did not borrow the specified currency' diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts index e893d6af..43ac2fd6 100644 --- a/test/__setup.spec.ts +++ b/test/__setup.spec.ts @@ -12,7 +12,7 @@ import { deployChainlinkProxyPriceProvider, deployLendingRateOracle, deployDefaultReserveInterestRateStrategy, - deployLendingPoolLiquidationManager, + deployLendingPoolCollateralManager, deployMockFlashLoanReceiver, deployWalletBalancerProvider, getLendingPool, @@ -353,12 +353,12 @@ export const waitForTx = async (tx: ContractTransaction) => await tx.wait(); const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { console.time('setup'); - const lendingPoolManager = await deployer.getAddress(); + const aaveAdmin = await deployer.getAddress(); const mockTokens = await deployAllMockTokens(deployer); const addressesProvider = await deployLendingPoolAddressesProvider(); - await waitForTx(await addressesProvider.setLendingPoolManager(lendingPoolManager)); + await waitForTx(await addressesProvider.setAaveAdmin(aaveAdmin)); const addressesProviderRegistry = await deployLendingPoolAddressesProviderRegistry(); await waitForTx( @@ -501,9 +501,9 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => { lendingPoolConfiguratorProxy ); - const liquidationManager = await deployLendingPoolLiquidationManager(); + const collateralManager = await deployLendingPoolCollateralManager(); await waitForTx( - await addressesProvider.setLendingPoolLiquidationManager(liquidationManager.address) + await addressesProvider.setLendingPoolCollateralManager(collateralManager.address) ); const mockFlashLoanReceiver = await deployMockFlashLoanReceiver(addressesProvider.address); diff --git a/test/configurator.spec.ts b/test/configurator.spec.ts index 6a85791c..89260ff3 100644 --- a/test/configurator.spec.ts +++ b/test/configurator.spec.ts @@ -6,7 +6,7 @@ import {ProtocolErrors} from '../helpers/types'; const {expect} = require('chai'); makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { - const {CALLER_NOT_LENDING_POOL_MANAGER, RESERVE_LIQUIDITY_NOT_0} = ProtocolErrors; + const {CALLER_NOT_AAVE_ADMIN, RESERVE_LIQUIDITY_NOT_0} = ProtocolErrors; it('Deactivates the ETH reserve', async () => { const {configurator, pool, weth} = testEnv; @@ -23,20 +23,20 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(isActive).to.be.equal(true); }); - it('Check the onlyLendingPoolManager on deactivateReserve ', async () => { + it('Check the onlyAaveAdmin on deactivateReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).deactivateReserve(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on activateReserve ', async () => { + it('Check the onlyAaveAdmin on activateReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).activateReserve(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Freezes the ETH reserve', async () => { @@ -54,20 +54,20 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(isFreezed).to.be.equal(false); }); - it('Check the onlyLendingPoolManager on freezeReserve ', async () => { + it('Check the onlyAaveAdmin on freezeReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).freezeReserve(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on unfreezeReserve ', async () => { + it('Check the onlyAaveAdmin on unfreezeReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).unfreezeReserve(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Deactivates the ETH reserve for borrowing', async () => { @@ -86,20 +86,20 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(variableBorrowIndex.toString()).to.be.equal(RAY); }); - it('Check the onlyLendingPoolManager on disableBorrowingOnReserve ', async () => { + it('Check the onlyAaveAdmin on disableBorrowingOnReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).disableBorrowingOnReserve(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on enableBorrowingOnReserve ', async () => { + it('Check the onlyAaveAdmin on enableBorrowingOnReserve ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).enableBorrowingOnReserve(weth.address, true), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Deactivates the ETH reserve as collateral', async () => { @@ -117,22 +117,22 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(usageAsCollateralEnabled).to.be.equal(true); }); - it('Check the onlyLendingPoolManager on disableReserveAsCollateral ', async () => { + it('Check the onlyAaveAdmin on disableReserveAsCollateral ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).disableReserveAsCollateral(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on enableReserveAsCollateral ', async () => { + it('Check the onlyAaveAdmin on enableReserveAsCollateral ', async () => { const {configurator, users, weth} = testEnv; await expect( configurator .connect(users[2].signer) .enableReserveAsCollateral(weth.address, '75', '80', '105'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Disable stable borrow rate on the ETH reserve', async () => { @@ -149,20 +149,20 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(stableBorrowRateEnabled).to.be.equal(true); }); - it('Check the onlyLendingPoolManager on disableReserveStableRate', async () => { + it('Check the onlyAaveAdmin on disableReserveStableRate', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).disableReserveStableRate(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on enableReserveStableRate', async () => { + it('Check the onlyAaveAdmin on enableReserveStableRate', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).enableReserveStableRate(weth.address), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Changes LTV of the reserve', async () => { @@ -172,12 +172,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { expect(ltv.toString()).to.be.bignumber.equal('60', 'Invalid LTV'); }); - it('Check the onlyLendingPoolManager on setLtv', async () => { + it('Check the onlyAaveAdmin on setLtv', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).setLtv(weth.address, '75'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Changes liquidation threshold of the reserve', async () => { @@ -190,12 +190,12 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { ); }); - it('Check the onlyLendingPoolManager on setLiquidationThreshold', async () => { + it('Check the onlyAaveAdmin on setLiquidationThreshold', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).setLiquidationThreshold(weth.address, '80'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Changes liquidation bonus of the reserve', async () => { @@ -208,28 +208,28 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { ); }); - it('Check the onlyLendingPoolManager on setLiquidationBonus', async () => { + it('Check the onlyAaveAdmin on setLiquidationBonus', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).setLiquidationBonus(weth.address, '80'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on setReserveDecimals', async () => { + it('Check the onlyAaveAdmin on setReserveDecimals', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).setReserveDecimals(weth.address, '80'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); - it('Check the onlyLendingPoolManager on setLiquidationBonus', async () => { + it('Check the onlyAaveAdmin on setLiquidationBonus', async () => { const {configurator, users, weth} = testEnv; await expect( configurator.connect(users[2].signer).setLiquidationBonus(weth.address, '80'), - CALLER_NOT_LENDING_POOL_MANAGER - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + CALLER_NOT_AAVE_ADMIN + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Reverts when trying to disable the DAI reserve with liquidity on it', async () => { diff --git a/test/lending-pool-addresses-provider.spec.ts b/test/lending-pool-addresses-provider.spec.ts index 7be4de3e..5721ff97 100644 --- a/test/lending-pool-addresses-provider.spec.ts +++ b/test/lending-pool-addresses-provider.spec.ts @@ -14,8 +14,8 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => { for (const contractFunction of [ addressesProvider.setLendingPoolImpl, addressesProvider.setLendingPoolConfiguratorImpl, - addressesProvider.setLendingPoolLiquidationManager, - addressesProvider.setLendingPoolManager, + addressesProvider.setLendingPoolCollateralManager, + addressesProvider.setAaveAdmin, addressesProvider.setPriceOracle, addressesProvider.setLendingRateOracle, ]) { diff --git a/test/upgradeability.spec.ts b/test/upgradeability.spec.ts index 6139f3a4..47c452bf 100644 --- a/test/upgradeability.spec.ts +++ b/test/upgradeability.spec.ts @@ -13,7 +13,7 @@ import {MockVariableDebtToken} from '../types/MockVariableDebtToken'; import {ZERO_ADDRESS} from '../helpers/constants'; makeSuite('Upgradeability', (testEnv: TestEnv) => { - const {CALLER_NOT_LENDING_POOL_MANAGER} = ProtocolErrors; + const {CALLER_NOT_AAVE_ADMIN} = ProtocolErrors; let newATokenAddress: string; let newStableTokenAddress: string; let newVariableTokenAddress: string; @@ -60,7 +60,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => { await expect( configurator.connect(users[1].signer).updateAToken(dai.address, newATokenAddress) - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Upgrades the DAI Atoken implementation ', async () => { @@ -82,7 +82,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => { configurator .connect(users[1].signer) .updateStableDebtToken(dai.address, newStableTokenAddress) - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Upgrades the DAI stable debt token implementation ', async () => { @@ -111,7 +111,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => { configurator .connect(users[1].signer) .updateVariableDebtToken(dai.address, newVariableTokenAddress) - ).to.be.revertedWith(CALLER_NOT_LENDING_POOL_MANAGER); + ).to.be.revertedWith(CALLER_NOT_AAVE_ADMIN); }); it('Upgrades the DAI variable debt token implementation ', async () => {