In collectUsdcFromSelling(), fees are "transferred" from the contract to
itself. The USDC balance is unchanged — no fees are actually segregated. When
withdrawFees() later sends totalFeesCollected to the owner, it draws from
other users' funds (collateral and sale proceeds).
Likelihood:
Triggered on every collect call. The self-transfer is
inherent to the code path.
Impact:
totalFeesCollected grows but the contract's balance doesn't
increase by fees. withdrawFees() depletes funds that belong to sellers and
minters.
The self-transfer moves zero net USDC. The accounting variable
totalFeesCollected inflates. When the owner withdraws, funds come from other
users' collateral and pending proceeds.
Remove the self-transfer. Fees remain in the contract naturally; only send the
seller's amount out.
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.