feat(RewardsStreamerMP): vaults shares are stakedBalance + mpStaked

This commit is contained in:
Andrea Franz
2025-02-18 16:12:48 +01:00
parent a2e18091b2
commit 6b31d3944f
5 changed files with 224 additions and 131 deletions

View File

@@ -4,13 +4,13 @@
+=======================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 7075569 | 33779 | | | | |
| 7187469 | 34296 | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 6177077 | 6177077 | 6177077 | 6177077 | 67 |
| run | 6280687 | 6280687 | 6280687 | 6280687 | 67 |
╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮
@@ -32,13 +32,13 @@
+=========================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 3113166 | 15321 | | | | |
| 3225030 | 15838 | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 2632465 | 2632465 | 2632465 | 2632465 | 3 |
| run | 2736117 | 2736117 | 2736117 | 2736117 | 3 |
╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭------------------------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -46,7 +46,7 @@
+=============================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| 2793224 | 12882 | | | | |
| 2905085 | 13399 | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -54,67 +54,79 @@
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MAX_LOCKUP_PERIOD | 382 | 382 | 382 | 382 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MAX_MULTIPLIER | 262 | 262 | 262 | 262 | 9 |
| MAX_MULTIPLIER | 328 | 328 | 328 | 328 | 9 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MIN_LOCKUP_PERIOD | 308 | 308 | 308 | 308 | 15 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyModeEnabled | 2398 | 2398 | 2398 | 2398 | 7 |
| emergencyModeEnabled | 2420 | 2420 | 2420 | 2420 | 7 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| enableEmergencyMode | 2507 | 19414 | 24699 | 24699 | 8 |
| enableEmergencyMode | 2529 | 19436 | 24721 | 24721 | 8 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalMaxMP | 3133 | 3133 | 3133 | 3133 | 1 |
| getAccountTotalMaxMP | 3155 | 3155 | 3155 | 3155 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalStakedBalance | 15173 | 15173 | 15173 | 15173 | 1 |
| getAccountTotalStakedBalance | 15195 | 15195 | 15195 | 15195 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountVaults | 5225 | 5225 | 5225 | 5225 | 4 |
| getAccountVaults | 5202 | 5202 | 5202 | 5202 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getStakedBalance | 2618 | 2618 | 2618 | 2618 | 1 |
| getStakedBalance | 2596 | 2596 | 2596 | 2596 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getVault | 1621 | 1621 | 1621 | 1621 | 72 |
| getVault | 1790 | 1790 | 1790 | 1790 | 72 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 115654 | 115654 | 115654 | 115654 | 67 |
| initialize | 115589 | 115589 | 115589 | 115589 | 67 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lastRewardTime | 428 | 1428 | 1428 | 2428 | 2 |
| lastRewardTime | 384 | 1384 | 1384 | 2384 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 79000 | 79000 | 79000 | 79000 | 1 |
| leave | 86840 | 86840 | 86840 | 86840 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 14282 | 41776 | 41737 | 77491 | 259 |
| lock | 14216 | 43945 | 43883 | 87862 | 259 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpBalanceOfAccount | 10308 | 10308 | 10308 | 10308 | 1 |
| mpBalanceOf | 956 | 2600 | 2358 | 7102 | 8 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 387 | 387 | 387 | 387 | 3 |
| mpBalanceOfAccount | 10330 | 10330 | 10330 | 10330 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpStakedOf | 646 | 868 | 646 | 2646 | 9 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 342 | 342 | 342 | 342 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| registerVault | 2562 | 73001 | 73461 | 73461 | 266 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardEndTime | 362 | 1362 | 1362 | 2362 | 2 |
| rewardEndTime | 429 | 1429 | 1429 | 2429 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardStartTime | 407 | 1407 | 1407 | 2407 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOf | 1682 | 2982 | 3267 | 5792 | 10 |
| rewardsBalanceOf | 2091 | 3244 | 3897 | 4091 | 8 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 2606 | 57798 | 84839 | 104799 | 7 |
| setReward | 2561 | 59017 | 87006 | 106966 | 7 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setTrustedCodehash | 24199 | 24199 | 24199 | 24199 | 67 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2637 | 178129 | 179984 | 207586 | 324 |
| stake | 2681 | 221712 | 224654 | 245139 | 324 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPAccrued | 384 | 384 | 384 | 384 | 81 |
| totalMP | 777 | 1223 | 1223 | 1669 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMaxMP | 406 | 406 | 406 | 406 | 81 |
| totalMPAccrued | 362 | 362 | 362 | 362 | 81 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsAccrued | 407 | 407 | 407 | 407 | 3 |
| totalMPStaked | 406 | 406 | 406 | 406 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsSupply | 1036 | 1964 | 1817 | 6776 | 31 |
| totalMaxMP | 384 | 384 | 384 | 384 | 81 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalStaked | 427 | 427 | 427 | 427 | 82 |
| totalRewardsAccrued | 384 | 384 | 384 | 384 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 62902 | 63547 | 62902 | 67099 | 13 |
| totalRewardsSupply | 971 | 1873 | 1752 | 6711 | 32 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateGlobalState | 13597 | 24997 | 26988 | 26988 | 19 |
| totalShares | 615 | 615 | 615 | 615 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateVaultMP | 11707 | 17581 | 18273 | 18273 | 19 |
| totalStaked | 385 | 385 | 385 | 385 | 86 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeToAndCall | 3181 | 7875 | 8438 | 10881 | 5 |
| unstake | 67347 | 71126 | 70742 | 74939 | 13 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateGlobalState | 15809 | 27209 | 29200 | 29200 | 19 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateVaultMP | 11751 | 17625 | 18317 | 18317 | 19 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeToAndCall | 3203 | 7870 | 8415 | 10903 | 5 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| vaultShares | 889 | 1139 | 889 | 2889 | 8 |
╰------------------------------------------------------+-----------------+--------+--------+--------+---------╯
╭----------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -130,27 +142,27 @@
|----------------------------------------+-----------------+--------+--------+--------+---------|
| STAKING_TOKEN | 239 | 239 | 239 | 239 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyExit | 14974 | 31592 | 31512 | 48612 | 7 |
| emergencyExit | 14996 | 31614 | 31534 | 48634 | 7 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 98005 | 98005 | 98005 | 98005 | 266 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 12145 | 122321 | 61612 | 353914 | 4 |
| leave | 12145 | 124280 | 65532 | 353913 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 12075 | 57030 | 57164 | 92917 | 260 |
| lock | 12075 | 59190 | 59310 | 103288 | 260 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| owner | 377 | 377 | 377 | 377 | 265 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| register | 12654 | 76615 | 77050 | 77050 | 266 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 12077 | 233302 | 235965 | 263567 | 325 |
| stake | 12077 | 276751 | 280635 | 301120 | 325 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stakeManager | 367 | 367 | 367 | 367 | 265 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| trustStakeManager | 7577 | 7577 | 7577 | 7577 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 12054 | 88757 | 94012 | 98209 | 14 |
| unstake | 12054 | 95794 | 101852 | 106049 | 14 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| withdraw | 20705 | 20705 | 20705 | 20705 | 1 |
| withdraw | 20683 | 20683 | 20683 | 20683 | 1 |
╰----------------------------------------+-----------------+--------+--------+--------+---------╯
╭----------------------------------------------------+-----------------+------+--------+--------+---------╮
@@ -164,7 +176,7 @@
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| fallback | 689 | 7613 | 854 | 131157 | 464 |
| fallback | 735 | 7244 | 812 | 133348 | 504 |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| implementation | 343 | 2340 | 2343 | 2343 | 870 |
╰----------------------------------------------------+-----------------+------+--------+--------+---------╯
@@ -338,7 +350,7 @@
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 845 | 161317 | 161317 | 321839 | 333 |
| leave | 844 | 161316 | 161316 | 321838 | 333 |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 330 | 330 | 330 | 330 | 1 |
╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯

