#Risk
Severity: Critical
Likelihood: High (common auction scenario).
Impact: Complete asset loss + protocol unusable for affected listings.
#Description
The auction settlement logic fails to handle the case where the highest bid is below the seller’s minimum price.
The function settleAuction() — the only path to finalize an auction — will always revert in this case, leaving both the NFT and the bidder’s funds permanently locked inside the contract.
Because no alternative resolution function exists, neither the seller nor the bidder can recover their assets, creating an unrecoverable deadlock.
#Root Cause
In settleAuction(), a strict require enforces that the highest bid must be greater than or equal to the minimum price.
Root Cause in the codebase with @> marks to highlight the relevant section:
State Mutation Constraint:
Since settleAuction() is the only function available after an auction timer expires, and it reverts when minPrice is not met, the protocol provides no escape path to refund funds or return the NFT.
Seller: Permanently loses their NFT.
Bidder: Permanently loses their Ether.
Protocol: Auction remains unresolved, undermining core functionality.
#PoC
Seller A lists NFT #42 with minPrice = 1 ETH.
Bidder B places a bid of 0.8 ETH.
Auction ends after 15 minutes.
Anyone calls settleAuction(42).
Transaction reverts: 0.8 ETH < 1 ETH.
Result:
settleAuction() is blocked.
unlistNFT() cannot be called because a bid exists.
takeHighestBid() cannot be called because bid < minPrice.
➡️ Both assets remain locked in the contract forever.
#Recommended Mitigation
Introduce a function to handle unsuccessful auctions by refunding the bidder and returning the NFT to the seller.
Add a unit test to ensure correct behavior:
Scenario:
Seller lists NFT with minPrice = 1 ETH.
Bidder places bid of 0.8 ETH.
Auction expires.
Call cancelUnsuccessfulAuction().
Expected Outcome:
NFT returned to seller.
Bidder refunded.
AuctionCancelled event emitted.
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.