By design, once an order’s deadline passes, it cannot be filled:
However, the contract does not automatically cancel or refund expired orders. The order’s isActive
flag remains true
indefinitely. In other words, if the seller (who is a regular user) forgets to call cancelSellOrder
, the locked tokens remain in the contract forever, inaccessible. This is unlike a time-lock or vesting pattern, where after a deadline the beneficiary can withdraw funds.
Likelihood: High
Expiry is likely to be reached (max 3 days), and users may neglect to cancel.
There’s no automated cleanup or public mechanism to reclaim expired orders; only the original seller can call cancelSellOrder
.
Impact: Medium
Sellers may lose access to their tokens after expiration if they fail to cancel. This is essentially a denial-of-access/loss for users. If multiple orders expire without cancellation, significant funds could become trapped.
This cancelExpiredOrder function allows the seller (or any user) to reclaim tokens after the deadline, similar to a timelock withdrawal. It prevents tokens from remaining indefinitely trapped when orders expire.
By design only `seller` can call `cancelSellOrder()` on their `order`. But when an `order` expires, and the `seller` doesn't have access to the protocol, the expired `order `should be be able to be cancelled by an `admin`.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.