Tadle

Tadle
DeFiFoundry
27,750 USDC
View results
Submission Details
Severity: low
Invalid

error in the Collateral Fee Calculation Logic

Summary

The function checks for offerInfo.offerStatus == OfferStatus.Virgin in the collateral fee calculation. However, earlier in the function, there's a check that requires the offer status to be Settled.

Vulnerability Details

/**
* @notice Close bid taker
* @dev caller must be stock authority
* @dev stock type must Bid
* @dev offer status must be Settled
* @param _stock stock address
*/
uint256 collateralFee;
if (offerInfo.usedPoints > offerInfo.settledPoints) {
if (offerInfo.offerStatus == OfferStatus.Virgin) {
collateralFee = OfferLibraries.getDepositAmount(
offerInfo.offerType,
offerInfo.collateralRate,
offerInfo.amount,
true,
Math.Rounding.Floor
);
} else {
uint256 usedAmount = offerInfo.amount.mulDiv(
offerInfo.usedPoints,
offerInfo.points,
Math.Rounding.Floor
);
collateralFee = OfferLibraries.getDepositAmount(
offerInfo.offerType,
offerInfo.collateralRate,
usedAmount,
true,
Math.Rounding.Floor
);
}
}

The function checks for offerInfo.offerStatus == OfferStatus.Virgin in the collateral fee calculation. However, earlier in the function, there's a check that requires the offer status to be Settled. This means that the condition offerInfo.offerStatus == OfferStatus.Virgin will never be true, making the first branch of the collateral fee calculation unreachable.

Impact

The first branch of the collateral fee calculation will never be executed.

Tools Used

Manual Review

Recommendations

Remove the check for Virgin status in the collateral fee calculation, or adjust the earlier offer status check to allow for both Settled and Virgin statuses, if that's the intended behavior.

Updates

Lead Judging Commences

0xnevi Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
Assigned finding tags:

[invalid] finding-PreMarkets-closeBidTaker-Virgin-Settled-unreachable

Borderline informational/low severity, taker bid offers can only be closed after settlement by original makers, so the check for `Settled` offer status is correct but the initial `if` block is dead code and will never be reached i.e., even if original maker offer was not settled, this issue cannot be exploited. Additionally, makers are incentivized to settle original offers to earn maker bonuses from subsequent trades from the original maker offers by takers. Some issues such as 612, 1774 and 1775 have no impact described but I am duplicating anyways since I am invalidating this issue. Assigning as informational severity since I believe this can be seen as simply a waste of gas and confusing code logic.

Support

FAQs

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

Give us feedback!