When fundContest() transfers tokens to the Pot, it records totalRewards as the funded amount. However, with fee-on-transfer tokens, the Pot receives fewer tokens than totalRewards due to the transfer fee deducted during transferFrom().
The Pot's remainingRewards is set to totalRewards in its constructor, creating a mismatch between the actual token balance and the internal accounting. Later claims will revert when the balance runs out before all players have claimed.
Likelihood:
Any contest created with a fee-on-transfer token (PAXG, STA, SAFEMOON, or USDT with fee activated) triggers this insolvency.
The owner may not be aware that a token charges transfer fees, especially since USDT has a fee mechanism that is currently set to 0 but can be activated at any time.
Impact:
The Pot becomes insolvent: it holds fewer tokens than remainingRewards indicates.
Later players who call claimCut() will have their transactions revert because the Pot's token balance is insufficient.
The last claimants are effectively robbed of their rewards while early claimants get paid in full — first-come-first-served drain.
The following scenario demonstrates that when a fee-on-transfer token is used, the Pot receives fewer tokens than its internal remainingRewards tracking expects, causing the last claimants to have their transactions revert due to insufficient token balance.
Add a balance-before-after check in fundContest() to verify the Pot actually received the full totalRewards amount. If the actual received amount is less (due to a transfer fee), the transaction reverts, preventing the creation of an insolvent Pot.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.