Beginner FriendlyFoundryNFT
100 EXP
View results
Submission Details
Severity: low
Valid

Inconsistent logic used in `RapBattle` Battle event emitter, causing loser to be winner emitted off-chain

Description:
there are different logic used between event emitter Battle and logic function for choosing winner:

RapBattle.sol

@> emit Battle(msg.sender, _tokenId, random < defenderRapperSkill ? _defender : msg.sender);
.
.
.
// If random <= defenderRapperSkill -> defenderRapperSkill wins, otherwise they lose
@> if (random <= defenderRapperSkill) {

Impact:
if the random value is equal to defenderRapperSkill, there would be 2 winner:

  • offchain winner : challenger

  • onchain winner : defender

Recommended Mitigation:
use consistent logic for emitted event and function logic.
Below are example of using the function logic and correcting the emitted event:

RapBattle.sol

- emit Battle(msg.sender, _tokenId, random < defenderRapperSkill ? _defender : msg.sender);
+ emit Battle(msg.sender, _tokenId, random <= defenderRapperSkill ? _defender : msg.sender);
.
.
.
// If random <= defenderRapperSkill -> defenderRapperSkill wins, otherwise they lose
if (random <= defenderRapperSkill) {
Updates

Lead Judging Commences

inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Validated
Assigned finding tags:

Contradictory battle result event

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.