mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-09 15:27:55 -05:00
fix(RewardsStreamerMP): ensure registerVault reverts in emergency mode
Originally, I just wanted to simplify the certora rule that, when emergency mode is enabled, only a few selected functions can be called. Instead of listing all the view function as "allowed", I've moved to using CVLs `isView` flag on the function under verification. This however uncovered a violation where `RewardsStreamerMP.registerVault` is allowed to be called in emergency mode. In theory there's no harm in registering a vault when the system is in emergency mode, but semantically it doesn't really make sense. `registerVault` has been accidentally added to `isViewFunction()`. This commit fixes this by adding `onlyNotEmergencyMode` modifier to `registerVault()`.
This commit is contained in:
366
.gas-report
366
.gas-report
@@ -0,0 +1,366 @@
|
||||
|
||||
╭-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
|
||||
| script/DeployRewardsStreamerMP.s.sol:DeployRewardsStreamerMPScript Contract | | | | | |
|
||||
+=======================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| 7075569 | 33779 | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| | | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| run | 6177077 | 6177077 | 6177077 | 6177077 | 67 |
|
||||
╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
|
||||
|
||||
╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮
|
||||
| script/DeploymentConfig.s.sol:DeploymentConfig Contract | | | | | |
|
||||
+==========================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
|
||||
| 0 | 7333 | | | | |
|
||||
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
|
||||
| | | | | | |
|
||||
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
|
||||
| activeNetworkConfig | 454 | 454 | 454 | 454 | 134 |
|
||||
╰---------------------------------------------------------+-----------------+-----+--------+-----+---------╯
|
||||
|
||||
╭-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
|
||||
| script/UpgradeRewardsStreamerMP.s.sol:UpgradeRewardsStreamerMPScript Contract | | | | | |
|
||||
+=========================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| 3113166 | 15321 | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| | | | | | |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
|
||||
| run | 2632465 | 2632465 | 2632465 | 2632465 | 3 |
|
||||
╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
|
||||
|
||||
╭------------------------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
| src/RewardsStreamerMP.sol:RewardsStreamerMP Contract | | | | | |
|
||||
+=============================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 2793224 | 12882 | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MAX_LOCKUP_PERIOD | 382 | 382 | 382 | 382 | 4 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MAX_MULTIPLIER | 262 | 262 | 262 | 262 | 9 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| MIN_LOCKUP_PERIOD | 308 | 308 | 308 | 308 | 15 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| emergencyModeEnabled | 2398 | 2398 | 2398 | 2398 | 7 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| enableEmergencyMode | 2507 | 19414 | 24699 | 24699 | 8 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountTotalMaxMP | 3133 | 3133 | 3133 | 3133 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountTotalStakedBalance | 15173 | 15173 | 15173 | 15173 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getAccountVaults | 5225 | 5225 | 5225 | 5225 | 4 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getStakedBalance | 2618 | 2618 | 2618 | 2618 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| getVault | 1621 | 1621 | 1621 | 1621 | 72 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| initialize | 115654 | 115654 | 115654 | 115654 | 67 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lastRewardTime | 428 | 1428 | 1428 | 2428 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| leave | 79000 | 79000 | 79000 | 79000 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lock | 14282 | 41776 | 41737 | 77491 | 259 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| mpBalanceOfAccount | 10308 | 10308 | 10308 | 10308 | 1 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| proxiableUUID | 387 | 387 | 387 | 387 | 3 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| registerVault | 2562 | 73001 | 73461 | 73461 | 266 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardEndTime | 362 | 1362 | 1362 | 2362 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardStartTime | 407 | 1407 | 1407 | 2407 | 2 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| rewardsBalanceOf | 1682 | 2982 | 3267 | 5792 | 10 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| setReward | 2606 | 57798 | 84839 | 104799 | 7 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| setTrustedCodehash | 24199 | 24199 | 24199 | 24199 | 67 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stake | 2637 | 178129 | 179984 | 207586 | 324 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMPAccrued | 384 | 384 | 384 | 384 | 81 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalMaxMP | 406 | 406 | 406 | 406 | 81 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalRewardsAccrued | 407 | 407 | 407 | 407 | 3 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalRewardsSupply | 1036 | 1964 | 1817 | 6776 | 31 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| totalStaked | 427 | 427 | 427 | 427 | 82 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| unstake | 62902 | 63547 | 62902 | 67099 | 13 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| updateGlobalState | 13597 | 24997 | 26988 | 26988 | 19 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| updateVaultMP | 11707 | 17581 | 18273 | 18273 | 19 |
|
||||
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| upgradeToAndCall | 3181 | 7875 | 8438 | 10881 | 5 |
|
||||
╰------------------------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭----------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
| src/StakeVault.sol:StakeVault Contract | | | | | |
|
||||
+===============================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 1557273 | 7323 | | | | |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| STAKING_TOKEN | 239 | 239 | 239 | 239 | 1 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| emergencyExit | 14974 | 31592 | 31512 | 48612 | 7 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| initialize | 98005 | 98005 | 98005 | 98005 | 266 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| leave | 12145 | 122321 | 61612 | 353914 | 4 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| lock | 12075 | 57030 | 57164 | 92917 | 260 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| owner | 377 | 377 | 377 | 377 | 265 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| register | 12654 | 76615 | 77050 | 77050 | 266 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stake | 12077 | 233302 | 235965 | 263567 | 325 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| stakeManager | 367 | 367 | 367 | 367 | 265 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| trustStakeManager | 7577 | 7577 | 7577 | 7577 | 1 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| unstake | 12054 | 88757 | 94012 | 98209 | 14 |
|
||||
|----------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| withdraw | 20705 | 20705 | 20705 | 20705 | 1 |
|
||||
╰----------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭----------------------------------------------------+-----------------+------+--------+--------+---------╮
|
||||
| src/TransparentProxy.sol:TransparentProxy Contract | | | | | |
|
||||
+=========================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| 0 | 1231 | | | | |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| fallback | 689 | 7613 | 854 | 131157 | 464 |
|
||||
|----------------------------------------------------+-----------------+------+--------+--------+---------|
|
||||
| implementation | 343 | 2340 | 2343 | 2343 | 870 |
|
||||
╰----------------------------------------------------+-----------------+------+--------+--------+---------╯
|
||||
|
||||
╭--------------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
| src/VaultFactory.sol:VaultFactory Contract | | | | | |
|
||||
+===================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|--------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 0 | 1991 | | | | |
|
||||
|--------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|--------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|--------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| createVault | 229785 | 246691 | 246885 | 246885 | 265 |
|
||||
╰--------------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭-------------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| src/XPNFTToken.sol:XPNFTToken Contract | | | | | |
|
||||
+======================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 721357 | 3311 | | | | |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| approve | 391 | 391 | 391 | 391 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| getApproved | 293 | 293 | 293 | 293 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| isApprovedForAll | 507 | 507 | 507 | 507 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| metadataGenerator | 324 | 324 | 324 | 324 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| safeTransferFrom(address,address,uint256) | 482 | 482 | 482 | 482 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| safeTransferFrom(address,address,uint256,bytes) | 673 | 673 | 673 | 673 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setApprovalForAll | 473 | 473 | 473 | 473 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setMetadataGenerator | 23993 | 26486 | 26486 | 28980 | 2 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| tokenURI | 71322 | 71322 | 71322 | 71322 | 1 |
|
||||
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| transferFrom | 527 | 527 | 527 | 527 | 1 |
|
||||
╰-------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭----------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| src/XPToken.sol:XPToken Contract | | | | | |
|
||||
+=======================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 1040918 | 4850 | | | | |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| acceptOwnership | 28260 | 28260 | 28260 | 28260 | 1 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| addRewardProvider | 23967 | 57628 | 51089 | 68189 | 44 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| allowance | 530 | 530 | 530 | 530 | 2 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| approve | 410 | 410 | 410 | 410 | 2 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| balanceOf | 3601 | 11267 | 9601 | 20601 | 6 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| getRewardProviders | 1051 | 3304 | 3304 | 5557 | 4 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| mint | 24199 | 75906 | 91068 | 91080 | 14 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| mintAllowance | 5714 | 5751 | 5751 | 5788 | 2 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| owner | 340 | 1006 | 340 | 2340 | 3 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| removeRewardProvider | 23685 | 28092 | 25800 | 34792 | 6 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| totalSupply | 3018 | 5018 | 3018 | 11018 | 8 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| transfer | 408 | 408 | 408 | 408 | 2 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| transferFrom | 517 | 517 | 517 | 517 | 2 |
|
||||
|----------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| transferOwnership | 47730 | 47730 | 47730 | 47730 | 1 |
|
||||
╰----------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| src/nft-metadata-generators/NFTMetadataGeneratorSVG.sol:NFTMetadataGeneratorSVG Contract | | | | | |
|
||||
+===============================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 1146955 | 5713 | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| generate | 51746 | 51746 | 51746 | 51746 | 1 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| imagePrefix | 1074 | 2074 | 2074 | 3074 | 2 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| imageSuffix | 1118 | 2118 | 2118 | 3118 | 2 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setImageStrings | 25248 | 30606 | 30606 | 35965 | 2 |
|
||||
╰------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| src/nft-metadata-generators/NFTMetadataGeneratorURL.sol:NFTMetadataGeneratorURL Contract | | | | | |
|
||||
+===============================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 1120404 | 5550 | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| generate | 61198 | 61198 | 61198 | 61198 | 1 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setURLStrings | 25416 | 30774 | 30774 | 36133 | 2 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| urlPrefix | 1075 | 1075 | 1075 | 1075 | 1 |
|
||||
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| urlSuffix | 1141 | 1141 | 1141 | 1141 | 1 |
|
||||
╰------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| test/mocks/MockMetadataGenerator.sol:MockMetadataGenerator Contract | | | | | |
|
||||
+==========================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 896351 | 4458 | | | | |
|
||||
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| generate | 57807 | 57807 | 57807 | 57807 | 1 |
|
||||
╰---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭---------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| test/mocks/MockToken.sol:MockToken Contract | | | | | |
|
||||
+==================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 625370 | 3260 | | | | |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| approve | 46342 | 46342 | 46342 | 46342 | 265 |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| balanceOf | 558 | 926 | 558 | 2558 | 103 |
|
||||
|---------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| mint | 51279 | 56383 | 51279 | 68379 | 278 |
|
||||
╰---------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮
|
||||
| test/mocks/StackOverflowStakeManager.sol:StackOverflowStakeManager Contract | | | | | |
|
||||
+====================================================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| 1031089 | 4604 | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| | | | | | |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| leave | 845 | 161317 | 161317 | 321839 | 333 |
|
||||
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
|
||||
| proxiableUUID | 330 | 330 | 330 | 330 | 1 |
|
||||
╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯
|
||||
|
||||
╭-------------------------------------------------------+-----------------+-------+--------+-------+---------╮
|
||||
| test/mocks/XPProviderMock.sol:XPProviderMock Contract | | | | | |
|
||||
+============================================================================================================+
|
||||
| Deployment Cost | Deployment Size | | | | |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| 177729 | 606 | | | | |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| | | | | | |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| Function Name | Min | Avg | Median | Max | # Calls |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| rewardsBalanceOfAccount | 501 | 1834 | 2501 | 2501 | 12 |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setTotalXPShares | 43652 | 43652 | 43652 | 43652 | 20 |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| setUserXPShare | 44125 | 44125 | 44125 | 44125 | 4 |
|
||||
|-------------------------------------------------------+-----------------+-------+--------+-------+---------|
|
||||
| totalRewardsSupply | 323 | 989 | 323 | 2323 | 72 |
|
||||
╰-------------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
|
||||
|
||||
106
.gas-snapshot
106
.gas-snapshot
@@ -1,76 +1,76 @@
|
||||
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 92757)
|
||||
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 306012)
|
||||
EmergencyExitTest:test_EmergencyExitBasic() (gas: 392806)
|
||||
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 678359)
|
||||
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 400605)
|
||||
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 400174)
|
||||
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 385707)
|
||||
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: 1232258)
|
||||
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6218572)
|
||||
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 303138)
|
||||
LeaveTest:test_TrustNewStakeManager() (gas: 6286362)
|
||||
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 350272, ~: 350297)
|
||||
LockTest:test_LockFailsWithNoStake() (gas: 105377)
|
||||
LockTest:test_LockFailsWithZero() (gas: 320506)
|
||||
LockTest:test_LockWithoutPriorLock() (gas: 398817)
|
||||
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1757478)
|
||||
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)
|
||||
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: 739601)
|
||||
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 736949)
|
||||
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: 493376)
|
||||
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 160880)
|
||||
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: 623466)
|
||||
StakeTest:test_StakeMultipleAccounts() (gas: 508049)
|
||||
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 514084)
|
||||
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 852890)
|
||||
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 523193)
|
||||
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 545137)
|
||||
StakeTest:test_StakeOneAccount() (gas: 282585)
|
||||
StakeTest:test_StakeOneAccountAndRewards() (gas: 288640)
|
||||
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 513211)
|
||||
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 502753)
|
||||
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 302900)
|
||||
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 303440)
|
||||
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 303507)
|
||||
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)
|
||||
StakingTokenTest:testStakeToken() (gas: 13140)
|
||||
TrustedCodehashAccessTest:test_RevertWhenProxyCloneCodehashNotTrusted() (gas: 1896237)
|
||||
UnstakeTest:test_StakeMultipleAccounts() (gas: 508026)
|
||||
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 514106)
|
||||
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 852867)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 523170)
|
||||
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 545159)
|
||||
UnstakeTest:test_StakeOneAccount() (gas: 282585)
|
||||
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 288662)
|
||||
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 513233)
|
||||
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 502797)
|
||||
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 302900)
|
||||
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 303462)
|
||||
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 303551)
|
||||
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 551979)
|
||||
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 718583)
|
||||
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 816209)
|
||||
UnstakeTest:test_UnstakeOneAccount() (gas: 488546)
|
||||
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 510466)
|
||||
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 416131)
|
||||
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 535543)
|
||||
UpgradeTest:test_RevertWhenNotOwner() (gas: 2897728)
|
||||
UpgradeTest:test_UpgradeStakeManager() (gas: 6117494)
|
||||
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: 318812)
|
||||
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 318070)
|
||||
XPNFTTokenTest:testApproveNotAllowed() (gas: 10500)
|
||||
XPNFTTokenTest:testGetApproved() (gas: 10523)
|
||||
XPNFTTokenTest:testIsApprovedForAll() (gas: 10698)
|
||||
|
||||
@@ -5,48 +5,6 @@ methods {
|
||||
function emergencyModeEnabled() external returns (bool) envfree;
|
||||
}
|
||||
|
||||
definition isViewFunction(method f) returns bool = (
|
||||
f.selector == sig:streamer.YEAR().selector ||
|
||||
f.selector == sig:streamer.STAKING_TOKEN().selector ||
|
||||
f.selector == sig:streamer.SCALE_FACTOR().selector ||
|
||||
f.selector == sig:streamer.MP_APY().selector ||
|
||||
f.selector == sig:streamer.MP_MPY().selector ||
|
||||
f.selector == sig:streamer.MP_MPY_ABSOLUTE().selector ||
|
||||
f.selector == sig:streamer.ACCRUE_RATE().selector ||
|
||||
f.selector == sig:streamer.MIN_BALANCE().selector ||
|
||||
f.selector == sig:streamer.MAX_BALANCE().selector ||
|
||||
f.selector == sig:streamer.MIN_LOCKUP_PERIOD().selector ||
|
||||
f.selector == sig:streamer.MAX_LOCKUP_PERIOD().selector ||
|
||||
f.selector == sig:streamer.MAX_MULTIPLIER().selector ||
|
||||
f.selector == sig:streamer.rewardIndex().selector ||
|
||||
f.selector == sig:streamer.lastMPUpdatedTime().selector ||
|
||||
f.selector == sig:streamer.owner().selector ||
|
||||
f.selector == sig:streamer.totalStaked().selector ||
|
||||
f.selector == sig:streamer.totalMaxMP().selector ||
|
||||
f.selector == sig:streamer.totalMPAccrued().selector ||
|
||||
f.selector == sig:streamer.vaultData(address).selector ||
|
||||
f.selector == sig:streamer.emergencyModeEnabled().selector ||
|
||||
f.selector == sig:streamer.getStakedBalance(address).selector ||
|
||||
f.selector == sig:streamer.getVault(address).selector ||
|
||||
f.selector == sig:streamer.rewardsBalanceOf(address).selector ||
|
||||
f.selector == sig:streamer.rewardsBalanceOfAccount(address).selector ||
|
||||
f.selector == sig:streamer.pendingRewardIndex().selector ||
|
||||
f.selector == sig:streamer.totalRewardsSupply().selector ||
|
||||
f.selector == sig:streamer.lastRewardTime().selector ||
|
||||
f.selector == sig:streamer.rewardAmount().selector ||
|
||||
f.selector == sig:streamer.totalRewardsAccrued().selector ||
|
||||
f.selector == sig:streamer.rewardStartTime().selector ||
|
||||
f.selector == sig:streamer.rewardEndTime().selector ||
|
||||
f.selector == sig:streamer.mpBalanceOf(address).selector ||
|
||||
f.selector == sig:streamer.mpBalanceOfAccount(address).selector ||
|
||||
f.selector == sig:streamer.getAccountTotalMaxMP(address).selector ||
|
||||
f.selector == sig:streamer.getAccountTotalStakedBalance(address).selector ||
|
||||
f.selector == sig:streamer.vaults(address,uint256).selector ||
|
||||
f.selector == sig:streamer.vaultOwners(address).selector ||
|
||||
f.selector == sig:streamer.registerVault().selector ||
|
||||
f.selector == sig:streamer.getAccountVaults(address).selector
|
||||
);
|
||||
|
||||
definition isOwnableFunction(method f) returns bool = (
|
||||
f.selector == sig:streamer.renounceOwnership().selector ||
|
||||
f.selector == sig:streamer.transferOwnership(address).selector ||
|
||||
@@ -54,8 +12,7 @@ definition isOwnableFunction(method f) returns bool = (
|
||||
);
|
||||
|
||||
definition isTrustedCodehashAccessFunction(method f) returns bool = (
|
||||
f.selector == sig:streamer.setTrustedCodehash(bytes32, bool).selector ||
|
||||
f.selector == sig:streamer.isTrustedCodehash(bytes32).selector
|
||||
f.selector == sig:streamer.setTrustedCodehash(bytes32, bool).selector
|
||||
);
|
||||
|
||||
definition isInitializerFunction(method f) returns bool = (
|
||||
@@ -63,8 +20,6 @@ definition isInitializerFunction(method f) returns bool = (
|
||||
);
|
||||
|
||||
definition isUUPSUpgradeableFunction(method f) returns bool = (
|
||||
f.selector == sig:streamer.proxiableUUID().selector ||
|
||||
f.selector == sig:streamer.UPGRADE_INTERFACE_VERSION().selector ||
|
||||
f.selector == sig:streamer.upgradeToAndCall(address, bytes).selector ||
|
||||
f.selector == sig:streamer.__TrustedCodehashAccess_init(address).selector
|
||||
);
|
||||
@@ -79,7 +34,7 @@ rule accountCanOnlyLeaveInEmergencyMode(method f) {
|
||||
bool isReverted = lastReverted;
|
||||
|
||||
assert !isReverted => f.selector == sig:streamer.leave().selector ||
|
||||
isViewFunction(f) ||
|
||||
f.isView ||
|
||||
isOwnableFunction(f) ||
|
||||
isTrustedCodehashAccessFunction(f) ||
|
||||
isInitializerFunction(f) ||
|
||||
|
||||
@@ -100,7 +100,7 @@ contract RewardsStreamerMP is
|
||||
* @notice Registers a vault with its owner. Called by the vault itself during initialization.
|
||||
* @dev Only callable by contracts with trusted codehash
|
||||
*/
|
||||
function registerVault() external onlyTrustedCodehash {
|
||||
function registerVault() external onlyTrustedCodehash onlyNotEmergencyMode {
|
||||
address vault = msg.sender;
|
||||
address owner = IStakeVault(vault).owner();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user