diff --git a/.gas-report b/.gas-report index 6d078c7..e69de29 100644 --- a/.gas-report +++ b/.gas-report @@ -1,384 +0,0 @@ - -╭-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮ -| script/DeployRewardsStreamerMP.s.sol:DeployRewardsStreamerMPScript Contract | | | | | | -+=======================================================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| 6944992 | 33066 | | | | | -|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| | | | | | | -|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| run | 6063837 | 6063837 | 6063837 | 6063837 | 72 | -╰-----------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ - -╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮ -| script/DeploymentConfig.s.sol:DeploymentConfig Contract | | | | | | -+==========================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|---------------------------------------------------------+-----------------+-----+--------+-----+---------| -| 0 | 7607 | | | | | -|---------------------------------------------------------+-----------------+-----+--------+-----+---------| -| | | | | | | -|---------------------------------------------------------+-----------------+-----+--------+-----+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|---------------------------------------------------------+-----------------+-----+--------+-----+---------| -| activeNetworkConfig | 419 | 419 | 419 | 419 | 144 | -╰---------------------------------------------------------+-----------------+-----+--------+-----+---------╯ - -╭-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮ -| script/UpgradeRewardsStreamerMP.s.sol:UpgradeRewardsStreamerMPScript Contract | | | | | | -+=========================================================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| 3111592 | 15193 | | | | | -|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| | | | | | | -|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| run | 2599280 | 2599280 | 2599280 | 2599280 | 3 | -╰-------------------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ - -╭------------------------------------------------------+-----------------+--------+--------+--------+---------╮ -| src/RewardsStreamerMP.sol:RewardsStreamerMP Contract | | | | | | -+=============================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| 2757347 | 12705 | | | | | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| | | | | | | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| 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 | 7 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| enableEmergencyMode | 3413 | 20845 | 26302 | 26302 | 8 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| 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 | 76 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| initialize | 115245 | 115245 | 115245 | 115245 | 72 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| lastRewardTime | 1122 | 2122 | 2122 | 3122 | 2 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| leave | 94547 | 94547 | 94547 | 94547 | 1 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| lock | 15241 | 52240 | 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 | 74752 | 75302 | 75302 | 288 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| 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 | 72 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| stake | 3116 | 225610 | 228544 | 248731 | 327 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMP | 1040 | 1282 | 1282 | 1524 | 6 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMPAccrued | 767 | 767 | 767 | 767 | 84 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMPStaked | 723 | 723 | 723 | 723 | 87 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMaxMP | 789 | 789 | 789 | 789 | 84 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalRewardsAccrued | 1031 | 1031 | 1031 | 1031 | 3 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalRewardsSupply | 1791 | 2384 | 2207 | 7624 | 34 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalShares | 711 | 711 | 711 | 711 | 6 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| totalStaked | 965 | 965 | 965 | 965 | 91 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| unstake | 71186 | 77741 | 77668 | 81389 | 13 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| updateGlobalState | 16846 | 27817 | 29662 | 29662 | 20 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| updateVaultMP | 29693 | 35404 | 36039 | 36039 | 20 | -|------------------------------------------------------+-----------------+--------+--------+--------+---------| -| 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 | 32620 | 32516 | 49616 | 7 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| initialize | 97512 | 97512 | 97512 | 97512 | 288 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| leave | 12252 | 152622 | 69405 | 459428 | 4 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| lock | 12167 | 67481 | 67589 | 108367 | 261 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| migrateToVault | 30198 | 99793 | 32377 | 236806 | 3 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| owner | 546 | 566 | 546 | 2546 | 293 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| register | 12453 | 78290 | 78818 | 78818 | 288 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| stake | 12013 | 280134 | 284011 | 304198 | 328 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| stakeManager | 458 | 458 | 458 | 458 | 287 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| trustStakeManager | 7519 | 7519 | 7519 | 7519 | 1 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| unstake | 11837 | 101627 | 108461 | 112182 | 14 | -|----------------------------------------+-----------------+--------+--------+--------+---------| -| 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 | 7423 | 1310 | 139538 | 630 | -|----------------------------------------------------+-----------------+------+--------+--------+---------| -| implementation | 241 | 2238 | 2241 | 2241 | 899 | -╰----------------------------------------------------+-----------------+------+--------+--------+---------╯ - -╭--------------------------------------------+-----------------+--------+--------+--------+---------╮ -| src/VaultFactory.sol:VaultFactory Contract | | | | | | -+===================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|--------------------------------------------+-----------------+--------+--------+--------+---------| -| 0 | 1972 | | | | | -|--------------------------------------------+-----------------+--------+--------+--------+---------| -| | | | | | | -|--------------------------------------------+-----------------+--------+--------+--------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|--------------------------------------------+-----------------+--------+--------+--------+---------| -| createVault | 231027 | 247829 | 248127 | 248127 | 287 | -╰--------------------------------------------+-----------------+--------+--------+--------+---------╯ - -╭-------------------------------------------------+-----------------+-------+--------+-------+---------╮ -| src/XPNFTToken.sol:XPNFTToken Contract | | | | | | -+======================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| 673020 | 2943 | | | | | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| 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) | 677 | 677 | 677 | 677 | 1 | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| setApprovalForAll | 479 | 479 | 479 | 479 | 1 | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| setMetadataGenerator | 24009 | 26514 | 26514 | 29019 | 2 | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| tokenURI | 61313 | 61313 | 61313 | 61313 | 1 | -|-------------------------------------------------+-----------------+-------+--------+-------+---------| -| transferFrom | 293 | 293 | 293 | 293 | 1 | -╰-------------------------------------------------+-----------------+-------+--------+-------+---------╯ - -╭----------------------------------+-----------------+-------+--------+-------+---------╮ -| src/XPToken.sol:XPToken Contract | | | | | | -+=======================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|----------------------------------+-----------------+-------+--------+-------+---------| -| 958002 | 4712 | | | | | -|----------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|----------------------------------+-----------------+-------+--------+-------+---------| -| 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 | 3320 | 10986 | 9320 | 20320 | 6 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| getRewardProviders | 1091 | 3374 | 3374 | 5657 | 4 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| mint | 24184 | 75538 | 90623 | 90635 | 14 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| mintAllowance | 5536 | 5546 | 5546 | 5557 | 2 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| owner | 570 | 1236 | 570 | 2570 | 3 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| removeRewardProvider | 23690 | 28149 | 25831 | 34928 | 6 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| totalSupply | 2881 | 4881 | 2881 | 10881 | 8 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| transfer | 614 | 614 | 614 | 614 | 2 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| transferFrom | 357 | 357 | 357 | 357 | 2 | -|----------------------------------+-----------------+-------+--------+-------+---------| -| transferOwnership | 47977 | 47977 | 47977 | 47977 | 1 | -╰----------------------------------+-----------------+-------+--------+-------+---------╯ - -╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮ -| src/nft-metadata-generators/NFTMetadataGeneratorSVG.sol:NFTMetadataGeneratorSVG Contract | | | | | | -+===============================================================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| 1154988 | 6011 | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| generate | 45334 | 45334 | 45334 | 45334 | 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 | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| 1123357 | 5736 | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| generate | 51347 | 51347 | 51347 | 51347 | 1 | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| setURLStrings | 25439 | 30740 | 30740 | 36041 | 2 | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| urlPrefix | 763 | 763 | 763 | 763 | 1 | -|------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| urlSuffix | 829 | 829 | 829 | 829 | 1 | -╰------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯ - -╭---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮ -| test/mocks/MockMetadataGenerator.sol:MockMetadataGenerator Contract | | | | | | -+==========================================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| 820970 | 4015 | | | | | -|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|---------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| generate | 47689 | 47689 | 47689 | 47689 | 1 | -╰---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯ - -╭---------------------------------------------+-----------------+-------+--------+-------+---------╮ -| test/mocks/MockToken.sol:MockToken Contract | | | | | | -+==================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| 569042 | 3218 | | | | | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| approve | 45933 | 45956 | 45957 | 45957 | 286 | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| balanceOf | 513 | 883 | 513 | 2513 | 108 | -|---------------------------------------------+-----------------+-------+--------+-------+---------| -| mint | 50997 | 56045 | 50997 | 68097 | 298 | -╰---------------------------------------------+-----------------+-------+--------+-------+---------╯ - -╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮ -| 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 | -╰-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯ - -╭-------------------------------------------------------+-----------------+-------+--------+-------+---------╮ -| test/mocks/XPProviderMock.sol:XPProviderMock Contract | | | | | | -+============================================================================================================+ -| Deployment Cost | Deployment Size | | | | | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| 182028 | 624 | | | | | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| | | | | | | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| Function Name | Min | Avg | Median | Max | # Calls | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| rewardsBalanceOfAccount | 436 | 1769 | 2436 | 2436 | 12 | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| setTotalXPShares | 43633 | 43633 | 43633 | 43633 | 20 | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| setUserXPShare | 44001 | 44001 | 44001 | 44001 | 4 | -|-------------------------------------------------------+-----------------+-------+--------+-------+---------| -| totalRewardsSupply | 355 | 1021 | 355 | 2355 | 72 | -╰-------------------------------------------------------+-----------------+-------+--------+-------+---------╯ - - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85cd911..d5af720 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -174,4 +174,4 @@ jobs: rule: - verify:rewards_streamer_mp - verify:emergency_mode - - verify:xp_token + - verify:karma diff --git a/certora/confs/XPToken.conf b/certora/confs/Karma.conf similarity index 60% rename from certora/confs/XPToken.conf rename to certora/confs/Karma.conf index 169ad05..c70d243 100644 --- a/certora/confs/XPToken.conf +++ b/certora/confs/Karma.conf @@ -1,8 +1,8 @@ { - "files": ["src/XPToken.sol"], - "msg": "Verifying XPToken.sol", + "files": ["src/Karma.sol"], + "msg": "Verifying Karma.sol", "rule_sanity": "basic", - "verify": "XPToken:certora/specs/XPToken.spec", + "verify": "Karma:certora/specs/Karma.spec", "optimistic_loop": true, "loop_iter": "3", "packages": [ diff --git a/certora/specs/XPToken.spec b/certora/specs/Karma.spec similarity index 100% rename from certora/specs/XPToken.spec rename to certora/specs/Karma.spec diff --git a/package.json b/package.json index 9413391..9ccd9d1 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,10 @@ "scripts": { "clean": "rm -rf cache out", "lint": "pnpm lint:sol && pnpm prettier:check", - "verify": "pnpm verify:rewards_streamer_mp && pnpm verify:xp_token && pnpm verify:emergency_mode", + "verify": "pnpm verify:rewards_streamer_mp && pnpm verify:karma && pnpm verify:emergency_mode", "verify:rewards_streamer_mp": "certoraRun certora/confs/RewardsStreamerMP.conf", "verify:emergency_mode": "certoraRun certora/confs/EmergencyMode.conf", - "verify:xp_token": "certoraRun certora/confs/XPToken.conf", + "verify:karma": "certoraRun certora/confs/Karma.conf", "lint:sol": "forge fmt --check && pnpm solhint {script,src,test,certora}/**/*.sol", "prettier:check": "prettier --check **/*.{json,md,yml} --ignore-path=.prettierignore", "prettier:write": "prettier --write **/*.{json,md,yml} --ignore-path=.prettierignore", diff --git a/src/XPToken.sol b/src/Karma.sol similarity index 87% rename from src/XPToken.sol rename to src/Karma.sol index c218bb4..be84c07 100644 --- a/src/XPToken.sol +++ b/src/Karma.sol @@ -5,15 +5,15 @@ import { Ownable, Ownable2Step } from "@openzeppelin/contracts/access/Ownable2St import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IRewardProvider } from "./interfaces/IRewardProvider.sol"; -contract XPToken is ERC20, Ownable2Step { - error XPToken__MintAllowanceExceeded(); +contract Karma is ERC20, Ownable2Step { + error Karma__MintAllowanceExceeded(); - string public constant NAME = "XP Token"; - string public constant SYMBOL = "XP"; + string public constant NAME = "Karma"; + string public constant SYMBOL = "KARMA"; IRewardProvider[] public rewardProviders; - error XPToken__TransfersNotAllowed(); + error Karma__TransfersNotAllowed(); error RewardProvider__IndexOutOfBounds(); constructor() ERC20(NAME, SYMBOL) Ownable(msg.sender) { } @@ -45,7 +45,7 @@ contract XPToken is ERC20, Ownable2Step { function mint(address account, uint256 amount) external onlyOwner { if (amount > _mintAllowance()) { - revert XPToken__MintAllowanceExceeded(); + revert Karma__MintAllowanceExceeded(); } _mint(account, amount); @@ -87,15 +87,15 @@ contract XPToken is ERC20, Ownable2Step { } function transfer(address, uint256) public pure override returns (bool) { - revert XPToken__TransfersNotAllowed(); + revert Karma__TransfersNotAllowed(); } function approve(address, uint256) public pure override returns (bool) { - revert XPToken__TransfersNotAllowed(); + revert Karma__TransfersNotAllowed(); } function transferFrom(address, address, uint256) public pure override returns (bool) { - revert XPToken__TransfersNotAllowed(); + revert Karma__TransfersNotAllowed(); } function allowance(address, address) public pure override returns (uint256) { diff --git a/src/XPNFTToken.sol b/src/KarmaNFT.sol similarity index 74% rename from src/XPNFTToken.sol rename to src/KarmaNFT.sol index 9240441..eb3f976 100644 --- a/src/XPNFTToken.sol +++ b/src/KarmaNFT.sol @@ -8,27 +8,27 @@ interface IERC20 { function balanceOf(address account) external view returns (uint256); } -contract XPNFTToken is Ownable { - error XPNFT__TransferNotAllowed(); - error XPNFT__InvalidTokenId(); +contract KarmaNFT is Ownable { + error KarmaNFT__TransferNotAllowed(); + error KarmaNFT__InvalidTokenId(); - IERC20 public xpToken; + IERC20 public karmaToken; INFTMetadataGenerator public metadataGenerator; - string private name = "XPNFT"; - string private symbol = "XPNFT"; + string private name = "KarmaNFT"; + string private symbol = "KARMANFT"; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); modifier onlyValidTokenId(uint256 tokenId) { if (tokenId > type(uint160).max) { - revert XPNFT__InvalidTokenId(); + revert KarmaNFT__InvalidTokenId(); } _; } - constructor(address xpTokenAddress, address _metadataGenerator) Ownable(msg.sender) { - xpToken = IERC20(xpTokenAddress); + constructor(address karmaTokenAddress, address _metadataGenerator) Ownable(msg.sender) { + karmaToken = IERC20(karmaTokenAddress); metadataGenerator = INFTMetadataGenerator(_metadataGenerator); } @@ -50,23 +50,23 @@ contract XPNFTToken is Ownable { } function safeTransferFrom(address, address, uint256, bytes calldata) external pure { - revert XPNFT__TransferNotAllowed(); + revert KarmaNFT__TransferNotAllowed(); } function safeTransferFrom(address, address, uint256) external pure { - revert XPNFT__TransferNotAllowed(); + revert KarmaNFT__TransferNotAllowed(); } function transferFrom(address, address, uint256) external pure { - revert XPNFT__TransferNotAllowed(); + revert KarmaNFT__TransferNotAllowed(); } function approve(address, uint256) external pure { - revert XPNFT__TransferNotAllowed(); + revert KarmaNFT__TransferNotAllowed(); } function setApprovalForAll(address, bool) external pure { - revert XPNFT__TransferNotAllowed(); + revert KarmaNFT__TransferNotAllowed(); } function getApproved(uint256) external pure returns (address) { @@ -79,7 +79,7 @@ contract XPNFTToken is Ownable { function tokenURI(uint256 tokenId) external view onlyValidTokenId(tokenId) returns (string memory) { address account = address(uint160(tokenId)); - uint256 balance = xpToken.balanceOf(account); + uint256 balance = karmaToken.balanceOf(account); return metadataGenerator.generate(account, balance); } } diff --git a/src/nft-metadata-generators/BaseNFTMetadataGenerator.sol b/src/nft-metadata-generators/BaseNFTMetadataGenerator.sol index 60b115f..eb9f12f 100644 --- a/src/nft-metadata-generators/BaseNFTMetadataGenerator.sol +++ b/src/nft-metadata-generators/BaseNFTMetadataGenerator.sol @@ -14,8 +14,8 @@ abstract contract BaseNFTMetadataGenerator is INFTMetadataGenerator, Ownable { } function generate(address account, uint256 balance) external view returns (string memory) { - string memory baseName = "XPNFT Token "; - string memory baseDescription = "This is a XPNFT token for address "; + string memory baseName = "KarmaNFT "; + string memory baseDescription = "This is a KarmaNFT for address "; string memory propName = string(abi.encodePacked(baseName, Strings.toHexString(account))); string memory propDescription = string( diff --git a/test/XPToken.t.sol b/test/Karma.t.sol similarity index 70% rename from test/XPToken.t.sol rename to test/Karma.t.sol index 2ac1a73..8a2d9a4 100644 --- a/test/XPToken.t.sol +++ b/test/Karma.t.sol @@ -2,27 +2,27 @@ pragma solidity ^0.8.26; import { Test } from "forge-std/Test.sol"; -import { XPToken } from "../src/XPToken.sol"; -import { XPProviderMock } from "./mocks/XPProviderMock.sol"; +import { Karma } from "../src/Karma.sol"; +import { KarmaProviderMock } from "./mocks/KarmaProviderMock.sol"; import { IRewardProvider } from "../src/interfaces/IRewardProvider.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -contract XPTokenTest is Test { - XPToken xpToken; +contract KarmaTest is Test { + Karma xpToken; address owner = makeAddr("owner"); address alice = makeAddr("alice"); address bob = makeAddr("bob"); - XPProviderMock provider1; - XPProviderMock provider2; + KarmaProviderMock provider1; + KarmaProviderMock provider2; function setUp() public virtual { vm.prank(owner); - xpToken = new XPToken(); + xpToken = new Karma(); - provider1 = new XPProviderMock(); - provider2 = new XPProviderMock(); + provider1 = new KarmaProviderMock(); + provider2 = new KarmaProviderMock(); vm.prank(owner); xpToken.addRewardProvider(provider1); @@ -31,8 +31,8 @@ contract XPTokenTest is Test { xpToken.addRewardProvider(provider2); } - function testAddXPProviderOnlyOwner() public { - XPProviderMock provider3 = new XPProviderMock(); + function testAddKarmaProviderOnlyOwner() public { + KarmaProviderMock provider3 = new KarmaProviderMock(); vm.prank(alice); vm.expectPartialRevert(Ownable.OwnableUnauthorizedAccount.selector); @@ -48,7 +48,7 @@ contract XPTokenTest is Test { assertEq(address(providers[2]), address(provider3)); } - function testRemoveXPProviderOnlyOwner() public { + function testRemoveKarmaProviderOnlyOwner() public { vm.prank(alice); vm.expectPartialRevert(Ownable.OwnableUnauthorizedAccount.selector); xpToken.removeRewardProvider(0); @@ -61,15 +61,15 @@ contract XPTokenTest is Test { assertEq(address(providers[0]), address(provider2)); } - function testRemoveXPProviderIndexOutOfBounds() public { + function testRemoveKarmaProviderIndexOutOfBounds() public { vm.prank(owner); - vm.expectRevert(XPToken.RewardProvider__IndexOutOfBounds.selector); + vm.expectRevert(Karma.RewardProvider__IndexOutOfBounds.selector); xpToken.removeRewardProvider(10); } function testTotalSupply() public { - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); vm.prank(owner); xpToken.mint(owner, 500 ether); @@ -78,7 +78,7 @@ contract XPTokenTest is Test { assertEq(totalSupply, 3500 ether); } - function testBalanceOfWithNoSystemTotalXP() public view { + function testBalanceOfWithNoSystemTotalKarma() public view { uint256 aliceBalance = xpToken.balanceOf(alice); assertEq(aliceBalance, 0); @@ -87,11 +87,11 @@ contract XPTokenTest is Test { } function testBalanceOf() public { - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); - provider1.setUserXPShare(alice, 1000e18); - provider2.setUserXPShare(alice, 2000e18); + provider1.setUserKarmaShare(alice, 1000e18); + provider2.setUserKarmaShare(alice, 2000e18); vm.prank(owner); xpToken.mint(alice, 500e18); @@ -103,8 +103,8 @@ contract XPTokenTest is Test { } function testMintOnlyOwner() public { - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); assertEq(xpToken.totalSupply(), 3000 ether); vm.prank(alice); @@ -117,13 +117,13 @@ contract XPTokenTest is Test { } function testTransfersNotAllowed() public { - vm.expectRevert(XPToken.XPToken__TransfersNotAllowed.selector); + vm.expectRevert(Karma.Karma__TransfersNotAllowed.selector); xpToken.transfer(alice, 100e18); - vm.expectRevert(XPToken.XPToken__TransfersNotAllowed.selector); + vm.expectRevert(Karma.Karma__TransfersNotAllowed.selector); xpToken.approve(alice, 100e18); - vm.expectRevert(XPToken.XPToken__TransfersNotAllowed.selector); + vm.expectRevert(Karma.Karma__TransfersNotAllowed.selector); xpToken.transferFrom(alice, bob, 100e18); uint256 allowance = xpToken.allowance(alice, bob); @@ -131,15 +131,15 @@ contract XPTokenTest is Test { } } -contract XPTokenOwnershipTest is Test { - XPToken xpToken; +contract KarmaOwnershipTest is Test { + Karma xpToken; address owner = makeAddr("owner"); address alice = makeAddr("alice"); function setUp() public { vm.prank(owner); - xpToken = new XPToken(); + xpToken = new Karma(); } function testInitialOwner() public view { @@ -157,15 +157,15 @@ contract XPTokenOwnershipTest is Test { } } -contract XPTokenMintAllowanceTest is XPTokenTest { +contract KarmaMintAllowanceTest is KarmaTest { function setUp() public override { super.setUp(); } function testMintAllowance_Available() public { // 3000 external => maxSupply = 9000 - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); vm.prank(owner); xpToken.mint(owner, 500 ether); @@ -177,8 +177,8 @@ contract XPTokenMintAllowanceTest is XPTokenTest { function testMintAllowance_NotAvailable() public { // 3000 external => maxSupply = 9000 - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); vm.prank(owner); xpToken.mint(owner, 6000 ether); @@ -190,8 +190,8 @@ contract XPTokenMintAllowanceTest is XPTokenTest { function testMint_RevertWithAllowanceExceeded() public { // 3000 external => maxSupply = 9000 - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); vm.prank(owner); xpToken.mint(owner, 500 ether); @@ -199,14 +199,14 @@ contract XPTokenMintAllowanceTest is XPTokenTest { // allowed to mint 5500 vm.prank(owner); - vm.expectRevert(XPToken.XPToken__MintAllowanceExceeded.selector); + vm.expectRevert(Karma.Karma__MintAllowanceExceeded.selector); xpToken.mint(owner, 6000 ether); } function testMint_Ok() public { // 3000 external => maxSupply = 9000 - provider1.setTotalXPShares(1000 ether); - provider2.setTotalXPShares(2000 ether); + provider1.setTotalKarmaShares(1000 ether); + provider2.setTotalKarmaShares(2000 ether); vm.prank(owner); xpToken.mint(owner, 500 ether); diff --git a/test/XPNFTToken.t.sol b/test/KarmaNFT.t.sol similarity index 78% rename from test/XPNFTToken.t.sol rename to test/KarmaNFT.t.sol index 242ba6f..ebb2ef1 100644 --- a/test/XPNFTToken.t.sol +++ b/test/KarmaNFT.t.sol @@ -1,24 +1,24 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.26; -import { Test, console } from "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; import { Base64 } from "@openzeppelin/contracts/utils/Base64.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { MockToken } from "./mocks/MockToken.sol"; -import { XPNFTToken } from "../src/XPNFTToken.sol"; +import { KarmaNFT } from "../src/KarmaNFT.sol"; import { MockMetadataGenerator } from "./mocks/MockMetadataGenerator.sol"; -contract XPNFTTokenTest is Test { +contract KarmaNFTTest is Test { MockToken erc20Token; MockMetadataGenerator metadataGenerator; - XPNFTToken nft; + KarmaNFT nft; address alice = makeAddr("alice"); function setUp() public { erc20Token = new MockToken("Test", "TEST"); metadataGenerator = new MockMetadataGenerator(address(erc20Token), "https://test.local/"); - nft = new XPNFTToken(address(erc20Token), address(metadataGenerator)); + nft = new KarmaNFT(address(erc20Token), address(metadataGenerator)); address[1] memory users = [alice]; for (uint256 i = 0; i < users.length; i++) { @@ -32,9 +32,9 @@ contract XPNFTTokenTest is Test { function testTokenURI() public view { bytes memory expectedMetadata = abi.encodePacked( - "{\"name\":\"XPNFT Token 0x328809bc894f92807417d2dad6b7c998c1afdac6\",", + "{\"name\":\"KarmaNFT 0x328809bc894f92807417d2dad6b7c998c1afdac6\",", // solhint-disable-next-line - "\"description\":\"This is a XPNFT token for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000\",", + "\"description\":\"This is a KarmaNFT for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000\",", "\"image\":\"https://test.local/0x328809bc894f92807417d2dad6b7c998c1afdac6\"}" ); string memory metadata = nft.tokenURI(addressToId(alice)); @@ -60,27 +60,27 @@ contract XPNFTTokenTest is Test { } function testTransferNotAllowed() public { - vm.expectRevert(XPNFTToken.XPNFT__TransferNotAllowed.selector); + vm.expectRevert(KarmaNFT.KarmaNFT__TransferNotAllowed.selector); nft.transferFrom(alice, address(0), addressToId(alice)); } function testSafeTransferNotAllowed() public { - vm.expectRevert(XPNFTToken.XPNFT__TransferNotAllowed.selector); + vm.expectRevert(KarmaNFT.KarmaNFT__TransferNotAllowed.selector); nft.safeTransferFrom(alice, address(0), addressToId(alice)); } function testSafeTransferWithDataNotAllowed() public { - vm.expectRevert(XPNFTToken.XPNFT__TransferNotAllowed.selector); + vm.expectRevert(KarmaNFT.KarmaNFT__TransferNotAllowed.selector); nft.safeTransferFrom(alice, address(0), addressToId(alice), ""); } function testApproveNotAllowed() public { - vm.expectRevert(XPNFTToken.XPNFT__TransferNotAllowed.selector); + vm.expectRevert(KarmaNFT.KarmaNFT__TransferNotAllowed.selector); nft.approve(address(0), addressToId(alice)); } function testSetApprovalForAllNotAllowed() public { - vm.expectRevert(XPNFTToken.XPNFT__TransferNotAllowed.selector); + vm.expectRevert(KarmaNFT.KarmaNFT__TransferNotAllowed.selector); nft.setApprovalForAll(address(0), true); } diff --git a/test/mocks/XPProviderMock.sol b/test/mocks/KarmaProviderMock.sol similarity index 54% rename from test/mocks/XPProviderMock.sol rename to test/mocks/KarmaProviderMock.sol index 6e4e72b..687e417 100644 --- a/test/mocks/XPProviderMock.sol +++ b/test/mocks/KarmaProviderMock.sol @@ -3,18 +3,18 @@ pragma solidity ^0.8.26; import { IRewardProvider } from "../../src/interfaces/IRewardProvider.sol"; -contract XPProviderMock is IRewardProvider { +contract KarmaProviderMock is IRewardProvider { // solhint-disable-next-line - mapping(address => uint256) public userXPShare; + mapping(address => uint256) public userKarmaShare; - uint256 public totalXPShares; + uint256 public totalKarmaShares; - function setUserXPShare(address user, uint256 xp) external { - userXPShare[user] = xp; + function setUserKarmaShare(address user, uint256 karma) external { + userKarmaShare[user] = karma; } - function setTotalXPShares(uint256 xp) external { - totalXPShares = xp; + function setTotalKarmaShares(uint256 karma) external { + totalKarmaShares = karma; } function rewardsBalanceOf(address) external pure override returns (uint256) { @@ -22,10 +22,10 @@ contract XPProviderMock is IRewardProvider { } function rewardsBalanceOfAccount(address account) external view override returns (uint256) { - return userXPShare[account]; + return userKarmaShare[account]; } function totalRewardsSupply() external view override returns (uint256) { - return totalXPShares; + return totalKarmaShares; } } diff --git a/test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol b/test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol index e725b1e..106b0d3 100644 --- a/test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol +++ b/test/nft-metadata-generators/NFTMetadataGeneratorSVG.t.sol @@ -21,10 +21,10 @@ contract NFTMetadataGeneratorSVGTest is Test { } function testGenerateMetadata() public view { - string memory expectedName = "XPNFT Token 0x328809bc894f92807417d2dad6b7c998c1afdac6"; + string memory expectedName = "KarmaNFT 0x328809bc894f92807417d2dad6b7c998c1afdac6"; string memory expectedDescription = // solhint-disable-next-line - "This is a XPNFT token for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000"; + "This is a KarmaNFT for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000"; string memory encodedImage = Base64.encode(abi.encodePacked("10")); string memory expectedImage = string(abi.encodePacked("data:image/svg+xml;base64,", encodedImage)); diff --git a/test/nft-metadata-generators/NFTMetadataGeneratorURL.t.sol b/test/nft-metadata-generators/NFTMetadataGeneratorURL.t.sol index 70118d3..a75ea35 100644 --- a/test/nft-metadata-generators/NFTMetadataGeneratorURL.t.sol +++ b/test/nft-metadata-generators/NFTMetadataGeneratorURL.t.sol @@ -23,9 +23,9 @@ contract NFTMetadataGeneratorURLTest is Test { function testGenerateMetadata() public view { string memory expectedMetadata = "data:application/json;base64,"; bytes memory json = abi.encodePacked( - "{\"name\":\"XPNFT Token 0x328809bc894f92807417d2dad6b7c998c1afdac6\",", + "{\"name\":\"KarmaNFT 0x328809bc894f92807417d2dad6b7c998c1afdac6\",", // solhint-disable-next-line - "\"description\":\"This is a XPNFT token for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000\",", + "\"description\":\"This is a KarmaNFT for address 0x328809bc894f92807417d2dad6b7c998c1afdac6 with balance 10000000000000000000\",", "\"image\":\"http://test.local/images/0x328809bc894f92807417d2dad6b7c998c1afdac6.jpg\"}" ); expectedMetadata = string(abi.encodePacked(expectedMetadata, Base64.encode(json)));