Skip to content

Commit

Permalink
🔥 staking: drop ref time and excess factor setters
Browse files Browse the repository at this point in the history
  • Loading branch information
itofarina committed Jul 11, 2024
1 parent 39797f6 commit 5a2440f
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 132 deletions.
142 changes: 69 additions & 73 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -449,91 +449,87 @@ StakedEXATest:invariantIndexUpOnly() (runs: 256, calls: 128000, reverts: 0)
StakedEXATest:invariantNoDuplicatedReward() (runs: 256, calls: 128000, reverts: 0)
StakedEXATest:invariantRewardsUpOnly() (runs: 256, calls: 128000, reverts: 0)
StakedEXATest:invariantShareValueIsOne() (runs: 256, calls: 128000, reverts: 0)
StakedEXATest:testAlreadyListedError() (gas: 41740)
StakedEXATest:testAvgIndex(uint256[3],uint256[2]) (runs: 256, μ: 1211447, ~: 1247428)
StakedEXATest:testAvgStartTime(uint256[3],uint256[2]) (runs: 256, μ: 1197754, ~: 1233735)
StakedEXATest:testBalanceOfDeposit(uint80) (runs: 256, μ: 355829, ~: 362889)
StakedEXATest:testBalanceOfWithdraw(uint256) (runs: 256, μ: 60613, ~: 60620)
StakedEXATest:testCanChangeRewardsDurationWhenDisabled() (gas: 168281)
StakedEXATest:testClaimAfterHarvest() (gas: 838729)
StakedEXATest:testClaimAndUnstake() (gas: 1478790)
StakedEXATest:testAlreadyListedError() (gas: 41631)
StakedEXATest:testAvgIndex(uint256[3],uint256[2]) (runs: 256, μ: 1207225, ~: 1246894)
StakedEXATest:testAvgStartTime(uint256[3],uint256[2]) (runs: 256, μ: 1193598, ~: 1233267)
StakedEXATest:testBalanceOfDeposit(uint80) (runs: 256, μ: 355743, ~: 362801)
StakedEXATest:testBalanceOfWithdraw(uint256) (runs: 256, μ: 60525, ~: 60532)
StakedEXATest:testCanChangeRewardsDurationWhenDisabled() (gas: 168192)
StakedEXATest:testClaimAfterHarvest() (gas: 838641)
StakedEXATest:testClaimAndUnstake() (gas: 1478569)
StakedEXATest:testClaimAndWithdrawAfterRefTime() (gas: 1086141)
StakedEXATest:testClaimBeforeFirstHarvest() (gas: 540618)
StakedEXATest:testDepositEvent(uint256) (runs: 256, μ: 364687, ~: 364381)
StakedEXATest:testDepositShouldClaim(uint256[2],uint32) (runs: 256, μ: 818907, ~: 742847)
StakedEXATest:testDepositWithdrawAvgStartTimeAndIndex(uint256[3],uint256,uint256[5]) (runs: 256, μ: 1740706, ~: 1799529)
StakedEXATest:testEarnedWithTime(uint256) (runs: 256, μ: 35592, ~: 35875)
StakedEXATest:testEmergencyAdminCanPauseNotUnpause() (gas: 159060)
StakedEXATest:testExcessFactorRange() (gas: 37135)
StakedEXATest:testFinishDistributionEmitEvent() (gas: 402046)
StakedEXATest:testFinishDistributionLetsClaimUnclaimed() (gas: 1506264)
StakedEXATest:testFinishDistributionStopsEmission() (gas: 1485917)
StakedEXATest:testFinishDistributionThatAlreadyFinished() (gas: 436388)
StakedEXATest:testClaimBeforeFirstHarvest() (gas: 540574)
StakedEXATest:testDepositEvent(uint256) (runs: 256, μ: 364784, ~: 364493)
StakedEXATest:testDepositShouldClaim(uint256[2],uint32) (runs: 256, μ: 822860, ~: 742798)
StakedEXATest:testDepositWithdrawAvgStartTimeAndIndex(uint256[3],uint256,uint256[5]) (runs: 256, μ: 1742615, ~: 1799630)
StakedEXATest:testEarnedWithTime(uint256) (runs: 256, μ: 35521, ~: 35809)
StakedEXATest:testEmergencyAdminCanPauseNotUnpause() (gas: 159061)
StakedEXATest:testFinishDistributionEmitEvent() (gas: 402002)
StakedEXATest:testFinishDistributionLetsClaimUnclaimed() (gas: 1506044)
StakedEXATest:testFinishDistributionStopsEmission() (gas: 1485719)
StakedEXATest:testFinishDistributionThatAlreadyFinished() (gas: 436322)
StakedEXATest:testFinishDistributionTransfersRemainingToSavings() (gas: 111466)
StakedEXATest:testGrantRevokeEmergencyAdmin() (gas: 107326)
StakedEXATest:testGrantRevokePauser() (gas: 107213)
StakedEXATest:testHandlerClaim(uint8) (runs: 256, μ: 302433, ~: 302433)
StakedEXATest:testHandlerDeposit(uint80) (runs: 256, μ: 800016, ~: 811131)
StakedEXATest:testHandlerHarvest(uint64) (runs: 256, μ: 333455, ~: 332862)
StakedEXATest:testHandlerNotifyRewardAmount(uint64) (runs: 256, μ: 128760, ~: 124447)
StakedEXATest:testHandlerSetDuration(uint32) (runs: 256, μ: 147216, ~: 163950)
StakedEXATest:testHandlerWithdraw(uint256) (runs: 256, μ: 70039, ~: 70046)
StakedEXATest:testGrantRevokeEmergencyAdmin() (gas: 107216)
StakedEXATest:testGrantRevokePauser() (gas: 107235)
StakedEXATest:testHandlerClaim(uint8) (runs: 256, μ: 302701, ~: 302701)
StakedEXATest:testHandlerDeposit(uint80) (runs: 256, μ: 800318, ~: 810889)
StakedEXATest:testHandlerHarvest(uint64) (runs: 256, μ: 333366, ~: 332862)
StakedEXATest:testHandlerNotifyRewardAmount(uint64) (runs: 256, μ: 128714, ~: 124469)
StakedEXATest:testHandlerSetDuration(uint32) (runs: 256, μ: 147177, ~: 163906)
StakedEXATest:testHandlerWithdraw(uint256) (runs: 256, μ: 69995, ~: 70002)
StakedEXATest:testHarvest() (gas: 197912)
StakedEXATest:testHarvestAmountWithReducedAllowance() (gas: 215330)
StakedEXATest:testHarvestEffectOnRewardData() (gas: 190958)
StakedEXATest:testHarvestEffectOnRewardData() (gas: 190914)
StakedEXATest:testHarvestEmitsRewardAmountNotified() (gas: 189043)
StakedEXATest:testHarvestZero() (gas: 236747)
StakedEXATest:testInitialValues() (gas: 89162)
StakedEXATest:testInsufficientBalanceError(uint256) (runs: 256, μ: 65339, ~: 65475)
StakedEXATest:testMultipleClaimsVsOne() (gas: 25924766)
StakedEXATest:testMultipleHarvests() (gas: 462138)
StakedEXATest:testNoRewardsAfterPeriod(uint256) (runs: 256, μ: 1561373, ~: 1567865)
StakedEXATest:testInitialValues() (gas: 89074)
StakedEXATest:testInsufficientBalanceError(uint256) (runs: 256, μ: 65328, ~: 65453)
StakedEXATest:testMultipleClaimsVsOne() (gas: 25922257)
StakedEXATest:testMultipleHarvests() (gas: 462094)
StakedEXATest:testNoRewardsAfterPeriod(uint256) (runs: 256, μ: 1561357, ~: 1567513)
StakedEXATest:testNotPausingRoleError() (gas: 39503)
StakedEXATest:testNotifyRewardAmount(uint256,uint256) (runs: 256, μ: 131202, ~: 131131)
StakedEXATest:testNotifyRewardWithUnderlyingAsset() (gas: 502167)
StakedEXATest:testOnlyAdminEnableReward() (gas: 1196209)
StakedEXATest:testOnlyAdminFinishDistribution() (gas: 190273)
StakedEXATest:testNotifyRewardAmount(uint256,uint256) (runs: 256, μ: 131151, ~: 131086)
StakedEXATest:testNotifyRewardWithUnderlyingAsset() (gas: 502122)
StakedEXATest:testOnlyAdminEnableReward() (gas: 1195947)
StakedEXATest:testOnlyAdminFinishDistribution() (gas: 190229)
StakedEXATest:testOnlyAdminNotifyRewardAmount() (gas: 204586)
StakedEXATest:testOnlyAdminSetProvider() (gas: 143679)
StakedEXATest:testOnlyAdminSetProviderRatio() (gas: 143317)
StakedEXATest:testOnlyAdminSetRewardsDuration() (gas: 152934)
StakedEXATest:testOnlyAdminSetSavings() (gas: 141010)
StakedEXATest:testPausable() (gas: 1156205)
StakedEXATest:testPausableClaim() (gas: 639452)
StakedEXATest:testPausableHarvest() (gas: 344637)
StakedEXATest:testPauserCanPauseUnpause() (gas: 157810)
StakedEXATest:testOnlyAdminSetProvider() (gas: 143570)
StakedEXATest:testOnlyAdminSetProviderRatio() (gas: 143217)
StakedEXATest:testOnlyAdminSetRewardsDuration() (gas: 152956)
StakedEXATest:testOnlyAdminSetSavings() (gas: 140988)
StakedEXATest:testPausable() (gas: 1156228)
StakedEXATest:testPausableClaim() (gas: 639652)
StakedEXATest:testPausableHarvest() (gas: 344615)
StakedEXATest:testPauserCanPauseUnpause() (gas: 157943)
StakedEXATest:testPenaltyGrowthRange() (gas: 67189)
StakedEXATest:testPenaltyThresholdRange() (gas: 37134)
StakedEXATest:testPermitAndDeposit() (gas: 373442)
StakedEXATest:testRefTimeRange() (gas: 41436)
StakedEXATest:testResetDepositAfterRefTime(uint256) (runs: 256, μ: 1015616, ~: 1015278)
StakedEXATest:testRewardAmountNotifiedEvent(uint256) (runs: 256, μ: 105824, ~: 106665)
StakedEXATest:testPermitAndDeposit() (gas: 373398)
StakedEXATest:testResetDepositAfterRefTime(uint256) (runs: 256, μ: 1015560, ~: 1015260)
StakedEXATest:testRewardAmountNotifiedEvent(uint256) (runs: 256, μ: 105811, ~: 106665)
StakedEXATest:testRewardNotListedError() (gas: 1111868)
StakedEXATest:testRewardPaidEvent(uint256,uint256) (runs: 256, μ: 808591, ~: 752582)
StakedEXATest:testRewardsAmounts(uint256) (runs: 256, μ: 1568469, ~: 1568055)
StakedEXATest:testRewardsDurationSetEvent(uint40) (runs: 256, μ: 52051, ~: 52034)
StakedEXATest:testSetDuration(uint256,uint40) (runs: 256, μ: 59013, ~: 59283)
StakedEXATest:testSetExcessFactor() (gas: 81904)
StakedEXATest:testSetMarketOnlyAdmin() (gas: 1264147)
StakedEXATest:testSetMinTime() (gas: 81993)
StakedEXATest:testSetPenaltyGrowth() (gas: 82225)
StakedEXATest:testSetPenaltyThreshold() (gas: 82022)
StakedEXATest:testSetProviderRatioOverOneError() (gas: 37267)
StakedEXATest:testSetProviderZeroAddressError() (gas: 37131)
StakedEXATest:testSetRefTime() (gas: 84032)
StakedEXATest:testSetSavingsZeroAddressError() (gas: 37284)
StakedEXATest:testTotalSupplyDeposit(uint80) (runs: 256, μ: 355322, ~: 362382)
StakedEXATest:testTotalSupplyWithdraw(uint256) (runs: 256, μ: 62061, ~: 62068)
StakedEXATest:testUntransferable(uint80) (runs: 256, μ: 374940, ~: 382901)
StakedEXATest:testWithdrawEvent(uint256) (runs: 256, μ: 521038, ~: 520716)
StakedEXATest:testWithdrawSameAmountRewardsShouldEqual(uint256,uint256) (runs: 256, μ: 1066883, ~: 1132708)
StakedEXATest:testWithdrawWithRewards(uint256) (runs: 256, μ: 874769, ~: 874447)
StakedEXATest:testRewardPaidEvent(uint256,uint256) (runs: 256, μ: 811350, ~: 868991)
StakedEXATest:testRewardsAmounts(uint256) (runs: 256, μ: 1568305, ~: 1567893)
StakedEXATest:testRewardsDurationSetEvent(uint40) (runs: 256, μ: 52052, ~: 52034)
StakedEXATest:testSetDuration(uint256,uint40) (runs: 256, μ: 58997, ~: 59238)
StakedEXATest:testSetMarketOnlyAdmin() (gas: 1264125)
StakedEXATest:testSetMinTime() (gas: 81971)
StakedEXATest:testSetPenaltyGrowth() (gas: 82247)
StakedEXATest:testSetPenaltyThreshold() (gas: 82066)
StakedEXATest:testSetProviderRatioOverOneError() (gas: 37134)
StakedEXATest:testSetProviderZeroAddressError() (gas: 37153)
StakedEXATest:testSetSavingsZeroAddressError() (gas: 37262)
StakedEXATest:testTotalSupplyDeposit(uint80) (runs: 256, μ: 355346, ~: 362404)
StakedEXATest:testTotalSupplyWithdraw(uint256) (runs: 256, μ: 61950, ~: 61957)
StakedEXATest:testUntransferable(uint80) (runs: 256, μ: 374898, ~: 382857)
StakedEXATest:testWithdrawEvent(uint256) (runs: 256, μ: 521026, ~: 520730)
StakedEXATest:testWithdrawSameAmountRewardsShouldEqual(uint256,uint256) (runs: 256, μ: 1070258, ~: 1132756)
StakedEXATest:testWithdrawWithRewards(uint256) (runs: 256, μ: 874713, ~: 874417)
StakedEXATest:testZeroRateError() (gas: 59267)
StakingPreviewerTest:testAllClaimable() (gas: 431950)
StakingPreviewerTest:testAllClaimed() (gas: 630932)
StakingPreviewerTest:testAllEarned() (gas: 317080)
StakingPreviewerTest:testAllRewards() (gas: 448808)
StakingPreviewerTest:testStaking() (gas: 502542)
StakingPreviewerTest:testAllClaimable() (gas: 431576)
StakingPreviewerTest:testAllClaimed() (gas: 630910)
StakingPreviewerTest:testAllEarned() (gas: 316706)
StakingPreviewerTest:testAllRewards() (gas: 448258)
StakingPreviewerTest:testStaking() (gas: 501992)
SwapperTest:testSwapBasic() (gas: 216831)
SwapperTest:testSwapWithAllowance() (gas: 481530)
SwapperTest:testSwapWithInaccurateSlippageSendsETHToAccount() (gas: 297968)
Expand Down
26 changes: 5 additions & 21 deletions contracts/StakedEXA.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ contract StakedEXA is

