Pot moves tokens with the raw ERC20 transfer and never checks the returned boolean:
The ERC20 standard allows a token's transfer to return false on failure instead of
reverting. If such a token is used, claimCut still sets playersToRewards[player] = 0
and decrements remainingRewards before/around this call, so the claim is recorded as
successful even though no tokens were actually sent. The player permanently loses their
reward. (Non-standard tokens like USDT that do not return a bool also break this call.)
Likelihood: Low — depends on the specific token configured for the pot; it bites with
non-reverting / non-standard ERC20s.
Impact: Medium — when it occurs, a player's reward is marked as claimed while they
receive nothing: a direct, unrecoverable loss of funds for that player.
Using a token whose transfer returns false without moving funds, claimCut "succeeds"
but the player gets nothing and their reward is zeroed:
Use OpenZeppelin's SafeERC20 and safeTransfer, which reverts if the transfer fails or
the token returns false:
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.