Assessment reports>Avon>Informational findings>Inconsistency between the function ,getPosition, and function ,_isPositionSafe, in calculating borrowed assets
Category: Business Logic

Inconsistency between the function getPosition and function _isPositionSafe in calculating borrowed assets

Informational Impact
Informational Severity
N/A Likelihood

Description

When calculating the borrowAssets, the function getPosition uses the function toAssetsDown, which rounds down during division.

function getPosition(
    PoolStorage.PoolState storage s,
    address account
) internal view returns (BorrowPosition memory currentPosition) {
    (currentPosition.borrowShares, currentPosition.collateral) = (s.positions[account].borrowShares, s.positions[account].collateral);
    PoolData memory previewPool = _previewAccrueInterest(s);
!    currentPosition.borrowAssets = currentPosition.borrowShares.toAssetsDown(
        previewPool.totalBorrowAssets,
        previewPool.totalBorrowShares
    );
}

However, the function _isPositionSafe uses the function toAssetsUp when calculating the user's borrowedAssets, i.e. rounding up during division.

function _isPositionSafe(
    PoolStorage.PoolState storage s,
    address borrower
) internal view returns (bool) {
    PoolStorage.Position memory position = s.positions[borrower];
    if (position.borrowShares == 0) return true;

    uint256 assetRatio = s.totalBorrowAssets.toAssetsUp(PoolConstants.WAD, s.totalBorrowShares);
    uint256 borrowedAssets = position.borrowShares * assetRatio;

    // [...]
}

Impact

There is an inconsistency between the function getPosition and function _isPositionSafe in calculating borrowed assets, while the function toAssetsDown is in the borrower's favor.

Recommendations

Consider using the function toAssetsUp to calculate.

Remediation

Zellic © 2025Back to top ↑