Part 2

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

Auto deleverage will be triggered when the market is in net credit

Summary

Auto deleverage will be triggered when the market is in net credit.

Vulnerability Details

In CreditDelegationBranch's withdrawUsdTokenFromMarket(), protocol calls Market's isAutoDeleverageTriggered() to determine whether the market has reached the auto deleverage start threshold, and reduces the requested USD Token amount by multiplying it by the ADL factor.

CreditDelegationBranch::withdrawUsdTokenFromMarket():

@> if (market.isAutoDeleverageTriggered(delegatedCreditUsdX18, marketTotalDebtUsdX18)) {
// if the market is in the ADL state, it reduces the requested USD
// Token amount by multiplying it by the ADL factor, which must be < 1
UD60x18 adjustedUsdTokenToMintX18 =
market.getAutoDeleverageFactor(delegatedCreditUsdX18, marketTotalDebtUsdX18).mul(amountX18);
amountToMint = adjustedUsdTokenToMintX18.intoUint256();
market.updateNetUsdTokenIssuance(adjustedUsdTokenToMintX18.intoSD59x18());
} else {

As the code comment says, auto deleverage should only be triggered when the market is in net debt.

Market::getAutoDeleverageFactor():

/// @dev IMPORTANT: This function assumes the market is in net debt. If the market is in net credit,
/// this function must not be called otherwise it will return an incorrect deleverage factor.

However, isAutoDeleverageTriggered() returns False when the market is in net debt (credit <= debt), this means auto deleverage will be triggered when the market is in net credit.

if (sdDelegatedCreditUsdX18.lte(totalDebtUsdX18) || sdDelegatedCreditUsdX18.isZero()) {
return false;
}

Impact

Auto deleverage is triggered when the market is in net credit.

Tools Used

Manual Review

Recommendations

- if (sdDelegatedCreditUsdX18.lte(totalDebtUsdX18) || sdDelegatedCreditUsdX18.isZero()) {
+ if (sdDelegatedCreditUsdX18.gt(totalDebtUsdX18) || sdDelegatedCreditUsdX18.isZero()) {
return false;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge
4 months ago
inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

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