Re-Listing Overwrites Previous Seller's Uncollected Sale Proceeds : Permanent Fund Loss
After a sale, the original seller's address, price, and collateral reference are stored in s_listings[tokenId]. The seller is expected to call collectUsdcFromSelling to claim their proceeds.
list() uses _tokenId as the storage key and unconditionally overwrites all fields in s_listings[_tokenId]. When the new owner re-lists the same token before the previous seller collects, the original seller's data is destroyed and the onlySeller modifier blocks them permanently.
Likelihood:
This occurs during normal marketplace usage any time a buyer re-lists a purchased NFT before the previous seller collects, no malicious intent is required
On-chain transaction ordering means even a few blocks of delay between sale and collection creates a window for the overwrite
Impact:
Previous seller permanently loses their entire sale proceeds (price - fees) and minting collateral
The onlySeller modifier reverts for the original seller since the stored seller address now belongs to the new lister
No recovery mechanism exists — the funds remain trapped in the contract with no way to route them to the rightful owner
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.