View File

@@ -1,76 +1,76 @@
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 92757)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 305270)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 392064)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 676662)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 399863)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 399432)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 384965)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39471)
IntegrationTest:testStakeFoo() (gas: 1223273)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6163918)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 302396)
LeaveTest:test_TrustNewStakeManager() (gas: 6232281)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 348571, ~: 348600)
LockTest:test_LockFailsWithNoStake() (gas: 104635)
LockTest:test_LockFailsWithZero() (gas: 319764)
LockTest:test_LockWithoutPriorLock() (gas: 397120)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1756736)
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 92801)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 349962)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 436900)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 749214)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 444785)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 444157)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 429593)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39493)
IntegrationTest:testStakeFoo() (gas: 1334253)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6428998)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 347066)
LeaveTest:test_TrustNewStakeManager() (gas: 6492626)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 395384, ~: 395404)
LockTest:test_LockFailsWithNoStake() (gas: 106781)
LockTest:test_LockFailsWithZero() (gas: 364368)
LockTest:test_LockWithoutPriorLock() (gas: 452644)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1801341)
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 4996)
MathTest:test_CalcAccrueMP() (gas: 8013)
MathTest:test_CalcBonusMP() (gas: 18644)
MathTest:test_CalcInitialMP() (gas: 5375)
MathTest:test_CalcMaxAccruedMP() (gas: 4642)
MathTest:test_CalcMaxTotalMP() (gas: 19411)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 736949)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 836739)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 85934)
NFTMetadataGeneratorSVGTest:testSetImageStrings() (gas: 58332)
NFTMetadataGeneratorSVGTest:testSetImageStringsRevert() (gas: 35804)
NFTMetadataGeneratorURLTest:testGenerateMetadata() (gas: 102512)
NFTMetadataGeneratorURLTest:testSetBaseURL() (gas: 49555)
NFTMetadataGeneratorURLTest:testSetBaseURLRevert() (gas: 35979)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 762214)
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 160138)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39407)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39385)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39420)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 620101)
StakeTest:test_StakeMultipleAccounts() (gas: 506352)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 512387)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 847651)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 521496)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 543440)
StakeTest:test_StakeOneAccount() (gas: 281843)
StakeTest:test_StakeOneAccountAndRewards() (gas: 287898)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 508927)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 497021)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 302158)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 302698)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 302765)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 939358)
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 162351)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39362)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39340)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39375)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 667281)
StakeTest:test_StakeMultipleAccounts() (gas: 578924)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 584872)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 925624)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 593661)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 615616)
StakeTest:test_StakeOneAccount() (gas: 326635)
StakeTest:test_StakeOneAccountAndRewards() (gas: 332604)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 558335)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 546429)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 346753)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 347293)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 347360)
StakingTokenTest:testStakeToken() (gas: 13140)
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 1896237)
UnstakeTest:test_StakeMultipleAccounts() (gas: 506329)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 512409)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 847628)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 521473)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 543462)
UnstakeTest:test_StakeOneAccount() (gas: 281843)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 287920)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 508949)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 497065)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 302158)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 302720)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 302809)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 548511)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 714976)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 812029)
UnstakeTest:test_UnstakeOneAccount() (gas: 486276)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 506998)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 414434)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 532075)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2869860)
UpgradeTest:test_UpgradeStakeManager() (gas: 6063413)
VaultRegistrationTest:test_VaultRegistration() (gas: 62154)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 318070)
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 1896281)
UnstakeTest:test_StakeMultipleAccounts() (gas: 578901)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 584894)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 925601)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 593638)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 615638)
UnstakeTest:test_StakeOneAccount() (gas: 326635)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 332626)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 558357)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 546473)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 346753)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 347315)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 347404)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 603657)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 797247)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 898958)
UnstakeTest:test_UnstakeOneAccount() (gas: 543649)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 558320)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 467103)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 586594)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2981897)
UpgradeTest:test_UpgradeStakeManager() (gas: 6323587)
VaultRegistrationTest:test_VaultRegistration() (gas: 62062)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 362676)
XPNFTTokenTest:testApproveNotAllowed() (gas: 10500)
XPNFTTokenTest:testGetApproved() (gas: 10523)
XPNFTTokenTest:testIsApprovedForAll() (gas: 10698)

