mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Initial commit
This commit is contained in:
parent
479f6f6b72
commit
948bd960be
|
@ -14,7 +14,7 @@ import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddresses
|
|||
import {ILendingPool} from '../interfaces/ILendingPool.sol';
|
||||
import {IERC20Detailed} from '../interfaces/IERC20Detailed.sol';
|
||||
import {Errors} from '../libraries/helpers/Errors.sol';
|
||||
|
||||
import {PercentageMath} from '../libraries/math/PercentageMath.sol';
|
||||
/**
|
||||
* @title LendingPoolConfigurator contract
|
||||
* @author Aave
|
||||
|
@ -56,25 +56,19 @@ contract LendingPoolConfigurator is VersionedInitializable {
|
|||
event BorrowingDisabledOnReserve(address indexed asset);
|
||||
|
||||
/**
|
||||
* @dev emitted when a reserve is enabled as collateral.
|
||||
* @dev emitted when a a reserve collateralization risk parameters are updated.
|
||||
* @param asset the address of the reserve
|
||||
* @param ltv the loan to value of the asset when used as collateral
|
||||
* @param liquidationThreshold the threshold at which loans using this asset as collateral will be considered undercollateralized
|
||||
* @param liquidationBonus the bonus liquidators receive to liquidate this asset
|
||||
**/
|
||||
event ReserveEnabledAsCollateral(
|
||||
event CollateralConfigurationChanged(
|
||||
address indexed asset,
|
||||
uint256 ltv,
|
||||
uint256 liquidationThreshold,
|
||||
uint256 liquidationBonus
|
||||
);
|
||||
|
||||
/**
|
||||
* @dev emitted when a reserve is disabled as collateral
|
||||
* @param asset the address of the reserve
|
||||
**/
|
||||
event ReserveDisabledAsCollateral(address indexed asset);
|
||||
|
||||
/**
|
||||
* @dev emitted when stable rate borrowing is enabled on a reserve
|
||||
* @param asset the address of the reserve
|
||||
|
@ -326,41 +320,45 @@ contract LendingPoolConfigurator is VersionedInitializable {
|
|||
}
|
||||
|
||||
/**
|
||||
* @dev enables a reserve to be used as collateral
|
||||
* @dev configures the reserve collateralization parameters
|
||||
* @param asset the address of the reserve
|
||||
* @param ltv the loan to value of the asset when used as collateral
|
||||
* @param liquidationThreshold the threshold at which loans using this asset as collateral will be considered undercollateralized
|
||||
* @param liquidationBonus the bonus liquidators receive to liquidate this asset
|
||||
**/
|
||||
function enableReserveAsCollateral(
|
||||
function configureReserveAsCollateral(
|
||||
address asset,
|
||||
uint256 ltv,
|
||||
uint256 liquidationThreshold,
|
||||
uint256 liquidationBonus
|
||||
) external onlyAaveAdmin {
|
||||
|
||||
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
|
||||
|
||||
//validation of the parameters: the LTV can
|
||||
//only be lower or equal than the liquidation threshold
|
||||
//(otherwise a loan against the asset would cause instantaneous liquidation)
|
||||
require(ltv <= liquidationThreshold, Errors.INVALID_CONFIGURATION);
|
||||
|
||||
//liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less
|
||||
//collateral than needed to repay the debt
|
||||
require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_CONFIGURATION);
|
||||
|
||||
|
||||
//if the liquidation threshold is being set to 0,
|
||||
// the reserve is being disabled as collateral. To do so,
|
||||
//we need to ensure no liquidity is deposited
|
||||
if(liquidationThreshold == 0) {
|
||||
_checkNoLiquidity(asset);
|
||||
}
|
||||
|
||||
currentConfig.setLtv(ltv);
|
||||
currentConfig.setLiquidationThreshold(liquidationThreshold);
|
||||
currentConfig.setLiquidationBonus(liquidationBonus);
|
||||
|
||||
pool.setConfiguration(asset, currentConfig.data);
|
||||
|
||||
emit ReserveEnabledAsCollateral(asset, ltv, liquidationThreshold, liquidationBonus);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev disables a reserve as collateral
|
||||
* @param asset the address of the reserve
|
||||
**/
|
||||
function disableReserveAsCollateral(address asset) external onlyAaveAdmin {
|
||||
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
|
||||
|
||||
currentConfig.setLtv(0);
|
||||
|
||||
pool.setConfiguration(asset, currentConfig.data);
|
||||
|
||||
emit ReserveDisabledAsCollateral(asset);
|
||||
emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -410,22 +408,8 @@ contract LendingPoolConfigurator is VersionedInitializable {
|
|||
* @param asset the address of the reserve
|
||||
**/
|
||||
function deactivateReserve(address asset) external onlyAaveAdmin {
|
||||
(
|
||||
uint256 availableLiquidity,
|
||||
uint256 totalStableDebt,
|
||||
uint256 totalVariableDebt,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
|
||||
) = pool.getReserveData(asset);
|
||||
require(
|
||||
availableLiquidity == 0 && totalStableDebt == 0 && totalVariableDebt == 0,
|
||||
Errors.RESERVE_LIQUIDITY_NOT_0
|
||||
);
|
||||
|
||||
_checkNoLiquidity(asset);
|
||||
|
||||
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
|
||||
|
||||
|
@ -601,4 +585,23 @@ contract LendingPoolConfigurator is VersionedInitializable {
|
|||
function setPoolPause(bool val) external onlyAaveAdmin {
|
||||
pool.setPause(val);
|
||||
}
|
||||
|
||||
function _checkNoLiquidity(address asset) internal view {
|
||||
(
|
||||
uint256 availableLiquidity,
|
||||
uint256 totalStableDebt,
|
||||
uint256 totalVariableDebt,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
|
||||
) = pool.getReserveData(asset);
|
||||
require(
|
||||
availableLiquidity == 0 && totalStableDebt == 0 && totalVariableDebt == 0,
|
||||
Errors.RESERVE_LIQUIDITY_NOT_0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ library Errors {
|
|||
//require error messages - LendingPoolConfiguration
|
||||
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'
|
||||
string public constant INVALID_CONFIGURATION = '52'; // 'Invalid risk parameters for the reserve'
|
||||
|
||||
//require error messages - LendingPoolAddressesProviderRegistry
|
||||
string public constant PROVIDER_NOT_REGISTERED = '37'; // 'Provider is not registered'
|
||||
|
|
|
@ -104,7 +104,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
|||
|
||||
it('Deactivates the ETH reserve as collateral', async () => {
|
||||
const {configurator, pool, weth} = testEnv;
|
||||
await configurator.disableReserveAsCollateral(weth.address);
|
||||
await configurator.configureReserveAsCollateral(weth.address, 0, 0, 0);
|
||||
const {usageAsCollateralEnabled} = await pool.getReserveConfigurationData(weth.address);
|
||||
expect(usageAsCollateralEnabled).to.be.equal(false);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user