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.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.