When a participant deposits multiple times before the event starts, the vault should accumulate their stake so refunds and eligibility checks reflect the sum of all deposits.
In deposit(...), the contract overwrites the previous stake instead of accumulating it. As a result, a user who deposits multiple times will have only the last deposit amount recorded in stakedAsset, breaking refunds (cancelParticipation) and checks that rely on the stake value.
Likelihood: Medium
Participants often top‑up deposits (UX retries, incremental deposits). Each subsequent deposit will wipe the earlier recorded stake.
Scripts or bots splitting deposits into chunks (common in testing/CTF) will trigger this behavior immediately.
Impact: Medium
Under‑refund: On cancelParticipation(), the user receives only the last stake instead of the total of all deposits, losing funds.
Eligibility/accounting errors: Logic that checks stakedAsset[msg.sender] to gate joinEvent() or compute totals will read an incorrect (too small) amount.
Accumulate stake rather than overwriting.
Vault tracks only a single deposit slot per user and overwrites it on every call instead of accumulating the total.
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.