feat(StakeManager): allow for setting rewards when pending period

During testing, we've run into the scenario where we set some rewards
for a certain period, but realized that the amount that was set was
incorrect.

Updating the rewards is not possible when a reward period is pending.
This commit changes that, such that it adds the new rewards to the
remaining ones and extends the reward period accordingly.
This commit is contained in:
r4bbit
2025-08-25 13:26:54 +02:00
parent 1f9e9f678c
commit 70c2ade983
4 changed files with 166 additions and 73 deletions

View File

@@ -10,7 +10,7 @@
|-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------| |-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------| |-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------|
| fallback | 5145 | 65021 | 33119 | 193478 | 3520 | | fallback | 5145 | 65188 | 33119 | 193548 | 3529 |
╰-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------╯ ╰-------------------------------------------------------------------------------------------+-----------------+-------+--------+--------+---------╯
╭-----------------------------------------------------+-----------------+---------+---------+---------+---------╮ ╭-----------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -24,7 +24,7 @@
|-----------------------------------------------------+-----------------+---------+---------+---------+---------| |-----------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------+-----------------+---------+---------+---------+---------| |-----------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 4666141 | 4666141 | 4666141 | 4666141 | 180 | | run | 4666141 | 4666141 | 4666141 | 4666141 | 183 |
╰-----------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╰-----------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭-----------------------------------------------------------+-----------------+---------+---------+---------+---------╮ ╭-----------------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -60,13 +60,13 @@
+=============================================================================================================================+ +=============================================================================================================================+
| Deployment Cost | Deployment Size | | | | | | Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 8323525 | 39701 | | | | | | 8331360 | 39736 | | | | |
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | | | | | | | | |
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 7263905 | 7263905 | 7263905 | 7263905 | 88 | | run | 7270921 | 7270921 | 7270921 | 7270921 | 91 |
╰-------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╰-------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭---------------------------------------------------------+-----------------+------+--------+------+---------╮ ╭---------------------------------------------------------+-----------------+------+--------+------+---------╮
@@ -80,7 +80,7 @@
|---------------------------------------------------------+-----------------+------+--------+------+---------| |---------------------------------------------------------+-----------------+------+--------+------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------+-----------------+------+--------+------+---------| |---------------------------------------------------------+-----------------+------+--------+------+---------|
| activeNetworkConfig | 455 | 2043 | 455 | 4455 | 476 | | activeNetworkConfig | 455 | 2038 | 455 | 4455 | 485 |
╰---------------------------------------------------------+-----------------+------+--------+------+---------╯ ╰---------------------------------------------------------+-----------------+------+--------+------+---------╯
╭---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮ ╭---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -88,13 +88,13 @@
+===============================================================================================================================+ +===============================================================================================================================+
| Deployment Cost | Deployment Size | | | | | | Deployment Cost | Deployment Size | | | | |
|---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 5895538 | 28363 | | | | | | 5903371 | 28398 | | | | |
|---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | | | | | | | | |
|---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| runWithAdminAndProxy | 3304282 | 3304282 | 3304282 | 3304282 | 3 | | runWithAdminAndProxy | 3311298 | 3311298 | 3311298 | 3311298 | 3 |
╰---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╰---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭------------------------------+-----------------+--------+--------+--------+---------╮ ╭------------------------------+-----------------+--------+--------+--------+---------╮
@@ -118,13 +118,13 @@
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| accountSlashAmount | 2611 | 2611 | 2611 | 2611 | 2 | | accountSlashAmount | 2611 | 2611 | 2611 | 2611 | 2 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| addRewardDistributor | 29975 | 63542 | 70903 | 70903 | 294 | | addRewardDistributor | 29975 | 63617 | 70903 | 70903 | 297 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| allowance | 573 | 573 | 573 | 573 | 8 | | allowance | 573 | 573 | 573 | 573 | 8 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| approve | 453 | 453 | 453 | 453 | 8 | | approve | 453 | 453 | 453 | 453 | 8 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| balanceOf | 17795 | 28159 | 28160 | 28233 | 287 | | balanceOf | 17795 | 28157 | 28160 | 28233 | 287 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| calculateSlashAmount | 2763 | 2801 | 2804 | 2804 | 774 | | calculateSlashAmount | 2763 | 2801 | 2804 | 2804 | 774 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
@@ -134,7 +134,7 @@
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| hasRole | 2754 | 2754 | 2754 | 2754 | 4 | | hasRole | 2754 | 2754 | 2754 | 2754 | 4 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 116796 | 116796 | 116796 | 116796 | 180 | | initialize | 116796 | 116796 | 116796 | 116796 | 183 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| mint | 4869 | 50370 | 51342 | 51342 | 551 | | mint | 4869 | 50370 | 51342 | 51342 | 551 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
@@ -142,9 +142,9 @@
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| rewardDistributorSlashAmount | 2781 | 2781 | 2781 | 2781 | 1 | | rewardDistributorSlashAmount | 2781 | 2781 | 2781 | 2781 | 1 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 4845 | 144102 | 166754 | 166754 | 319 | | setReward | 4845 | 143549 | 166824 | 166824 | 325 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| slash | 4803 | 103578 | 85757 | 123125 | 520 | | slash | 4803 | 103656 | 85757 | 123125 | 520 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
| slashedAmountOf | 17682 | 28099 | 28120 | 28120 | 516 | | slashedAmountOf | 17682 | 28099 | 28120 | 28120 | 516 |
|------------------------------+-----------------+--------+--------+--------+---------| |------------------------------+-----------------+--------+--------+--------+---------|
@@ -210,7 +210,7 @@
+===================================================================================================+ +===================================================================================================+
| Deployment Cost | Deployment Size | | | | | | Deployment Cost | Deployment Size | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| 3509773 | 16260 | | | | | | 3517605 | 16295 | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | | | | | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -232,15 +232,15 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountVaults | 5230 | 5230 | 5230 | 5230 | 4 | | getAccountVaults | 5230 | 5230 | 5230 | 5230 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| getVault | 13653 | 13653 | 13653 | 13653 | 4182 | | getVault | 13653 | 13653 | 13653 | 13653 | 4180 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 92774 | 92774 | 92774 | 92774 | 88 | | initialize | 92774 | 92774 | 92774 | 92774 | 91 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| lastRewardTime | 2407 | 2407 | 2407 | 2407 | 2 | | lastRewardTime | 2407 | 2407 | 2407 | 2407 | 3 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 66358 | 66358 | 66358 | 66358 | 2 | | leave | 66358 | 66358 | 66358 | 66358 | 2 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 7096 | 40159 | 43888 | 62877 | 1034 | | lock | 7096 | 40188 | 43888 | 62877 | 1034 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 9229 | 57567 | 16864 | 187311 | 4 | | migrateToVault | 9229 | 57567 | 16864 | 187311 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -252,47 +252,49 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 364 | 364 | 364 | 364 | 3 | | proxiableUUID | 364 | 364 | 364 | 364 | 3 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| registerVault | 2605 | 74457 | 75037 | 75037 | 361 | | registerVault | 2605 | 74476 | 75037 | 75037 | 373 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardEndTime | 2364 | 2364 | 2364 | 2364 | 2 | | rewardAmount | 2405 | 2405 | 2405 | 2405 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardStartTime | 2386 | 2386 | 2386 | 2386 | 2 | | rewardEndTime | 2364 | 2364 | 2364 | 2364 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOf | 20317 | 24410 | 25930 | 26151 | 268 | | rewardStartTime | 2386 | 2386 | 2386 | 2386 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOf | 20317 | 24431 | 25930 | 26151 | 268 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOfAccount | 62242 | 62242 | 62242 | 62242 | 1 | | rewardsBalanceOfAccount | 62242 | 62242 | 62242 | 62242 | 1 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 2508 | 105565 | 107076 | 107076 | 265 | | setReward | 2508 | 104812 | 107146 | 107146 | 271 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| setRewardsSupplier | 26809 | 26809 | 26809 | 26809 | 88 | | setRewardsSupplier | 26809 | 26809 | 26809 | 26809 | 91 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| setTrustedCodehash | 24171 | 24171 | 24171 | 24171 | 88 | | setTrustedCodehash | 24171 | 24171 | 24171 | 24171 | 91 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2713 | 125321 | 57926 | 213584 | 2667 | | stake | 2713 | 123088 | 57926 | 213584 | 2667 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMP | 6827 | 8279 | 8279 | 9732 | 6 | | totalMP | 6827 | 8279 | 8279 | 9732 | 6 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPAccrued | 2407 | 2407 | 2407 | 2407 | 4162 | | totalMPAccrued | 2407 | 2407 | 2407 | 2407 | 4160 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPStaked | 2363 | 2363 | 2363 | 2363 | 4165 | | totalMPStaked | 2363 | 2363 | 2363 | 2363 | 4163 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMaxMP | 2429 | 2429 | 2429 | 2429 | 4162 | | totalMaxMP | 2429 | 2429 | 2429 | 2429 | 4160 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsAccrued | 2407 | 2407 | 2407 | 2407 | 3 | | totalRewardsAccrued | 2407 | 2407 | 2407 | 2407 | 3 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsSupply | 6759 | 11071 | 11814 | 11925 | 290 | | totalRewardsSupply | 6759 | 11080 | 11814 | 11925 | 290 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalShares | 4619 | 4619 | 4619 | 4619 | 6 | | totalShares | 4619 | 4619 | 4619 | 4619 | 6 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalStaked | 2408 | 2408 | 2408 | 2408 | 4168 | | totalStaked | 2408 | 2408 | 2408 | 2408 | 4166 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 36868 | 39344 | 36894 | 76663 | 258 | | unstake | 36868 | 39288 | 36894 | 76663 | 263 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| updateAccount | 347651 | 347651 | 347651 | 347651 | 1 | | updateAccount | 347651 | 347651 | 347651 | 347651 | 1 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| updateGlobalState | 15809 | 25865 | 29219 | 29219 | 8 | | updateGlobalState | 15809 | 25865 | 29219 | 29219 | 8 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| updateVault | 31936 | 34446 | 31936 | 110567 | 1024 | | updateVault | 31936 | 34014 | 31936 | 110567 | 1022 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeTo | 10323 | 10939 | 10323 | 12789 | 4 | | upgradeTo | 10323 | 10939 | 10323 | 12789 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -316,27 +318,27 @@
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyExit | 15023 | 31463 | 31461 | 48561 | 263 | | emergencyExit | 15023 | 31463 | 31461 | 48561 | 263 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 70212 | 70212 | 70212 | 70212 | 374 | | initialize | 70212 | 70212 | 70212 | 70212 | 386 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 43439 | 145443 | 89216 | 359902 | 4 | | leave | 43439 | 145443 | 89216 | 359902 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 21526 | 54657 | 58318 | 80340 | 1034 | | lock | 21526 | 54670 | 58318 | 80340 | 1034 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| lockUntil | 2363 | 2363 | 2363 | 2363 | 3819 | | lockUntil | 2363 | 2363 | 2363 | 2363 | 3817 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| migrateFromVault | 24497 | 24497 | 24497 | 24497 | 1 | | migrateFromVault | 24497 | 24497 | 24497 | 24497 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 21723 | 78456 | 29358 | 233387 | 4 | | migrateToVault | 21723 | 78456 | 29358 | 233387 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| owner | 402 | 434 | 402 | 2402 | 369 | | owner | 402 | 433 | 402 | 2402 | 381 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| register | 3354 | 79838 | 83167 | 83167 | 374 | | register | 3354 | 79942 | 83167 | 83167 | 386 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2636 | 167931 | 72429 | 288304 | 2673 | | stake | 2636 | 164779 | 72429 | 288304 | 2673 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| stakeManager | 347 | 347 | 347 | 347 | 360 | | stakeManager | 347 | 347 | 347 | 347 | 372 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake(uint256) | 4655 | 52505 | 51424 | 106772 | 272 | | unstake(uint256) | 4655 | 53356 | 51424 | 106772 | 272 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake(uint256,address) | 2630 | 2630 | 2630 | 2630 | 1 | | unstake(uint256,address) | 2630 | 2630 | 2630 | 2630 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------| |----------------------------------------+-----------------+--------+--------+--------+---------|
@@ -358,7 +360,7 @@
|----------------------------------------------------+-----------------+-------+--------+--------+---------| |----------------------------------------------------+-----------------+-------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------------------+-----------------+-------+--------+--------+---------| |----------------------------------------------------+-----------------+-------+--------+--------+---------|
| fallback | 5230 | 12829 | 7353 | 374028 | 23163 | | fallback | 5230 | 12811 | 7353 | 374028 | 23163 |
╰----------------------------------------------------+-----------------+-------+--------+--------+---------╯ ╰----------------------------------------------------+-----------------+-------+--------+--------+---------╯
╭--------------------------------------------+-----------------+--------+--------+--------+---------╮ ╭--------------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -372,7 +374,7 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| createVault | 145330 | 221994 | 225143 | 225143 | 373 | | createVault | 145330 | 222092 | 225143 | 225143 | 385 |
|--------------------------------------------+-----------------+--------+--------+--------+---------| |--------------------------------------------+-----------------+--------+--------+--------+---------|
| vaultImplementation | 2345 | 2345 | 2345 | 2345 | 1 | | vaultImplementation | 2345 | 2345 | 2345 | 2345 | 1 |
╰--------------------------------------------+-----------------+--------+--------+--------+---------╯ ╰--------------------------------------------+-----------------+--------+--------+--------+---------╯
@@ -464,7 +466,7 @@
|-------------------------------------------------------------------+-----------------+-------+--------+-------+---------| |-------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setTotalKarmaShares | 43589 | 43589 | 43589 | 43589 | 48 | | setTotalKarmaShares | 43589 | 43589 | 43589 | 43589 | 48 |
|-------------------------------------------------------------------+-----------------+-------+--------+-------+---------| |-------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setUserKarmaShare | 24210 | 44032 | 44134 | 44266 | 531 | | setUserKarmaShare | 24210 | 44107 | 44134 | 44266 | 531 |
|-------------------------------------------------------------------+-----------------+-------+--------+-------+---------| |-------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| totalRewardsSupply | 2324 | 2324 | 2324 | 2324 | 48 | | totalRewardsSupply | 2324 | 2324 | 2324 | 2324 | 48 |
╰-------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯ ╰-------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
@@ -508,11 +510,11 @@
|---------------------------------------------+-----------------+-------+--------+-------+---------| |---------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls | | Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------+-----------------+-------+--------+-------+---------| |---------------------------------------------+-----------------+-------+--------+-------+---------|
| approve | 29075 | 31546 | 29183 | 46259 | 2676 | | approve | 29075 | 31610 | 29183 | 46259 | 2688 |
|---------------------------------------------+-----------------+-------+--------+-------+---------| |---------------------------------------------+-----------------+-------+--------+-------+---------|
| balanceOf | 2561 | 2561 | 2561 | 2561 | 4966 | | balanceOf | 2561 | 2561 | 2561 | 2561 | 4964 |
|---------------------------------------------+-----------------+-------+--------+-------+---------| |---------------------------------------------+-----------------+-------+--------+-------+---------|
| mint | 33964 | 37264 | 34072 | 68248 | 2688 | | mint | 33964 | 37343 | 34072 | 68248 | 2700 |
╰---------------------------------------------+-----------------+-------+--------+-------+---------╯ ╰---------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮ ╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮

