Cyfrin / 2023-07-foundry-defi-stablecoin

37 stars 32 forks source link

Gas optimization opportunity for the `for loop` in getAccountCollateralValue() #1125

Open codehawks-bot opened 1 year ago

codehawks-bot commented 1 year ago

Gas optimization opportunity for the for loop in getAccountCollateralValue()

Severity

Gas Optimization / Informational

Relevant GitHub Links

https://github.com/Cyfrin/foundry-defi-stablecoin-codehawks/blob/c573394cf3f21f73ef974388138193609f432c7f/src/DSCEngine.sol#L353-L357

Summary

Gas optimization opportunity for the for loop in getAccountCollateralValue().

Vulnerability Details

n/a

Impact

Paying more gas than necessary, especially with a for loop, there's lots of room for optimization.

Tools Used

VSC, manual.

Recommendations

Instead of:

    for (uint256 i = 0; i < s_collateralTokens.length; i++) {
        address token = s_collateralTokens[i];
        uint256 amount = s_collateralDeposited[user][token];
        totalCollateralValueInUsd += getUsdValue(token, amount);
    }

Recommend to implement this:

            uint256 _collateralTokensLength = s_collateralTokens.length;
    for (uint256 i; i < _collateralTokensLength; ) {
        address token = s_collateralTokens[i];
        uint256 amount = s_collateralDeposited[user][token];
        totalCollateralValueInUsd += getUsdValue(token, amount);

        unchecked {
                i++;
        }
    }