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; | ||||
| 
 | ||||
|   /** | ||||
|    * @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 val true = pausing, false = unpausing | ||||
|    **/ | ||||
|   function pauseReserve(address asset) external; | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Unpauses a reserve | ||||
|    * @param asset The address of the underlying asset of the reserve | ||||
|    **/ | ||||
|   function unpauseReserve(address asset) external; | ||||
|   function setReservePause(address asset, bool val) external; | ||||
| 
 | ||||
|   /** | ||||
|    * @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 | ||||
|    * Effectively it pauses every reserve | ||||
|    * @param val true if protocol needs to be paused, false otherwise | ||||
|    **/ | ||||
|   function setPoolPause(bool val) external; | ||||
|  |  | |||
|  | @ -53,20 +53,11 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
| 
 | ||||
|   uint256 public constant LENDINGPOOL_REVISION = 0x2; | ||||
| 
 | ||||
|   modifier whenNotPaused() { | ||||
|     _whenNotPaused(); | ||||
|     _; | ||||
|   } | ||||
| 
 | ||||
|   modifier onlyLendingPoolConfigurator() { | ||||
|     _onlyLendingPoolConfigurator(); | ||||
|     _; | ||||
|   } | ||||
| 
 | ||||
|   function _whenNotPaused() internal view { | ||||
|     require(!_paused, Errors.LP_IS_PAUSED); | ||||
|   } | ||||
| 
 | ||||
|   function _onlyLendingPoolConfigurator() internal view { | ||||
|     require( | ||||
|       _addressesProvider.getLendingPoolConfigurator() == msg.sender, | ||||
|  | @ -99,7 +90,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     uint256 amount, | ||||
|     address onBehalfOf, | ||||
|     uint16 referralCode | ||||
|   ) external override whenNotPaused { | ||||
|   ) external override { | ||||
|     _executeDeposit(asset, amount, onBehalfOf, referralCode); | ||||
|   } | ||||
| 
 | ||||
|  | @ -131,7 +122,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     address asset, | ||||
|     uint256 amount, | ||||
|     address to | ||||
|   ) external override whenNotPaused returns (uint256) { | ||||
|   ) external override returns (uint256) { | ||||
|     return _executeWithdraw(asset, amount, to); | ||||
|   } | ||||
| 
 | ||||
|  | @ -142,7 +133,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     uint256 interestRateMode, | ||||
|     uint16 referralCode, | ||||
|     address onBehalfOf | ||||
|   ) external override whenNotPaused { | ||||
|   ) external override { | ||||
|     _executeBorrow( | ||||
|       ExecuteBorrowParams( | ||||
|         asset, | ||||
|  | @ -162,7 +153,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     uint256 amount, | ||||
|     uint256 rateMode, | ||||
|     address onBehalfOf | ||||
|   ) external override whenNotPaused returns (uint256) { | ||||
|   ) external override returns (uint256) { | ||||
|     return _executeRepay(asset, amount, rateMode, onBehalfOf); | ||||
|   } | ||||
| 
 | ||||
|  | @ -190,7 +181,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|   } | ||||
| 
 | ||||
|   ///@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.ReserveCache memory reserveCache = reserve.cache(); | ||||
| 
 | ||||
|  | @ -239,7 +230,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|   } | ||||
| 
 | ||||
|   ///@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.ReserveCache memory reserveCache = reserve.cache(); | ||||
| 
 | ||||
|  | @ -274,11 +265,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|   } | ||||
| 
 | ||||
