transfer / transferFrom Usage (Missing Return Value Check) in Multiple FunctionsThe protocol performs ERC20 token transfers using direct calls to transfer() and transferFrom() without verifying their return values.
Some non-standard ERC20 tokens — such as Tether (USDT) — do not revert on failure. Instead, they return false. If the return value is not checked, execution continues even when the transfer fails.
This results in silent transfer failures and inconsistent protocol state across multiple locations in the system.
ContestManager::fundContest()If transferFrom() returns false, the function does not revert, and the contest may appear funded while no tokens were transferred.
Contest remains unfunded
Protocol accounting inconsistency
Pot::closePot()If transfer() silently fails:
Manager may not receive funds
Execution continues as if successful
This may lead to incorrect distribution logic.
Pot::_transferReward()If transfer fails:
Player does not receive reward
Contract does not detect failure
Funds may remain locked in contract
The protocol directly calls:
transfer()
transferFrom()
without checking the returned boolean value.
This breaks compatibility with non-standard ERC20 tokens that return false instead of reverting.
Occurs when a non-standard ERC20 token is used.
The protocol allows arbitrary ERC20 selection.
Silent funding failure
Reward distribution failure
Locked funds
Denial of service for contest participants
Severe trust damage
Use OpenZeppelin’s SafeERC20 library to ensure safe token transfers.
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.