View File

@@ -40,10 +40,12 @@ contract RewardsStreamerMP is
uint256 public constant SCALE_FACTOR = 1e18;
uint256 public totalStaked;
uint256 public totalMPStaked;
uint256 public totalMPAccrued;
uint256 public totalMaxMP;
uint256 public rewardIndex;
uint256 public lastMPUpdatedTime;
bool public emergencyModeEnabled;
uint256 public totalRewardsAccrued;
@@ -59,6 +61,7 @@ contract RewardsStreamerMP is
uint256 maxMP;
uint256 lastMPUpdateTime;
uint256 lockUntil;
uint256 mpStaked;
}
mapping(address vault => VaultData data) public vaultData;
@@ -201,6 +204,7 @@ contract RewardsStreamerMP is
vault.stakedBalance += amount;
totalStaked += amount;
totalMPStaked += _deltaMpTotal;
if (lockPeriod != 0) {
vault.lockUntil = _newLockEnd;
@@ -209,6 +213,7 @@ contract RewardsStreamerMP is
}
vault.mpAccrued += _deltaMpTotal;
vault.mpStaked += _deltaMpTotal;
totalMPAccrued += _deltaMpTotal;
vault.maxMP += _deltaMPMax;
@@ -242,10 +247,12 @@ contract RewardsStreamerMP is
// Update account state
vault.lockUntil = newLockEnd;
vault.mpAccrued += deltaMp;
vault.mpStaked += deltaMp;
vault.maxMP += deltaMp;
// Update global state
totalMPAccrued += deltaMp;
totalMPStaked += deltaMp;
totalMaxMP += deltaMp;
vault.rewardIndex = rewardIndex;
@@ -270,9 +277,15 @@ contract RewardsStreamerMP is
vault.stakedBalance, vault.lockUntil, block.timestamp, vault.mpAccrued, vault.maxMP, amount
);
vault.stakedBalance -= amount;
vault.mpAccrued -= _deltaMpTotal;
vault.maxMP -= _deltaMpMax;
vault.rewardIndex = rewardIndex;
vault.mpAccrued -= _deltaMpTotal;
if (vault.mpAccrued < vault.mpStaked) {
vault.mpStaked = vault.mpAccrued;
totalMPStaked -= vault.mpStaked - vault.mpAccrued;
}
totalMPAccrued -= _deltaMpTotal;
totalMaxMP -= _deltaMpMax;
totalStaked -= amount;
@@ -308,14 +321,18 @@ contract RewardsStreamerMP is
}
function updateGlobalMP() internal {
uint256 newTotalMPAccrued = _pendingTotalMPAccrued();
uint256 newTotalMPAccrued = _liveTotalMP();
if (newTotalMPAccrued > totalMPAccrued) {
totalMPAccrued = newTotalMPAccrued;
lastMPUpdatedTime = block.timestamp;
}
}
function _pendingTotalMPAccrued() internal view returns (uint256) {
function totalMP() external view returns (uint256) {
return _liveTotalMP();
}
function _liveTotalMP() internal view returns (uint256) {
if (totalMaxMP == 0) {
return totalMPAccrued;
}
@@ -385,7 +402,7 @@ contract RewardsStreamerMP is
uint256 accruedRewards;
uint256 newRewardIndex;
(accruedRewards, newRewardIndex) = _pendingRewardIndex();
(accruedRewards, newRewardIndex) = _liveRewardIndex();
totalRewardsAccrued += accruedRewards;
if (newRewardIndex > rewardIndex) {
@@ -396,14 +413,31 @@ contract RewardsStreamerMP is
function pendingRewardIndex() external view returns (uint256) {
uint256 newRewardIndex;
(, newRewardIndex) = _pendingRewardIndex();
(, newRewardIndex) = _liveRewardIndex();
return newRewardIndex;
}
function _pendingRewardIndex() internal view returns (uint256, uint256) {
uint256 totalShares = totalStaked;
function totalShares() external view returns (uint256) {
return _totalShares();
}
if (totalShares == 0) {
function _totalShares() internal view returns (uint256) {
return totalStaked + totalMPStaked;
}
function vaultShares(address vaultAddress) external view returns (uint256) {
return _vaultShares(vaultAddress);
}
function _vaultShares(address vaultAddress) internal view returns (uint256) {
VaultData storage vault = vaultData[vaultAddress];
return vault.stakedBalance + vault.mpStaked;
}
function _liveRewardIndex() internal view returns (uint256, uint256) {
uint256 shares = _totalShares();
if (shares == 0) {
return (0, rewardIndex);
}
@@ -420,7 +454,7 @@ contract RewardsStreamerMP is
return (0, rewardIndex);
}
uint256 newRewardIndex = rewardIndex + Math.mulDiv(accruedRewards, SCALE_FACTOR, totalShares);
uint256 newRewardIndex = rewardIndex + Math.mulDiv(accruedRewards, SCALE_FACTOR, shares);
return (accruedRewards, newRewardIndex);
}
@@ -433,11 +467,11 @@ contract RewardsStreamerMP is
return 0;
}
uint256 deltaMpTotal = _calculateAccrual(
uint256 deltaMP = _calculateAccrual(
vault.stakedBalance, vault.mpAccrued, vault.maxMP, vault.lastMPUpdateTime, block.timestamp
);
return deltaMpTotal;
return deltaMP;
}
function _updateVaultMP(address vaultAddress, bool forceMPUpdate) internal {
@@ -471,11 +505,11 @@ contract RewardsStreamerMP is
function rewardsBalanceOf(address vaultAddress) public view returns (uint256) {
uint256 newRewardIndex;
(, newRewardIndex) = _pendingRewardIndex();
(, newRewardIndex) = _liveRewardIndex();
VaultData storage vault = vaultData[vaultAddress];
uint256 accountShares = vault.stakedBalance;
uint256 accountShares = vault.stakedBalance + vault.mpStaked;
uint256 deltaRewardIndex = newRewardIndex - vault.rewardIndex;
return (accountShares * deltaRewardIndex) / SCALE_FACTOR;
@@ -500,4 +534,9 @@ contract RewardsStreamerMP is
function mpBalanceOf(address vaultAddress) external view returns (uint256) {
return _mpBalanceOf(vaultAddress);
}
function mpStakedOf(address vaultAddress) external view returns (uint256) {
VaultData storage vault = vaultData[vaultAddress];
return vault.mpStaked;
}
}

View File

@@ -52,14 +52,14 @@ abstract contract StakeMath is MultiplierPointMath {
uint256 newBalance = _balance + _increasedAmount;
_newLockEnd = Math.max(_currentLockEndTime, _processTime) + _increasedLockSeconds;
// solhint-disable-next-line
uint256 dt_lock = _newLockEnd - _processTime;
if (dt_lock != 0 && (dt_lock < MIN_LOCKUP_PERIOD || dt_lock > MAX_LOCKUP_PERIOD)) {
uint256 dtLock = _newLockEnd - _processTime;
if (dtLock != 0 && (dtLock < MIN_LOCKUP_PERIOD || dtLock > MAX_LOCKUP_PERIOD)) {
revert StakeMath__InvalidLockingPeriod();
}
uint256 deltaMpBonus;
if (dt_lock > 0) {
deltaMpBonus = _bonusMP(_increasedAmount, dt_lock);
if (dtLock > 0) {
deltaMpBonus = _bonusMP(_increasedAmount, dtLock);
}
if (_balance > 0 && _increasedLockSeconds > 0) {

View File

@@ -2101,35 +2101,77 @@ contract RewardsStreamerMP_RewardsTest is RewardsStreamerMPTest {
function testRewardsBalanceOf() public {
assertEq(streamer.totalRewardsSupply(), 0);
uint256 year = 365 days;
uint256 initialTime = vm.getBlockTimestamp();
_stake(alice, 100e18, 0);
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 0);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 0);
vm.prank(admin);
streamer.setReward(1000e18, 10 days);
streamer.setReward(1000e18, year);
assertEq(streamer.totalStaked(), 100e18);
assertEq(streamer.totalMPStaked(), 100e18);
assertEq(streamer.totalShares(), 200e18);
assertEq(streamer.totalRewardsSupply(), 0);
assertEq(streamer.totalMP(), 100e18);
assertEq(streamer.mpBalanceOf(vaults[alice]), 100e18);
assertEq(streamer.mpStakedOf(vaults[alice]), 100e18);
assertEq(streamer.vaultShares(vaults[alice]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 0);
assertEq(streamer.mpBalanceOf(vaults[bob]), 0);
assertEq(streamer.mpStakedOf(vaults[bob]), 0);
assertEq(streamer.mpStakedOf(vaults[bob]), 0);
assertEq(streamer.vaultShares(vaults[bob]), 0);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 0);
vm.warp(initialTime + 1 days);
assertEq(streamer.totalRewardsSupply(), 100e18, "Total rewards supply mismatch");
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 100e18);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 0);
vm.warp(initialTime + 5 days);
vm.warp(initialTime + year / 2);
_stake(bob, 100e18, 0);
assertEq(streamer.totalRewardsSupply(), 500e18, "Total rewards supply mismatch");
assertEq(streamer.totalStaked(), 200e18);
assertEq(streamer.totalMPStaked(), 200e18);
assertEq(streamer.totalShares(), 400e18);
assertEq(streamer.totalRewardsSupply(), 500e18);
// totalMP: 200 + 50 accrued by Alice (not stake yet)
assertEq(streamer.totalMP(), 250e18);
assertEq(streamer.mpBalanceOf(vaults[alice]), 150e18);
assertEq(streamer.mpStakedOf(vaults[alice]), 100e18);
assertEq(streamer.vaultShares(vaults[alice]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 500e18);
assertEq(streamer.mpBalanceOf(vaults[bob]), 100e18);
assertEq(streamer.mpStakedOf(vaults[bob]), 100e18);
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 0);
vm.warp(initialTime + 10 days);
vm.warp(initialTime + year);
assertEq(streamer.totalRewardsSupply(), 1000e18, "Total rewards supply mismatch");
assertEq(streamer.totalStaked(), 200e18);
assertEq(streamer.totalMPStaked(), 200e18);
assertEq(streamer.totalShares(), 400e18);
assertEq(streamer.totalRewardsSupply(), 1000e18);
assertEq(streamer.totalMP(), 350e18);
assertEq(streamer.mpBalanceOf(vaults[alice]), 200e18);
assertEq(streamer.mpStakedOf(vaults[alice]), 100e18);
assertEq(streamer.vaultShares(vaults[alice]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 750e18);
assertEq(streamer.mpBalanceOf(vaults[bob]), 150e18);
assertEq(streamer.mpStakedOf(vaults[bob]), 100e18);
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 250e18);
vm.warp(initialTime + year * 2);
assertEq(streamer.totalStaked(), 200e18);
assertEq(streamer.totalMPStaked(), 200e18);
assertEq(streamer.totalShares(), 400e18);
assertEq(streamer.totalRewardsSupply(), 1000e18);
assertEq(streamer.totalMP(), 550e18);
assertEq(streamer.mpBalanceOf(vaults[alice]), 300e18);
assertEq(streamer.mpStakedOf(vaults[alice]), 100e18);
assertEq(streamer.vaultShares(vaults[alice]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 750e18);
assertEq(streamer.mpBalanceOf(vaults[bob]), 250e18);
assertEq(streamer.mpStakedOf(vaults[bob]), 100e18);
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 250e18);
}
}