Part 2

Zaros
PerpetualsDEXFoundrySolidity
70,000 USDC
View results
Submission Details
Severity: high
Valid

Market::getCreditCapacityUsd Incorrectly Adds Debt Instead of Deducting It

Summary

The function getCreditCapacityUsd incorrectly calculates credit capacity by adding totalDebtUsdX18 to delegatedCreditUsdX18. Debt should be subtracted from delegated credit. If totalDebtUsdX18 is positive (indicating debt), it increases credit capacity instead of reducing it. If totalDebtUsdX18 is negative (indicating credit), it reduces credit capacity instead of increasing it. This miscalculation leads to incorrect credit capacity evaluations.


Vulnerability Details

The creditCapacityUsdX18 currently is calculated like this:

creditCapacityUsdX18 = delegatedCreditUsdX18.intoSD59x18().add(totalDebtUsdX18);

Uses .add(totalDebtUsdX18), which increases the credit capacity when debt is positive. But it Should subtract totalDebtUsdX18 instead. Credit capacity is the amount left after deducting obligations (debt). Adding debt increases capacity instead of reducing it, which is incorrect.


Impact

  • The system assumes a higher credit capacity than it actually has when debt is positive

  • If negative debt reduces credit capacity, markets may be restricted from using their full potential credit


Recommendation

Deduct debt from delegated credit before returing:

function getCreditCapacityUsd(
UD60x18 delegatedCreditUsdX18,
SD59x18 totalDebtUsdX18
)
internal
pure
returns (SD59x18 creditCapacityUsdX18)
{
- creditCapacityUsdX18 = delegatedCreditUsdX18.intoSD59x18().add(totalDebtUsdX18);
+ creditCapacityUsdX18 = delegatedCreditUsdX18.intoSD59x18().sub(totalDebtUsdX18);
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 10 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Market::getCreditCapacityUsd overestimates the credit capacity (it adds instead of substracting)

Support

FAQs

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

Give us feedback!