refactor(RewardsStreamerMP): merge compound() with _updateVault()

This commit merges `compound()` into `_updateVault()` as there's no
reason not to update vault without compounding it.

This was discussed in #187.

BREAKING CHANGE: A couple of APIs have been removed or replaced.

-> inline _compound into _updateVault()
-> remove compond() in favor of updateVaultMP()
-> rename updateVaultMP() to updateVault()
-> rename compoundAccount() to updateAccount()

Closes #187
This commit is contained in:
r4bbit
2025-03-21 16:39:55 +01:00
parent 0385522821
commit ff9a714c0f
8 changed files with 213 additions and 257 deletions

View File

@@ -10,7 +10,7 @@
|-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| fallback | 746 | 132057 | 189609 | 190987 | 518 |
| fallback | 746 | 132103 | 190895 | 190943 | 517 |
╰-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯
╭-----------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -24,7 +24,7 @@
|-----------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 4015668 | 4015668 | 4015668 | 4015668 | 120 |
| run | 4015668 | 4015668 | 4015668 | 4015668 | 119 |
╰-----------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭-----------------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -46,13 +46,13 @@
+=======================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 8542904 | 40726 | | | | |
| 8496724 | 40509 | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 7454205 | 7454205 | 7454205 | 7454205 | 95 |
| run | 7410704 | 7410704 | 7410704 | 7410704 | 94 |
╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮
@@ -66,7 +66,7 @@
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| activeNetworkConfig | 597 | 597 | 597 | 597 | 350 |
| activeNetworkConfig | 597 | 597 | 597 | 597 | 347 |
╰---------------------------------------------------------+-----------------+-----+--------+-----+---------╯
╭-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -74,13 +74,13 @@
+=========================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 5993348 | 28817 | | | | |
| 5947188 | 28600 | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| runWithAdminAndProxy | 3417066 | 3417066 | 3417066 | 3417066 | 3 |
| runWithAdminAndProxy | 3373562 | 3373562 | 3373562 | 3373562 | 3 |
╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭------------------------------+-----------------+--------+--------+--------+---------╮
@@ -96,7 +96,7 @@
|------------------------------+-----------------+--------+--------+--------+---------|
| acceptOwnership | 12042 | 12042 | 12042 | 12042 | 1 |
|------------------------------+-----------------+--------+--------+--------+---------|
| addRewardDistributor | 2589 | 65661 | 70586 | 70586 | 156 |
| addRewardDistributor | 2589 | 65629 | 70586 | 70586 | 155 |
|------------------------------+-----------------+--------+--------+--------+---------|
| allowance | 482 | 482 | 482 | 482 | 3 |
|------------------------------+-----------------+--------+--------+--------+---------|
@@ -106,7 +106,7 @@
|------------------------------+-----------------+--------+--------+--------+---------|
| getRewardDistributors | 1162 | 3406 | 3406 | 5650 | 6 |
|------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 95872 | 95872 | 95872 | 95872 | 120 |
| initialize | 95872 | 95872 | 95872 | 95872 | 119 |
|------------------------------+-----------------+--------+--------+--------+---------|
| mint | 2654 | 56378 | 72352 | 72352 | 18 |
|------------------------------+-----------------+--------+--------+--------+---------|
@@ -116,7 +116,7 @@
|------------------------------+-----------------+--------+--------+--------+---------|
| removeRewardDistributor | 2632 | 12148 | 4824 | 28990 | 9 |
|------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 22065 | 152079 | 164263 | 164263 | 290 |
| setReward | 22021 | 152039 | 164219 | 164219 | 290 |
|------------------------------+-----------------+--------+--------+--------+---------|
| totalSupply | 3545 | 5726 | 3545 | 11545 | 11 |
|------------------------------+-----------------+--------+--------+--------+---------|
@@ -164,7 +164,7 @@
+=============================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| 3630341 | 16823 | | | | |
| 3584189 | 16606 | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -176,87 +176,85 @@
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MIN_LOCKUP_PERIOD | 309 | 309 | 309 | 309 | 15 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| compound | 32664 | 33940 | 32664 | 116059 | 514 |
| emergencyModeEnabled | 2399 | 2399 | 2399 | 2399 | 263 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| compoundAccount | 369662 | 369662 | 369662 | 369662 | 1 |
| enableEmergencyMode | 2521 | 25269 | 25435 | 25435 | 264 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyModeEnabled | 2443 | 2443 | 2443 | 2443 | 263 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| enableEmergencyMode | 2476 | 25224 | 25390 | 25390 | 264 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalMaxMP | 3213 | 3213 | 3213 | 3213 | 1 |
| getAccountTotalMaxMP | 3169 | 3169 | 3169 | 3169 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalStakedBalance | 15170 | 15170 | 15170 | 15170 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountVaults | 5252 | 5252 | 5252 | 5252 | 4 |
| getAccountVaults | 5208 | 5208 | 5208 | 5208 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getStakedBalance | 2643 | 2643 | 2643 | 2643 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getVault | 2139 | 7738 | 2139 | 20139 | 4666 |
| getVault | 2139 | 8528 | 2139 | 20139 | 4158 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 92753 | 92753 | 92753 | 92753 | 95 |
| initialize | 92752 | 92752 | 92752 | 92752 | 94 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lastRewardTime | 429 | 1429 | 1429 | 2429 | 2 |
| lastRewardTime | 385 | 1385 | 1385 | 2385 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 95106 | 95106 | 95106 | 95106 | 1 |
| leave | 97634 | 97634 | 97634 | 97634 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 7062 | 38963 | 59606 | 110806 | 1034 |
| lock | 7106 | 42186 | 64216 | 113416 | 1034 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 13505 | 73541 | 15712 | 191406 | 3 |
| migrateToVault | 13548 | 74440 | 15755 | 194018 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpBalanceOf | 917 | 2361 | 2316 | 7063 | 12 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpBalanceOfAccount | 6232 | 8305 | 8305 | 10378 | 2 |
| mpBalanceOfAccount | 6188 | 8261 | 8261 | 10334 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpStakedOf | 606 | 701 | 606 | 2606 | 21 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 342 | 342 | 342 | 342 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| registerVault | 2539 | 74410 | 74970 | 74970 | 374 |
| registerVault | 2539 | 74404 | 74970 | 74970 | 370 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardEndTime | 385 | 1385 | 1385 | 2385 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardStartTime | 430 | 1430 | 1430 | 2430 | 2 |
| rewardStartTime | 408 | 1408 | 1408 | 2408 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOf | 2340 | 3544 | 3953 | 6340 | 268 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOfAccount | 10242 | 10242 | 10242 | 10242 | 1 |
| rewardsBalanceOfAccount | 10220 | 10220 | 10220 | 10220 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 2530 | 105587 | 107098 | 107098 | 265 |
| setReward | 2486 | 105543 | 107054 | 107054 | 265 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setRewardsSupplier | 26831 | 26831 | 26831 | 26831 | 90 |
| setRewardsSupplier | 26831 | 26831 | 26831 | 26831 | 89 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setTrustedCodehash | 24194 | 24194 | 24194 | 24194 | 95 |
| setTrustedCodehash | 24194 | 24194 | 24194 | 24194 | 94 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2639 | 151014 | 82444 | 268529 | 2667 |
| stake | 2703 | 151871 | 85074 | 271159 | 2666 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMP | 805 | 1257 | 1257 | 1710 | 6 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPAccrued | 385 | 983 | 385 | 2385 | 4672 |
| totalMPAccrued | 385 | 1067 | 385 | 2385 | 4164 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPStaked | 429 | 1026 | 429 | 2429 | 4675 |
| totalMPStaked | 429 | 1111 | 429 | 2429 | 4167 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMaxMP | 407 | 1005 | 407 | 2407 | 4672 |
| totalMaxMP | 407 | 1089 | 407 | 2407 | 4164 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsAccrued | 429 | 429 | 429 | 429 | 3 |
| totalRewardsAccrued | 385 | 385 | 385 | 385 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsSupply | 1020 | 1646 | 1814 | 6759 | 290 |
| totalRewardsSupply | 976 | 1602 | 1770 | 6715 | 290 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalShares | 662 | 662 | 662 | 662 | 6 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalStaked | 430 | 1027 | 430 | 2430 | 4679 |
| totalStaked | 386 | 1067 | 386 | 2386 | 4171 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 39196 | 42183 | 39222 | 80792 | 269 |
| unstake | 41762 | 44651 | 41788 | 83357 | 269 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateGlobalState | 15820 | 17250 | 15820 | 29516 | 1021 |
| updateAccount | 369042 | 369042 | 369042 | 369042 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateVaultMP | 22753 | 24222 | 22753 | 36507 | 1021 |
| updateGlobalState | 15820 | 25876 | 29230 | 29230 | 8 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeTo | 10235 | 10857 | 10235 | 12723 | 4 |
| updateVault | 34763 | 37203 | 34763 | 115885 | 1026 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeTo | 10235 | 10851 | 10235 | 12701 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeToAndCall | 3228 | 3228 | 3228 | 3228 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| vaultShares | 915 | 1081 | 915 | 2915 | 12 |
| vaultShares | 871 | 1037 | 871 | 2871 | 12 |
╰------------------------------------------------------+-----------------+--------+--------+--------+---------╯
╭----------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -272,27 +270,27 @@
|----------------------------------------+-----------------+--------+--------+--------+---------|
| STAKING_TOKEN | 240 | 240 | 240 | 240 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyExit | 15045 | 31485 | 31483 | 48583 | 263 |
| emergencyExit | 15001 | 31441 | 31439 | 48539 | 263 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 97660 | 97660 | 97660 | 97660 | 374 |
| initialize | 97660 | 97660 | 97660 | 97660 | 370 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 12161 | 128077 | 69651 | 360844 | 4 |
| leave | 12161 | 127067 | 70915 | 354278 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 12091 | 54388 | 75072 | 126269 | 1035 |
| lock | 12091 | 57608 | 79682 | 128879 | 1035 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 28993 | 100223 | 31200 | 240476 | 3 |
| migrateToVault | 29036 | 101122 | 31243 | 243088 | 3 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| owner | 379 | 410 | 379 | 2379 | 382 |
| owner | 379 | 410 | 379 | 2379 | 378 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| register | 12674 | 78057 | 78600 | 78600 | 374 |
| register | 12674 | 78052 | 78600 | 78600 | 370 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 12071 | 185300 | 97937 | 324097 | 2668 |
| stake | 12071 | 185788 | 100567 | 326727 | 2667 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stakeManager | 369 | 369 | 369 | 369 | 373 |
| stakeManager | 369 | 369 | 369 | 369 | 369 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| trustStakeManager | 7580 | 7580 | 7580 | 7580 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 12048 | 58554 | 54665 | 111814 | 270 |
| unstake | 12048 | 61012 | 57231 | 114379 | 270 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| withdraw | 20754 | 20754 | 20754 | 20754 | 1 |
╰----------------------------------------+-----------------+--------+--------+--------+---------╯
@@ -308,9 +306,9 @@
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| fallback | 708 | 8138 | 2629 | 396039 | 27214 |
| fallback | 708 | 6812 | 2629 | 395419 | 23151 |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| implementation | 346 | 2345 | 2346 | 2346 | 4355 |
| implementation | 346 | 2345 | 2346 | 2346 | 4350 |
╰----------------------------------------------------+-----------------+------+--------+--------+---------╯
╭--------------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -324,7 +322,7 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| createVault | 230924 | 247657 | 248024 | 248024 | 373 |
| createVault | 230924 | 247653 | 248024 | 248024 | 369 |
╰--------------------------------------------+-----------------+--------+--------+--------+---------╯
╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
@@ -412,11 +410,11 @@
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| approve | 29075 | 31547 | 29183 | 46259 | 2676 |
| approve | 29075 | 31523 | 29183 | 46259 | 2672 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| balanceOf | 561 | 1266 | 561 | 2561 | 5466 |
| balanceOf | 561 | 1348 | 561 | 2561 | 4958 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| mint | 33964 | 37192 | 34072 | 68248 | 2685 |
| mint | 33964 | 37163 | 34072 | 68248 | 2681 |
╰---------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -430,9 +428,9 @@
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 237 | 164473 | 164473 | 328813 | 333 |
| leave | 26 | 161075 | 161075 | 322247 | 334 |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 330 | 330 | 330 | 330 | 1 |
| proxiableUUID | 308 | 308 | 308 | 308 | 1 |
╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯

View File

@@ -1,23 +1,21 @@
CompoundTest:test_CompoundForAccount() (gas: 2493583)
CompoundTest:test_RevertWhenInsufficientMPBalance() (gas: 382062)
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 93420)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 355403)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 450256)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 776060)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 455763)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 473103)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 438555)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39109)
FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1024, μ: 434256, ~: 407334)
FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1024, μ: 533518, ~: 509224)
FuzzTests:testFuzz_Compound(uint128,uint64,uint64) (runs: 1024, μ: 522387, ~: 494820)
FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1007, μ: 528440, ~: 509976)
FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1025, μ: 772594, ~: 793906)
FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1025, μ: 408965, ~: 392534)
FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1001, μ: 636843, ~: 638758)
FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1025, μ: 314299, ~: 290763)
FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1024, μ: 621954, ~: 599327)
IntegrationTest:testStakeFoo() (gas: 1441361)
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 93510)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 357967)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 452843)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 781167)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 458394)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 475778)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 441142)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39154)
FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1003, μ: 408527, ~: 383746)
FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1003, μ: 510823, ~: 487453)
FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1002, μ: 530631, ~: 512563)
FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1004, μ: 777485, ~: 801080)
FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1004, μ: 415384, ~: 399686)
FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1000, μ: 639388, ~: 641300)
FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1004, μ: 314995, ~: 293349)
FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1003, μ: 515012, ~: 492212)
FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1003, μ: 408550, ~: 383769)
IntegrationTest:testStakeFoo() (gas: 1453985)
KarmaMintAllowanceTest:testAddKarmaDistributorOnlyOwner() (gas: 364802)
KarmaMintAllowanceTest:testBalanceOf() (gas: 441486)
KarmaMintAllowanceTest:testBalanceOfWithNoSystemTotalKarma() (gas: 49545)
@@ -58,84 +56,85 @@ KarmaTest:testRemoveKarmaDistributorOnlyOwner() (gas: 88820)
KarmaTest:testRemoveUnknownKarmaDistributor() (gas: 41398)
KarmaTest:testTotalSupply() (gas: 349329)
KarmaTest:testTransfersNotAllowed() (gas: 40241)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9899202)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 352518)
LeaveTest:test_TrustNewStakeManager() (gas: 9949960)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1025, μ: 388844, ~: 366617)
LockTest:test_LockFailsWithNoStake() (gas: 109665)
LockTest:test_LockFailsWithZero() (gas: 362602)
LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 674397)
LockTest:test_LockWithPriorLock() (gas: 621342)
LockTest:test_LockWithoutPriorLock() (gas: 493744)
LockTest:test_RevertWhenVaultToLockIsEmpty() (gas: 109623)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 2018869)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9813528)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 355148)
LeaveTest:test_TrustNewStakeManager() (gas: 9862860)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1004, μ: 393465, ~: 369257)
LockTest:test_LockFailsWithNoStake() (gas: 114275)
LockTest:test_LockFailsWithZero() (gas: 365276)
LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 649138)
LockTest:test_LockWithPriorLock() (gas: 629170)
LockTest:test_LockWithoutPriorLock() (gas: 498962)
LockTest:test_RevertWhenVaultToLockIsEmpty() (gas: 114275)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 2014867)
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 5240)
MathTest:test_CalcAccrueMP() (gas: 8599)
MathTest:test_CalcBonusMP() (gas: 19200)
MathTest:test_CalcInitialMP() (gas: 5794)
MathTest:test_CalcInitialMP() (gas: 5836)
MathTest:test_CalcMaxAccruedMP() (gas: 4886)
MathTest:test_CalcMaxTotalMP() (gas: 19940)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 860071)
MathTest:test_CalcMaxTotalMP() (gas: 19984)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 867829)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 92580)
NFTMetadataGeneratorSVGTest:testSetImageStrings() (gas: 60081)
NFTMetadataGeneratorSVGTest:testSetImageStringsRevert() (gas: 35891)
NFTMetadataGeneratorURLTest:testGenerateMetadata() (gas: 108341)
NFTMetadataGeneratorURLTest:testSetBaseURL() (gas: 50631)
NFTMetadataGeneratorURLTest:testSetBaseURLRevert() (gas: 36066)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 1326310)
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 224746)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 61282)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 101104)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39344)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 761364)
StakeTest:test_RevertWhenStakeMultipleTimesExceedsMaxLockUpTime() (gas: 774528)
StakeTest:test_RevertWhenStakeMultipleTimesWithGapsExceedsMaxLockUpTime() (gas: 826669)
StakeTest:test_StakeMultipleAccounts() (gas: 601877)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 610415)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1039884)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 630260)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 674876)
StakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 623415)
StakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 739368)
StakeTest:test_StakeOneAccount() (gas: 339156)
StakeTest:test_StakeOneAccountAndRewards() (gas: 347756)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 615095)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 603226)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 377449)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 378045)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 378090)
StakeVaultMigrationTest:testMigrateToVault() (gas: 958866)
StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 648499)
StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 68044)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 1330208)
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 224570)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 61280)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 101038)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39300)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 762564)
StakeTest:test_RevertWhenStakeMultipleTimesExceedsMaxLockUpTime() (gas: 790648)
StakeTest:test_RevertWhenStakeMultipleTimesWithGapsExceedsMaxLockUpTime() (gas: 842833)
StakeTest:test_StakeMultipleAccounts() (gas: 607093)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 615587)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1020283)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 635454)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 680092)
StakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 631217)
StakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 749888)
StakeTest:test_StakeOneAccount() (gas: 341742)
StakeTest:test_StakeOneAccountAndRewards() (gas: 350276)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 654186)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 538684)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 380035)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 380631)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 380676)
StakeVaultMigrationTest:testMigrateToVault() (gas: 933616)
StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 651195)
StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 68065)
StakeVaultTest:testOwner() (gas: 15262)
StakingTokenTest:testOwner() (gas: 15262)
StakingTokenTest:testStakeToken() (gas: 13144)
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 2023424)
UnstakeTest:test_RevertWhenStakeMultipleTimesExceedsMaxLockUpTime() (gas: 774528)
UnstakeTest:test_RevertWhenStakeMultipleTimesWithGapsExceedsMaxLockUpTime() (gas: 826713)
UnstakeTest:test_StakeMultipleAccounts() (gas: 601834)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 610437)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1039928)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 630304)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 674920)
UnstakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 623415)
UnstakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 739368)
UnstakeTest:test_StakeOneAccount() (gas: 339156)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 347733)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 615072)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 603184)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 377449)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 378045)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 378156)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 655966)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 844237)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 959589)
UnstakeTest:test_UnstakeOneAccount() (gas: 575842)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 600078)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 496119)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 642865)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3706881)
UpgradeTest:test_UpgradeStakeManager() (gas: 9786130)
VaultRegistrationTest:test_VaultRegistration() (gas: 63226)
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 2023488)
UnstakeTest:test_RevertWhenStakeMultipleTimesExceedsMaxLockUpTime() (gas: 790648)
UnstakeTest:test_RevertWhenStakeMultipleTimesWithGapsExceedsMaxLockUpTime() (gas: 842877)
UnstakeTest:test_StakeMultipleAccounts() (gas: 607050)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 615609)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1020327)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 635498)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 680136)
UnstakeTest:test_StakeMultipleTimesWithLockIncreaseAtSameBlock() (gas: 631217)
UnstakeTest:test_StakeMultipleTimesWithLockZeroAfterMaxLock() (gas: 749888)
UnstakeTest:test_StakeOneAccount() (gas: 341742)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 350253)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 654230)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 538728)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 380035)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 380631)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 380742)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 630320)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 854539)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 971298)
UnstakeTest:test_UnstakeOneAccount() (gas: 582511)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 580840)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 501182)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 617297)
UpdateVaultTest:test_UpdateAccount() (gas: 2503372)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3660673)
UpgradeTest:test_UpgradeStakeManager() (gas: 9698983)
VaultRegistrationTest:test_VaultRegistration() (gas: 63050)
WithdrawTest:testOwner() (gas: 15296)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 368209)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 370795)

