yash/feat/pausable-until#382
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit de8e044. Configure here.
| function _requireNotPaused() internal view override { | ||
| _requireNotPausedUntil(); | ||
| super._requireNotPaused(); | ||
| } |
There was a problem hiding this comment.
Override blocks full-pause escalation during timed pause
Medium Severity
The _requireNotPaused override routes through _requireNotPausedUntil(), which also gates OZ's internal _pause() (since it carries a whenNotPaused modifier). This means pauseContract() reverts while pause-until is active, preventing the PROTOCOL_PAUSER from escalating a time-limited pause to a full indefinite pause. Contracts with custom pause implementations (e.g., LiquidityPool, PriorityWithdrawalQueue) don't have this limitation because their pauseContract() sets paused = true directly. This creates inconsistent emergency-pause behavior across the protocol.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit de8e044. Configure here.


Note
High Risk
Touches pausing and role-gated control paths across many core contracts (deposits/withdrawals/redemptions/rate limiting), so miswiring
_requireNotPausedor role assignments can halt protocol operations or weaken emergency controls.Overview
Adds a new
PausableUntilutility (namespaced storage, 1-day max duration + per-pauser cooldown) and integrates it into multiple contracts sowhenNotPausedchecks also block during a timed pause.Exposes
pauseContractUntil()/unpauseContractUntil()acrossLiquidityPool,Liquifier,EtherFiNodesManager,EtherFiRateLimiter,EtherFiRedemptionManager,PriorityWithdrawalQueue,WithdrawRequestNFT,WeETHWithdrawAdapter, andCumulativeMerkleRewardsDistributor, with newRoleRegistryrolesPAUSE_UNTIL_ROLEandUNPAUSE_UNTIL_ROLEand interface updates.Refactors
Liquifieraccess control away from localadmins/pausersmappings toRoleRegistryroles (LIQUIFIER_ADMIN_ROLE,LIQUIFIER_SENDER_ROLE,PROTOCOL_PAUSER/UNPAUSER), and removes the scan-completion gate fromWithdrawRequestNFT.unPauseContract(); adds extensive tests for timed pause behavior and role requirements (including a newPausableUntil.t.soland adapter tests).Reviewed by Cursor Bugbot for commit de8e044. Bugbot is set up for automated code reviews on this repo. Configure here.