mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	Changed the indexes and rates type to uint128
This commit is contained in:
		
							parent
							
								
									5b7a2f2a55
								
							
						
					
					
						commit
						03ec940109
					
				| 
						 | 
				
			
			@ -344,8 +344,8 @@ contract LendingPool is ReentrancyGuard, VersionedInitializable, ILendingPool {
 | 
			
		|||
    // user must be borrowing on asset at a stable rate
 | 
			
		||||
    require(stableBorrowBalance > 0, 'User does not have any stable rate loan for this reserve');
 | 
			
		||||
 | 
			
		||||
    uint256 rebalanceDownRateThreshold = reserve.currentStableBorrowRate.rayMul(
 | 
			
		||||
      WadRayMath.ray().add(REBALANCE_DOWN_RATE_DELTA)
 | 
			
		||||
    uint256 rebalanceDownRateThreshold = WadRayMath.ray().add(REBALANCE_DOWN_RATE_DELTA).rayMul(
 | 
			
		||||
      reserve.currentStableBorrowRate
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    //1. user stable borrow rate is below the current liquidity rate. The loan needs to be rebalanced,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,25 +48,26 @@ library ReserveLogic {
 | 
			
		|||
 | 
			
		||||
  // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.
 | 
			
		||||
  struct ReserveData {
 | 
			
		||||
    //the liquidity index. Expressed in ray
 | 
			
		||||
    uint256 lastLiquidityIndex;
 | 
			
		||||
    //the current supply rate. Expressed in ray
 | 
			
		||||
    uint256 currentLiquidityRate;
 | 
			
		||||
    //the current variable borrow rate. Expressed in ray
 | 
			
		||||
    uint256 currentVariableBorrowRate;
 | 
			
		||||
    //the current stable borrow rate. Expressed in ray
 | 
			
		||||
    uint256 currentStableBorrowRate;
 | 
			
		||||
    //variable borrow index. Expressed in ray
 | 
			
		||||
    uint256 lastVariableBorrowIndex;
 | 
			
		||||
    //stores the reserve configuration
 | 
			
		||||
    ReserveConfiguration.Map configuration;
 | 
			
		||||
    address aTokenAddress;
 | 
			
		||||
    address stableDebtTokenAddress;
 | 
			
		||||
    address variableDebtTokenAddress;
 | 
			
		||||
    address interestRateStrategyAddress;
 | 
			
		||||
    //the liquidity index. Expressed in ray
 | 
			
		||||
    uint128 lastLiquidityIndex;
 | 
			
		||||
    //the current supply rate. Expressed in ray
 | 
			
		||||
    uint128 currentLiquidityRate;
 | 
			
		||||
    //the current variable borrow rate. Expressed in ray
 | 
			
		||||
    uint128 currentVariableBorrowRate;
 | 
			
		||||
    //the current stable borrow rate. Expressed in ray
 | 
			
		||||
    uint128 currentStableBorrowRate;
 | 
			
		||||
    //variable borrow index. Expressed in ray
 | 
			
		||||
    uint128 lastVariableBorrowIndex;
 | 
			
		||||
    uint40 lastUpdateTimestamp;
 | 
			
		||||
    //the index of the reserve in the list of the active reserves
 | 
			
		||||
    uint8 index;
 | 
			
		||||
   
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			@ -130,8 +131,10 @@ library ReserveLogic {
 | 
			
		|||
        currentLiquidityRate,
 | 
			
		||||
        lastUpdateTimestamp
 | 
			
		||||
      );
 | 
			
		||||
      uint256 index = cumulatedLiquidityInterest.rayMul(reserve.lastLiquidityIndex);
 | 
			
		||||
      require(index < (1 << 128), "ReserveLogic: Liquidity index overflow");
 | 
			
		||||
 | 
			
		||||
      reserve.lastLiquidityIndex = cumulatedLiquidityInterest.rayMul(reserve.lastLiquidityIndex);
 | 
			
		||||
      reserve.lastLiquidityIndex = uint128(index);
 | 
			
		||||
 | 
			
		||||
      //as the liquidity rate might come only from stable rate loans, we need to ensure
 | 
			
		||||
      //that there is actual variable debt before accumulating
 | 
			
		||||
| 
						 | 
				
			
			@ -140,9 +143,11 @@ library ReserveLogic {
 | 
			
		|||
          reserve.currentVariableBorrowRate,
 | 
			
		||||
          lastUpdateTimestamp
 | 
			
		||||
        );
 | 
			
		||||
        reserve.lastVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(
 | 
			
		||||
        index = cumulatedVariableBorrowInterest.rayMul(
 | 
			
		||||
          reserve.lastVariableBorrowIndex
 | 
			
		||||
        );
 | 
			
		||||
        require(index < (1 << 128), "ReserveLogic: Variable borrow index overflow");
 | 
			
		||||
        reserve.lastVariableBorrowIndex = uint128(index);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -164,11 +169,14 @@ library ReserveLogic {
 | 
			
		|||
  ) internal {
 | 
			
		||||
    uint256 amountToLiquidityRatio = amount.wadToRay().rayDiv(totalLiquidity.wadToRay());
 | 
			
		||||
 | 
			
		||||
    uint256 cumulatedLiquidity = amountToLiquidityRatio.add(WadRayMath.ray());
 | 
			
		||||
    uint256 result = amountToLiquidityRatio.add(WadRayMath.ray());
 | 
			
		||||
 | 
			
		||||
    reserve.lastLiquidityIndex = cumulatedLiquidity.rayMul(
 | 
			
		||||
    result = result.rayMul(
 | 
			
		||||
      reserve.lastLiquidityIndex
 | 
			
		||||
    );
 | 
			
		||||
    require(result < (1 << 128), "ReserveLogic: Liquidity index overflow");
 | 
			
		||||
 | 
			
		||||
    reserve.lastLiquidityIndex = uint128(result);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			@ -187,11 +195,11 @@ library ReserveLogic {
 | 
			
		|||
    require(reserve.aTokenAddress == address(0), 'Reserve has already been initialized');
 | 
			
		||||
    if (reserve.lastLiquidityIndex == 0) {
 | 
			
		||||
      //if the reserve has not been initialized yet
 | 
			
		||||
      reserve.lastLiquidityIndex = WadRayMath.ray();
 | 
			
		||||
      reserve.lastLiquidityIndex = uint128(WadRayMath.ray());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (reserve.lastVariableBorrowIndex == 0) {
 | 
			
		||||
      reserve.lastVariableBorrowIndex = WadRayMath.ray();
 | 
			
		||||
      reserve.lastVariableBorrowIndex = uint128(WadRayMath.ray());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    reserve.aTokenAddress = aTokenAddress;
 | 
			
		||||
| 
						 | 
				
			
			@ -238,10 +246,13 @@ library ReserveLogic {
 | 
			
		|||
      IERC20(reserve.variableDebtTokenAddress).totalSupply(),
 | 
			
		||||
      vars.currentAvgStableRate
 | 
			
		||||
    );
 | 
			
		||||
    require(vars.newLiquidityRate < (1 << 128), "ReserveLogic: Liquidity rate overflow");
 | 
			
		||||
    require(vars.newStableRate < (1 << 128), "ReserveLogic: Stable borrow rate overflow");
 | 
			
		||||
    require(vars.newVariableRate < (1 << 128), "ReserveLogic: Variable borrow rate overflow");
 | 
			
		||||
 | 
			
		||||
    reserve.currentLiquidityRate = vars.newLiquidityRate;
 | 
			
		||||
    reserve.currentStableBorrowRate = vars.newStableRate;
 | 
			
		||||
    reserve.currentVariableBorrowRate = vars.newVariableRate;
 | 
			
		||||
    reserve.currentLiquidityRate = uint128(vars.newLiquidityRate);
 | 
			
		||||
    reserve.currentStableBorrowRate = uint128(vars.newStableRate);
 | 
			
		||||
    reserve.currentVariableBorrowRate = uint128(vars.newVariableRate);
 | 
			
		||||
 | 
			
		||||
    emit ReserveDataUpdated(
 | 
			
		||||
      reserveAddress,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user