@@ -65,18 +65,25 @@ library InterestRatesModel {
6565 _lastPoolIndexes.poolBorrowIndex
6666 );
6767
68- uint256 p2pGrowthFactor = PercentageMath.weightedAvg (
69- growthFactors.poolSupplyGrowthFactor,
70- growthFactors.poolBorrowGrowthFactor,
71- _p2pIndexCursor
72- );
68+ if (growthFactors.poolSupplyGrowthFactor <= growthFactors.poolBorrowGrowthFactor) {
69+ uint256 p2pGrowthFactor = PercentageMath.weightedAvg (
70+ growthFactors.poolSupplyGrowthFactor,
71+ growthFactors.poolBorrowGrowthFactor,
72+ _p2pIndexCursor
73+ );
7374
74- growthFactors.p2pSupplyGrowthFactor =
75- p2pGrowthFactor -
76- (p2pGrowthFactor - growthFactors.poolSupplyGrowthFactor).percentMul (_reserveFactor);
77- growthFactors.p2pBorrowGrowthFactor =
78- p2pGrowthFactor +
79- (growthFactors.poolBorrowGrowthFactor - p2pGrowthFactor).percentMul (_reserveFactor);
75+ growthFactors.p2pSupplyGrowthFactor =
76+ p2pGrowthFactor -
77+ (p2pGrowthFactor - growthFactors.poolSupplyGrowthFactor).percentMul (_reserveFactor);
78+ growthFactors.p2pBorrowGrowthFactor =
79+ p2pGrowthFactor +
80+ (growthFactors.poolBorrowGrowthFactor - p2pGrowthFactor).percentMul (_reserveFactor);
81+ } else {
82+ // The case poolSupplyGrowthFactor > poolBorrowGrowthFactor happens because someone has done a flashloan on Aave:
83+ // the peer-to-peer growth factors are set to the pool borrow growth factor.
84+ growthFactors.p2pSupplyGrowthFactor = growthFactors.poolBorrowGrowthFactor;
85+ growthFactors.p2pBorrowGrowthFactor = growthFactors.poolBorrowGrowthFactor;
86+ }
8087 }
8188
8289 /// @notice Computes and returns the new peer-to-peer supply index of a market given its parameters.
0 commit comments