Tadle

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

The code logic is inconsistent between different sections

Summary

In the closeBidTaker() function, the protocol requires that offerInfo.offerStatus must be OfferStatus.Settled. However, later in the code, the protocol also considers the case where offerInfo.offerStatus == OfferStatus.Virgin. These two conditions are contradictory.

Vulnerability Details

In the closeBidTaker() function, the protocol checks that offerInfo.offerStatus must be OfferStatus.Settled.

if (offerInfo.offerStatus != OfferStatus.Settled) {
revert InvalidOfferStatus();
}

However, when offerInfo.usedPoints > offerInfo.settledPoints, the protocol also considers the case where offerInfo.offerStatus == OfferStatus.Virgin.

if (offerInfo.usedPoints > offerInfo.settledPoints) {
if (offerInfo.offerStatus == OfferStatus.Virgin) {
collateralFee = OfferLibraries.getDepositAmount(
offerInfo.offerType,
offerInfo.collateralRate,
offerInfo.amount,
true,
Math.Rounding.Floor
);
} else {

Impact

These two pieces of logic are contradictory and create a design conflict.

Tools Used

Recommendations

It is recommended to address this situation.

Updates

Lead Judging Commences

0xnevi Lead Judge about 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.