Missing token transfer allows user to never lose any tokens.
goOnStageOrBattle and _battle functions do not transfer the challenger's credTokens for bet. Attacker can use this missing transfer in a way such that attacker does not give RapBattle contract allowance. Without the allowance, RapBattle contract cannot transfer credTokens to winner if defender wins and the transaction will revert due to the line given below.
But if, attacker wins the battle, he can get defender's credTokens from defenderBet as defender has already given RapBattle contract allowance to transfer his tokens. This way, challenger never loses any credTokens irrespective of the result of Rap Battle, whether he wins or loses.
If the attacker loses the bet, he will not lose credTokens.
Defender can never win.
Battle can only proceed further when attacker wins the battle and gain the credTokens.
Manual Review
Add the below code in goOnStageOrBattle function -
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.