Skip to content

Commit

Permalink
refactor(StakeManager): fix, review by r4bb1t
Browse files Browse the repository at this point in the history
  • Loading branch information
3esmit committed Jan 15, 2025
1 parent eab545b commit 621f316
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 77 deletions.
50 changes: 25 additions & 25 deletions .gas-report
Original file line number Diff line number Diff line change
@@ -1,62 +1,62 @@
| script/DeployRewardsStreamerMP.s.sol:DeployRewardsStreamerMPScript contract | | | | | |
|-----------------------------------------------------------------------------|-----------------|---------|---------|---------|---------|
| Deployment Cost | Deployment Size | | | | |
| 6598274 | 31554 | | | | |
| 6563714 | 31391 | | | | |
| Function Name | min | avg | median | max | # calls |
| run | 5673530 | 5673530 | 5673530 | 5673530 | 63 |
| run | 5640844 | 5640844 | 5640844 | 5640844 | 64 |


| script/DeploymentConfig.s.sol:DeploymentConfig contract | | | | | |
|---------------------------------------------------------|-----------------|-----|--------|-----|---------|
| Deployment Cost | Deployment Size | | | | |
| 0 | 7132 | | | | |
| Function Name | min | avg | median | max | # calls |
| activeNetworkConfig | 454 | 454 | 454 | 454 | 126 |
| activeNetworkConfig | 454 | 454 | 454 | 454 | 128 |


| script/UpgradeRewardsStreamerMP.s.sol:UpgradeRewardsStreamerMPScript contract | | | | | |
|-------------------------------------------------------------------------------|-----------------|---------|---------|---------|---------|
| Deployment Cost | Deployment Size | | | | |
| 3243299 | 15929 | | | | |
| 3208750 | 15766 | | | | |
| Function Name | min | avg | median | max | # calls |
| run | 2754392 | 2754392 | 2754392 | 2754392 | 3 |
| run | 2721706 | 2721706 | 2721706 | 2721706 | 3 |


| src/RewardsStreamerMP.sol:RewardsStreamerMP contract | | | | | |
|------------------------------------------------------|-----------------|--------|--------|--------|---------|
| Deployment Cost | Deployment Size | | | | |
| 2923354 | 13490 | | | | |
| 2888806 | 13327 | | | | |
| Function Name | min | avg | median | max | # calls |
| MAX_LOCKUP_PERIOD | 360 | 360 | 360 | 360 | 4 |
| MAX_MULTIPLIER | 284 | 284 | 284 | 284 | 9 |
| MIN_LOCKUP_PERIOD | 286 | 286 | 286 | 286 | 15 |
| STAKING_TOKEN | 395 | 2003 | 2395 | 2395 | 322 |
| STAKING_TOKEN | 395 | 2003 | 2395 | 2395 | 327 |
| emergencyModeEnabled | 2442 | 2442 | 2442 | 2442 | 7 |
| enableEmergencyMode | 2485 | 19392 | 24677 | 24677 | 8 |
| getAccount | 1661 | 1661 | 1661 | 1661 | 72 |
| getStakedBalance | 2618 | 2618 | 2618 | 2618 | 1 |
| getUserTotalMaxMP | 3177 | 3177 | 3177 | 3177 | 1 |
| getUserTotalStakedBalance | 15151 | 15151 | 15151 | 15151 | 1 |
| getUserVaults | 5201 | 5201 | 5201 | 5201 | 4 |
| initialize | 115654 | 115654 | 115654 | 115654 | 65 |
| initialize | 115654 | 115654 | 115654 | 115654 | 66 |
| lastRewardTime | 362 | 1362 | 1362 | 2362 | 2 |
| leave | 59951 | 59951 | 59951 | 59951 | 1 |
| lock | 12063 | 35736 | 16480 | 78666 | 3 |
| leave | 80062 | 80062 | 80062 | 80062 | 1 |
| lock | 14238 | 42684 | 42648 | 78402 | 259 |
| mpBalanceOfUser | 10331 | 10331 | 10331 | 10331 | 1 |
| proxiableUUID | 387 | 387 | 387 | 387 | 3 |
| registerVault | 55844 | 72744 | 72944 | 72944 | 257 |
| registerVault | 55844 | 72747 | 72944 | 72944 | 261 |
| rewardEndTime | 362 | 1362 | 1362 | 2362 | 2 |
| rewardStartTime | 407 | 1407 | 1407 | 2407 | 2 |
| rewardsBalanceOf | 2942 | 6995 | 7551 | 7772 | 8 |
| setReward | 2561 | 58370 | 86462 | 105709 | 7 |
| setTrustedCodehash | 24199 | 24260 | 24199 | 26199 | 65 |
| stake | 136772 | 174383 | 181165 | 201639 | 66 |
| setTrustedCodehash | 24199 | 24259 | 24199 | 26199 | 66 |
| stake | 136772 | 179775 | 181165 | 201639 | 322 |
| totalMPAccrued | 428 | 428 | 428 | 428 | 81 |
| totalMaxMP | 362 | 362 | 362 | 362 | 81 |
| totalRewardsAccrued | 385 | 385 | 385 | 385 | 3 |
| totalRewardsSupply | 1036 | 1995 | 1817 | 6776 | 30 |
| totalStaked | 427 | 427 | 427 | 427 | 82 |
| unstake | 64233 | 65099 | 64635 | 68456 | 13 |
| unstake | 63986 | 64852 | 64388 | 68209 | 13 |
| updateAccountMP | 11712 | 17586 | 18278 | 18278 | 19 |
| updateGlobalState | 14317 | 26758 | 28737 | 28737 | 19 |
| upgradeToAndCall | 3181 | 7875 | 8438 | 10881 | 5 |
Expand All @@ -67,8 +67,8 @@
| Deployment Cost | Deployment Size | | | | |
| 256510 | 1231 | | | | |
| Function Name | min | avg | median | max | # calls |
| fallback | 711 | 7197 | 2115 | 132067 | 785 |
| implementation | 343 | 775 | 343 | 2343 | 412 |
| fallback | 711 | 7190 | 2115 | 132067 | 790 |
| implementation | 343 | 1636 | 2343 | 2343 | 929 |


