Part 2

Zaros
PerpetualsDEXFoundrySolidity
70,000 USDC
View results
Submission Details
Severity: low
Invalid

Unbounded Loops in Credit Calculations

Summary

getCreditForMarketId uses loops without gas limit considerations, risking DOS.

Vulnerability Details

// In CreditDelegationBranch.sol
function getCreditForMarketId(uint256 marketId) public view returns (uint256) {
uint256 totalCredit;
for (uint256 i = 0; i < allVaults.length; i++) {
if (vaultSupportsMarket(allVaults[i], marketId)) {
totalCredit += vaults[allVaults[i]].liquidity;
}
}
return totalCredit;
}

Impact

  • Gas limits exceeded for markets with many vaults

  • Failed transactions during market stress

Tools Used

  • Manual review

  • Ethlint

Recommendations

// Implement paginated view functions
function getCreditPaginated(uint256 marketId, uint256 start, uint256 end) public view returns (uint256) {
uint256 totalCredit;
end = Math.min(end, allVaults.length);
for (uint256 i = start; i < end; i++) {
if (vaultSupportsMarket(allVaults[i], marketId)) {
totalCredit += vaults[allVaults[i]].liquidity;
}
}
return totalCredit;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Too generic

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.