/// @notice Minimum time to stake and get rewards.
uint256 public minTime;
/// @notice Reference period to stake and get full rewards.
/// @notice Reference period to stake and get full rewards. Not possible to change after initilization.
uint256 public refTime;
/// @notice Discount factor for excess exposure.
/// @notice Discount factor for excess exposure. Not possible to change after initilization.
uint256 public excessFactor;
/// @notice Penalty growth factor.
uint256 public penaltyGrowth;
Expand Down Expand Up @@ -94,9 +94,10 @@ contract StakedEXA is

_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);

if (p.refTime == 0 || p.refTime <= p.minTime || p.excessFactor > 1e18) revert InvalidRange();
setMinTime(p.minTime);
setRefTime(p.refTime);
setExcessFactor(p.excessFactor);
refTime = p.refTime;
excessFactor = p.excessFactor;
setPenaltyGrowth(p.penaltyGrowth);
setPenaltyThreshold(p.penaltyThreshold);

Expand Down Expand Up @@ -492,22 +493,6 @@ contract StakedEXA is
emit MinTimeSet(minTime_, msg.sender);
}

/// @notice Sets the reference time to stake for full rewards.
/// @param refTime_ The new reference time.
function setRefTime(uint256 refTime_) public onlyRole(DEFAULT_ADMIN_ROLE) {
if (refTime_ < minTime || refTime_ == 0) revert InvalidRange();
refTime = refTime_;
emit RefTimeSet(refTime_, msg.sender);
}