| src/StakeVault.sol:StakeVault contract | | | | | |
Expand All @@ -78,14 +78,14 @@
| Function Name | min | avg | median | max | # calls |
| STAKING_TOKEN | 216 | 216 | 216 | 216 | 1 |
| emergencyExit | 36397 | 48901 | 48135 | 65235 | 7 |
| leave | 33507 | 132180 | 62118 | 370978 | 4 |
| lock | 33245 | 61849 | 50845 | 112463 | 4 |
| owner | 2339 | 2339 | 2339 | 2339 | 257 |
| register | 86993 | 103893 | 104093 | 104093 | 257 |
| stake | 33411 | 245682 | 255669 | 276191 | 67 |
| stakeManager | 368 | 368 | 368 | 368 | 257 |
| leave | 33507 | 136202 | 70163 | 370978 | 4 |
| lock | 33245 | 79178 | 79264 | 112199 | 260 |
| owner | 2339 | 2339 | 2339 | 2339 | 261 |
| register | 86993 | 103896 | 104093 | 104093 | 261 |
| stake | 33411 | 253597 | 255669 | 276191 | 323 |
| stakeManager | 368 | 368 | 368 | 368 | 261 |
| trustStakeManager | 28953 | 28953 | 28953 | 28953 | 1 |
| unstake | 33282 | 100401 | 106478 | 114162 | 14 |
| unstake | 33282 | 100179 | 106231 | 113915 | 14 |
| withdraw | 42278 | 42278 | 42278 | 42278 | 1 |


Expand Down Expand Up @@ -162,9 +162,9 @@
| Deployment Cost | Deployment Size | | | | |
| 625454 | 3260 | | | | |
| Function Name | min | avg | median | max | # calls |
| approve | 46330 | 46339 | 46342 | 46342 | 257 |
| approve | 46330 | 46339 | 46342 | 46342 | 261 |
| balanceOf | 558 | 926 | 558 | 2558 | 103 |
| mint | 51279 | 56407 | 51279 | 68379 | 270 |
| mint | 51279 | 56395 | 51279 | 68379 | 274 |


