mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-08 23:08:19 -05:00
chore(XPToken): rename XP to Karma
This commit is contained in:
384
.gas-report
384
.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 |
|
||||
╰-------------------------------------------------------+-----------------+-------+--------+-------+---------╯
|
||||
|
||||
|
||||
|
||||
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -174,4 +174,4 @@ jobs:
|
||||
rule:
|
||||
- verify:rewards_streamer_mp
|
||||
- verify:emergency_mode
|
||||
- verify:xp_token
|
||||
- verify:karma
|
||||
|
||||
@@ -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": [
|
||||
@@ -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",
|
||||
|
||||
@@ -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) {
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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("<svg>10</svg>"));
|
||||
string memory expectedImage = string(abi.encodePacked("data:image/svg+xml;base64,", encodedImage));
|
||||
|
||||
|
||||
@@ -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)));
|
||||
|
||||
Reference in New Issue
Block a user