mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	fix: Adapt code to support >128 reserves
This commit is contained in:
		
							parent
							
								
									c1ada1cb68
								
							
						
					
					
						commit
						2b883e4f43
					
				|  | @ -87,7 +87,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|     _addressesProvider = provider; | ||||
|     _maxStableRateBorrowSizePercent = 2500; | ||||
|     _flashLoanPremiumTotal = 9; | ||||
|     _maxNumberOfReserves = 128; | ||||
|     _maxNumberOfReserves = UserConfiguration._maxReserves; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -713,7 +713,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage | |||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Returns the fee on flash loans  | ||||
|    * @dev Returns the fee on flash loans | ||||
|    */ | ||||
|   function FLASHLOAN_PREMIUM_TOTAL() public view returns (uint256) { | ||||
|     return _flashLoanPremiumTotal; | ||||
|  |  | |||
|  | @ -13,6 +13,9 @@ library UserConfiguration { | |||
|   uint256 internal constant BORROWING_MASK = | ||||
|     0x5555555555555555555555555555555555555555555555555555555555555555; | ||||
| 
 | ||||
|   uint256 internal constant _maxReserves = 256; | ||||
|   uint256 internal constant _indexCount = _maxReserves / 128 + ((_maxReserves % 128 > 0) ? 1 : 0); | ||||
| 
 | ||||
|   /** | ||||
|    * @dev Sets if the user is borrowing the reserve identified by reserveIndex | ||||
|    * @param self The configuration object | ||||
|  | @ -24,9 +27,11 @@ library UserConfiguration { | |||
|     uint256 reserveIndex, | ||||
|     bool borrowing | ||||
|   ) internal { | ||||
|     require(reserveIndex < 128, Errors.UL_INVALID_INDEX); | ||||
|     self.data = | ||||
|       (self.data & ~(1 << (reserveIndex * 2))) | | ||||
|     require(reserveIndex < _maxReserves, Errors.UL_INVALID_INDEX); | ||||
|     uint256 index = reserveIndex / 128; | ||||
|     reserveIndex = reserveIndex % 128; | ||||
|     self.data[index] = | ||||
|       (self.data[index] & ~(1 << (reserveIndex * 2))) | | ||||
|       (uint256(borrowing ? 1 : 0) << (reserveIndex * 2)); | ||||
|   } | ||||
| 
 | ||||
|  | @ -41,9 +46,11 @@ library UserConfiguration { | |||
|     uint256 reserveIndex, | ||||
|     bool usingAsCollateral | ||||
|   ) internal { | ||||
|     require(reserveIndex < 128, Errors.UL_INVALID_INDEX); | ||||
|     self.data = | ||||
|       (self.data & ~(1 << (reserveIndex * 2 + 1))) | | ||||
|     require(reserveIndex < _maxReserves, Errors.UL_INVALID_INDEX); | ||||
|     uint256 index = reserveIndex / 128; | ||||
|     reserveIndex = reserveIndex % 128; | ||||
|     self.data[index] = | ||||
|       (self.data[index] & ~(1 << (reserveIndex * 2 + 1))) | | ||||
|       (uint256(usingAsCollateral ? 1 : 0) << (reserveIndex * 2 + 1)); | ||||
|   } | ||||
| 
 | ||||
|  | @ -57,8 +64,10 @@ library UserConfiguration { | |||
|     DataTypes.UserConfigurationMap memory self, | ||||
|     uint256 reserveIndex | ||||
|   ) internal pure returns (bool) { | ||||
|     require(reserveIndex < 128, Errors.UL_INVALID_INDEX); | ||||
|     return (self.data >> (reserveIndex * 2)) & 3 != 0; | ||||
|     require(reserveIndex < _maxReserves, Errors.UL_INVALID_INDEX); | ||||
|     uint256 index = reserveIndex / 128; | ||||
|     reserveIndex = reserveIndex % 128; | ||||
|     return (self.data[index] >> (reserveIndex * 2)) & 3 != 0; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -72,8 +81,10 @@ library UserConfiguration { | |||
|     pure | ||||
|     returns (bool) | ||||
|   { | ||||
|     require(reserveIndex < 128, Errors.UL_INVALID_INDEX); | ||||
|     return (self.data >> (reserveIndex * 2)) & 1 != 0; | ||||
|     require(reserveIndex < _maxReserves, Errors.UL_INVALID_INDEX); | ||||
|     uint256 index = reserveIndex / 128; | ||||
|     reserveIndex = reserveIndex % 128; | ||||
|     return (self.data[index] >> (reserveIndex * 2)) & 1 != 0; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -87,8 +98,10 @@ library UserConfiguration { | |||
|     pure | ||||
|     returns (bool) | ||||
|   { | ||||
|     require(reserveIndex < 128, Errors.UL_INVALID_INDEX); | ||||
|     return (self.data >> (reserveIndex * 2 + 1)) & 1 != 0; | ||||
|     require(reserveIndex < _maxReserves, Errors.UL_INVALID_INDEX); | ||||
|     uint256 index = reserveIndex / 128; | ||||
|     reserveIndex = reserveIndex % 128; | ||||
|     return (self.data[index] >> (reserveIndex * 2 + 1)) & 1 != 0; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -97,7 +110,12 @@ library UserConfiguration { | |||
|    * @return True if the user has been borrowing any reserve, false otherwise | ||||
|    **/ | ||||
|   function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) { | ||||
|     return self.data & BORROWING_MASK != 0; | ||||
|     for (uint8 i = 0; i < _indexCount; i++) { | ||||
|       if (self.data[i] & BORROWING_MASK != 0) { | ||||
|         return true; | ||||
|       } | ||||
|     } | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|  | @ -106,6 +124,11 @@ library UserConfiguration { | |||
|    * @return True if the user has been borrowing any reserve, false otherwise | ||||
|    **/ | ||||
|   function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) { | ||||
|     return self.data == 0; | ||||
|     for (uint8 i = 0; i < _indexCount; i++) { | ||||
|       if (self.data[i] != 0) { | ||||
|         return false; | ||||
|       } | ||||
|     } | ||||
|     return true; | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ library DataTypes { | |||
|   } | ||||
| 
 | ||||
|   struct UserConfigurationMap { | ||||
|     uint256 data; | ||||
|     uint256[2] data; // size is _maxReserves / 128 + ((_maxReserves % 128 > 0) ? 1 : 0), but need to be literal | ||||
|   } | ||||
| 
 | ||||
|   enum InterestRateMode {NONE, STABLE, VARIABLE} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Lasse Herskind
						Lasse Herskind