FoundrySolidityLayer 2
7.25 ETH
Submission Details
Impact: low
Likelihood: low

Pausing only blocks deposits and does not stop the time based lifecycle or the exit paths

Author Revealed upon completion

The pause control is applied to only two functions, stake and contributeBonus, plus pause itself. These same two functions are also the ones bounded by expiry, because each reverts once block.timestamp >= expiry.

modifier whenPoolNotPaused() {
if (paused()) revert PoolPaused();
_;
}
@> function stake(uint256 amount) external nonReentrant whenPoolNotPaused {
...
@> if (block.timestamp >= expiry) revert StakingClosed();
...
}
@> function contributeBonus(uint256 amount) external nonReentrant whenPoolNotPaused {
...
@> if (block.timestamp >= expiry) revert StakingClosed();
...
}

Because the pause and the expiry check both sit on the same two functions, expiry is the only timer that has a real interaction with the pause. While the pool is paused, users cannot stake and cannot contribute bonus. At the same time expiry keeps moving toward its fixed value and is never extended. So every second spent paused is a second removed from the deposit window, and that time is not given back. If a pause lasts until after expiry, the deposit window can be fully consumed, and after unpausing users still cannot deposit because the block.timestamp >= expiry check now fails on its own.

Recommendation: make clear in the documentation that a pause only blocks new stake and new bonus, that it does not stop resolution, claims, or withdrawals, and that it does not stop or extend any timer. State plainly that expiry keeps running during a pause, so the deposit window is reduced by the paused duration and is not recovered. If preserving the full deposit window matters, consider a mechanism that records how long the pool was paused and extends expiry by that duration, keeping in mind that expiry is currently locked after the first stake, so any such extension would need its own controlled path rather than the existing sponsor setter.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!