Description:
The Listing struct stores price as uint32, with a maximum value of approximately 4,294 USDC (4,294,967,295 / 1e6). Both list() and updatePrice() accept uint32 _price, and the test suite casts uint256 values directly: nftDealers.list(_tokenId, uint32(_price)). Any price above ~4,294 USDC silently truncates, setting a completely different (lower) price than the seller intended.
Impact: A seller pricing an NFT at, say, 5,000 USDC would have their price silently set to 5000e6 % 2^32 ≈ 705,032,704, i.e., ~705 USDC — losing ~4,295 USDC of sale proceeds.
Recommended Mitigation: Change the price field to uint256:
Proof of Concept (Forge):
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.
The contest is complete and the rewards are being distributed.