All i_token.transfer() and i_token.transferFrom() calls across Pot.sol and ContestManager.sol ignore the boolean return value. The ERC20 standard does not require reverting on failure — tokens such as USDT return false instead. In claimCut(), state changes (playersToRewards zeroed, remainingRewards decremented, claimants pushed) occur before the transfer. A silent false leaves the contract believing the player was paid when they received nothing, and the player has no recourse to re-claim.
Likelihood:
The protocol explicitly targets "Standard ERC20 Tokens Only" — USDT is the most widely used ERC20 and returns false instead of reverting on failure.
Any future token added to a contest that follows the pre-EIP-20 return-value pattern will silently fail on every transfer.
Impact:
A player's reward is zeroed out and they are added to claimants, but they receive nothing — the tokens remain locked in the Pot with no re-claim path.
The manager can appear to have closed and paid out a contest while players received nothing, making the bug invisible to on-chain state inspection.
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.