Part 2

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

`totalAssetsMinusVaultDebtX18` <= 0 is possible in `getVaultCreditCapacity`.

Summary

totalAssetX18 - vaultDebtInAssetsX18 can be equal to or less than 10 ** uint256(decimalOffset).
In that case, this breaks the assumption of the protocol that totalAssetsMinusVaultDebtX18 > 0.

SD59x18 totalAssetsMinusVaultDebtX18 =
totalAssetsX18.add(sd59x18(int256(10 ** uint256(decimalOffset)))).sub(vaultDebtInAssetsX18);
// @audit It may revert here or return 0
uint256 totalAssetsMinusVaultDebt = vault.collateral.convertSd59x18ToTokenAmount(totalAssetsMinusVaultDebtX18);

Impact

  1. If the return value, totalAssetsMinusVaultDebt is 0, VaultRouterBranch.getVaultAssetSwapRate will revert with a divide-by-zero error.

  2. If totalAssetsMinusVaultDebtX18 is lower than zero, amountX18.intoUint256() will revert.

Tools Used

Manual

Recommendations

SD59x18 totalAssetsMinusVaultDebtX18 =
totalAssetsX18.add(sd59x18(int256(10 ** uint256(decimalOffset)))).sub(vaultDebtInAssetsX18);
+ if (totalAssetsMinusVaultDebtX18.lte(0)) {
+ revert InvalidValutCreditCapacity();
+ }
Updates

Lead Judging Commences

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

When totalAssetsMinusVaultDebtX18 is negative `convertSd59x18ToTokenAmount` reverts, making `getVaultCreditCapacity` revert, making a couple of core functions revert

Support

FAQs

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