chore(tests): Add fuzz tests

This commit is contained in:
Ricardo Guilherme Schmidt
2025-02-03 08:00:58 -03:00
committed by r4bbit
parent 8c982924b8
commit 3bd9c46fb3
4 changed files with 624 additions and 43 deletions

View File

@@ -0,0 +1,384 @@
╭-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
| script/DeployRewardsStreamerMP.s.sol:DeployRewardsStreamerMPScript Contract | | | | | |
+=======================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 6955264 | 33115 | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 6073661 | 6073661 | 6073661 | 6073661 | 76 |
╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮
| script/DeploymentConfig.s.sol:DeploymentConfig Contract | | | | | |
+==========================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| 0 | 7607 | | | | |
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| | | | | | |
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------+-----------------+-----+--------+-----+---------|
| activeNetworkConfig | 419 | 419 | 419 | 419 | 152 |
╰---------------------------------------------------------+-----------------+-----+--------+-----+---------╯
╭-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
| script/UpgradeRewardsStreamerMP.s.sol:UpgradeRewardsStreamerMPScript Contract | | | | | |
+=========================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| 3121871 | 15242 | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| | | | | | |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 2609105 | 2609105 | 2609105 | 2609105 | 3 |
╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭------------------------------+-----------------+-------+--------+-------+---------╮
| src/Karma.sol:Karma Contract | | | | | |
+===================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------+-----------------+-------+--------+-------+---------|
| 957795 | 4699 | | | | |
|------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|------------------------------+-----------------+-------+--------+-------+---------|
| acceptOwnership | 28335 | 28335 | 28335 | 28335 | 1 |
|------------------------------+-----------------+-------+--------+-------+---------|
| addRewardProvider | 23807 | 57744 | 51218 | 68318 | 44 |
|------------------------------+-----------------+-------+--------+-------+---------|
| allowance | 697 | 697 | 697 | 697 | 2 |
|------------------------------+-----------------+-------+--------+-------+---------|
| approve | 240 | 240 | 240 | 240 | 2 |
|------------------------------+-----------------+-------+--------+-------+---------|
| balanceOf | 3292 | 10958 | 9292 | 20292 | 6 |
|------------------------------+-----------------+-------+--------+-------+---------|
| getRewardProviders | 1091 | 3374 | 3374 | 5657 | 4 |
|------------------------------+-----------------+-------+--------+-------+---------|
| mint | 24184 | 75565 | 90655 | 90667 | 14 |
|------------------------------+-----------------+-------+--------+-------+---------|
| mintAllowance | 5568 | 5578 | 5578 | 5589 | 2 |
|------------------------------+-----------------+-------+--------+-------+---------|
| owner | 570 | 1236 | 570 | 2570 | 3 |
|------------------------------+-----------------+-------+--------+-------+---------|
| removeRewardProvider | 23690 | 28149 | 25831 | 34928 | 6 |
|------------------------------+-----------------+-------+--------+-------+---------|
| totalSupply | 2897 | 4897 | 2897 | 10897 | 8 |
|------------------------------+-----------------+-------+--------+-------+---------|
| transfer | 614 | 614 | 614 | 614 | 2 |
|------------------------------+-----------------+-------+--------+-------+---------|
| transferFrom | 357 | 357 | 357 | 357 | 2 |
|------------------------------+-----------------+-------+--------+-------+---------|
| transferOwnership | 47977 | 47977 | 47977 | 47977 | 1 |
╰------------------------------+-----------------+-------+--------+-------+---------╯
╭-------------------------------------------------+-----------------+-------+--------+-------+---------╮
| src/KarmaNFT.sol:KarmaNFT Contract | | | | | |
+======================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| 673138 | 2982 | | | | |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| approve | 228 | 228 | 228 | 228 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| getApproved | 148 | 148 | 148 | 148 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| isApprovedForAll | 609 | 609 | 609 | 609 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| metadataGenerator | 350 | 350 | 350 | 350 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| safeTransferFrom(address,address,uint256) | 337 | 337 | 337 | 337 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| safeTransferFrom(address,address,uint256,bytes) | 655 | 655 | 655 | 655 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| setApprovalForAll | 479 | 479 | 479 | 479 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| setMetadataGenerator | 24009 | 26514 | 26514 | 29019 | 2 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| tokenURI | 60816 | 60816 | 60816 | 60816 | 1 |
|-------------------------------------------------+-----------------+-------+--------+-------+---------|
| transferFrom | 293 | 293 | 293 | 293 | 1 |
╰-------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭------------------------------------------------------+-----------------+--------+--------+--------+---------╮
| src/RewardsStreamerMP.sol:RewardsStreamerMP Contract | | | | | |
+=============================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| 2767624 | 12754 | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MAX_LOCKUP_PERIOD | 1486 | 1486 | 1486 | 1486 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MAX_MULTIPLIER | 642 | 642 | 642 | 642 | 10 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| MIN_LOCKUP_PERIOD | 202 | 202 | 202 | 202 | 15 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| compound | 37136 | 75198 | 75198 | 113261 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyModeEnabled | 3530 | 3530 | 3530 | 3530 | 263 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| enableEmergencyMode | 3413 | 26136 | 26302 | 26302 | 264 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalMaxMP | 4096 | 4096 | 4096 | 4096 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountTotalStakedBalance | 15333 | 15333 | 15333 | 15333 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getAccountVaults | 5773 | 5773 | 5773 | 5773 | 4 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getStakedBalance | 2675 | 2675 | 2675 | 2675 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| getVault | 1792 | 1792 | 1792 | 1792 | 1100 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 115245 | 115245 | 115245 | 115245 | 76 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lastRewardTime | 1122 | 2122 | 2122 | 3122 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 94547 | 94547 | 94547 | 94547 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 15241 | 52239 | 52136 | 92820 | 260 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 14701 | 73085 | 16880 | 187676 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpBalanceOf | 1047 | 2185 | 1985 | 7200 | 12 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpBalanceOfAccount | 11097 | 11097 | 11097 | 11097 | 1 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| mpStakedOf | 725 | 878 | 725 | 2725 | 13 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 615 | 615 | 615 | 615 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| registerVault | 2520 | 74781 | 75302 | 75302 | 304 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardEndTime | 503 | 1503 | 1503 | 2503 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardStartTime | 393 | 1393 | 1393 | 2393 | 2 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardsBalanceOf | 2039 | 2939 | 3170 | 6039 | 12 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setReward | 3285 | 56852 | 62610 | 107330 | 8 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| setTrustedCodehash | 24115 | 24115 | 24115 | 24115 | 76 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 3116 | 233324 | 228544 | 248873 | 1351 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMP | 1040 | 1282 | 1282 | 1524 | 6 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPAccrued | 767 | 767 | 767 | 767 | 1108 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMPStaked | 723 | 723 | 723 | 723 | 1111 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMaxMP | 789 | 789 | 789 | 789 | 1108 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsAccrued | 1031 | 1031 | 1031 | 1031 | 3 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalRewardsSupply | 1791 | 2384 | 2207 | 7624 | 34 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalShares | 711 | 711 | 711 | 711 | 6 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| totalStaked | 965 | 965 | 965 | 965 | 1115 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 54386 | 78554 | 78413 | 85333 | 269 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateGlobalState | 16846 | 28150 | 29662 | 29733 | 276 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| updateVaultMP | 25115 | 34126 | 36039 | 36110 | 276 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| upgradeToAndCall | 3307 | 8018 | 8629 | 10897 | 5 |
|------------------------------------------------------+-----------------+--------+--------+--------+---------|
| vaultShares | 1754 | 1920 | 1754 | 3754 | 12 |
╰------------------------------------------------------+-----------------+--------+--------+--------+---------╯
╭----------------------------------------+-----------------+--------+--------+--------+---------╮
| src/StakeVault.sol:StakeVault Contract | | | | | |
+===============================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| 1465368 | 6898 | | | | |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| STAKING_TOKEN | 171 | 171 | 171 | 171 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyExit | 16145 | 32518 | 32516 | 49616 | 263 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 97512 | 97512 | 97512 | 97512 | 304 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 12252 | 152622 | 69405 | 459428 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 12167 | 67480 | 67589 | 108367 | 261 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 30198 | 99793 | 32377 | 236806 | 3 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| owner | 546 | 565 | 546 | 2546 | 309 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| register | 12453 | 78318 | 78818 | 78818 | 304 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 12013 | 288556 | 284011 | 304340 | 1352 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stakeManager | 458 | 458 | 458 | 458 | 303 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| trustStakeManager | 7519 | 7519 | 7519 | 7519 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 11837 | 108778 | 109206 | 116126 | 270 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| withdraw | 20931 | 20931 | 20931 | 20931 | 1 |
╰----------------------------------------+-----------------+--------+--------+--------+---------╯
╭----------------------------------------------------+-----------------+------+--------+--------+---------╮
| src/TransparentProxy.sol:TransparentProxy Contract | | | | | |
+=========================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| 0 | 948 | | | | |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| | | | | | |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| fallback | 547 | 8330 | 1310 | 139538 | 6774 |
|----------------------------------------------------+-----------------+------+--------+--------+---------|
| implementation | 241 | 2240 | 2241 | 2241 | 2195 |
╰----------------------------------------------------+-----------------+------+--------+--------+---------╯
╭--------------------------------------------+-----------------+--------+--------+--------+---------╮
| src/VaultFactory.sol:VaultFactory Contract | | | | | |
+===================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| 0 | 1972 | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| createVault | 231027 | 247844 | 248127 | 248127 | 303 |
╰--------------------------------------------+-----------------+--------+--------+--------+---------╯
╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
| src/nft-metadata-generators/NFTMetadataGeneratorSVG.sol:NFTMetadataGeneratorSVG Contract | | | | | |
+===============================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| 1146843 | 5972 | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| generate | 44856 | 44856 | 44856 | 44856 | 1 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| imagePrefix | 851 | 1851 | 1851 | 2851 | 2 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| imageSuffix | 895 | 1895 | 1895 | 2895 | 2 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setImageStrings | 25271 | 30572 | 30572 | 35873 | 2 |
╰------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
| src/nft-metadata-generators/NFTMetadataGeneratorURL.sol:NFTMetadataGeneratorURL Contract | | | | | |
+===============================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| 1115405 | 5698 | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| generate | 50871 | 50871 | 50871 | 50871 | 1 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setURLStrings | 25439 | 30740 | 30740 | 36041 | 2 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| urlPrefix | 763 | 763 | 763 | 763 | 1 |
|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| urlSuffix | 829 | 829 | 829 | 829 | 1 |
╰------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
| test/mocks/KarmaProviderMock.sol:KarmaProviderMock Contract | | | | | |
+==================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| 182244 | 625 | | | | |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| rewardsBalanceOfAccount | 422 | 1755 | 2422 | 2422 | 12 |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setTotalKarmaShares | 43510 | 43510 | 43510 | 43510 | 20 |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| setUserKarmaShare | 44075 | 44075 | 44075 | 44075 | 4 |
|-------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| totalRewardsSupply | 363 | 1029 | 363 | 2363 | 72 |
╰-------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮
| test/mocks/MockMetadataGenerator.sol:MockMetadataGenerator Contract | | | | | |
+==========================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| 813059 | 3977 | | | | |
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------|
| generate | 47214 | 47214 | 47214 | 47214 | 1 |
╰---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭---------------------------------------------+-----------------+-------+--------+-------+---------╮
| test/mocks/MockToken.sol:MockToken Contract | | | | | |
+==================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| 569126 | 3218 | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| approve | 28773 | 32817 | 29001 | 45957 | 1326 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| balanceOf | 513 | 1073 | 513 | 2513 | 1900 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| mint | 33813 | 39151 | 34041 | 68097 | 1338 |
╰---------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮
| test/mocks/StackOverflowStakeManager.sol:StackOverflowStakeManager Contract | | | | | |
+====================================================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| 887790 | 3932 | | | | |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 321 | 213894 | 213894 | 427541 | 323 |
|-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 383 | 383 | 383 | 383 | 1 |
╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯

