diff --git a/.gas-report b/.gas-report index 42d3547..1a83045 100644 --- a/.gas-report +++ b/.gas-report @@ -10,7 +10,7 @@ |-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------| -| fallback | 746 | 142836 | 190919 | 190943 | 446 | +| fallback | 746 | 142733 | 190919 | 190943 | 447 | ╰-------------------------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╯ ╭-----------------------------------------------------+-----------------+---------+---------+---------+---------╮ @@ -24,7 +24,7 @@ |-----------------------------------------------------+-----------------+---------+---------+---------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |-----------------------------------------------------+-----------------+---------+---------+---------+---------| -| run | 3975779 | 3975779 | 3975779 | 3975779 | 105 | +| run | 3975779 | 3975779 | 3975779 | 3975779 | 106 | ╰-----------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╭-----------------------------------------------------------+-----------------+---------+---------+---------+---------╮ @@ -46,13 +46,13 @@ +=============================================================================================================================+ | Deployment Cost | Deployment Size | | | | | |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| 8381426 | 39972 | | | | | +| 8398642 | 40053 | | | | | |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| | | | | | | | |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |-------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| run | 7303079 | 7303079 | 7303079 | 7303079 | 92 | +| run | 7319311 | 7319311 | 7319311 | 7319311 | 93 | ╰-------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╭---------------------------------------------------------+-----------------+-----+--------+-----+---------╮ @@ -66,7 +66,7 @@ |---------------------------------------------------------+-----------------+-----+--------+-----+---------| | Function Name | Min | Avg | Median | Max | # Calls | |---------------------------------------------------------+-----------------+-----+--------+-----+---------| -| activeNetworkConfig | 597 | 597 | 597 | 597 | 317 | +| activeNetworkConfig | 597 | 597 | 597 | 597 | 320 | ╰---------------------------------------------------------+-----------------+-----+--------+-----+---------╯ ╭---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮ @@ -74,13 +74,13 @@ +===============================================================================================================================+ | Deployment Cost | Deployment Size | | | | | |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| 5831915 | 28063 | | | | | +| 5849117 | 28144 | | | | | |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| | | | | | | | |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |---------------------------------------------------------------------+-----------------+---------+---------+---------+---------| -| runWithAdminAndProxy | 3265942 | 3265942 | 3265942 | 3265942 | 3 | +| runWithAdminAndProxy | 3282174 | 3282174 | 3282174 | 3282174 | 3 | ╰---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯ ╭------------------------------+-----------------+--------+--------+--------+---------╮ @@ -96,7 +96,7 @@ |------------------------------+-----------------+--------+--------+--------+---------| | acceptOwnership | 12020 | 12020 | 12020 | 12020 | 1 | |------------------------------+-----------------+--------+--------+--------+---------| -| addRewardDistributor | 2589 | 66822 | 70586 | 70586 | 127 | +| addRewardDistributor | 2589 | 66851 | 70586 | 70586 | 128 | |------------------------------+-----------------+--------+--------+--------+---------| | allowance | 482 | 482 | 482 | 482 | 2 | |------------------------------+-----------------+--------+--------+--------+---------| @@ -106,7 +106,7 @@ |------------------------------+-----------------+--------+--------+--------+---------| | getRewardDistributors | 1140 | 3384 | 3384 | 5628 | 4 | |------------------------------+-----------------+--------+--------+--------+---------| -| initialize | 95872 | 95872 | 95872 | 95872 | 105 | +| initialize | 95872 | 95872 | 95872 | 95872 | 106 | |------------------------------+-----------------+--------+--------+--------+---------| | mint | 2632 | 37252 | 48792 | 48792 | 8 | |------------------------------+-----------------+--------+--------+--------+---------| @@ -162,7 +162,7 @@ +===================================================================================================+ | Deployment Cost | Deployment Size | | | | | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| 3468937 | 16069 | | | | | +| 3486137 | 16150 | | | | | |--------------------------------------------+-----------------+--------+--------+--------+---------| | | | | | | | |--------------------------------------------+-----------------+--------+--------+--------+---------| @@ -184,17 +184,17 @@ |--------------------------------------------+-----------------+--------+--------+--------+---------| | getAccountVaults | 5230 | 5230 | 5230 | 5230 | 4 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| getVault | 1823 | 6577 | 1823 | 15823 | 4181 | +| getVault | 1823 | 6610 | 1823 | 15823 | 4182 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| initialize | 92752 | 92752 | 92752 | 92752 | 92 | +| initialize | 92752 | 92752 | 92752 | 92752 | 93 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | lastRewardTime | 407 | 1407 | 1407 | 2407 | 2 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | leave | 88837 | 88837 | 88837 | 88837 | 1 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| lock | 7040 | 42377 | 45950 | 84893 | 1034 | +| lock | 7040 | 42555 | 45950 | 84893 | 1034 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| migrateToVault | 13570 | 63656 | 15777 | 161622 | 3 | +| migrateToVault | 9294 | 51723 | 16883 | 163832 | 4 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | mpAccruedOf | 629 | 629 | 629 | 629 | 20 | |--------------------------------------------+-----------------+--------+--------+--------+---------| @@ -204,7 +204,7 @@ |--------------------------------------------+-----------------+--------+--------+--------+---------| | proxiableUUID | 342 | 342 | 342 | 342 | 3 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| registerVault | 2583 | 74436 | 75014 | 75014 | 362 | +| registerVault | 2583 | 74442 | 75014 | 75014 | 366 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | rewardEndTime | 429 | 1429 | 1429 | 2429 | 2 | |--------------------------------------------+-----------------+--------+--------+--------+---------| @@ -216,21 +216,21 @@ |--------------------------------------------+-----------------+--------+--------+--------+---------| | setReward | 2508 | 105565 | 107076 | 107076 | 265 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| setRewardsSupplier | 26875 | 26875 | 26875 | 26875 | 87 | +| setRewardsSupplier | 26875 | 26875 | 26875 | 26875 | 88 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| setTrustedCodehash | 24238 | 24238 | 24238 | 24238 | 92 | +| setTrustedCodehash | 24238 | 24238 | 24238 | 24238 | 93 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| stake | 2639 | 129409 | 59967 | 225838 | 2668 | +| stake | 2639 | 128942 | 59967 | 225838 | 2668 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | stakedBalanceOf | 2622 | 2622 | 2622 | 2622 | 1 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | totalMP | 805 | 1257 | 1257 | 1710 | 6 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMPAccrued | 385 | 1067 | 385 | 2385 | 4161 | +| totalMPAccrued | 385 | 1072 | 385 | 2385 | 4162 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMPStaked | 429 | 1111 | 429 | 2429 | 4164 | +| totalMPStaked | 429 | 1115 | 429 | 2429 | 4165 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| totalMaxMP | 407 | 1089 | 407 | 2407 | 4161 | +| totalMaxMP | 407 | 1094 | 407 | 2407 | 4162 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | totalRewardsAccrued | 407 | 407 | 407 | 407 | 3 | |--------------------------------------------+-----------------+--------+--------+--------+---------| @@ -238,15 +238,15 @@ |--------------------------------------------+-----------------+--------+--------+--------+---------| | totalShares | 597 | 597 | 597 | 597 | 6 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| totalStaked | 408 | 1089 | 408 | 2408 | 4168 | +| totalStaked | 408 | 1094 | 408 | 2408 | 4169 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| unstake | 38969 | 41819 | 38995 | 75006 | 269 | +| unstake | 38969 | 41446 | 38995 | 75006 | 269 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | updateAccount | 347677 | 347677 | 347677 | 347677 | 1 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | updateGlobalState | 15820 | 25876 | 29230 | 29230 | 8 | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| updateVault | 31948 | 34247 | 31948 | 110579 | 1023 | +| updateVault | 31948 | 34031 | 31948 | 110579 | 1024 | |--------------------------------------------+-----------------+--------+--------+--------+---------| | upgradeTo | 10279 | 10895 | 10279 | 12745 | 4 | |--------------------------------------------+-----------------+--------+--------+--------+---------| @@ -270,25 +270,25 @@ |----------------------------------------+-----------------+--------+--------+--------+---------| | emergencyExit | 15023 | 31463 | 31461 | 48561 | 263 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| initialize | 97660 | 97660 | 97660 | 97660 | 362 | +| initialize | 97660 | 97660 | 97660 | 97660 | 366 | |----------------------------------------+-----------------+--------+--------+--------+---------| | leave | 12161 | 124868 | 66517 | 354279 | 4 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| lock | 12091 | 57799 | 61416 | 100356 | 1035 | +| lock | 12091 | 57976 | 61416 | 100356 | 1035 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| migrateToVault | 29058 | 90338 | 31265 | 210692 | 3 | +| migrateToVault | 24782 | 75606 | 32371 | 212902 | 4 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| owner | 379 | 411 | 379 | 2379 | 370 | +| owner | 379 | 411 | 379 | 2379 | 374 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| register | 12718 | 78083 | 78644 | 78644 | 362 | +| register | 12718 | 78090 | 78644 | 78644 | 366 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| stake | 12071 | 163418 | 75460 | 281406 | 2669 | +| stake | 12071 | 162801 | 75460 | 281406 | 2669 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| stakeManager | 369 | 369 | 369 | 369 | 361 | +| stakeManager | 369 | 369 | 369 | 369 | 365 | |----------------------------------------+-----------------+--------+--------+--------+---------| | trustStakeManager | 7580 | 7580 | 7580 | 7580 | 1 | |----------------------------------------+-----------------+--------+--------+--------+---------| -| unstake | 12048 | 58306 | 54438 | 106028 | 270 | +| unstake | 12048 | 57761 | 54438 | 106028 | 270 | |----------------------------------------+-----------------+--------+--------+--------+---------| | withdraw | 20733 | 20733 | 20733 | 20733 | 1 | ╰----------------------------------------+-----------------+--------+--------+--------+---------╯ @@ -304,9 +304,9 @@ |----------------------------------------------------+-----------------+------+--------+--------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |----------------------------------------------------+-----------------+------+--------+--------+---------| -| fallback | 708 | 6324 | 2301 | 374054 | 23156 | +| fallback | 708 | 6329 | 2301 | 374054 | 23163 | |----------------------------------------------------+-----------------+------+--------+--------+---------| -| implementation | 346 | 2345 | 2346 | 2346 | 4344 | +| implementation | 346 | 2345 | 2346 | 2346 | 4349 | ╰----------------------------------------------------+-----------------+------+--------+--------+---------╯ ╭--------------------------------------------+-----------------+--------+--------+--------+---------╮ @@ -320,7 +320,9 @@ |--------------------------------------------+-----------------+--------+--------+--------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |--------------------------------------------+-----------------+--------+--------+--------+---------| -| createVault | 230968 | 247689 | 248068 | 248068 | 361 | +| createVault | 230968 | 247693 | 248068 | 248068 | 365 | +|--------------------------------------------+-----------------+--------+--------+--------+---------| +| vaultImplementation | 2345 | 2345 | 2345 | 2345 | 1 | ╰--------------------------------------------+-----------------+--------+--------+--------+---------╯ ╭------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------╮ @@ -328,7 +330,7 @@ +===============================================================================================================================================+ | Deployment Cost | Deployment Size | | | | | |------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| -| 1204853 | 6207 | | | | | +| 1204853 | 6015 | | | | | |------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| | | | | | | | |------------------------------------------------------------------------------------------+-----------------+-------+--------+-------+---------| @@ -408,11 +410,11 @@ |---------------------------------------------+-----------------+-------+--------+-------+---------| | Function Name | Min | Avg | Median | Max | # Calls | |---------------------------------------------+-----------------+-------+--------+-------+---------| -| approve | 29075 | 31479 | 29183 | 46259 | 2664 | +| approve | 29075 | 31500 | 29183 | 46259 | 2668 | |---------------------------------------------+-----------------+-------+--------+-------+---------| -| balanceOf | 561 | 1348 | 561 | 2561 | 4955 | +| balanceOf | 561 | 1352 | 561 | 2561 | 4956 | |---------------------------------------------+-----------------+-------+--------+-------+---------| -| mint | 33964 | 37108 | 34072 | 68248 | 2673 | +| mint | 33964 | 37135 | 34072 | 68248 | 2677 | ╰---------------------------------------------+-----------------+-------+--------+-------+---------╯ ╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮ diff --git a/.gas-snapshot b/.gas-snapshot index e7fb0ed..b7004ef 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -6,15 +6,15 @@ EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 432421) EmergencyExitTest:test_EmergencyExitWithLock() (gas: 430501) EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 418391) EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39176) -FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1003, μ: 373311, ~: 342639) -FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1003, μ: 473961, ~: 444755) -FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1002, μ: 495554, ~: 486579) -FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1004, μ: 726451, ~: 725709) -FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1004, μ: 385583, ~: 362897) -FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1000, μ: 594627, ~: 595934) -FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1004, μ: 287630, ~: 260823) -FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1003, μ: 479272, ~: 448228) -FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1003, μ: 373334, ~: 342662) +FuzzTests:testFuzz_AccrueMP(uint128,uint64,uint64) (runs: 1000, μ: 372274, ~: 342639) +FuzzTests:testFuzz_AccrueMP_Relock(uint128,uint64,uint64,uint64) (runs: 1000, μ: 473256, ~: 444746) +FuzzTests:testFuzz_EmergencyExit(uint256,uint256) (runs: 1000, μ: 495593, ~: 486579) +FuzzTests:testFuzz_Lock(uint256,uint64) (runs: 1000, μ: 726644, ~: 725709) +FuzzTests:testFuzz_Relock(uint256,uint64,uint64) (runs: 1000, μ: 386617, ~: 362902) +FuzzTests:testFuzz_Rewards(uint256,uint256,uint256,uint16,uint16) (runs: 1000, μ: 594630, ~: 595934) +FuzzTests:testFuzz_Stake(uint256,uint64) (runs: 1000, μ: 288214, ~: 260814) +FuzzTests:testFuzz_Unstake(uint128,uint64,uint16,uint128) (runs: 1000, μ: 475988, ~: 448228) +FuzzTests:testFuzz_UpdateVault(uint128,uint64,uint64) (runs: 1000, μ: 372297, ~: 342662) IntegrationTest:testStakeFoo() (gas: 1362727) KarmaNFTTest:testApproveNotAllowed() (gas: 10507) KarmaNFTTest:testGetApproved() (gas: 10531) @@ -44,10 +44,10 @@ KarmaTest:testRemoveKarmaDistributorOnlyOwner() (gas: 88798) KarmaTest:testRemoveUnknownKarmaDistributor() (gas: 41398) KarmaTest:testTotalSupply() (gas: 331725) KarmaTest:testTransfersNotAllowed() (gas: 40241) -LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9561246) +LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 9594708) LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 332331) -LeaveTest:test_TrustNewStakeManager() (gas: 9616988) -LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1004, μ: 382885, ~: 382908) +LeaveTest:test_TrustNewStakeManager() (gas: 9650451) +LockTest:test_LockFailsWithInvalidPeriod(uint256) (runs: 1000, μ: 382883, ~: 382908) LockTest:test_LockFailsWithNoStake() (gas: 88865) LockTest:test_LockFailsWithZero() (gas: 342393) LockTest:test_LockMultipleTimesExceedMaxLock() (gas: 624582) @@ -89,9 +89,10 @@ StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 503409) StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 334714) StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 335354) StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 335399) -StakeVaultMigrationTest:testMigrateToVault() (gas: 875821) -StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 628444) -StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 68087) +StakeVaultMigrationTest:testMigrateToVault() (gas: 878053) +StakeVaultMigrationTest:test_RevertWhenDestinationVaultIsNotRegistered() (gas: 162053) +StakeVaultMigrationTest:test_RevertWhenMigrationVaultNotEmpty() (gas: 630655) +StakeVaultMigrationTest:test_RevertWhenNotOwnerOfMigrationVault() (gas: 70297) StakeVaultTest:testOwner() (gas: 15262) StakingTokenTest:testOwner() (gas: 15262) StakingTokenTest:testStakeToken() (gas: 13144) @@ -119,8 +120,8 @@ UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 543156) UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 467580) UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 560332) UpdateVaultTest:test_UpdateAccount() (gas: 2391077) -UpgradeTest:test_RevertWhenNotOwner() (gas: 3545293) -UpgradeTest:test_UpgradeStakeManager() (gas: 9453155) +UpgradeTest:test_RevertWhenNotOwner() (gas: 3562509) +UpgradeTest:test_UpgradeStakeManager() (gas: 9486617) VaultRegistrationTest:test_VaultRegistration() (gas: 63138) WithdrawTest:testOwner() (gas: 15296) WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 347979) \ No newline at end of file diff --git a/src/StakeManager.sol b/src/StakeManager.sol index 2a1472c..22132e2 100644 --- a/src/StakeManager.sol +++ b/src/StakeManager.sol @@ -359,6 +359,10 @@ contract StakeManager is * @dev Revets if the vault to migrate to has a non-zero staked balance. */ function migrateToVault(address migrateTo) external onlyNotEmergencyMode onlyTrustedCodehash onlyRegisteredVault { + if (vaultOwners[migrateTo] == address(0)) { + revert StakeManager__InvalidVault(); + } + // first ensure the vault to migrate to is actually owned by the same user if (IStakeVault(msg.sender).owner() != IStakeVault(migrateTo).owner()) { revert StakeManager__Unauthorized(); diff --git a/test/RewardsStreamerMP.t.sol b/test/RewardsStreamerMP.t.sol index bae2094..fe44e8d 100644 --- a/test/RewardsStreamerMP.t.sol +++ b/test/RewardsStreamerMP.t.sol @@ -2652,6 +2652,16 @@ contract StakeVaultMigrationTest is StakeManagerTest { StakeVault(vaults[alice]).migrateToVault(address(newVault)); } + function test_RevertWhenDestinationVaultIsNotRegistered() public { + // alice creates vaults that's not registered with the stake manager + vm.startPrank(alice); + address faultyVault = address(Clones.clone(vaultFactory.vaultImplementation())); + + // alice tries to migrate to a vault that is not registered + vm.expectRevert(IStakeManager.StakeManager__InvalidVault.selector); + StakeVault(vaults[alice]).migrateToVault(address(faultyVault)); + } + function testMigrateToVault() public { uint256 stakeAmount = 100e18;