Description:
collectUsdcFromSelling(uint256 _listingId) does not mark claims as consumed. The seller for a listing can call the function multiple times because onlySeller(_listingId) remains true and there is no claimed guard/state reset for payout logic.
Impact:
Critical. If the contract has USDC liquidity (from other users/protocol flows), a seller can repeatedly drain funds beyond their legitimate proceeds.
Proof of Concept:
Recommended Mitigation:
Add explicit settlement state and one-time claim enforcement (e.g., proceedsClaimed[listingId]). Mark as claimed before transfer. Separate accounting buckets for seller proceeds and protocol fees.
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.