View File

@@ -7,11 +7,47 @@ EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 453110)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 450358)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 439675)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 40626)
FuzzTests:testFuzz_AccrueMP(uint256,uint256,uint16) (runs: 1002, μ: 521564, ~: 515955)
FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1002, μ: 513790, ~: 504677)
FuzzTests:testFuzz_Stake(uint256,uint256) (runs: 1002, μ: 404805, ~: 395692)
FuzzTests:testFuzz_Unstake(uint256,uint256,uint16,uint256) (runs: 1001, μ: 527488, ~: 527212)
IntegrationTest:testStakeFoo() (gas: 1416716)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6195340)
KarmaMintAllowanceTest:testAddKarmaProviderOnlyOwner() (gas: 316675)
KarmaMintAllowanceTest:testBalanceOf() (gas: 294197)
KarmaMintAllowanceTest:testBalanceOfWithNoSystemTotalKarma() (gas: 43077)
KarmaMintAllowanceTest:testMintAllowance_Available() (gas: 205127)
KarmaMintAllowanceTest:testMintAllowance_NotAvailable() (gas: 205187)
KarmaMintAllowanceTest:testMintOnlyOwner() (gas: 241762)
KarmaMintAllowanceTest:testMint_Ok() (gas: 263754)
KarmaMintAllowanceTest:testMint_RevertWithAllowanceExceeded() (gas: 246839)
KarmaMintAllowanceTest:testRemoveKarmaProviderIndexOutOfBounds() (gas: 36489)
KarmaMintAllowanceTest:testRemoveKarmaProviderOnlyOwner() (gas: 72980)
KarmaMintAllowanceTest:testTotalSupply() (gas: 202527)
KarmaMintAllowanceTest:testTransfersNotAllowed() (gas: 17736)
KarmaNFTTest:testApproveNotAllowed() (gas: 10917)
KarmaNFTTest:testGetApproved() (gas: 10635)
KarmaNFTTest:testIsApprovedForAll() (gas: 10797)
KarmaNFTTest:testSafeTransferNotAllowed() (gas: 11042)
KarmaNFTTest:testSafeTransferWithDataNotAllowed() (gas: 11112)
KarmaNFTTest:testSetApprovalForAllNotAllowed() (gas: 8654)
KarmaNFTTest:testSetMetadataGenerator() (gas: 886751)
KarmaNFTTest:testSetMetadataGeneratorRevert() (gas: 883297)
KarmaNFTTest:testTokenURI() (gas: 93186)
KarmaNFTTest:testTransferNotAllowed() (gas: 10679)
KarmaOwnershipTest:testInitialOwner() (gas: 13010)
KarmaOwnershipTest:testOwnershipTransfer() (gas: 88372)
KarmaTest:testAddKarmaProviderOnlyOwner() (gas: 316641)
KarmaTest:testBalanceOf() (gas: 294179)
KarmaTest:testBalanceOfWithNoSystemTotalKarma() (gas: 43055)
KarmaTest:testMintOnlyOwner() (gas: 241738)
KarmaTest:testRemoveKarmaProviderIndexOutOfBounds() (gas: 36483)
KarmaTest:testRemoveKarmaProviderOnlyOwner() (gas: 72968)
KarmaTest:testTotalSupply() (gas: 202421)
KarmaTest:testTransfersNotAllowed() (gas: 17714)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 6215464)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 350929)
LeaveTest:test_TrustNewStakeManager() (gas: 6246483)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 407521, ~: 407489)
LeaveTest:test_TrustNewStakeManager() (gas: 6266606)
LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1002, μ: 407524, ~: 407489)
LockTest:test_LockFailsWithNoStake() (gas: 115941)
LockTest:test_LockFailsWithZero() (gas: 369509)
LockTest:test_LockWithoutPriorLock() (gas: 464698)
@@ -23,11 +59,11 @@ MathTest:test_CalcBonusMP() (gas: 17488)
MathTest:test_CalcInitialMP() (gas: 5941)
MathTest:test_CalcMaxAccruedMP() (gas: 4580)
MathTest:test_CalcMaxTotalMP() (gas: 17901)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 853171)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 79488)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 855943)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 78556)
NFTMetadataGeneratorSVGTest:testSetImageStrings() (gas: 57996)
NFTMetadataGeneratorSVGTest:testSetImageStringsRevert() (gas: 36175)
NFTMetadataGeneratorURLTest:testGenerateMetadata() (gas: 92494)
NFTMetadataGeneratorURLTest:testGenerateMetadata() (gas: 91549)
NFTMetadataGeneratorURLTest:testSetBaseURL() (gas: 49145)
NFTMetadataGeneratorURLTest:testSetBaseURLRevert() (gas: 36219)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 1228876)
@@ -72,39 +108,7 @@ UnstakeTest:test_UnstakeOneAccount() (gas: 572086)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 595995)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 492152)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 622113)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2833999)
UpgradeTest:test_UpgradeStakeManager() (gas: 6083699)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2844286)
UpgradeTest:test_UpgradeStakeManager() (gas: 6103823)
VaultRegistrationTest:test_VaultRegistration() (gas: 64599)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 367398)
XPNFTTokenTest:testApproveNotAllowed() (gas: 10917)
XPNFTTokenTest:testGetApproved() (gas: 10635)
XPNFTTokenTest:testIsApprovedForAll() (gas: 10797)
XPNFTTokenTest:testSafeTransferNotAllowed() (gas: 11042)
XPNFTTokenTest:testSafeTransferWithDataNotAllowed() (gas: 11134)
XPNFTTokenTest:testSetApprovalForAllNotAllowed() (gas: 8654)
XPNFTTokenTest:testSetMetadataGenerator() (gas: 894671)
XPNFTTokenTest:testSetMetadataGeneratorRevert() (gas: 891217)
XPNFTTokenTest:testTokenURI() (gas: 94156)
XPNFTTokenTest:testTransferNotAllowed() (gas: 10679)
XPTokenMintAllowanceTest:testAddXPProviderOnlyOwner() (gas: 316437)
XPTokenMintAllowanceTest:testBalanceOf() (gas: 294269)
XPTokenMintAllowanceTest:testBalanceOfWithNoSystemTotalXP() (gas: 43045)
XPTokenMintAllowanceTest:testMintAllowance_Available() (gas: 205309)
XPTokenMintAllowanceTest:testMintAllowance_NotAvailable() (gas: 205369)
XPTokenMintAllowanceTest:testMintOnlyOwner() (gas: 241922)
XPTokenMintAllowanceTest:testMint_Ok() (gas: 263926)
XPTokenMintAllowanceTest:testMint_RevertWithAllowanceExceeded() (gas: 247021)
XPTokenMintAllowanceTest:testRemoveXPProviderIndexOutOfBounds() (gas: 36667)
XPTokenMintAllowanceTest:testRemoveXPProviderOnlyOwner() (gas: 72980)
XPTokenMintAllowanceTest:testTotalSupply() (gas: 202725)
XPTokenMintAllowanceTest:testTransfersNotAllowed() (gas: 17758)
XPTokenOwnershipTest:testInitialOwner() (gas: 13010)
XPTokenOwnershipTest:testOwnershipTransfer() (gas: 88372)
XPTokenTest:testAddXPProviderOnlyOwner() (gas: 316425)
XPTokenTest:testBalanceOf() (gas: 294251)
XPTokenTest:testBalanceOfWithNoSystemTotalXP() (gas: 43023)
XPTokenTest:testMintOnlyOwner() (gas: 241898)
XPTokenTest:testRemoveXPProviderIndexOutOfBounds() (gas: 36661)
XPTokenTest:testRemoveXPProviderOnlyOwner() (gas: 72968)
XPTokenTest:testTotalSupply() (gas: 202619)
XPTokenTest:testTransfersNotAllowed() (gas: 17736)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 367398)

