mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
refactor: refactored the pause pool funciton. From global pause to reserve local pauses
This commit is contained in:
parent
8bf4b0acf4
commit
66165c4fdd
|
@ -350,16 +350,11 @@ interface ILendingPoolConfigurator {
|
||||||
function unfreezeReserve(address asset) external;
|
function unfreezeReserve(address asset) external;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Pauses a reserve. A paused reserve allow now user moves such as deposit, borrow, repay, swap interestrate, liquidate
|
* @dev Pauses/Unpauses a reserve. A paused reserve allow now user moves such as deposit, borrow, repay, swap interestrate, liquidate
|
||||||
* @param asset The address of the underlying asset of the reserve
|
* @param asset The address of the underlying asset of the reserve
|
||||||
|
* @param val true = pausing, false = unpausing
|
||||||
**/
|
**/
|
||||||
function pauseReserve(address asset) external;
|
function setReservePause(address asset, bool val) external;
|
||||||
|
|
||||||
/**
|
|
||||||
* @dev Unpauses a reserve
|
|
||||||
* @param asset The address of the underlying asset of the reserve
|
|
||||||
**/
|
|
||||||
function unpauseReserve(address asset) external;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Updates the reserve factor of a reserve
|
* @dev Updates the reserve factor of a reserve
|
||||||
|
@ -378,6 +373,7 @@ interface ILendingPoolConfigurator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev pauses or unpauses all the actions of the protocol, including aToken transfers
|
* @dev pauses or unpauses all the actions of the protocol, including aToken transfers
|
||||||
|
* Effectively it pauses every reserve
|
||||||
* @param val true if protocol needs to be paused, false otherwise
|
* @param val true if protocol needs to be paused, false otherwise
|
||||||
**/
|
**/
|
||||||
function setPoolPause(bool val) external;
|
function setPoolPause(bool val) external;
|
||||||
|
|
|
@ -53,20 +53,11 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
|
|
||||||
uint256 public constant LENDINGPOOL_REVISION = 0x2;
|
uint256 public constant LENDINGPOOL_REVISION = 0x2;
|
||||||
|
|
||||||
modifier whenNotPaused() {
|
|
||||||
_whenNotPaused();
|
|
||||||
_;
|
|
||||||
}
|
|
||||||
|
|
||||||
modifier onlyLendingPoolConfigurator() {
|
modifier onlyLendingPoolConfigurator() {
|
||||||
_onlyLendingPoolConfigurator();
|
_onlyLendingPoolConfigurator();
|
||||||
_;
|
_;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _whenNotPaused() internal view {
|
|
||||||
require(!_paused, Errors.LP_IS_PAUSED);
|
|
||||||
}
|
|
||||||
|
|
||||||
function _onlyLendingPoolConfigurator() internal view {
|
function _onlyLendingPoolConfigurator() internal view {
|
||||||
require(
|
require(
|
||||||
_addressesProvider.getLendingPoolConfigurator() == msg.sender,
|
_addressesProvider.getLendingPoolConfigurator() == msg.sender,
|
||||||
|
@ -99,7 +90,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
address onBehalfOf,
|
address onBehalfOf,
|
||||||
uint16 referralCode
|
uint16 referralCode
|
||||||
) external override whenNotPaused {
|
) external override {
|
||||||
_executeDeposit(asset, amount, onBehalfOf, referralCode);
|
_executeDeposit(asset, amount, onBehalfOf, referralCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,7 +122,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
address asset,
|
address asset,
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
address to
|
address to
|
||||||
) external override whenNotPaused returns (uint256) {
|
) external override returns (uint256) {
|
||||||
return _executeWithdraw(asset, amount, to);
|
return _executeWithdraw(asset, amount, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,7 +133,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
uint256 interestRateMode,
|
uint256 interestRateMode,
|
||||||
uint16 referralCode,
|
uint16 referralCode,
|
||||||
address onBehalfOf
|
address onBehalfOf
|
||||||
) external override whenNotPaused {
|
) external override {
|
||||||
_executeBorrow(
|
_executeBorrow(
|
||||||
ExecuteBorrowParams(
|
ExecuteBorrowParams(
|
||||||
asset,
|
asset,
|
||||||
|
@ -162,7 +153,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 rateMode,
|
uint256 rateMode,
|
||||||
address onBehalfOf
|
address onBehalfOf
|
||||||
) external override whenNotPaused returns (uint256) {
|
) external override returns (uint256) {
|
||||||
return _executeRepay(asset, amount, rateMode, onBehalfOf);
|
return _executeRepay(asset, amount, rateMode, onBehalfOf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +181,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
///@inheritdoc ILendingPool
|
///@inheritdoc ILendingPool
|
||||||
function swapBorrowRateMode(address asset, uint256 rateMode) external override whenNotPaused {
|
function swapBorrowRateMode(address asset, uint256 rateMode) external override {
|
||||||
DataTypes.ReserveData storage reserve = _reserves[asset];
|
DataTypes.ReserveData storage reserve = _reserves[asset];
|
||||||
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
||||||
|
|
||||||
|
@ -239,7 +230,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
///@inheritdoc ILendingPool
|
///@inheritdoc ILendingPool
|
||||||
function rebalanceStableBorrowRate(address asset, address user) external override whenNotPaused {
|
function rebalanceStableBorrowRate(address asset, address user) external override {
|
||||||
DataTypes.ReserveData storage reserve = _reserves[asset];
|
DataTypes.ReserveData storage reserve = _reserves[asset];
|
||||||
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
||||||
|
|
||||||
|
@ -274,11 +265,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
///@inheritdoc ILendingPool
|
///@inheritdoc ILendingPool
|
||||||
function setUserUseReserveAsCollateral(address asset, bool useAsCollateral)
|
function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external override {
|
||||||
external
|
|
||||||
override
|
|
||||||
whenNotPaused
|
|
||||||
{
|
|
||||||
DataTypes.ReserveData storage reserve = _reserves[asset];
|
DataTypes.ReserveData storage reserve = _reserves[asset];
|
||||||
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
DataTypes.ReserveCache memory reserveCache = reserve.cache();
|
||||||
|
|
||||||
|
@ -310,7 +297,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
address user,
|
address user,
|
||||||
uint256 debtToCover,
|
uint256 debtToCover,
|
||||||
bool receiveAToken
|
bool receiveAToken
|
||||||
) external override whenNotPaused {
|
) external override {
|
||||||
address collateralManager = _addressesProvider.getLendingPoolCollateralManager();
|
address collateralManager = _addressesProvider.getLendingPoolCollateralManager();
|
||||||
|
|
||||||
//solium-disable-next-line
|
//solium-disable-next-line
|
||||||
|
@ -359,7 +346,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
address onBehalfOf,
|
address onBehalfOf,
|
||||||
bytes calldata params,
|
bytes calldata params,
|
||||||
uint16 referralCode
|
uint16 referralCode
|
||||||
) external override whenNotPaused {
|
) external override {
|
||||||
FlashLoanLocalVars memory vars;
|
FlashLoanLocalVars memory vars;
|
||||||
|
|
||||||
vars.aTokenAddresses = new address[](assets.length);
|
vars.aTokenAddresses = new address[](assets.length);
|
||||||
|
@ -498,6 +485,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
ltv,
|
ltv,
|
||||||
currentLiquidationThreshold,
|
currentLiquidationThreshold,
|
||||||
healthFactor,
|
healthFactor,
|
||||||
|
|
||||||
) = GenericLogic.getUserAccountData(
|
) = GenericLogic.getUserAccountData(
|
||||||
user,
|
user,
|
||||||
_reserves,
|
_reserves,
|
||||||
|
@ -617,7 +605,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
||||||
uint256 amount,
|
uint256 amount,
|
||||||
uint256 balanceFromBefore,
|
uint256 balanceFromBefore,
|
||||||
uint256 balanceToBefore
|
uint256 balanceToBefore
|
||||||
) external override whenNotPaused {
|
) external override {
|
||||||
require(msg.sender == _reserves[asset].aTokenAddress, Errors.LP_CALLER_MUST_BE_AN_ATOKEN);
|
require(msg.sender == _reserves[asset].aTokenAddress, Errors.LP_CALLER_MUST_BE_AN_ATOKEN);
|
||||||
|
|
||||||
ValidationLogic.validateTransfer(_reserves[asset]);
|
ValidationLogic.validateTransfer(_reserves[asset]);
|
||||||
|
|
|
@ -407,25 +407,18 @@ contract LendingPoolConfigurator is VersionedInitializable, ILendingPoolConfigur
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @inheritdoc ILendingPoolConfigurator
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
function pauseReserve(address asset) external override onlyEmergencyOrPoolAdmin {
|
function setReservePause(address asset, bool val) public override onlyEmergencyOrPoolAdmin {
|
||||||
DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);
|
DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);
|
||||||
|
|
||||||
currentConfig.setPaused(true);
|
currentConfig.setPaused(val);
|
||||||
|
|
||||||
_pool.setConfiguration(asset, currentConfig.data);
|
_pool.setConfiguration(asset, currentConfig.data);
|
||||||
|
|
||||||
emit ReservePaused(asset);
|
if (val) {
|
||||||
}
|
emit ReservePaused(asset);
|
||||||
|
} else {
|
||||||
/// @inheritdoc ILendingPoolConfigurator
|
emit ReserveUnpaused(asset);
|
||||||
function unpauseReserve(address asset) external override onlyEmergencyOrPoolAdmin {
|
}
|
||||||
DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);
|
|
||||||
|
|
||||||
currentConfig.setPaused(false);
|
|
||||||
|
|
||||||
_pool.setConfiguration(asset, currentConfig.data);
|
|
||||||
|
|
||||||
emit ReserveUnpaused(asset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @inheritdoc ILendingPoolConfigurator
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
|
@ -492,7 +485,11 @@ contract LendingPoolConfigurator is VersionedInitializable, ILendingPoolConfigur
|
||||||
|
|
||||||
/// @inheritdoc ILendingPoolConfigurator
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
function setPoolPause(bool val) external override onlyEmergencyAdmin {
|
function setPoolPause(bool val) external override onlyEmergencyAdmin {
|
||||||
_pool.setPause(val);
|
address[] memory reserves = _pool.getReservesList();
|
||||||
|
|
||||||
|
for (uint256 i = 0; i < reserves.length; i++) {
|
||||||
|
setReservePause(reserves[i], val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @inheritdoc ILendingPoolConfigurator
|
/// @inheritdoc ILendingPoolConfigurator
|
||||||
|
|
|
@ -22,6 +22,8 @@ contract LendingPoolStorage {
|
||||||
|
|
||||||
uint256 internal _reservesCount;
|
uint256 internal _reservesCount;
|
||||||
|
|
||||||
|
// Deprecated: global LendingPool pause state, no longer used
|
||||||
|
// Replaced by pause states for each reserve
|
||||||
bool internal _paused;
|
bool internal _paused;
|
||||||
|
|
||||||
uint256 internal _maxStableRateBorrowSizePercent;
|
uint256 internal _maxStableRateBorrowSizePercent;
|
||||||
|
|
|
@ -75,7 +75,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
expect(await configurator.signer.getAddress()).to.be.equal(
|
expect(await configurator.signer.getAddress()).to.be.equal(
|
||||||
await addressesProvider.getPoolAdmin()
|
await addressesProvider.getPoolAdmin()
|
||||||
);
|
);
|
||||||
await configurator.pauseReserve(weth.address);
|
await configurator.setReservePause(weth.address, true);
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
ltv,
|
ltv,
|
||||||
|
@ -106,7 +106,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
it('Unpauses the ETH reserve by pool admin ', async () => {
|
it('Unpauses the ETH reserve by pool admin ', async () => {
|
||||||
const { configurator, helpersContract, weth } = testEnv;
|
const { configurator, helpersContract, weth } = testEnv;
|
||||||
await configurator.unpauseReserve(weth.address);
|
await configurator.setReservePause(weth.address, false);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -138,7 +138,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Pauses the ETH reserve by emergency admin', async () => {
|
it('Pauses the ETH reserve by emergency admin', async () => {
|
||||||
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
||||||
testEnv;
|
testEnv;
|
||||||
await configurator.connect(emergencyAdmin.signer).pauseReserve(weth.address);
|
await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true);
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
ltv,
|
ltv,
|
||||||
|
@ -169,7 +169,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
it('Unpauses the ETH reserve by emergency admin ', async () => {
|
it('Unpauses the ETH reserve by emergency admin ', async () => {
|
||||||
const { configurator, helpersContract, weth, users, emergencyAdmin } = testEnv;
|
const { configurator, helpersContract, weth, users, emergencyAdmin } = testEnv;
|
||||||
await configurator.connect(emergencyAdmin.signer).unpauseReserve(weth.address);
|
await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, false);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -202,7 +202,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Check the only admin or emergency admin can pauseReserve ', async () => {
|
it('Check the only admin or emergency admin can pauseReserve ', async () => {
|
||||||
const { configurator, users, weth, riskAdmin } = testEnv;
|
const { configurator, users, weth, riskAdmin } = testEnv;
|
||||||
await expect(
|
await expect(
|
||||||
configurator.connect(riskAdmin.signer).pauseReserve(weth.address),
|
configurator.connect(riskAdmin.signer).setReservePause(weth.address, true),
|
||||||
CALLER_NOT_POOL_ADMIN
|
CALLER_NOT_POOL_ADMIN
|
||||||
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
||||||
});
|
});
|
||||||
|
@ -210,14 +210,14 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Check the only admin or emergency admin can unpauseReserve ', async () => {
|
it('Check the only admin or emergency admin can unpauseReserve ', async () => {
|
||||||
const { configurator, users, weth, riskAdmin } = testEnv;
|
const { configurator, users, weth, riskAdmin } = testEnv;
|
||||||
await expect(
|
await expect(
|
||||||
configurator.connect(riskAdmin.signer).unpauseReserve(weth.address),
|
configurator.connect(riskAdmin.signer).setReservePause(weth.address, false),
|
||||||
CALLER_NOT_POOL_ADMIN
|
CALLER_NOT_POOL_ADMIN
|
||||||
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
||||||
});
|
});
|
||||||
it('Pauses the ETH reserve by the pool admin', async () => {
|
it('Pauses the ETH reserve by the pool admin', async () => {
|
||||||
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
||||||
testEnv;
|
testEnv;
|
||||||
await configurator.pauseReserve(weth.address);
|
await configurator.setReservePause(weth.address, true);
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
ltv,
|
ltv,
|
||||||
|
@ -251,7 +251,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
it('Unpauses the ETH reserve by pool admin ', async () => {
|
it('Unpauses the ETH reserve by pool admin ', async () => {
|
||||||
const { configurator, helpersContract, weth } = testEnv;
|
const { configurator, helpersContract, weth } = testEnv;
|
||||||
await configurator.unpauseReserve(weth.address);
|
await configurator.setReservePause(weth.address, false);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -286,7 +286,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Pauses the ETH reserve by emergency admin', async () => {
|
it('Pauses the ETH reserve by emergency admin', async () => {
|
||||||
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } =
|
||||||
testEnv;
|
testEnv;
|
||||||
await configurator.connect(emergencyAdmin.signer).pauseReserve(weth.address);
|
await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true);
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
ltv,
|
ltv,
|
||||||
|
@ -320,7 +320,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
|
|
||||||
it('Unpauses the ETH reserve by emergency admin ', async () => {
|
it('Unpauses the ETH reserve by emergency admin ', async () => {
|
||||||
const { configurator, helpersContract, weth, users, emergencyAdmin } = testEnv;
|
const { configurator, helpersContract, weth, users, emergencyAdmin } = testEnv;
|
||||||
await configurator.connect(emergencyAdmin.signer).unpauseReserve(weth.address);
|
await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, false);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decimals,
|
decimals,
|
||||||
|
@ -356,7 +356,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Check the only admin or emergency admin can pauseReserve ', async () => {
|
it('Check the only admin or emergency admin can pauseReserve ', async () => {
|
||||||
const { configurator, users, weth, riskAdmin } = testEnv;
|
const { configurator, users, weth, riskAdmin } = testEnv;
|
||||||
await expect(
|
await expect(
|
||||||
configurator.connect(riskAdmin.signer).pauseReserve(weth.address),
|
configurator.connect(riskAdmin.signer).setReservePause(weth.address, true),
|
||||||
CALLER_NOT_POOL_ADMIN
|
CALLER_NOT_POOL_ADMIN
|
||||||
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
||||||
});
|
});
|
||||||
|
@ -364,7 +364,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
|
||||||
it('Check the only admin or emergency admin can unpauseReserve ', async () => {
|
it('Check the only admin or emergency admin can unpauseReserve ', async () => {
|
||||||
const { configurator, users, weth, riskAdmin } = testEnv;
|
const { configurator, users, weth, riskAdmin } = testEnv;
|
||||||
await expect(
|
await expect(
|
||||||
configurator.connect(riskAdmin.signer).unpauseReserve(weth.address),
|
configurator.connect(riskAdmin.signer).setReservePause(weth.address, false),
|
||||||
CALLER_NOT_POOL_ADMIN
|
CALLER_NOT_POOL_ADMIN
|
||||||
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user