mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-09 23:37:58 -05:00
feat(RewardsStreamerMP): vaults shares are stakedBalance + mpStaked
This commit is contained in:
92
.gas-report
92
.gas-report
@@ -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 |
|
||||
╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
120
.gas-snapshot
120
.gas-snapshot
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user