| test/mocks/StackOverflowStakeManager.sol:StackOverflowStakeManager contract | | | | | |
Expand Down
31 changes: 16 additions & 15 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 395663)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 395213)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 380725)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39427)
IntegrationTest:testStakeFoo() (gas: 1221267)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6401584)
IntegrationTest:testStakeFoo() (gas: 1220773)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6346366)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 298092)
LeaveTest:test_TrustNewStakeManager() (gas: 6469294)
LockTest:test_LockFailsWithInvalidPeriod() (gas: 313221)
LockTest:test_LockFailsWithNoStake() (gas: 63752)
LockTest:test_LockWithoutPriorLock() (gas: 394161)
LeaveTest:test_TrustNewStakeManager() (gas: 6402009)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1002, μ: 345225, ~: 345252)
LockTest:test_LockFailsWithNoStake() (gas: 102637)
LockTest:test_LockFailsWithZero() (gas: 315395)
LockTest:test_LockWithoutPriorLock() (gas: 393897)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1752948)
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 4974)
MathTest:test_CalcAccrueMP() (gas: 8033)
Expand Down Expand Up @@ -58,15 +59,15 @@ UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 500560)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 300573)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 301135)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 301224)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 547817)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 709855)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 806095)
UnstakeTest:test_UnstakeOneAccount() (gas: 482979)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 506246)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 411968)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 531656)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3000185)
UpgradeTest:test_UpgradeStakeManager() (gas: 6314078)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 547570)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 709361)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 805452)
UnstakeTest:test_UnstakeOneAccount() (gas: 482585)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 505999)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 411721)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 530970)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2965589)
UpgradeTest:test_UpgradeStakeManager() (gas: 6246793)
VaultRegistrationTest:test_VaultRegistration() (gas: 62058)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 313836)
XPNFTTokenTest:testApproveNotAllowed() (gas: 10500)
Expand Down
22 changes: 7 additions & 15 deletions src/RewardsStreamerMP.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ import { StakeMath } from "./math/StakeMath.sol";

// Rewards Streamer with Multiplier Points
contract RewardsStreamerMP is
Initializable,
UUPSUpgradeable,
IStakeManager,
TrustedCodehashAccess,
ReentrancyGuardUpgradeable,
IRewardProvider,
StakeMath
{
error StakingManager__InvalidVault();
Expand All @@ -26,7 +28,7 @@ contract RewardsStreamerMP is
error StakingManager__AmountCannotBeZero();
error StakingManager__TransferFailed();
error StakingManager__InsufficientBalance();
error StakingManager__InvalidLockingPeriod();
error StakingManager__LockingPeriodCannotBeZero();
error StakingManager__CannotRestakeWithLockedFunds();
error StakingManager__TokensAreLocked();
error StakingManager__AlreadyLocked();
Expand Down Expand Up @@ -223,23 +225,18 @@ contract RewardsStreamerMP is
onlyRegisteredVault
nonReentrant
{
if (lockPeriod < MIN_LOCKUP_PERIOD || lockPeriod > MAX_LOCKUP_PERIOD) {
revert StakingManager__InvalidLockingPeriod();
}

Account storage account = accounts[msg.sender];

if (account.lockUntil > 0) {
revert StakingManager__AlreadyLocked();
}

if (account.stakedBalance == 0) {
revert StakingManager__InsufficientBalance();
if (lockPeriod == 0) {
revert StakingManager__LockingPeriodCannotBeZero();
}

_updateGlobalState();
_updateAccountMP(msg.sender, true);

(uint256 deltaMp, uint256 newLockEnd) =
_calculateLock(account.stakedBalance, account.maxMP, account.lockUntil, block.timestamp, lockPeriod);

Expand All @@ -263,13 +260,6 @@ contract RewardsStreamerMP is
nonReentrant
{
Account storage account = accounts[msg.sender];
if (amount > account.stakedBalance) {
revert StakingManager__InsufficientBalance();
}

if (block.timestamp < account.lockUntil) {
revert StakingManager__TokensAreLocked();
}
_unstake(amount, account, msg.sender);
}

Expand Down Expand Up @@ -298,6 +288,8 @@ contract RewardsStreamerMP is
Account storage account = accounts[msg.sender];

if (account.stakedBalance > 0) {
//updates lockuntil to allow unstake early
account.lockUntil = block.timestamp;
// calling `_unstake` to update accounting accordingly
_unstake(account.stakedBalance, account, msg.sender);

Expand Down
Loading

0 comments on commit 621f316

Please sign in to comment.