/// @notice Sets the excess factor.
/// @param excessFactor_ The new excess factor.
function setExcessFactor(uint256 excessFactor_) public onlyRole(DEFAULT_ADMIN_ROLE) {
if (excessFactor_ > 1e18) revert InvalidRange();
excessFactor = excessFactor_;
emit ExcessFactorSet(excessFactor_, msg.sender);
}

/// @notice Sets the penalty growth factor.
/// @param penaltyGrowth_ The new penalty growth factor.
function setPenaltyGrowth(uint256 penaltyGrowth_) public onlyRole(DEFAULT_ADMIN_ROLE) {
Expand Down Expand Up @@ -557,7 +542,6 @@ contract StakedEXA is
return "mode=timestamp";
}

event ExcessFactorSet(uint256 excessFactor, address indexed account);
event MarketSet(Market indexed market, address indexed account);
event MinTimeSet(uint256 minTime, address indexed account);
event PenaltyGrowthSet(uint256 penaltyGrowth, address indexed account);
Expand Down
38 changes: 0 additions & 38 deletions test/StakedEXA.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -1462,20 +1462,6 @@ contract StakedEXATest is Test {
stEXA.notifyRewardAmount(exa, assets);
}

function testSetExcessFactor() external {
uint256 factor = 0.7e18;

address nonAdmin = address(0x1);
vm.prank(nonAdmin);
vm.expectRevert(abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, nonAdmin, 0));
stEXA.setExcessFactor(factor);