|   ///@inheritdoc ILendingPool | ||||
|   function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) | ||||
|     external | ||||
|     override | ||||
|     whenNotPaused | ||||
|   { | ||||
|   function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external override { | ||||
|     DataTypes.ReserveData storage reserve = _reserves[asset]; | ||||
|     DataTypes.ReserveCache memory reserveCache = reserve.cache(); | ||||
| 
 | ||||
|  | @ -310,7 +297,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     address user, | ||||
|     uint256 debtToCover, | ||||
|     bool receiveAToken | ||||
|   ) external override whenNotPaused { | ||||
|   ) external override { | ||||
|     address collateralManager = _addressesProvider.getLendingPoolCollateralManager(); | ||||
| 
 | ||||
|     //solium-disable-next-line | ||||
|  | @ -359,7 +346,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     address onBehalfOf, | ||||
|     bytes calldata params, | ||||
|     uint16 referralCode | ||||
|   ) external override whenNotPaused { | ||||
|   ) external override { | ||||
|     FlashLoanLocalVars memory vars; | ||||
| 
 | ||||
|     vars.aTokenAddresses = new address[](assets.length); | ||||
|  | @ -498,6 +485,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|       ltv, | ||||
|       currentLiquidationThreshold, | ||||
|       healthFactor, | ||||
| 
 | ||||
|     ) = GenericLogic.getUserAccountData( | ||||
|       user, | ||||
|       _reserves, | ||||
|  | @ -617,7 +605,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     uint256 amount, | ||||
|     uint256 balanceFromBefore, | ||||
|     uint256 balanceToBefore | ||||
|   ) external override whenNotPaused { | ||||
|   ) external override { | ||||
|     require(msg.sender == _reserves[asset].aTokenAddress, Errors.LP_CALLER_MUST_BE_AN_ATOKEN); | ||||
| 
 | ||||
|     ValidationLogic.validateTransfer(_reserves[asset]); | ||||
|  |  | |||
|  | @ -407,25 +407,18 @@ contract LendingPoolConfigurator is VersionedInitializable, ILendingPoolConfigur | |||
|   } | ||||
| 
 | ||||
|   /// @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); | ||||
| 
 | ||||
|     currentConfig.setPaused(true); | ||||
|     currentConfig.setPaused(val); | ||||
| 
 | ||||
|     _pool.setConfiguration(asset, currentConfig.data); | ||||
| 
 | ||||
|     emit ReservePaused(asset); | ||||
|   } | ||||
| 
 | ||||
