mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-09 21:18:01 -05:00
feature(RewardsStreamerMP): add compound function and track rewards accrued by each vault
This commit is contained in:
88
.gas-report
88
.gas-report
@@ -4,13 +4,13 @@
|
||||
+=======================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| 7556342 | 36018 | | | | |
|
||||
| 7666577 | 36531 | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| | | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| run | 6624542 | 6624542 | 6624542 | 6624542 | 71 |
|
||||
| run | 6727468 | 6727468 | 6727468 | 6727468 | 71 |
|
||||
╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
|
||||
|
||||
╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮
|
||||
@@ -32,13 +32,13 @@
|
||||
+=========================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| 3461701 | 16940 | | | | |
|
||||
| 3571899 | 17453 | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| | | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| run | 2957193 | 2957193 | 2957193 | 2957193 | 3 |
|
||||
| run | 3060029 | 3060029 | 3060029 | 3060029 | 3 |
|
||||
╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
|
||||
|
||||
╭------------------------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
@@ -46,7 +46,7 @@
|
||||
+=============================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 3141752 | 14501 | | | | |
|
||||
| 3251948 | 15014 | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
@@ -54,81 +54,83 @@
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MAX_LOCKUP_PERIOD | 382 | 382 | 382 | 382 | 4 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MAX_MULTIPLIER | 306 | 306 | 306 | 306 | 10 |
|
||||
| MAX_MULTIPLIER | 328 | 328 | 328 | 328 | 10 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MIN_LOCKUP_PERIOD | 308 | 308 | 308 | 308 | 15 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| compound | 115931 | 115931 | 115931 | 115931 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| emergencyModeEnabled | 2420 | 2420 | 2420 | 2420 | 7 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| enableEmergencyMode | 2529 | 20011 | 25488 | 25488 | 8 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountTotalMaxMP | 3155 | 3155 | 3155 | 3155 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountTotalStakedBalance | 15195 | 15195 | 15195 | 15195 | 1 |
|
||||
| getAccountTotalStakedBalance | 15130 | 15130 | 15130 | 15130 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountVaults | 5247 | 5247 | 5247 | 5247 | 4 |
|
||||
| getAccountVaults | 5269 | 5269 | 5269 | 5269 | 4 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getStakedBalance | 2596 | 2596 | 2596 | 2596 | 1 |
|
||||
| getStakedBalance | 2618 | 2618 | 2618 | 2618 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getVault | 1790 | 1816 | 1790 | 3790 | 76 |
|
||||
| getVault | 1958 | 1958 | 1958 | 1958 | 76 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| initialize | 115589 | 115589 | 115589 | 115589 | 71 |
|
||||
| initialize | 115611 | 115611 | 115611 | 115611 | 71 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lastRewardTime | 362 | 1362 | 1362 | 2362 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| leave | 87987 | 87987 | 87987 | 87987 | 1 |
|
||||
| leave | 95475 | 95475 | 95475 | 95475 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lock | 14216 | 44002 | 43883 | 89590 | 260 |
|
||||
| lock | 14216 | 52150 | 52082 | 93689 | 260 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| migrateToVault | 13541 | 62634 | 15747 | 158614 | 3 |
|
||||
| migrateToVault | 13541 | 72222 | 15747 | 187379 | 3 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| mpBalanceOf | 956 | 2600 | 2358 | 7102 | 8 |
|
||||
| mpBalanceOf | 978 | 2424 | 2380 | 7124 | 12 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| mpBalanceOfAccount | 10308 | 10308 | 10308 | 10308 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| mpStakedOf | 646 | 868 | 646 | 2646 | 9 |
|
||||
| mpStakedOf | 668 | 821 | 668 | 2668 | 13 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| proxiableUUID | 409 | 409 | 409 | 409 | 3 |
|
||||
| proxiableUUID | 342 | 342 | 342 | 342 | 3 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| registerVault | 2562 | 74426 | 74983 | 74983 | 284 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardEndTime | 429 | 1429 | 1429 | 2429 | 2 |
|
||||
| rewardEndTime | 362 | 1362 | 1362 | 2362 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardStartTime | 407 | 1407 | 1407 | 2407 | 2 |
|
||||
| rewardStartTime | 429 | 1429 | 1429 | 2429 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardsBalanceOf | 2091 | 3244 | 3897 | 4091 | 8 |
|
||||
| rewardsBalanceOf | 2324 | 3578 | 4130 | 6324 | 12 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| setReward | 2628 | 59084 | 87073 | 107033 | 7 |
|
||||
| setReward | 2628 | 56527 | 62853 | 107033 | 8 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| setTrustedCodehash | 24199 | 24199 | 24199 | 24199 | 71 |
|
||||
| setTrustedCodehash | 24221 | 24221 | 24221 | 24221 | 71 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stake | 2659 | 223430 | 226360 | 246845 | 326 |
|
||||
| stake | 2681 | 227094 | 230009 | 250494 | 326 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMP | 755 | 1201 | 1201 | 1647 | 4 |
|
||||
| totalMP | 777 | 1223 | 1223 | 1669 | 6 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMPAccrued | 428 | 428 | 428 | 428 | 84 |
|
||||
| totalMPAccrued | 362 | 362 | 362 | 362 | 84 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMPStaked | 384 | 384 | 384 | 384 | 4 |
|
||||
| totalMPStaked | 406 | 406 | 406 | 406 | 6 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMaxMP | 362 | 362 | 362 | 362 | 84 |
|
||||
| totalMaxMP | 384 | 384 | 384 | 384 | 84 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalRewardsAccrued | 362 | 362 | 362 | 362 | 3 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalRewardsSupply | 971 | 1873 | 1752 | 6711 | 32 |
|
||||
| totalRewardsSupply | 971 | 1850 | 1752 | 6711 | 34 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalShares | 615 | 615 | 615 | 615 | 4 |
|
||||
| totalShares | 637 | 637 | 637 | 637 | 6 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalStaked | 363 | 363 | 363 | 363 | 89 |
|
||||
| totalStaked | 385 | 385 | 385 | 385 | 91 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| unstake | 68784 | 72563 | 72179 | 76376 | 13 |
|
||||
| unstake | 72817 | 79724 | 79601 | 83798 | 13 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| updateGlobalState | 15809 | 27308 | 29200 | 29200 | 20 |
|
||||
| updateGlobalState | 15798 | 27297 | 29189 | 29189 | 20 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| updateVaultMP | 11729 | 17638 | 18295 | 18295 | 20 |
|
||||
| updateVaultMP | 29950 | 35859 | 36516 | 36516 | 20 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| upgradeToAndCall | 3203 | 7910 | 8482 | 10903 | 5 |
|
||||
| upgradeToAndCall | 3225 | 7892 | 8437 | 10925 | 5 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| vaultShares | 889 | 1139 | 889 | 2889 | 8 |
|
||||
| vaultShares | 889 | 1055 | 889 | 2889 | 12 |
|
||||
╰------------------------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭----------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
@@ -148,25 +150,25 @@
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| initialize | 98005 | 98005 | 98005 | 98005 | 284 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| leave | 12167 | 124589 | 66128 | 353935 | 4 |
|
||||
| leave | 12167 | 126461 | 69872 | 353935 | 4 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lock | 12097 | 59269 | 59332 | 105038 | 261 |
|
||||
| lock | 12097 | 67386 | 67531 | 109137 | 261 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| migrateToVault | 29012 | 89332 | 31218 | 207768 | 3 |
|
||||
| migrateToVault | 29012 | 98921 | 31218 | 236533 | 3 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| owner | 377 | 397 | 377 | 2377 | 289 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| register | 12654 | 78038 | 78572 | 78572 | 284 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stake | 12077 | 278470 | 282341 | 302826 | 327 |
|
||||
| stake | 12077 | 282122 | 285990 | 306475 | 327 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stakeManager | 367 | 367 | 367 | 367 | 283 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| trustStakeManager | 7577 | 7577 | 7577 | 7577 | 1 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| unstake | 12054 | 97129 | 103289 | 107486 | 14 |
|
||||
| unstake | 12054 | 103779 | 110711 | 114908 | 14 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| withdraw | 20683 | 20683 | 20683 | 20683 | 1 |
|
||||
| withdraw | 20705 | 20705 | 20705 | 20705 | 1 |
|
||||
╰----------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭----------------------------------------------------+-----------------+------+--------+--------+---------╮
|
||||
@@ -180,7 +182,7 @@
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| fallback | 733 | 7270 | 855 | 133415 | 520 |
|
||||
| fallback | 735 | 8052 | 833 | 142290 | 548 |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| implementation | 343 | 2340 | 2343 | 2343 | 894 |
|
||||
╰----------------------------------------------------+-----------------+------+--------+--------+---------╯
|
||||
@@ -348,7 +350,7 @@
|
||||
+====================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 1039056 | 4641 | | | | |
|
||||
| 1041456 | 4652 | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
|
||||
131
.gas-snapshot
131
.gas-snapshot
@@ -1,80 +1,81 @@
|
||||
CompoundTest:test_RevertWhenInsufficientMPBalance() (gas: 392198)
|
||||
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 93568)
|
||||
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 351668)
|
||||
EmergencyExitTest:test_EmergencyExitBasic() (gas: 439395)
|
||||
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 753437)
|
||||
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 447258)
|
||||
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 446630)
|
||||
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 432088)
|
||||
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 355317)
|
||||
EmergencyExitTest:test_EmergencyExitBasic() (gas: 443230)
|
||||
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 761579)
|
||||
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 451115)
|
||||
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 450279)
|
||||
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 435715)
|
||||
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39493)
|
||||
IntegrationTest:testStakeFoo() (gas: 1341293)
|
||||
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6889549)
|
||||
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 348794)
|
||||
LeaveTest:test_TrustNewStakeManager() (gas: 6952473)
|
||||
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 397163, ~: 397188)
|
||||
LockTest:test_LockFailsWithNoStake() (gas: 106803)
|
||||
LockTest:test_LockFailsWithZero() (gas: 366096)
|
||||
LockTest:test_LockWithoutPriorLock() (gas: 456143)
|
||||
LockTest:test_RevertWhenVaultToLockIsEmpty() (gas: 106782)
|
||||
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1811075)
|
||||
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 4996)
|
||||
IntegrationTest:testStakeFoo() (gas: 1369116)
|
||||
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 7111046)
|
||||
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 352443)
|
||||
LeaveTest:test_TrustNewStakeManager() (gas: 7169318)
|
||||
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 408967, ~: 408992)
|
||||
LockTest:test_LockFailsWithNoStake() (gas: 114530)
|
||||
LockTest:test_LockFailsWithZero() (gas: 369745)
|
||||
LockTest:test_LockWithoutPriorLock() (gas: 464286)
|
||||
LockTest:test_RevertWhenVaultToLockIsEmpty() (gas: 114554)
|
||||
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1817124)
|
||||
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 4974)
|
||||
MathTest:test_CalcAccrueMP() (gas: 8013)
|
||||
MathTest:test_CalcBonusMP() (gas: 18644)
|
||||
MathTest:test_CalcBonusMP() (gas: 18622)
|
||||
MathTest:test_CalcInitialMP() (gas: 5375)
|
||||
MathTest:test_CalcMaxAccruedMP() (gas: 4642)
|
||||
MathTest:test_CalcMaxAccruedMP() (gas: 4665)
|
||||
MathTest:test_CalcMaxTotalMP() (gas: 19411)
|
||||
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 841857)
|
||||
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 853661)
|
||||
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: 942573)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 162374)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39429)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39407)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39442)
|
||||
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 669055)
|
||||
StakeTest:test_StakeMultipleAccounts() (gas: 582358)
|
||||
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 588328)
|
||||
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 928970)
|
||||
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 597095)
|
||||
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 619050)
|
||||
StakeTest:test_StakeOneAccount() (gas: 328363)
|
||||
StakeTest:test_StakeOneAccountAndRewards() (gas: 334354)
|
||||
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 560041)
|
||||
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 548135)
|
||||
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 348481)
|
||||
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 349021)
|
||||
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 349088)
|
||||
StakeVaultMigrationTest:testMigrateToVault() (gas: 886769)
|
||||
StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 645316)
|
||||
StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 68080)
|
||||
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 1238414)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 162313)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39435)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39413)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39448)
|
||||
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 672884)
|
||||
StakeTest:test_StakeMultipleAccounts() (gas: 590521)
|
||||
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 596470)
|
||||
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1010834)
|
||||
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 604843)
|
||||
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 626843)
|
||||
StakeTest:test_StakeOneAccount() (gas: 332198)
|
||||
StakeTest:test_StakeOneAccountAndRewards() (gas: 338167)
|
||||
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 600482)
|
||||
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 588576)
|
||||
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 352108)
|
||||
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 352648)
|
||||
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 352759)
|
||||
StakeVaultMigrationTest:testMigrateToVault() (gas: 936140)
|
||||
StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 648987)
|
||||
StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 68015)
|
||||
StakingTokenTest:testStakeToken() (gas: 13140)
|
||||
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 2027115)
|
||||
UnstakeTest:test_StakeMultipleAccounts() (gas: 582335)
|
||||
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 588350)
|
||||
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 928947)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 597072)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 619072)
|
||||
UnstakeTest:test_StakeOneAccount() (gas: 328363)
|
||||
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 334376)
|
||||
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 560063)
|
||||
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 548179)
|
||||
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 348481)
|
||||
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 349043)
|
||||
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 349132)
|
||||
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 606844)
|
||||
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 803003)
|
||||
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 905643)
|
||||
UnstakeTest:test_UnstakeOneAccount() (gas: 547721)
|
||||
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 561507)
|
||||
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 470312)
|
||||
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 589781)
|
||||
UpgradeTest:test_RevertWhenNotOwner() (gas: 3218904)
|
||||
UpgradeTest:test_UpgradeStakeManager() (gas: 6783436)
|
||||
VaultRegistrationTest:test_VaultRegistration() (gas: 62242)
|
||||
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 364360)
|
||||
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 2027137)
|
||||
UnstakeTest:test_StakeMultipleAccounts() (gas: 590498)
|
||||
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 596514)
|
||||
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 1010811)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 604842)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 626820)
|
||||
UnstakeTest:test_StakeOneAccount() (gas: 332198)
|
||||
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 338145)
|
||||
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 600526)
|
||||
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 588575)
|
||||
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 352063)
|
||||
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 352670)
|
||||
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 352759)
|
||||
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 636683)
|
||||
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 823694)
|
||||
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 930932)
|
||||
UnstakeTest:test_UnstakeOneAccount() (gas: 563618)
|
||||
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 587541)
|
||||
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 481733)
|
||||
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 618996)
|
||||
UpgradeTest:test_RevertWhenNotOwner() (gas: 3329279)
|
||||
UpgradeTest:test_UpgradeStakeManager() (gas: 7000238)
|
||||
VaultRegistrationTest:test_VaultRegistration() (gas: 62330)
|
||||
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 368053)
|
||||
XPNFTTokenTest:testApproveNotAllowed() (gas: 10500)
|
||||
XPNFTTokenTest:testGetApproved() (gas: 10523)
|
||||
XPNFTTokenTest:testIsApprovedForAll() (gas: 10698)
|
||||
|
||||
@@ -7,7 +7,7 @@ methods {
|
||||
function ERC20A.allowance(address, address) external returns(uint256) envfree;
|
||||
function ERC20A.totalSupply() external returns(uint256) envfree;
|
||||
function totalStaked() external returns (uint256) envfree;
|
||||
function vaultData(address) external returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) envfree;
|
||||
function vaultData(address) external returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) envfree;
|
||||
function lastMPUpdatedTime() external returns (uint256) envfree;
|
||||
function updateGlobalState() external;
|
||||
function updateVaultMP(address vaultAddress) external;
|
||||
@@ -31,19 +31,19 @@ hook Sstore vaultData[KEY address vault].stakedBalance uint256 newValue (uint256
|
||||
|
||||
function getVaultMaxMP(address vault) returns uint256 {
|
||||
uint256 maxMP;
|
||||
_, _, _, maxMP, _, _, _ = streamer.vaultData(vault);
|
||||
_, _, _, maxMP, _, _, _, _ = streamer.vaultData(vault);
|
||||
return maxMP;
|
||||
}
|
||||
|
||||
function getVaultMPAccrued(address vault) returns uint256 {
|
||||
uint256 vaultMPAccrued;
|
||||
_, _, vaultMPAccrued, _, _, _, _ = streamer.vaultData(vault);
|
||||
_, _, vaultMPAccrued, _, _, _, _, _ = streamer.vaultData(vault);
|
||||
return vaultMPAccrued;
|
||||
}
|
||||
|
||||
function getVaultLockUntil(address vault) returns uint256 {
|
||||
uint256 lockUntil;
|
||||
_, _, _, _, _, lockUntil, _ = streamer.vaultData(vault);
|
||||
_, _, _, _, _, lockUntil, _, _ = streamer.vaultData(vault);
|
||||
return lockUntil;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ using RewardsStreamerMP as streamer;
|
||||
|
||||
function getVaultStakedBalance(address vault) returns uint256 {
|
||||
uint256 stakedBalance;
|
||||
stakedBalance, _, _, _, _, _, _ = streamer.vaultData(vault);
|
||||
stakedBalance, _, _, _, _, _, _, _ = streamer.vaultData(vault);
|
||||
return stakedBalance;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ contract RewardsStreamerMP is
|
||||
uint256 lastMPUpdateTime;
|
||||
uint256 lockUntil;
|
||||
uint256 mpStaked;
|
||||
uint256 rewardsAccrued;
|
||||
}
|
||||
|
||||
mapping(address vault => VaultData data) public vaultData;
|
||||
@@ -182,7 +183,7 @@ contract RewardsStreamerMP is
|
||||
}
|
||||
|
||||
_updateGlobalState();
|
||||
_updateVaultMP(msg.sender, true);
|
||||
_updateVault(msg.sender, true);
|
||||
|
||||
VaultData storage vault = vaultData[msg.sender];
|
||||
if (vault.lockUntil != 0 && vault.lockUntil > block.timestamp) {
|
||||
@@ -231,7 +232,7 @@ contract RewardsStreamerMP is
|
||||
}
|
||||
|
||||
_updateGlobalState();
|
||||
_updateVaultMP(msg.sender, true);
|
||||
_updateVault(msg.sender, true);
|
||||
(uint256 deltaMp, uint256 newLockEnd) =
|
||||
_calculateLock(vault.stakedBalance, vault.maxMP, vault.lockUntil, block.timestamp, lockPeriod);
|
||||
|
||||
@@ -265,7 +266,7 @@ contract RewardsStreamerMP is
|
||||
|
||||
function _unstake(uint256 amount, VaultData storage vault, address vaultAddress) internal {
|
||||
_updateGlobalState();
|
||||
_updateVaultMP(vaultAddress, true);
|
||||
_updateVault(vaultAddress, true);
|
||||
|
||||
(uint256 _deltaMpTotal, uint256 _deltaMpMax) = _calculateUnstake(
|
||||
vault.stakedBalance, vault.lockUntil, block.timestamp, vault.mpAccrued, vault.maxMP, amount
|
||||
@@ -276,6 +277,7 @@ contract RewardsStreamerMP is
|
||||
vault.mpAccrued -= _deltaMpTotal;
|
||||
|
||||
if (vault.mpAccrued < vault.mpStaked) {
|
||||
totalMPStaked -= vault.mpStaked - vault.mpAccrued;
|
||||
vault.mpStaked = vault.mpAccrued;
|
||||
totalMPStaked -= vault.mpStaked - vault.mpAccrued;
|
||||
}
|
||||
@@ -425,6 +427,23 @@ contract RewardsStreamerMP is
|
||||
return _vaultShares(vaultAddress);
|
||||
}
|
||||
|
||||
function compound(address vaultAddress) external onlyNotEmergencyMode {
|
||||
VaultData storage vault = vaultData[vaultAddress];
|
||||
_updateGlobalState();
|
||||
_updateVault(vaultAddress, true);
|
||||
|
||||
uint256 mpToStake = vault.mpAccrued - vault.mpStaked;
|
||||
if (mpToStake == 0) {
|
||||
revert StakingManager__InsufficientBalance();
|
||||
}
|
||||
|
||||
vault.mpStaked += mpToStake;
|
||||
totalMPStaked += mpToStake;
|
||||
vault.rewardIndex = rewardIndex;
|
||||
|
||||
emit Compound(vaultAddress, mpToStake);
|
||||
}
|
||||
|
||||
function _vaultShares(address vaultAddress) internal view returns (uint256) {
|
||||
VaultData storage vault = vaultData[vaultAddress];
|
||||
return vault.stakedBalance + vault.mpStaked;
|
||||
@@ -470,17 +489,21 @@ contract RewardsStreamerMP is
|
||||
return deltaMP;
|
||||
}
|
||||
|
||||
function _updateVaultMP(address vaultAddress, bool forceMPUpdate) internal {
|
||||
function _updateVault(address vaultAddress, bool forceMPUpdate) internal {
|
||||
VaultData storage vault = vaultData[vaultAddress];
|
||||
uint256 accruedMP = _getVaultPendingMP(vault);
|
||||
if (accruedMP > 0 || forceMPUpdate) {
|
||||
vault.mpAccrued += accruedMP;
|
||||
vault.lastMPUpdateTime = block.timestamp;
|
||||
}
|
||||
|
||||
uint256 rewardsAccrued = _vaultPendingRewards(vault);
|
||||
vault.rewardsAccrued += rewardsAccrued;
|
||||
vault.rewardIndex = rewardIndex;
|
||||
}
|
||||
|
||||
function updateVaultMP(address vaultAddress) external onlyNotEmergencyMode {
|
||||
_updateVaultMP(vaultAddress, false);
|
||||
_updateVault(vaultAddress, false);
|
||||
}
|
||||
|
||||
function enableEmergencyMode() external onlyOwner onlyNotEmergencyMode {
|
||||
@@ -501,11 +524,14 @@ contract RewardsStreamerMP is
|
||||
}
|
||||
|
||||
function rewardsBalanceOf(address vaultAddress) public view returns (uint256) {
|
||||
VaultData storage vault = vaultData[vaultAddress];
|
||||
return vault.rewardsAccrued + _vaultPendingRewards(vault);
|
||||
}
|
||||
|
||||
function _vaultPendingRewards(VaultData storage vault) internal view returns (uint256) {
|
||||
uint256 newRewardIndex;
|
||||
(, newRewardIndex) = _liveRewardIndex();
|
||||
|
||||
VaultData storage vault = vaultData[vaultAddress];
|
||||
|
||||
uint256 accountShares = vault.stakedBalance + vault.mpStaked;
|
||||
uint256 deltaRewardIndex = newRewardIndex - vault.rewardIndex;
|
||||
|
||||
@@ -553,7 +579,7 @@ contract RewardsStreamerMP is
|
||||
}
|
||||
|
||||
_updateGlobalState();
|
||||
_updateVaultMP(msg.sender, true);
|
||||
_updateVault(msg.sender, true);
|
||||
|
||||
VaultData storage oldVault = vaultData[msg.sender];
|
||||
VaultData storage newVault = vaultData[migrateTo];
|
||||
@@ -561,10 +587,12 @@ contract RewardsStreamerMP is
|
||||
// migrate vault data to new vault
|
||||
newVault.stakedBalance = oldVault.stakedBalance;
|
||||
newVault.rewardIndex = oldVault.rewardIndex;
|
||||
newVault.mpStaked = oldVault.mpStaked;
|
||||
newVault.mpAccrued = oldVault.mpAccrued;
|
||||
newVault.maxMP = oldVault.maxMP;
|
||||
newVault.lastMPUpdateTime = oldVault.lastMPUpdateTime;
|
||||
newVault.lockUntil = oldVault.lockUntil;
|
||||
newVault.rewardsAccrued = oldVault.rewardsAccrued;
|
||||
|
||||
delete vaultData[msg.sender];
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ interface IStakeManager is ITrustedCodehashAccess, IStakeConstants {
|
||||
error StakingManager__MigrationTargetHasFunds();
|
||||
error StakingManager__Unauthorized();
|
||||
error StakingManager__DurationCannotBeZero();
|
||||
error StakingManager__InsufficientBalance();
|
||||
|
||||
event VaultRegistered(address indexed vault, address indexed owner);
|
||||
event VaultMigrated(address indexed from, address indexed to);
|
||||
@@ -24,6 +25,7 @@ interface IStakeManager is ITrustedCodehashAccess, IStakeConstants {
|
||||
event Unstaked(address indexed vault, uint256 amount);
|
||||
event EmergencyModeEnabled();
|
||||
event AccountLeft(address indexed vault);
|
||||
event Compound(address indexed vault, uint256 amount);
|
||||
|
||||
function registerVault() external;
|
||||
function stake(uint256 _amount, uint256 _seconds) external;
|
||||
@@ -31,6 +33,7 @@ interface IStakeManager is ITrustedCodehashAccess, IStakeConstants {
|
||||
function unstake(uint256 _amount) external;
|
||||
function leave() external;
|
||||
function migrateToVault(address migrateTo) external;
|
||||
function compound(address _vault) external;
|
||||
|
||||
function emergencyModeEnabled() external view returns (bool);
|
||||
function totalStaked() external view returns (uint256);
|
||||
|
||||
@@ -122,6 +122,11 @@ contract RewardsStreamerMPTest is StakeMath, Test {
|
||||
vault.stake(amount, lockupTime);
|
||||
}
|
||||
|
||||
function _compound(address account) public {
|
||||
StakeVault vault = StakeVault(vaults[account]);
|
||||
streamer.compound(address(vault));
|
||||
}
|
||||
|
||||
function _unstake(address account, uint256 amount) public {
|
||||
StakeVault vault = StakeVault(vaults[account]);
|
||||
vm.prank(account);
|
||||
@@ -2179,6 +2184,41 @@ contract RewardsStreamerMP_RewardsTest is RewardsStreamerMPTest {
|
||||
assertEq(streamer.mpStakedOf(vaults[bob]), 100e18);
|
||||
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
|
||||
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 250e18);
|
||||
|
||||
_compound(alice);
|
||||
|
||||
assertEq(streamer.totalStaked(), 200e18);
|
||||
assertEq(streamer.totalMPStaked(), 400e18);
|
||||
assertEq(streamer.totalShares(), 600e18);
|
||||
assertEq(streamer.totalRewardsSupply(), 1000e18);
|
||||
assertEq(streamer.totalMP(), 550e18);
|
||||
assertEq(streamer.mpBalanceOf(vaults[alice]), 300e18);
|
||||
assertEq(streamer.mpStakedOf(vaults[alice]), 300e18);
|
||||
assertEq(streamer.vaultShares(vaults[alice]), 400e18);
|
||||
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);
|
||||
|
||||
vm.prank(admin);
|
||||
streamer.setReward(600e18, year);
|
||||
|
||||
vm.warp(initialTime + year * 3);
|
||||
|
||||
assertEq(streamer.totalStaked(), 200e18);
|
||||
assertEq(streamer.totalMPStaked(), 400e18);
|
||||
assertEq(streamer.totalShares(), 600e18);
|
||||
assertEq(streamer.totalRewardsSupply(), 1600e18);
|
||||
assertEq(streamer.totalMP(), 750e18);
|
||||
assertEq(streamer.mpBalanceOf(vaults[alice]), 400e18);
|
||||
assertEq(streamer.mpStakedOf(vaults[alice]), 300e18);
|
||||
assertEq(streamer.vaultShares(vaults[alice]), 400e18);
|
||||
assertEq(streamer.rewardsBalanceOf(vaults[alice]), 1150e18);
|
||||
assertEq(streamer.mpBalanceOf(vaults[bob]), 350e18);
|
||||
assertEq(streamer.mpStakedOf(vaults[bob]), 100e18);
|
||||
assertEq(streamer.vaultShares(vaults[bob]), 200e18);
|
||||
assertEq(streamer.rewardsBalanceOf(vaults[bob]), 450e18);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,11 @@ contract StackOverflowStakeManager is
|
||||
// implementation
|
||||
}
|
||||
|
||||
// solhint-disable-next-line
|
||||
function compound(address _vaultAddress) external override {
|
||||
// implementation
|
||||
}
|
||||
|
||||
function leave() external override {
|
||||
this.leave();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user