View File

@@ -16,15 +16,15 @@ EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 495287)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 446582) EmergencyExitTest:test_EmergencyExitWithLock() (gas: 446582)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 500965) EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 500965)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39109) EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39109)
FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1024, μ: 581604, ~: 545120) FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1006, μ: 577225, ~: 545120)
FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1024, μ: 802844, ~: 769362) FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1006, μ: 799196, ~: 769362)
FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1007, μ: 593693, ~: 593595) FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1000, μ: 593689, ~: 593595)
FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1025, μ: 992626, ~: 993766) FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1006, μ: 992812, ~: 993766)
FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1025, μ: 592561, ~: 566387) FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1006, μ: 589634, ~: 566387)
FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1001, μ: 645371, ~: 647577) FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1000, μ: 645421, ~: 647647)
FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1025, μ: 377229, ~: 342206) FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1006, μ: 370738, ~: 342204)
FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1024, μ: 794426, ~: 772803) FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1006, μ: 794558, ~: 772791)
FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1024, μ: 581627, ~: 545143) FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1006, μ: 577248, ~: 545143)
IntegrationTest:testStakeFoo() (gas: 2389875) IntegrationTest:testStakeFoo() (gas: 2389875)
KarmaNFTTest:testApproveNotAllowed() (gas: 10507) KarmaNFTTest:testApproveNotAllowed() (gas: 10507)
KarmaNFTTest:testGetApproved() (gas: 10531) KarmaNFTTest:testGetApproved() (gas: 10531)
@@ -63,9 +63,9 @@ KarmaTiersTest:test_Revert_When_TiersNotStartingAtZero() (gas: 37667)
KarmaTiersTest:test_Revert_When_UpdateTiersCalledByNonOwner() (gas: 36642) KarmaTiersTest:test_Revert_When_UpdateTiersCalledByNonOwner() (gas: 36642)
KarmaTiersTest:test_Success_When_LastTierIsUnlimited() (gas: 242295) KarmaTiersTest:test_Success_When_LastTierIsUnlimited() (gas: 242295)
KarmaTiersTest:test_Success_When_TiersAreContiguous() (gas: 336294) KarmaTiersTest:test_Success_When_TiersAreContiguous() (gas: 336294)
LeaveTest:test_LeaveShouldKeepFundsLockedInStakeVault() (gas: 9717501) LeaveTest:test_LeaveShouldKeepFundsLockedInStakeVault() (gas: 9732359)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9812124) LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9826983)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1025, μ: 396949, ~: 396973) LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1006, μ: 396949, ~: 396973)
LockTest:test_LockFailsWithNoStake() (gas: 85767) LockTest:test_LockFailsWithNoStake() (gas: 85767)
LockTest:test_LockFailsWithZero() (gas: 358576) LockTest:test_LockFailsWithZero() (gas: 358576)
LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 736448) LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 736448)
@@ -129,7 +129,7 @@ SetRewardTest:test_RevertWhen_SenderIsNotOperator() (gas: 61893)
SlashAmountOfTest:testAddKarmaDistributorOnlyAdmin() (gas: 438224) SlashAmountOfTest:testAddKarmaDistributorOnlyAdmin() (gas: 438224)
SlashAmountOfTest:testBalanceOf() (gas: 456642) SlashAmountOfTest:testBalanceOf() (gas: 456642)
SlashAmountOfTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83783) SlashAmountOfTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83783)
SlashAmountOfTest:testFuzz_SlashAmountOf(uint256,uint256,uint256) (runs: 1004, μ: 408220, ~: 409081) SlashAmountOfTest:testFuzz_SlashAmountOf(uint256,uint256,uint256) (runs: 1002, μ: 408298, ~: 409081)
SlashAmountOfTest:testMintOnlyAdmin() (gas: 429075) SlashAmountOfTest:testMintOnlyAdmin() (gas: 429075)
SlashAmountOfTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163437) SlashAmountOfTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163437)
SlashAmountOfTest:testRemoveUnknownKarmaDistributor() (gas: 41654) SlashAmountOfTest:testRemoveUnknownKarmaDistributor() (gas: 41654)
@@ -139,7 +139,7 @@ SlashAmountOfTest:test_SlashAmountOf() (gas: 327608)
SlashTest:testAddKarmaDistributorOnlyAdmin() (gas: 438270) SlashTest:testAddKarmaDistributorOnlyAdmin() (gas: 438270)
SlashTest:testBalanceOf() (gas: 456648) SlashTest:testBalanceOf() (gas: 456648)
SlashTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83827) SlashTest:testBalanceOfWithNoSystemTotalKarma() (gas: 83827)
SlashTest:testFuzz_Slash(uint256) (runs: 1025, μ: 280205, ~: 280146) SlashTest:testFuzz_Slash(uint256) (runs: 1006, μ: 280204, ~: 280146)
SlashTest:testMintOnlyAdmin() (gas: 429131) SlashTest:testMintOnlyAdmin() (gas: 429131)
SlashTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163461) SlashTest:testRemoveKarmaDistributorOnlyOwner() (gas: 163461)
SlashTest:testRemoveRewardDistributorShouldReduceSlashAmount() (gas: 610762) SlashTest:testRemoveRewardDistributorShouldReduceSlashAmount() (gas: 610762)
@@ -150,12 +150,15 @@ SlashTest:test_RevertWhen_KarmaBalanceIsInvalid() (gas: 71550)
SlashTest:test_RevertWhen_SenderIsNotDefaultAdminOrSlasher() (gas: 43232) SlashTest:test_RevertWhen_SenderIsNotDefaultAdminOrSlasher() (gas: 43232)
SlashTest:test_Slash() (gas: 428385) SlashTest:test_Slash() (gas: 428385)
SlashTest:test_SlashRemainingBalanceIfBalanceIsLow() (gas: 251800) SlashTest:test_SlashRemainingBalanceIfBalanceIsLow() (gas: 251800)
StakeManager_RewardsTest:testRewardsBalanceOf() (gas: 2745571) StakeManager_RewardsTest:testRewardsBalanceOf() (gas: 2745733)
StakeManager_RewardsTest:testSetRewards() (gas: 278063) StakeManager_RewardsTest:testSetRewards() (gas: 278133)
StakeManager_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 63800) StakeManager_RewardsTest:testSetRewardsAccumulatesRemainingRewards() (gas: 384056)
StakeManager_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 103558) StakeManager_RewardsTest:testSetRewardsAfterPeriodEndedNoAccumulation() (gas: 304755)
StakeManager_RewardsTest:testSetRewardsWithPartialElapsedTime() (gas: 302941)
StakeManager_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 61675)
StakeManager_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 101433)
StakeManager_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39367) StakeManager_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39367)
StakeManager_RewardsTest:testTotalRewardsSupply() (gas: 1297734) StakeManager_RewardsTest:testTotalRewardsSupply() (gas: 1297874)
StakeTest:test_StakeMultipleAccounts() (gas: 699422) StakeTest:test_StakeMultipleAccounts() (gas: 699422)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 754392) StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 754392)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1357071) StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1357071)
@@ -212,7 +215,7 @@ UnstakeTest:test_UnstakeOneAccount() (gas: 769214)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 731845) UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 731845)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 686049) UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 686049)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 712558) UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 712558)
UpdateVaultTest:test_UpdateAccount() (gas: 2583507) UpdateVaultTest:test_UpdateAccount() (gas: 2583577)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3586110) UpgradeTest:test_RevertWhenNotOwner() (gas: 3593950)
UpgradeTest:test_UpgradeStakeManager() (gas: 9658332) UpgradeTest:test_UpgradeStakeManager() (gas: 9673190)
VaultRegistrationTest:test_VaultRegistration() (gas: 90138) VaultRegistrationTest:test_VaultRegistration() (gas: 90138)

