Status DataClose notification

Majority Games Disclosed Report

Excessive player exodus during game reschedule causes loss of rewards for remaining winners

Created date
Aug 13 2025

Target

hidden

Vulnerability Details

Overview

  • Game starts with 10 players, with rankedRewards.length = 5 where reward distribution is [4000, 2500, 1500, 1200, 800]
  • Creator decides to schedule game 30 days later.
  • 7 of the 10 players leave. There are now 3 players left, but still 5 reward spots.
  • Game proceeds as normal, oracle picks all 3 players as winners.
  • When they go to claim rewards, they get only a sum total of (40% + 25% + 15%) = 80% of the rewards pool. The remaining 20% of rewards is stuck forever, which should have been redistributed to them.
  • In the case of proportional rewards instead of fixed rewards, the entire 100% of rewards are stuck, because numberOfWinners[sessionId] == winners.length check during getReward() returns false.

The issue is straightforward so I have not included a PoC.

Fixes

We cannot force players to stay to ensure NUM_PLAYERS >= rankedRewards.length.

We need to ensure that inside startAndRevealGameQuestion() the game.numContestants is GTE the rankedRewards.length for fixed rewards, or numberOfWinners for proportional rewards.

We could also allow for the lower number of players but mutate the rewards distribution back to 100% total for the 3 winners.

Validation steps

See above.

Attachments

hidden
CommentsReport History
Comments on this report are hidden
Details
Statedisclosed
Severity
Critical
Bounty$2,007
Visibilitypartially
VulnerabilityBlockchain
Participants
hidden