View File

@@ -30,9 +30,8 @@ definition noCallDuringEmergency(method f) returns bool = (
|| f.selector == sig:streamer.setRewardsSupplier(address).selector
|| f.selector == sig:streamer.registerVault().selector
|| f.selector == sig:streamer.migrateToVault(address).selector
|| f.selector == sig:streamer.compound(address).selector
|| f.selector == sig:streamer.compoundAccount(address).selector
|| f.selector == sig:streamer.updateVaultMP(address).selector
|| f.selector == sig:streamer.updateAccount(address).selector
|| f.selector == sig:streamer.updateVault(address).selector
|| f.selector == sig:streamer.unstake(uint256).selector
|| f.selector == sig:streamer.stake(uint256, uint256).selector
|| f.selector == sig:streamer.lock(uint256).selector

View File

@@ -10,7 +10,7 @@ methods {
function vaultData(address) external returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) envfree;
function lastMPUpdatedTime() external returns (uint256) envfree;
function updateGlobalState() external;
function updateVaultMP(address vaultAddress) external;
function updateVault(address vaultAddress) external;
function emergencyModeEnabled() external returns (bool) envfree;
function leave() external;
function Math.mulDiv(uint256 a, uint256 b, uint256 c) internal returns uint256 => mulDivSummary(a,b,c);
@@ -77,8 +77,7 @@ rule stakingMintsMultiplierPoints1To1Ratio {
require getVaultLockUntil(e.msg.sender) <= e.block.timestamp;
updateGlobalState(e);
updateVaultMP(e, e.msg.sender);
updateVault(e, e.msg.sender);
uint256 t = lastMPUpdatedTime();
multiplierPointsBefore = getVaultMPAccrued(e.msg.sender);

View File

@@ -335,50 +335,26 @@ contract RewardsStreamerMP is
rewardEndTime = block.timestamp + duration;
}
/**
* @notice Allows users to compound their accrued MP.
* @dev This function is only callable when emergency mode is disabled.
* @dev Anyone can compound MPs for any vault.
*/
function compound(address vaultAddress) external onlyNotEmergencyMode {
_updateGlobalState();
_compound(vaultAddress);
}
/**
* @notice Allows any user to compound accrued MP for any user.
* @dev This function is only callable when emergency mode is disabled.
* @dev Anyone can compound MPs for account.
*/
function compoundAccount(address account) external onlyNotEmergencyMode {
function updateAccount(address account) external onlyNotEmergencyMode {
_updateGlobalState();
address[] memory accountVaults = vaults[account];
for (uint256 i = 0; i < accountVaults.length; i++) {
_compound(accountVaults[i]);
_updateVault(accountVaults[i], false);
}
}
function _compound(address vaultAddress) internal {
VaultData storage vault = vaultData[vaultAddress];
_updateVault(vaultAddress, false);
uint256 mpToStake = vault.mpAccrued - vault.mpStaked;
if (mpToStake == 0) {
revert StakingManager__InsufficientBalance();
}
vault.mpStaked += mpToStake;
totalMPStaked += mpToStake;
vault.rewardIndex = rewardIndex;
emit Compound(vaultAddress, mpToStake);
}
/**
* @notice Allows users to claim their accrued rewards.
* @dev This function is only callable when emergency mode is disabled.
* @dev Anyone can claim rewards on behalf of any vault
*/
function updateVaultMP(address vaultAddress) external onlyNotEmergencyMode {
function updateVault(address vaultAddress) external onlyNotEmergencyMode {
_updateGlobalState();
_updateVault(vaultAddress, false);
}
@@ -459,6 +435,12 @@ contract RewardsStreamerMP is
uint256 rewardsAccrued = _vaultPendingRewards(vault);
vault.rewardsAccrued += rewardsAccrued;
vault.rewardIndex = rewardIndex;
uint256 mpToStake = vault.mpAccrued - vault.mpStaked;
vault.mpStaked += mpToStake;
totalMPStaked += mpToStake;
vault.rewardIndex = rewardIndex;
emit Compound(vaultAddress, mpToStake);
}
function updateRewardIndex() internal {

View File

@@ -59,7 +59,7 @@ interface IStakeManager is ITrustedCodehashAccess, IStakeConstants {
function unstake(uint256 _amount) external;
function leave() external;
function migrateToVault(address migrateTo) external;
function compound(address _vault) external;
function updateVault(address vaultAddress) external;
function emergencyModeEnabled() external view returns (bool);
function totalStaked() external view returns (uint256);

View File

@@ -163,9 +163,9 @@ contract RewardsStreamerMPTest is StakeMath, Test {
vault.stake(amount, lockupTime);
}
function _compound(address account) public {
function _updateVault(address account) public {
StakeVault vault = StakeVault(vaults[account]);
streamer.compound(address(vault));
streamer.updateVault(address(vault));
}
function _unstake(address account, uint256 amount) public {
@@ -835,16 +835,15 @@ contract StakeTest is RewardsStreamerMPTest {
vm.warp(currentTime + (YEAR));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
uint256 expectedMPIncrease = stakeAmount; // 1 year passed, 1 MP accrued per token staked
uint256 totalMPStaked = totalMPAccrued;
totalMPAccrued = totalMPAccrued + expectedMPIncrease;
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount,
totalMPStaked: totalMPAccrued,
totalMPAccrued: totalMPAccrued,
totalMaxMP: totalMaxMP,
stakingBalance: stakeAmount,
@@ -860,7 +859,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: totalMPStaked,
mpStaked: totalMPAccrued,
mpAccrued: totalMPAccrued, // accountMP == totalMPAccrued because only one account is staking
maxMP: totalMaxMP,
rewardsAccrued: 0
@@ -871,7 +870,7 @@ contract StakeTest is RewardsStreamerMPTest {
vm.warp(currentTime + (YEAR / 2));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
expectedMPIncrease = stakeAmount / 2; // 1/2 year passed, 1/2 MP accrued per token staked
totalMPAccrued = totalMPAccrued + expectedMPIncrease;
@@ -879,7 +878,7 @@ contract StakeTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount,
totalMPStaked: totalMPAccrued,
totalMPAccrued: totalMPAccrued,
totalMaxMP: totalMaxMP,
stakingBalance: stakeAmount,
@@ -895,7 +894,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: totalMPStaked,
mpStaked: totalMPAccrued,
mpAccrued: totalMPAccrued, // accountMP == totalMPAccrued because only one account is staking
maxMP: totalMaxMP,
rewardsAccrued: 0
@@ -929,7 +928,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: stakeAmount,
mpStaked: totalMPAccrued,
mpAccrued: totalMPAccrued, // accountMP == totalMPAccrued because only one account is staking
maxMP: totalMaxMP, // maxMP == totalMaxMP because only one account is staking
rewardsAccrued: 0
@@ -940,13 +939,12 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 timeToMaxMP = _timeToAccrueMP(stakeAmount, totalMaxMP - totalMPAccrued);
vm.warp(currentTime + timeToMaxMP);
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount,
totalMPStaked: totalMaxMP,
totalMPAccrued: totalMaxMP,
totalMaxMP: totalMaxMP,
stakingBalance: stakeAmount,
@@ -962,7 +960,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: stakeAmount,
mpStaked: totalMaxMP,
mpAccrued: totalMaxMP,
maxMP: totalMaxMP,
rewardsAccrued: 0
@@ -974,13 +972,12 @@ contract StakeTest is RewardsStreamerMPTest {
// increasing time by some big enough time such that MPs are actually generated
vm.warp(currentTime + 14 days);
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount,
totalMPStaked: totalMaxMP,
totalMPAccrued: totalMaxMP,
totalMaxMP: totalMaxMP,
stakingBalance: stakeAmount,
@@ -1320,7 +1317,7 @@ contract StakeTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: params.totalStaked,
totalMPStaked: params.totalStaked,
totalMPStaked: params.totalMPAccrued,
totalMPAccrued: params.totalMPAccrued,
totalMaxMP: params.totalMaxMP,
stakingBalance: params.totalStaked,
@@ -1359,9 +1356,8 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + (YEAR));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVaultMP(vaults[bob]);
streamer.updateVault(vaults[alice]);
streamer.updateVault(vaults[bob]);
uint256 aliceExpectedMPIncrease = params.aliceStakeAmount; // 1 year passed, 1 MP accrued per token staked
uint256 bobExpectedMPIncrease = params.bobStakeAmount; // 1 year passed, 1 MP accrued per token staked
@@ -1374,7 +1370,7 @@ contract StakeTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: params.totalStaked,
totalMPStaked: params.totalStaked,
totalMPStaked: params.totalMPAccrued,
totalMPAccrued: params.totalMPAccrued,
totalMaxMP: params.totalMaxMP,
stakingBalance: params.totalStaked,
@@ -1390,7 +1386,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: params.aliceStakeAmount,
vaultBalance: params.aliceStakeAmount,
rewardIndex: 0,
mpStaked: aliceMP,
mpStaked: aliceMP + aliceExpectedMPIncrease,
mpAccrued: aliceMP + aliceExpectedMPIncrease,
maxMP: aliceMaxMP,
rewardsAccrued: 0
@@ -1403,7 +1399,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: params.bobStakeAmount,
vaultBalance: params.bobStakeAmount,
rewardIndex: 0,
mpStaked: bobMP,
mpStaked: bobMPAccrued,
mpAccrued: bobMPAccrued,
maxMP: bobMaxMP,
rewardsAccrued: 0
@@ -1413,9 +1409,8 @@ contract StakeTest is RewardsStreamerMPTest {
currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + (YEAR / 2));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVaultMP(vaults[bob]);
streamer.updateVault(vaults[alice]);
streamer.updateVault(vaults[bob]);
aliceExpectedMPIncrease = params.aliceStakeAmount / 2;
bobExpectedMPIncrease = params.bobStakeAmount / 2;
@@ -1428,7 +1423,7 @@ contract StakeTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: params.totalStaked,
totalMPStaked: params.totalStaked,
totalMPStaked: params.totalMPAccrued,
totalMPAccrued: params.totalMPAccrued,
totalMaxMP: params.totalMaxMP,
stakingBalance: params.totalStaked,
@@ -1444,7 +1439,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: params.aliceStakeAmount,
vaultBalance: params.aliceStakeAmount,
rewardIndex: 0,
mpStaked: aliceMP,
mpStaked: aliceMPAccrued,
mpAccrued: aliceMPAccrued,
maxMP: aliceMaxMP,
rewardsAccrued: 0
@@ -1457,7 +1452,7 @@ contract StakeTest is RewardsStreamerMPTest {
stakedBalance: params.bobStakeAmount,
vaultBalance: params.bobStakeAmount,
rewardIndex: 0,
mpStaked: bobMP,
mpStaked: bobMPAccrued,
mpAccrued: bobMPAccrued,
maxMP: bobMaxMP,
rewardsAccrued: 0
@@ -1524,13 +1519,12 @@ contract UnstakeTest is StakeTest {
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + (YEAR));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
checkStreamer(
CheckStreamerParams({
totalStaked: 10e18,
totalMPStaked: 10e18,
totalMPStaked: 20e18,
totalMPAccrued: 20e18, // total MP must have been doubled
totalMaxMP: 50e18,
stakingBalance: 10e18,
@@ -1569,13 +1563,12 @@ contract UnstakeTest is StakeTest {
vm.warp(currentTime + (warpLength));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: (stakeAmount + expectedBonusMP),
totalMPStaked: (stakeAmount + expectedBonusMP) + stakeAmount,
totalMPAccrued: (stakeAmount + expectedBonusMP) + stakeAmount, // we do `+ stakeAmount` we've accrued
// `stakeAmount` after 1 year
totalMaxMP: _maxTotalMP(stakeAmount, lockUpPeriod),
@@ -1706,8 +1699,7 @@ contract UnstakeTest is StakeTest {
stage++; // second stage: progress in time
vm.warp(timestamp[stage]);
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
{
RewardsStreamerMP.VaultData memory vaultData = streamer.getVault(vaults[alice]);
assertEq(vaultData.stakedBalance, totalStaked[stage], "stage 2: wrong account staked balance");
@@ -2033,8 +2025,7 @@ contract LockTest is RewardsStreamerMPTest {
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + (4 * YEAR));
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
// Check updated state
checkVault(
@@ -2044,7 +2035,7 @@ contract LockTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: initialAccountMP + expectedBonusMP,
mpStaked: initialAccountMP + expectedBonusMP + (initialAccountMP * 4),
mpAccrued: initialAccountMP + expectedBonusMP + (initialAccountMP * 4),
maxMP: initialMaxMP + expectedBonusMP,
rewardsAccrued: 0
@@ -2640,7 +2631,7 @@ contract RewardsStreamerMP_RewardsTest is RewardsStreamerMPTest {
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 250e18);
_compound(alice);
_updateVault(alice);
assertEq(streamer.totalStaked(), 200e18);
assertEq(streamer.totalMPStaked(), 400e18);
@@ -2795,8 +2786,7 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + 365 days);
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
streamer.updateVault(vaults[alice]);
// ensure vault has accumulated MPs
checkVault(
@@ -2806,7 +2796,7 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: initialAccountMP,
mpStaked: initialAccountMP * 2,
mpAccrued: initialAccountMP * 2, // alice now has twice the amount after a year
maxMP: initialMaxMP,
rewardsAccrued: 0
@@ -2816,7 +2806,7 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount,
totalMPStaked: stakeAmount * 2,
totalMPAccrued: initialAccountMP * 2, // stakemanager has twice the amount after a year
totalMaxMP: initialMaxMP,
stakingBalance: stakeAmount,
@@ -2837,7 +2827,7 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: initialAccountMP,
totalMPStaked: initialAccountMP * 2,
totalMPAccrued: initialAccountMP * 2,
totalMaxMP: initialMaxMP,
stakingBalance: stakeAmount,
@@ -2854,7 +2844,7 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: initialAccountMP,
mpStaked: initialAccountMP * 2,
mpAccrued: initialAccountMP * 2, // alice now has twice the amount after a year
maxMP: initialMaxMP,
rewardsAccrued: 0
@@ -2878,18 +2868,12 @@ contract StakeVaultMigrationTest is RewardsStreamerMPTest {
}
}
contract CompoundTest is RewardsStreamerMPTest {
contract UpdateVaultTest is RewardsStreamerMPTest {
function setUp() public virtual override {
super.setUp();
}
function test_RevertWhenInsufficientMPBalance() public {
_stake(alice, 10e18, 0);
vm.expectRevert(IStakeManager.StakingManager__InsufficientBalance.selector);
_compound(alice);
}
function test_CompoundForAccount() public {
function test_UpdateAccount() public {
uint256 stakeAmount = 1000e18;
// alice stakes 1000 tokens
@@ -2928,7 +2912,7 @@ contract CompoundTest is RewardsStreamerMPTest {
assertEq(streamer.mpStakedOf(vault4), stakeAmount);
// compound alice's MP
streamer.compoundAccount(alice);
streamer.updateAccount(alice);
uint256 expectedMPIncreasePerVault = _accrueMP(stakeAmount, rewardPeriod);
@@ -3038,18 +3022,17 @@ contract FuzzTests is RewardsStreamerMPTest {
}
}
function _compound(address account, bytes4 _expectedRevert) internal {
function _updateVault(address account, bytes4 _expectedRevert) internal {
StakeVault vault = StakeVault(vaults[account]);
_expectRevert(_expectedRevert);
streamer.compound(address(vault));
streamer.updateVault(address(vault));
}
function _accrue(address account, uint256 accruedTime) internal {
if (accruedTime > 0) {
vm.warp(vm.getBlockTimestamp() + accruedTime);
}
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[account]);
streamer.updateVault(vaults[account]);
}
function _unstake(address account, uint256 amount, bytes4 _expectedRevert) internal {
@@ -3060,7 +3043,7 @@ contract FuzzTests is RewardsStreamerMPTest {
expectedRevert = FuzzTests__UndefinedError.selector;
}
function _expectCompound(address account) internal {
function _expectUpdateVault(address account) internal {
CheckVaultParams storage expectedAccountParams = expectedAccountState[account];
uint256 mpCompounded = expectedAccountParams.mpAccrued - expectedAccountParams.mpStaked;
if (mpCompounded == 0) {
@@ -3235,30 +3218,27 @@ contract FuzzTests is RewardsStreamerMPTest {
function testFuzz_AccrueMP(uint128 stakeAmount, uint64 lockUpPeriod, uint64 accruedTime) public {
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
//vm.assume(lockUpPeriod < vm.getBlockTimestamp() - (MAX_LOCKUP_PERIOD*10));
_expectStake(alice, stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod, expectedRevert);
check("Stake: ", alice);
_expectAccrue(alice, accruedTime);
_expectUpdateVault(alice);
_accrue(alice, accruedTime);
check("Accrue: ", alice);
}
function testFuzz_Compound(uint128 stakeAmount, uint64 lockUpPeriod, uint64 accruedTime) public {
function testFuzz_UpdateVault(uint128 stakeAmount, uint64 lockUpPeriod, uint64 accruedTime) public {
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
_expectStake(alice, stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod, expectedRevert);
check("Stake: ", alice);
_expectAccrue(alice, accruedTime);
_expectUpdateVault(alice);
_accrue(alice, accruedTime);
check("Accrue: ", alice);
_expectCompound(alice);
_compound(alice, expectedRevert);
check("Compound", alice);
}
/**
@@ -3280,6 +3260,7 @@ contract FuzzTests is RewardsStreamerMPTest {
check("Stake: ", alice);
_expectAccrue(alice, accruedTime);
_expectUpdateVault(alice);
_accrue(alice, accruedTime);
check("Accrue: ", alice);
@@ -3304,14 +3285,12 @@ contract FuzzTests is RewardsStreamerMPTest {
if (accruedTime > 0) {
_expectAccrue(alice, accruedTime);
_expectUpdateVault(alice);
_accrue(alice, accruedTime);
check("Accrue: ", alice);
}
_expectCompound(alice);
_compound(alice, expectedRevert);
check("Compound", alice);
_expectUpdateVault(alice);
_expectUnstake(alice, unstakeAmount);
_unstake(alice, unstakeAmount, expectedRevert);
check("Unstake: ", alice);

View File

@@ -54,7 +54,7 @@ contract StackOverflowStakeManager is UUPSUpgradeable, IStakeManager, TrustedCod
}
// solhint-disable-next-line
function compound(address _vaultAddress) external override {
function updateVault(address _vaultAddress) external override {
// implementation
}