Root: The code only triggers Buy-Now when the incoming msg.value ≥ buyNowPrice. If an existing highest bid already ≥ buyNowPrice, the auction does not settle automatically.
Impact: Auctions can remain open even though the buy-now threshold is met, enabling griefing, race conditions, and user confusion; revenue timing and fairness are affected.
In a buy-now auction, once the current price reaches the buy-now threshold, the sale should finalize immediately: the NFT transfers to the top bidder and the seller receives proceeds.
Here, buy-now logic runs only when the current bid call provides msg.value ≥ buyNowPrice. If a previous bid already exceeded buyNowPrice, the auction stays open until someone calls takeHighestBid/settleAuction, contrary to buy-now expectations.
Likelihood:
Reason 1 // As bids climb, it’s common for some bid to cross the buy-now threshold before a final buy-now “click.”
Reason 2 // Multiple users interact concurrently; the condition “previous ≥ buyNow” will frequently arise.
Impact:
Impact 1 // Auction remains open after buy-now is effectively reached, enabling sniping or strategic delays.
Impact 2 // UX/reputation hit: buyers expect immediate settlement upon reaching buy-now; analytics and bots may misinterpret state.
Auto-settle whenever either the existing highest bid or the incoming bid meets/exceeds buyNowPrice:
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.