In `RockPaperScissors.sol` contract in function createGameWithToken you are using transferFrom instead of safeTransferFrom.
TransferFrom does not revert on failure. This means if the transferFrom fails, the function will continue like nothing happened, without a revert.
Even though you are checking if the msg.sender has the winningToken before executing transferFrom.
This is not enough, because the msg.sender could be a smart contract which did not approve his winningToken to you. This means the transferFrom will fail due to insufficient approval.
Same for function `joinGameWithToken`.
Users are able to call `createGameWithToken` without actually having the token.
Manual review
Use safeTransferFrom from Openzeppelin SafeERC20 library.
WinningToken inherits OpenZeppelin's standard ERC20 implementation, where transferFrom already reverts on insufficient allowance or balance
WinningToken inherits OpenZeppelin's standard ERC20 implementation, where transferFrom already reverts on insufficient allowance or balance
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.