View File

@@ -6,7 +6,7 @@
bytecode_hash = "none"
cbor_metadata = false
evm_version = "cancun"
fuzz = { runs = 1_000 }
fuzz = { runs = 1_000, max_test_rejects = 262144 }
gas_reports = ["*"]
libs = ["lib"]
via_ir = true
@@ -17,6 +17,7 @@
solc = "0.8.26"
src = "src"
test = "test"
[profile.ci]
fuzz = { runs = 10_000, max_test_rejects = 2621440 }
verbosity = 4

View File

@@ -2,6 +2,8 @@
pragma solidity ^0.8.26;
import { Test } from "forge-std/Test.sol";
import { Test, console } from "forge-std/Test.sol";
import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
import { DeployRewardsStreamerMPScript } from "../script/DeployRewardsStreamerMP.s.sol";
import { UpgradeRewardsStreamerMPScript } from "../script/UpgradeRewardsStreamerMP.s.sol";
import { DeploymentConfig } from "../script/DeploymentConfig.s.sol";
@@ -120,7 +122,7 @@ contract RewardsStreamerMPTest is StakeMath, Test {
vault = vaultFactory.createVault();
}
function _stake(address account, uint256 amount, uint256 lockupTime) public {
function _stake(address account, uint256 amount, uint256 lockupTime) public virtual {
StakeVault vault = StakeVault(vaults[account]);
vm.prank(account);
vault.stake(amount, lockupTime);
@@ -2393,6 +2395,8 @@ contract MultipleVaultsStakeTest is RewardsStreamerMPTest {
}
function test_StakeMultipleVaults() public {
console.log(MAX_BALANCE);
// Alice vault1 stakes 10 tokens
_stakeWithVault(alice, vault1, 10e18, 0);
@@ -2579,3 +2583,191 @@ contract CompoundTest is RewardsStreamerMPTest {
_compound(alice);
}
}
contract FuzzTests is RewardsStreamerMPTest {
function _stake(address account, uint256 amount, uint256 lockPeriod) public override {
stakingToken.mint(account, amount);
vm.prank(account);
stakingToken.approve(vaults[account], amount);
super._stake(account, amount, lockPeriod);
}
function testFuzz_Stake(uint256 stakeAmount, uint256 lockUpPeriod) public {
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
vm.assume(lockUpPeriod == 0 || (lockUpPeriod >= MIN_LOCKUP_PERIOD && lockUpPeriod <= MAX_LOCKUP_PERIOD));
uint256 expectedBonusMP = _bonusMP(stakeAmount, lockUpPeriod);
uint256 expectedMaxTotalMP = _maxTotalMP(stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount + expectedBonusMP,
totalMPAccrued: stakeAmount + expectedBonusMP,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: stakeAmount,
rewardBalance: 0,
rewardIndex: 0
})
);
checkVault(
CheckVaultParams({
account: vaults[alice],
rewardBalance: 0,
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: stakeAmount + expectedBonusMP,
mpAccrued: stakeAmount + expectedBonusMP,
maxMP: expectedMaxTotalMP,
rewardsAccrued: 0
})
);
}
function testFuzz_AccrueMP(uint256 stakeAmount, uint256 lockUpPeriod, uint16 accruedTime) public {
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
vm.assume(lockUpPeriod == 0 || (lockUpPeriod >= MIN_LOCKUP_PERIOD && lockUpPeriod <= MAX_LOCKUP_PERIOD));
uint256 expectedMaxTotalMP = _maxTotalMP(stakeAmount, lockUpPeriod);
uint256 expectedStakedMP = _initialMP(stakeAmount) + _bonusMP(stakeAmount, lockUpPeriod);
uint256 rawTotalMP = expectedStakedMP + _accrueMP(stakeAmount, accruedTime);
uint256 expectedTotalMP = Math.min(rawTotalMP, expectedMaxTotalMP);
_stake(alice, stakeAmount, lockUpPeriod);
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + accruedTime);
streamer.updateGlobalState();
streamer.updateVaultMP(vaults[alice]);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: expectedStakedMP,
totalMPAccrued: expectedTotalMP,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: stakeAmount,
rewardBalance: 0,
rewardIndex: 0
})
);
checkVault(
CheckVaultParams({
account: vaults[alice],
rewardBalance: 0,
stakedBalance: stakeAmount,
vaultBalance: stakeAmount,
rewardIndex: 0,
mpStaked: expectedStakedMP,
mpAccrued: expectedTotalMP,
maxMP: expectedMaxTotalMP,
rewardsAccrued: 0
})
);
}
function testFuzz_Unstake(
uint256 stakeAmount,
uint256 lockUpPeriod,
uint16 accruedTime,
uint256 unstakeAmount
)
public
{
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
vm.assume(lockUpPeriod == 0 || (lockUpPeriod >= MIN_LOCKUP_PERIOD && lockUpPeriod <= MAX_LOCKUP_PERIOD));
vm.assume(unstakeAmount <= stakeAmount);
vm.assume(accruedTime >= lockUpPeriod);
uint256 expectedMaxTotalMP = _maxTotalMP(stakeAmount, lockUpPeriod);
uint256 expectedStakedMP = _initialMP(stakeAmount) + _bonusMP(stakeAmount, lockUpPeriod);
uint256 rawTotalMP = expectedStakedMP + _accrueMP(stakeAmount, accruedTime);
uint256 expectedTotalMP = Math.min(rawTotalMP, expectedMaxTotalMP);
_stake(alice, stakeAmount, lockUpPeriod);
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + accruedTime);
_unstake(alice, unstakeAmount);
uint256 totalMPAccrued = expectedTotalMP - _reduceMP(stakeAmount, expectedTotalMP, unstakeAmount);
if (totalMPAccrued < expectedStakedMP) {
expectedStakedMP = totalMPAccrued;
}
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount - unstakeAmount,
totalMPStaked: expectedStakedMP,
totalMPAccrued: totalMPAccrued,
totalMaxMP: expectedMaxTotalMP - _reduceMP(stakeAmount, expectedMaxTotalMP, unstakeAmount),
stakingBalance: stakeAmount - unstakeAmount,
rewardBalance: 0,
rewardIndex: 0
})
);
checkVault(
CheckVaultParams({
account: vaults[alice],
rewardBalance: 0,
stakedBalance: stakeAmount - unstakeAmount,
vaultBalance: stakeAmount - unstakeAmount,
rewardIndex: 0,
mpStaked: expectedStakedMP,
mpAccrued: expectedTotalMP - _reduceMP(stakeAmount, expectedTotalMP, unstakeAmount),
maxMP: expectedMaxTotalMP - _reduceMP(stakeAmount, expectedMaxTotalMP, unstakeAmount),
rewardsAccrued: 0
})
);
}
function testFuzz_EmergencyExit(uint256 stakeAmount, uint256 lockUpPeriod) public {
vm.assume(stakeAmount > 0 && stakeAmount <= MAX_BALANCE);
vm.assume(lockUpPeriod == 0 || (lockUpPeriod >= MIN_LOCKUP_PERIOD && lockUpPeriod <= MAX_LOCKUP_PERIOD));
uint256 aliceInitialBalance = stakingToken.balanceOf(alice);
uint256 expectedBonusMP = _bonusMP(stakeAmount, lockUpPeriod);
uint256 expectedMaxTotalMP = _maxTotalMP(stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod);
vm.prank(admin);
streamer.enableEmergencyMode();
_emergencyExit(alice);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
totalMPStaked: stakeAmount + expectedBonusMP,
totalMPAccrued: stakeAmount + expectedBonusMP,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: 0,
rewardBalance: 0,
rewardIndex: 0
})
);
checkVault(
CheckVaultParams({
account: vaults[alice],
rewardBalance: 0,
stakedBalance: stakeAmount,
vaultBalance: 0,
rewardIndex: 0,
mpStaked: stakeAmount + expectedBonusMP,
mpAccrued: stakeAmount + expectedBonusMP,
maxMP: expectedMaxTotalMP,
rewardsAccrued: 0
})
);
assertEq(
stakingToken.balanceOf(alice), aliceInitialBalance + stakeAmount, "Alice should get staked tokens back"
);
}
}