whenPoolNotPaused gates both stake() and contributeBonus(), blocking new
inflows during an emergency pause. withdraw() has no such modifier, so
principal exits remain possible in any withdraw-allowed registry state even
while the pool is paused.
Likelihood:
Only surfaces during an active pause combined with a withdraw-eligible
registry state — a narrow, admin-triggered window, not attacker-chosen.
Note: many protocols pause entries but deliberately leave exits open to
avoid trapping user funds, so this asymmetry may be intentional rather than
an oversight — worth confirming with the team.
Impact:
If pause is meant to freeze all pool activity during an incident (e.g. a
suspected accounting bug or malicious registry), stakers can still exit
and change totalEligibleStake mid-incident, undermining the pause's
purpose.
No funds are stolen or misdirected — worst case is the pause control being
less comprehensive than its sibling checks suggest.
This shows a paused pool still allowing a full withdrawal, since withdraw()
never checks the paused state that blocks stake() and contributeBonus().
Note: only apply if pause is intended to halt all pool activity. If exits
should remain open during pause by design, this is not a bug — worth a quick
confirmation before submitting.
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.