vm.expectEmit(true, true, true, true, address(stEXA));
emit StakedEXA.ExcessFactorSet(factor, address(this));
stEXA.setExcessFactor(factor);
assertEq(stEXA.excessFactor(), factor);
}

function testSetMinTime() external {
uint256 time = 1 days;

Expand Down Expand Up @@ -1518,20 +1504,6 @@ contract StakedEXATest is Test {
assertEq(stEXA.penaltyThreshold(), threshold);
}

function testSetRefTime() external {
uint256 time = 2 weeks;

address nonAdmin = address(0x1);
vm.prank(nonAdmin);
vm.expectRevert(abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, nonAdmin, 0));
stEXA.setRefTime(time);

vm.expectEmit(true, true, true, true, address(stEXA));
emit StakedEXA.RefTimeSet(time, address(this));
stEXA.setRefTime(time);
assertEq(stEXA.refTime(), time);
}

function testResetDepositAfterRefTime(uint256 assets) external {
assets = _bound(assets, 1, type(uint80).max);
uint256 start = block.timestamp * 1e18;
Expand Down Expand Up @@ -1583,16 +1555,6 @@ contract StakedEXATest is Test {
assertEq(rA.balanceOf(address(this)) - balanceBefore, rClaimable, "balanceBefore != rClaimable");
}

function testRefTimeRange() external {
vm.expectRevert(InvalidRange.selector);
stEXA.setRefTime(minTime - 1);
}

function testExcessFactorRange() external {
vm.expectRevert(InvalidRange.selector);
stEXA.setExcessFactor(1e18 + 1);
}

function testPenaltyGrowthRange() external {
vm.expectRevert(InvalidRange.selector);
stEXA.setPenaltyGrowth(100e18 + 1);
Expand Down

0 comments on commit 5a2440f

Please sign in to comment.