View File

@@ -299,10 +299,6 @@ contract StakeManager is
* @param duration The duration of the reward period. * @param duration The duration of the reward period.
*/ */
function setReward(uint256 amount, uint256 duration) external onlyRewardsSupplier { function setReward(uint256 amount, uint256 duration) external onlyRewardsSupplier {
if (rewardEndTime > block.timestamp) {
revert StakeManager__RewardPeriodNotEnded();
}
if (duration == 0) { if (duration == 0) {
revert StakeManager__DurationCannotBeZero(); revert StakeManager__DurationCannotBeZero();
} }
@@ -314,10 +310,19 @@ contract StakeManager is
// this will call updateRewardIndex and update the totalRewardsAccrued // this will call updateRewardIndex and update the totalRewardsAccrued
_updateGlobalState(); _updateGlobalState();
uint256 remainingRewards = 0;
if (rewardEndTime > block.timestamp) {
uint256 elapsedTime = block.timestamp - rewardStartTime;
uint256 totalDuration = rewardEndTime - rewardStartTime;
uint256 distributedRewards = Math.mulDiv(elapsedTime, rewardAmount, totalDuration);
remainingRewards = rewardAmount - distributedRewards;
}
// in case updateRewardIndex returns earlier, // in case updateRewardIndex returns earlier,
// we still update the lastRewardTime // we still update the lastRewardTime
lastRewardTime = block.timestamp; lastRewardTime = block.timestamp;
rewardAmount = amount; rewardAmount = remainingRewards + amount;
rewardStartTime = block.timestamp; rewardStartTime = block.timestamp;
rewardEndTime = block.timestamp + duration; rewardEndTime = block.timestamp + duration;
} }

