The pool sponsor can pause and unpause the pool at any time via pause() and unpause(), both gated to onlyOwner. During a pause, stake() and contributeBonus() revert, but withdraw() is unaffected. This is documented behavior in README.md.
The sponsor, who can also be a staker, can pause the pool during the active staking window to prevent new stakers from joining. Because the bonus share formula divides each staker's score by globalScore (derived from snapshotTotalStaked at resolution time), fewer stakers in the pool means a larger bonus share for each existing staker — including the sponsor. The sponsor gains bonus tokens at the expense of stakers who were blocked from entering.
Likelihood:
The attack requires the sponsor to act in good faith. The sponsor is an explicitly trusted actor per DESIGN.md §10 and README.md. No permissionless attacker can call pause().
The sponsor must also be a staker (or collude with an existing staker) to benefit. A sponsor who only contributes bonus and does not stake gains nothing from this.
Impact:
Existing stakers (including the sponsor-as-staker) receive a disproportionately large share of the bonus pool. In the PoC, the sponsor gains 1,500 tokens above their fair share.
Stakers who were blocked during the pause lose the opportunity to participate. They lose no deposited funds — they never deposited — but the bonus pool is distributed among fewer participants than intended.
No deposited principal is at risk. The bonus pool is redistributed within the contract, not extracted to an external address.
Test output confirmed:
The most targeted fix is to extend the staking window by the total cumulative pause duration, so that stakers blocked during a pause can still join after unpause. This preserves the emergency-pause capability while neutralizing the bonus inflation side effect.
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.
The contest is complete and the rewards are being distributed.