Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions contracts/misc/Helpers.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.10;


library Helpers {
function unchecked_inc(uint i) internal pure returns (uint) {
unchecked {
return i + 1;
}
}
}
3 changes: 2 additions & 1 deletion contracts/misc/ParaSpaceOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {IAtomicPriceAggregator} from "../interfaces/IAtomicPriceAggregator.sol";
import {IPoolAddressesProvider} from "../interfaces/IPoolAddressesProvider.sol";
import {IPriceOracleGetter} from "../interfaces/IPriceOracleGetter.sol";
import {IParaSpaceOracle} from "../interfaces/IParaSpaceOracle.sol";
import {Helpers} from "./Helpers.sol";

/**
* @title ParaSpaceOracle
Expand Down Expand Up @@ -194,7 +195,7 @@ contract ParaSpaceOracle is IParaSpaceOracle {
returns (uint256[] memory)
{
uint256[] memory prices = new uint256[](assets.length);
for (uint256 i = 0; i < assets.length; i++) {
for (uint256 i; i < assets.length; Helpers.unchecked_inc(i)) {
prices[i] = getAssetPrice(assets[i]);
}
return prices;
Expand Down
3 changes: 2 additions & 1 deletion contracts/protocol/libraries/logic/GenericLogic.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {DataTypes} from "../types/DataTypes.sol";
import {ReserveLogic} from "./ReserveLogic.sol";
import {INonfungiblePositionManager} from "../../../dependencies/uniswap/INonfungiblePositionManager.sol";
import {XTokenType} from "../../../interfaces/IXTokenType.sol";
import {Helpers} from "../../../misc/Helpers.sol";

/**
* @title GenericLogic library
Expand Down Expand Up @@ -463,7 +464,7 @@ library GenericLogic {
uint256 totalBalance = INToken(vars.xTokenAddress).balanceOf(
params.user
);
for (uint256 index = 0; index < totalBalance; index++) {
for (uint256 index = 0; index < totalBalance; Helpers.unchecked_inc(index)) {
uint256 tokenId = IERC721Enumerable(vars.xTokenAddress)
.tokenOfOwnerByIndex(params.user, index);
if (
Expand Down
9 changes: 6 additions & 3 deletions contracts/protocol/libraries/logic/ValidationLogic.sol
Original file line number Diff line number Diff line change
Expand Up @@ -543,12 +543,15 @@ library ValidationLogic {

) = params.liquidationAssetReserveCache.reserveConfiguration.getFlags();

require(vars.collateralReserveActive, Errors.RESERVE_INACTIVE);
require(vars.principalReserveActive, Errors.RESERVE_INACTIVE);

require(
vars.collateralReserveActive && vars.principalReserveActive,
Errors.RESERVE_INACTIVE
!vars.collateralReservePaused,
Errors.RESERVE_PAUSED
);
require(
!vars.collateralReservePaused && !vars.principalReservePaused,
!vars.principalReservePaused,
Errors.RESERVE_PAUSED
);

Expand Down
16 changes: 6 additions & 10 deletions contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,7 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
uint256 totalDebt;
uint256 currentVariableBorrowRate;
uint256 currentLiquidityRate;
uint256 borrowUsageRatio;
uint256 supplyUsageRatio;
uint256 usageRatio;
uint256 availableLiquidityPlusDebt;
}

Expand All @@ -143,30 +142,27 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
vars.availableLiquidityPlusDebt =
vars.availableLiquidity +
vars.totalDebt;
vars.borrowUsageRatio = vars.totalDebt.rayDiv(
vars.availableLiquidityPlusDebt
);
vars.supplyUsageRatio = vars.totalDebt.rayDiv(
vars.usageRatio = vars.totalDebt.rayDiv(
vars.availableLiquidityPlusDebt
);
}

if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {
uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio -
if (vars.usageRatio > OPTIMAL_USAGE_RATIO) {
uint256 excessBorrowUsageRatio = (vars.usageRatio -
OPTIMAL_USAGE_RATIO).rayDiv(MAX_EXCESS_USAGE_RATIO);

vars.currentVariableBorrowRate +=
_variableRateSlope1 +
_variableRateSlope2.rayMul(excessBorrowUsageRatio);
} else {
vars.currentVariableBorrowRate += _variableRateSlope1
.rayMul(vars.borrowUsageRatio)
.rayMul(vars.usageRatio)
.rayDiv(OPTIMAL_USAGE_RATIO);
}

vars.currentLiquidityRate = vars
.currentVariableBorrowRate
.rayMul(vars.supplyUsageRatio)
.rayMul(vars.usageRatio)
.percentMul(
PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor
);
Expand Down