Skip to content

Commit 7fa2008

Browse files
committed
✨ staking: make harvest and claim pausable
1 parent ee06fc6 commit 7fa2008

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

contracts/StakedEXA.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ contract StakedEXA is
275275
return rawClaimable_ > claimedAmountProportion ? rawClaimable_ - claimedAmountProportion : 0;
276276
}
277277

278-
function harvest() public {
278+
function harvest() public whenNotPaused {
279279
Market memMarket = market;
280280
address memProvider = provider;
281281
uint256 assets = Math.min(
@@ -298,7 +298,7 @@ contract StakedEXA is
298298
return rewardsTokens;
299299
}
300300

301-
function claim_(IERC20 reward) internal {
301+
function claim_(IERC20 reward) internal whenNotPaused {
302302
uint256 time = block.timestamp * 1e18 - avgStart[msg.sender];
303303
if (time <= minTime * 1e18) return;
304304

test/StakedEXA.t.sol

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,6 +1634,46 @@ contract StakedEXATest is Test {
16341634
stEXA.permitAndDeposit(assets, BOB, Permit(assets, block.timestamp, v, r, s));
16351635
}
16361636

1637+
function testPausableClaim() external {
1638+
uint256 assets = 1_000e18;
1639+
exa.mint(address(this), assets);
1640+
stEXA.deposit(assets, address(this));
1641+
1642+
address pauser = address(0x1);
1643+
stEXA.grantRole(stEXA.PAUSER_ROLE(), pauser);
1644+
1645+
vm.prank(pauser);
1646+
stEXA.pause();
1647+
1648+
vm.expectRevert(Pausable.EnforcedPause.selector);
1649+
stEXA.claimAll();
1650+
1651+
vm.expectRevert(Pausable.EnforcedPause.selector);
1652+
stEXA.claim(providerAsset);
1653+
1654+
vm.prank(pauser);
1655+
stEXA.unpause();
1656+
1657+
stEXA.claimAll();
1658+
stEXA.claim(providerAsset);
1659+
}
1660+
1661+
function testPausableHarvest() external {
1662+
address pauser = address(0x1);
1663+
stEXA.grantRole(stEXA.PAUSER_ROLE(), pauser);
1664+
1665+
vm.prank(pauser);
1666+
stEXA.pause();
1667+
1668+
vm.expectRevert(Pausable.EnforcedPause.selector);
1669+
stEXA.harvest();
1670+
1671+
vm.prank(pauser);
1672+
stEXA.unpause();
1673+
1674+
stEXA.harvest();
1675+
}
1676+
16371677
function minMaxWithdrawAllowance() internal view returns (uint256) {
16381678
return Math.min(market.convertToAssets(market.allowance(PROVIDER, address(stEXA))), market.maxWithdraw(PROVIDER));
16391679
}

0 commit comments

Comments
 (0)