Every token movement in the protocol uses the raw return value of IERC20.transfer / transferFrom without checking it:
An ERC20 that signals failure by returning false instead of reverting will make these calls appear to succeed while moving no tokens. The consequences are silent and state-corrupting:
In claimCut, the player's allocation is zeroed (playersToRewards[player] = 0) and remainingRewards is decremented before _transferReward. If the transfer returns false, the player's reward is permanently lost — their allocation is gone but they received nothing.
In closePot, a failed manager-cut or claimant transfer is ignored, so the accounting (remainingRewards, the manager's expectation) silently diverges from the tokens actually moved.
In fundContest, a transferFrom that returns false leaves the pot marked as funded (contestToTotalRewards) while holding no tokens; later claimCut/closePot transfers then revert on insufficient balance.
Impact: Medium. Silent loss of a claimant's reward and corrupted pot accounting on any token that returns false rather than reverting.
Likelihood: Low–Medium. The contest scope states "Standard ERC20 Tokens Only," which reduces exposure — but a number of widely-used, nominally-standard tokens do not revert on failed transfers, and the code uses the same unchecked pattern in the critical claimCut path where state is updated before the transfer.
Expected: a failed transfer reverts the whole claim so the allocation is preserved. Actual: the claim succeeds, the allocation is zeroed, and the reward is gone.
Use OpenZeppelin SafeERC20 for every token movement, which reverts when the token returns false (or returns no data unexpectedly):
safeTransfer/safeTransferFrom revert on a false or malformed return, so a failed transfer rolls back the state changes (the allocation stays intact and can be re-claimed) instead of silently losing funds.
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.