Normal Behavior: Each participant’s voting power and potential winnings should be based only on their deposited amount (stakedAsset[msg.sender]). When calculating totalWinnerShares, the vault should count each user’s actual staked shares.
Specific Issue:
In joinEvent(), the contract uses balanceOf(msg.sender) instead of stakedAsset[msg.sender] to determine the participant’s shares.
Since balanceOf() reflects all shares minted plus any extra tokens indirectly affecting the vault balance, users can manipulate their balanceOf() by directly transferring ERC-20 tokens to the vault.
This inflates totalWinnerShares, making the payout ratio in withdraw() unfair — honest users get less, and manipulators get more.
Likelihood:
High — Any user can perform this action b calling the deposit() then calling joinEvent()which leads to update of participationshare() whicg affects the value of the TotalWinnershare().
Impact:
Incorrect totalWinnerShares: Skews the reward distribution formula.
Unfair withdrawals: Honest participants receive less payout.
Economic loss: Vault payouts become unbalanced, leading to permanent loss of funds for fair users.
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.