|   /// @inheritdoc ILendingPoolConfigurator | ||||
|   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); | ||||
|     if (val) { | ||||
|       emit ReservePaused(asset); | ||||
|     } else { | ||||
|       emit ReserveUnpaused(asset); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// @inheritdoc ILendingPoolConfigurator | ||||
|  | @ -492,7 +485,11 @@ contract LendingPoolConfigurator is VersionedInitializable, ILendingPoolConfigur | |||
| 
 | ||||
|   /// @inheritdoc ILendingPoolConfigurator | ||||
|   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 | ||||
|  |  | |||
|  | @ -22,6 +22,8 @@ contract LendingPoolStorage { | |||
| 
 | ||||
|   uint256 internal _reservesCount; | ||||
| 
 | ||||
|   // Deprecated: global LendingPool pause state, no longer used | ||||
|   // Replaced by pause states for each reserve | ||||
|   bool internal _paused; | ||||
| 
 | ||||
|   uint256 internal _maxStableRateBorrowSizePercent; | ||||
|  |  | |||
|  | @ -75,7 +75,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
|     expect(await configurator.signer.getAddress()).to.be.equal( | ||||
|       await addressesProvider.getPoolAdmin() | ||||
|     ); | ||||
|     await configurator.pauseReserve(weth.address); | ||||
|     await configurator.setReservePause(weth.address, true); | ||||
|     const { | ||||
|       decimals, | ||||
|       ltv, | ||||
|  | @ -106,7 +106,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
| 
 | ||||
|   it('Unpauses the ETH reserve by pool admin ', async () => { | ||||
|     const { configurator, helpersContract, weth } = testEnv; | ||||
|     await configurator.unpauseReserve(weth.address); | ||||
|     await configurator.setReservePause(weth.address, false); | ||||
| 
 | ||||
|     const { | ||||
|       decimals, | ||||
|  | @ -138,7 +138,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
|   it('Pauses the ETH reserve by emergency admin', async () => { | ||||
|     const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } = | ||||
|       testEnv; | ||||
|     await configurator.connect(emergencyAdmin.signer).pauseReserve(weth.address); | ||||
|     await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true); | ||||
|     const { | ||||
|       decimals, | ||||
|       ltv, | ||||
|  | @ -169,7 +169,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
| 
 | ||||
|   it('Unpauses the ETH reserve by emergency admin ', async () => { | ||||
|     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 { | ||||
|       decimals, | ||||
|  | @ -202,7 +202,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
|   it('Check the only admin or emergency admin can pauseReserve ', async () => { | ||||
|     const { configurator, users, weth, riskAdmin } = testEnv; | ||||
|     await expect( | ||||
|       configurator.connect(riskAdmin.signer).pauseReserve(weth.address), | ||||
|       configurator.connect(riskAdmin.signer).setReservePause(weth.address, true), | ||||
|       CALLER_NOT_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 () => { | ||||
|     const { configurator, users, weth, riskAdmin } = testEnv; | ||||
|     await expect( | ||||
|       configurator.connect(riskAdmin.signer).unpauseReserve(weth.address), | ||||
|       configurator.connect(riskAdmin.signer).setReservePause(weth.address, false), | ||||
|       CALLER_NOT_POOL_ADMIN | ||||
|     ).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN); | ||||
|   }); | ||||
|   it('Pauses the ETH reserve by the pool admin', async () => { | ||||
|     const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } = | ||||
|       testEnv; | ||||
|     await configurator.pauseReserve(weth.address); | ||||
|     await configurator.setReservePause(weth.address, true); | ||||
|     const { | ||||
|       decimals, | ||||
|       ltv, | ||||
|  | @ -251,7 +251,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
| 
 | ||||
|   it('Unpauses the ETH reserve by pool admin ', async () => { | ||||
|     const { configurator, helpersContract, weth } = testEnv; | ||||
|     await configurator.unpauseReserve(weth.address); | ||||
|     await configurator.setReservePause(weth.address, false); | ||||
| 
 | ||||
|     const { | ||||
|       decimals, | ||||
|  | @ -286,7 +286,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
|   it('Pauses the ETH reserve by emergency admin', async () => { | ||||
|     const { configurator, weth, helpersContract, addressesProvider, users, emergencyAdmin } = | ||||
|       testEnv; | ||||
|     await configurator.connect(emergencyAdmin.signer).pauseReserve(weth.address); | ||||
|     await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true); | ||||
|     const { | ||||
|       decimals, | ||||
|       ltv, | ||||
|  | @ -320,7 +320,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
| 
 | ||||
|   it('Unpauses the ETH reserve by emergency admin ', async () => { | ||||
|     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 { | ||||
|       decimals, | ||||
|  | @ -356,7 +356,7 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => { | |||
|   it('Check the only admin or emergency admin can pauseReserve ', async () => { | ||||
|     const { configurator, users, weth, riskAdmin } = testEnv; | ||||
|     await expect( | ||||
|       configurator.connect(riskAdmin.signer).pauseReserve(weth.address), | ||||
|       configurator.connect(riskAdmin.signer).setReservePause(weth.address, true), | ||||
|       CALLER_NOT_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 () => { | ||||
|     const { configurator, users, weth, riskAdmin } = testEnv; | ||||
|     await expect( | ||||
|       configurator.connect(riskAdmin.signer).unpauseReserve(weth.address), | ||||
|       configurator.connect(riskAdmin.signer).setReservePause(weth.address, false), | ||||
|       CALLER_NOT_POOL_ADMIN | ||||
|     ).to.be.revertedWith(LPC_CALLER_NOT_EMERGENCY_OR_POOL_ADMIN); | ||||
|   }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Hadrien Charlanes
						Hadrien Charlanes