Unchecked return value of i_token.transfer() in _transferReward silently fails for non-standard ERC20s
_transferReward calls i_token.transfer() without checking its return value. Some ERC20 tokens (e.g. USDT) return false on failure instead of reverting. The contract updates internal state — zeroing playersToRewards and decrementing remainingRewards — before the transfer, so a silent failure leaves the player with no tokens and no ability to retry.
Likelihood:
Occurs whenever a non-standard ERC20 token that returns false instead of reverting is used
The protocol accepts any IERC20 token, making this a realistic deployment scenario
Impact:
Players permanently lose their rewards with no recourse
Contract accounting becomes corrupted with no way to detect or recover
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.