OrderBook

First Flight #43
Beginner FriendlySolidity
100 EXP
View results
Submission Details
Impact: low
Likelihood: high
Invalid

Duplicate code in 'OrderBook::getOrderDetailsString' function

[L-1] OrderBook::getOrderDetailsString function contains redundant logic used to determine the order status, which results in excessive gas usage

Description:
OrderBook::getOrderDetailsString function contains duplicate logic used determine the order status:

Block 1:

string memory status = order.isActive
? (block.timestamp < order.deadlineTimestamp ? "Active" : "Expired (Active but past deadline)")
: "Inactive (Filled/Cancelled)";

Block 2:

if (order.isActive && block.timestamp >= order.deadlineTimestamp) {
status = 'Expired (Awaiting Cancellation)';
} else if (!order.isActive) {
status = 'Inactive (Filled/Cancelled)';
} else {
status = 'Active';
}

These two blocks of code are equivalent except for the inactive status string ("Expired (Active but past deadline)" in block 1 vs "Expired (Awaiting Cancellation)" in block 2).
"Expired (Awaiting Cancellation)" in block 2 makes more sense in the context of protocol logic. In addition, block 2 is more readable.

Impact:
Duplicate code causes excessive gas consumption.

Recommended Mitigation:
Remove duplicate code (block 1).

@@ -233,1 +233,1 @@
- string memory status = order.isActive
+ string memory status;
@@ -234,2 +269,0 @@
- ? (block.timestamp < order.deadlineTimestamp ? "Active" : "Expired (Active but past deadline)")
- : "Inactive (Filled/Cancelled)";
Updates

Lead Judging Commences

yeahchibyke Lead Judge about 1 month ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

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