Normal behaviour : Participants deposit assets, receive vault shares (BTT), choose a team and—if their team wins—they withdraw a proportional share of the final pooled assets.
problem: The contract records a participant’s chosen country and the user’s shares at join time, but final payout logic uses the user’s current balance of BTT (and totalWinnerShares is compiled from stored per-user values that can be manipulated). This allows a participant to transfer their BTT shares to any other address after joinEvent() and before setWinner(); the recipient can then call withdraw() and claim rewards that should belong to the transferor.
Likelihood:
Reason 1 // Describe WHEN this will occur (avoidThis attack can be executed by any participant after calling joinEvent() and before setWinner().
No special permissions are required; the attacker only needs to hold and transfer BTT using "if" statements)
Impact:
A single attacker can consolidate many participants’ shares by acquiring/transferring BTT and then drain a disproportionately large portion (potentially the entire) prize pool.
Financial loss for honest participants and complete break of payout fairness.Impact 1
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.