View File

@@ -2395,6 +2395,89 @@ contract StakeManager_RewardsTest is StakeManagerTest {
super.setUp(); super.setUp();
} }
function testSetRewardsAccumulatesRemainingRewards() public {
// Setup initial reward period
uint256 initialReward = 1000e18;
uint256 duration = 10 days;
uint256 startTime = vm.getBlockTimestamp();
_setRewards(initialReward, duration);
// Verify initial setup
assertEq(streamer.rewardAmount(), initialReward);
assertEq(streamer.rewardStartTime(), startTime);
assertEq(streamer.rewardEndTime(), startTime + duration);
// Advance time to halfway through the reward period
uint256 halfwayTime = startTime + duration / 2;
vm.warp(halfwayTime);
// Set new rewards before the current period ends
uint256 newRewardAmount = 500e18;
uint256 newDuration = 5 days;
_setRewards(newRewardAmount, newDuration);
// Calculate expected remaining rewards from first period
// At halfway point, 50% of rewards should remain
uint256 expectedRemainingRewards = initialReward / 2;
uint256 expectedTotalRewards = expectedRemainingRewards + newRewardAmount;
// Verify the reward amount is accumulated correctly
assertEq(streamer.rewardAmount(), expectedTotalRewards, "Total reward amount should be remaining + new");
assertEq(streamer.rewardStartTime(), halfwayTime, "Start time should be updated");
assertEq(streamer.rewardEndTime(), halfwayTime + newDuration, "End time should be updated");
assertEq(streamer.lastRewardTime(), halfwayTime, "Last reward time should be updated");
}
function testSetRewardsWithPartialElapsedTime() public {
// Setup initial reward period
uint256 initialReward = 1200e18;
uint256 duration = 12 days;
uint256 startTime = vm.getBlockTimestamp();
_setRewards(initialReward, duration);
// Advance time to 1/3 through the reward period (4 days out of 12)
uint256 oneThirdTime = startTime + duration / 3;
vm.warp(oneThirdTime);
// Set new rewards
uint256 newRewardAmount = 800e18;
uint256 newDuration = 8 days;
_setRewards(newRewardAmount, newDuration);
// Calculate expected remaining rewards
// After 1/3 of time, 2/3 of rewards should remain
uint256 expectedRemainingRewards = (initialReward * 2) / 3; // 800e18
uint256 expectedTotalRewards = expectedRemainingRewards + newRewardAmount; // 1600e18
assertEq(streamer.rewardAmount(), expectedTotalRewards, "Should accumulate remaining rewards correctly");
}
function testSetRewardsAfterPeriodEndedNoAccumulation() public {
// Setup initial reward period
uint256 initialReward = 1000e18;
uint256 duration = 10 days;
uint256 startTime = vm.getBlockTimestamp();
_setRewards(initialReward, duration);
// Advance time past the end of the reward period
uint256 afterEndTime = startTime + duration + 1 days;
vm.warp(afterEndTime);
// Set new rewards after the period has ended
uint256 newRewardAmount = 500e18;
uint256 newDuration = 5 days;
_setRewards(newRewardAmount, newDuration);
// Should not accumulate any remaining rewards since period ended
assertEq(streamer.rewardAmount(), newRewardAmount, "Should only use new reward amount when period has ended");
}
function testSetRewards() public { function testSetRewards() public {
assertEq(streamer.rewardStartTime(), 0); assertEq(streamer.rewardStartTime(), 0);
assertEq(streamer.rewardEndTime(), 0); assertEq(streamer.rewardEndTime(), 0);