The project documentation states each auction lasts 3 days, the smart contract should create listings with an explicit deadline and should prevent bidding after that deadline. This ensures predictable auction lifecycle, fair competition, and correct settlement timing.
In this codebase the documented 3-day auction duration is not enforced or used anywhere in the marketplace contract. There is no recorded per-listing deadline or global auction timer enforced by the bidding and settlement logic, allowing auctions to be left open indefinitely or to be settled at arbitrary times. This mismatch between docs and implementation creates a functional integrity bug.
Likelihood
Every time an NFT is listed the contract creates a listing without an enforced expiry, so auctions will routinely remain open beyond the documented 3 days.
Impact
Auctions can accept bids forever or until someone manually triggers settlement. This breaks user expectations and marketplace invariants and can allow unfair timing behavior from participants.
Below is a concise test-style PoC that demonstrates a listing continues to accept bids after 3 days.
to get best results, reduce fees to 0.* ether.
This PoC proves the absence of a time check in the bidding flow. If a deadline field were present and enforced, placeBid would revert when block.timestamp > 3 days.
Add an explicit auction duration constant, record a deadline (or endTime) when creating a listing, enforce block.timestamp <= deadline in the bidding path, and only emit AuctionSettled or allow settlement after block.timestamp > deadline. Use checks-effects-interactions and unit tests to verify the lifecycle.
Documentation for BidBeasts Marketplace is incomplete or inaccurate, potentially leading to misconfigurations or security misunderstandings.
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.