refactor(StakeVault): replace StakeManager with MockStakeManager and update tests

This commit is contained in:
Ricardo Guilherme Schmidt
2025-07-30 02:44:34 -03:00
parent bba710b792
commit d57b07cdc4
4 changed files with 148 additions and 96 deletions

View File

@@ -66,7 +66,7 @@
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-------------------------------------------------------------------+-----------------+---------+---------+---------+---------|
| run | 7425695 | 7425695 | 7425695 | 7425695 | 109 |
| run | 7425695 | 7425695 | 7425695 | 7425695 | 90 |
╰-------------------------------------------------------------------+-----------------+---------+---------+---------+---------╯
╭---------------------------------------------------------+-----------------+------+--------+------+---------╮
@@ -80,7 +80,7 @@
|---------------------------------------------------------+-----------------+------+--------+------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------------------+-----------------+------+--------+------+---------|
| activeNetworkConfig | 455 | 2070 | 455 | 4455 | 520 |
| activeNetworkConfig | 455 | 2040 | 455 | 4455 | 482 |
╰---------------------------------------------------------+-----------------+------+--------+------+---------╯
╭---------------------------------------------------------------------+-----------------+---------+---------+---------+---------╮
@@ -234,13 +234,13 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| getVault | 13653 | 13653 | 13653 | 13653 | 4180 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 92752 | 92752 | 92752 | 92752 | 109 |
| initialize | 92752 | 92752 | 92752 | 92752 | 90 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| lastRewardTime | 2407 | 2407 | 2407 | 2407 | 2 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 66348 | 66348 | 66348 | 66348 | 3 |
| leave | 66348 | 66348 | 66348 | 66348 | 2 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 7040 | 43325 | 46713 | 87673 | 1035 |
| lock | 7040 | 43282 | 46713 | 87673 | 1034 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 9294 | 53513 | 17021 | 170715 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -252,7 +252,7 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| proxiableUUID | 342 | 342 | 342 | 342 | 4 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| registerVault | 2583 | 74567 | 75107 | 75107 | 388 |
| registerVault | 2583 | 74539 | 75107 | 75107 | 369 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| rewardEndTime | 2429 | 2429 | 2429 | 2429 | 2 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -266,11 +266,9 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| setRewardsSupplier | 26875 | 26875 | 26875 | 26875 | 90 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| setTrustedCodehash | 24238 | 24238 | 24238 | 24238 | 109 |
| setTrustedCodehash | 24238 | 24238 | 24238 | 24238 | 90 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2639 | 132445 | 60725 | 228623 | 2676 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| stakedBalanceOf | 2622 | 2622 | 2622 | 2622 | 3 |
| stake | 2639 | 132245 | 60725 | 228623 | 2669 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalMP | 6805 | 8257 | 8257 | 9710 | 6 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -286,9 +284,9 @@
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalShares | 4597 | 4597 | 4597 | 4597 | 6 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| totalStaked | 2408 | 2408 | 2408 | 2408 | 4167 |
| totalStaked | 2408 | 2408 | 2408 | 2408 | 4166 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| unstake | 9886 | 41287 | 39781 | 79550 | 272 |
| unstake | 9886 | 41179 | 39781 | 79550 | 271 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| updateAccount | 347677 | 347677 | 347677 | 347677 | 1 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
@@ -318,33 +316,33 @@
|----------------------------------------+-----------------+--------+--------+--------+---------|
| emergencyExit | 15073 | 31537 | 31535 | 48635 | 263 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| initialize | 97688 | 97688 | 97688 | 97688 | 388 |
| initialize | 95576 | 97600 | 97688 | 97688 | 385 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| leave | 12223 | 99375 | 84120 | 356508 | 7 |
| leave | 10111 | 88896 | 46478 | 356508 | 7 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| lock | 12151 | 58773 | 62251 | 103208 | 1037 |
| lock | 10039 | 58728 | 62251 | 103208 | 1036 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| lockUntil | 2363 | 2363 | 2363 | 2363 | 7770 |
| lockUntil | 2363 | 2363 | 2363 | 2363 | 7760 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| migrateToVault | 24910 | 77530 | 32637 | 219937 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| owner | 448 | 483 | 448 | 2448 | 397 |
| owner | 448 | 479 | 448 | 2448 | 377 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| register | 12742 | 78238 | 78761 | 78761 | 388 |
| register | 922 | 74999 | 78761 | 78761 | 385 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stake | 2617 | 166880 | 76290 | 284275 | 2679 |
| stake | 2617 | 166407 | 76290 | 284275 | 2677 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| stakeManager | 393 | 393 | 393 | 393 | 387 |
| stakeManager | 393 | 393 | 393 | 393 | 368 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| trustStakeManager | 7650 | 7650 | 7650 | 7650 | 4 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake(uint256) | 12108 | 58009 | 55296 | 110656 | 273 |
| unstake(uint256) | 12108 | 57732 | 55296 | 110656 | 273 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| unstake(uint256,address) | 2700 | 2700 | 2700 | 2700 | 1 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| updateLockUntil | 4432 | 20782 | 21532 | 21532 | 520 |
| updateLockUntil | 4432 | 20779 | 21532 | 21532 | 518 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| withdraw(address,uint256) | 20817 | 25682 | 20817 | 35413 | 3 |
| withdraw(address,uint256) | 13623 | 24518 | 24518 | 35413 | 2 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
| withdraw(address,uint256,address) | 2812 | 19196 | 19196 | 35580 | 2 |
|----------------------------------------+-----------------+--------+--------+--------+---------|
@@ -362,9 +360,9 @@
|----------------------------------------------------+-----------------+-------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|----------------------------------------------------+-----------------+-------+--------+--------+---------|
| fallback | 5208 | 12836 | 7353 | 374054 | 23157 |
| fallback | 5208 | 12837 | 7353 | 374054 | 23153 |
|----------------------------------------------------+-----------------+-------+--------+--------+---------|
| implementation | 346 | 2134 | 2346 | 2346 | 4908 |
| implementation | 346 | 2133 | 2346 | 2346 | 4874 |
╰----------------------------------------------------+-----------------+-------+--------+--------+---------╯
╭--------------------------------------------+-----------------+--------+--------+--------+---------╮
@@ -372,13 +370,13 @@
+===================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| 0 | 2094 | | | | |
| 483043 | 2094 | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| | | | | | |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| createVault | 231113 | 247859 | 248213 | 248213 | 387 |
| createVault | 168262 | 244525 | 248213 | 248213 | 384 |
|--------------------------------------------+-----------------+--------+--------+--------+---------|
| vaultImplementation | 2345 | 2345 | 2345 | 2345 | 1 |
╰--------------------------------------------+-----------------+--------+--------+--------+---------╯
@@ -489,22 +487,38 @@
| generate | 60554 | 60554 | 60554 | 60554 | 1 |
╰---------------------------------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-----------------------------------------------------------+-----------------+-----+--------+-----+---------╮
| test/mocks/MockStakeManager.sol:MockStakeManager Contract | | | | | |
+============================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|-----------------------------------------------------------+-----------------+-----+--------+-----+---------|
| 212692 | 769 | | | | |
|-----------------------------------------------------------+-----------------+-----+--------+-----+---------|
| | | | | | |
|-----------------------------------------------------------+-----------------+-----+--------+-----+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|-----------------------------------------------------------+-----------------+-----+--------+-----+---------|
| implementation | 234 | 234 | 234 | 234 | 26 |
|-----------------------------------------------------------+-----------------+-----+--------+-----+---------|
| stakedBalanceOf | 376 | 376 | 376 | 376 | 1 |
╰-----------------------------------------------------------+-----------------+-----+--------+-----+---------╯
╭---------------------------------------------+-----------------+-------+--------+-------+---------╮
| test/mocks/MockToken.sol:MockToken Contract | | | | | |
+==================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| 770717 | 3987 | | | | |
| 770657 | 3987 | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| Function Name | Min | Avg | Median | Max | # Calls |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| approve | 29075 | 31623 | 29183 | 46259 | 2690 |
| approve | 29075 | 31607 | 29183 | 46259 | 2687 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| balanceOf | 2561 | 2561 | 2561 | 2561 | 4966 |
| balanceOf | 2561 | 2561 | 2561 | 2561 | 4964 |
|---------------------------------------------+-----------------+-------+--------+-------+---------|
| mint | 33964 | 37387 | 34072 | 68248 | 2702 |
| mint | 33964 | 37353 | 34072 | 68248 | 2699 |
╰---------------------------------------------+-----------------+-------+--------+-------+---------╯
╭-----------------------------------------------------------------------------+-----------------+--------+--------+--------+---------╮

View File

@@ -173,18 +173,17 @@ StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 714792)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 381583)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 382223)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 382268)
StakeVaultCoverageTest:testOwner() (gas: 15413)
StakeVaultCoverageTest:test_LeaveRevertsWhenManagerTrusted() (gas: 46970)
StakeVaultCoverageTest:test_LeaveTransfersAllFundsAfterUntrustingManager() (gas: 423892)
StakeVaultCoverageTest:test_LockRevertsIfManagerNotTrusted() (gas: 79014)
StakeVaultCoverageTest:test_LockSetsLockUntilTimestamp() (gas: 431382)
StakeVaultCoverageTest:test_StakeRevertsIfManagerNotTrusted() (gas: 79220)
StakeVaultCoverageTest:testOwner() (gas: 15391)
StakeVaultCoverageTest:test_LeaveRevertsWhenManagerTrusted() (gas: 44836)
StakeVaultCoverageTest:test_LeaveTransfersAllFundsAfterUntrustingManager() (gas: 189561)
StakeVaultCoverageTest:test_LockRevertsIfManagerNotTrusted() (gas: 76902)
StakeVaultCoverageTest:test_StakeRevertsIfManagerNotTrusted() (gas: 77108)
StakeVaultCoverageTest:test_StakeRevertsIfNotOwner() (gas: 37239)
StakeVaultCoverageTest:test_StakeTransfersTokensToVault() (gas: 343535)
StakeVaultCoverageTest:test_UnstakeRevertsWithInvalidDestination() (gas: 323361)
StakeVaultCoverageTest:test_UnstakeTransfersTokensBackToOwner() (gas: 389377)
StakeVaultCoverageTest:test_StakeTransfersTokensToVault() (gas: 93148)
StakeVaultCoverageTest:test_UnstakeRevertsWithInvalidDestination() (gas: 113163)
StakeVaultCoverageTest:test_UnstakeTransfersTokensBackToOwner() (gas: 144361)
StakeVaultCoverageTest:test_WithdrawOtherTokenTransfersToDestination() (gas: 142411)
StakeVaultCoverageTest:test_WithdrawRevertsIfInsufficientAvailableBalance() (gas: 343789)
StakeVaultCoverageTest:test_WithdrawRevertsIfInsufficientAvailableBalance() (gas: 126421)
StakeVaultCoverageTest:test_WithdrawRevertsIfInvalidDestination() (gas: 111219)
StakeVaultCoverageTest:test_WithdrawTransfersGenericTokenToOwner() (gas: 139759)
StakeVaultMigrationTest:testMigrateToVault() (gas: 1157152)
@@ -221,6 +220,4 @@ UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 722241)
UpdateVaultTest:test_UpdateAccount() (gas: 2587427)
UpgradeTest:test_RevertWhenNotOwner() (gas: 3696209)
UpgradeTest:test_UpgradeStakeManager() (gas: 9855347)
VaultRegistrationTest:test_VaultRegistration() (gas: 90138)
WithdrawTest:testOwner() (gas: 15365)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 373396)
VaultRegistrationTest:test_VaultRegistration() (gas: 90138)

View File

@@ -6,19 +6,20 @@ import { Test } from "forge-std/Test.sol";
import { DeploymentConfig } from "../script/DeploymentConfig.s.sol";
import { DeployStakeManagerScript } from "../script/DeployStakeManager.s.sol";
import { VaultFactory } from "../src/VaultFactory.sol";
import { StakeManager } from "../src/StakeManager.sol";
import { MockStakeManager } from "./mocks/MockStakeManager.sol";
import { StakeVault } from "../src/StakeVault.sol";
import { MockToken } from "./mocks/MockToken.sol";
contract StakeVaultTest is Test {
VaultFactory internal vaultFactory;
StakeManager internal streamer;
MockStakeManager internal streamer;
StakeVault internal stakeVault;
MockToken internal rewardToken;
MockToken internal stakingToken;
MockToken internal otherToken;
address internal alice = makeAddr("alice");
address internal bob = makeAddr("bob");
address internal deployer = makeAddr("deployer");
function _createTestVault(address owner) internal returns (StakeVault stakeVault) {
vm.prank(owner);
@@ -29,14 +30,9 @@ contract StakeVaultTest is Test {
rewardToken = new MockToken("Reward Token", "RT");
stakingToken = new MockToken("Staking Token", "ST");
otherToken = new MockToken("Other Token", "OT");
streamer = new MockStakeManager();
DeployStakeManagerScript deployment = new DeployStakeManagerScript();
(StakeManager stakeManager, VaultFactory _vaultFactory, DeploymentConfig deploymentConfig) = deployment.run();
(, address _stakingToken) = deploymentConfig.activeNetworkConfig();
streamer = stakeManager;
stakingToken = MockToken(_stakingToken);
vaultFactory = _vaultFactory;
vaultFactory = new VaultFactory(deployer, address(streamer), address(new StakeVault(stakingToken)));
stakingToken.mint(alice, 10_000e18);
@@ -61,36 +57,11 @@ contract StakingTokenTest is StakeVaultTest {
}
}
contract WithdrawTest is StakeVaultTest {
function setUp() public override {
super.setUp();
}
function test_CannotWithdrawStakedFunds() public {
// first, stake some funds
vm.prank(alice);
stakeVault.stake(10e18, 0);
assertEq(stakingToken.balanceOf(address(stakeVault)), 10e18);
assertEq(streamer.totalStaked(), 10e18);
// try withdrawing funds without unstaking
vm.prank(alice);
vm.expectRevert(StakeVault.StakeVault__NotEnoughAvailableBalance.selector);
stakeVault.withdraw(stakingToken, 10e18);
}
}
contract StakeVaultCoverageTest is StakeVaultTest {
/*////////////////////////////////////////////////////////////
TESTES PARA stake()
////////////////////////////////////////////////////////////*/
function test_StakeTransfersTokensToVault() public {
vm.prank(alice);
stakeVault.stake(1e18, 90 days);
assertEq(stakingToken.balanceOf(address(stakeVault)), 1e18);
assertEq(streamer.stakedBalanceOf(address(stakeVault)), 1e18);
}
function test_StakeRevertsIfNotOwner() public {
@@ -107,19 +78,6 @@ contract StakeVaultCoverageTest is StakeVaultTest {
stakeVault.stake(1e18, 3600);
}
/*////////////////////////////////////////////////////////////
TESTES PARA lock()
////////////////////////////////////////////////////////////*/
function test_LockSetsLockUntilTimestamp() public {
uint256 delta = 90 days;
vm.startPrank(alice);
stakeVault.stake(1e18, 0); // Stake some tokens firstq
stakeVault.lock(delta);
uint256 expected = block.timestamp + delta;
assertEq(stakeVault.lockUntil(), expected);
}
function test_LockRevertsIfManagerNotTrusted() public {
vm.prank(alice);
stakeVault.trustStakeManager(address(0xBEEF));
@@ -128,10 +86,6 @@ contract StakeVaultCoverageTest is StakeVaultTest {
stakeVault.lock(3600);
}
/*////////////////////////////////////////////////////////////
TESTES PARA unstake()
////////////////////////////////////////////////////////////*/
function test_UnstakeTransfersTokensBackToOwner() public {
uint256 startBalance = stakingToken.balanceOf(alice);
vm.prank(alice);
@@ -185,7 +139,7 @@ contract StakeVaultCoverageTest is StakeVaultTest {
stakeVault.stake(3e18, 0);
vm.prank(alice);
vm.expectRevert(StakeVault.StakeVault__NotEnoughAvailableBalance.selector);
stakeVault.withdraw(stakingToken, 3e18);
stakeVault.withdraw(stakingToken, 3e19);
}
function test_WithdrawTransfersGenericTokenToOwner() public {

View File

@@ -0,0 +1,87 @@
pragma solidity 0.8.26;
import { IStakeManager } from "../../src/interfaces/IStakeManager.sol";
import { ITrustedCodehashAccess } from "../../src/interfaces/ITrustedCodehashAccess.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract MockStakeManager is ITrustedCodehashAccess, IStakeManager {
function implementation() external view returns (address) {
return address(this);
}
function setTrustedCodehash(bytes32, bool) external {
return;
}
function isTrustedCodehash(bytes32) external view returns (bool) {
return true;
}
function registerVault() external {
return;
}
function stake(uint256, uint256) external {
return;
}
function lock(uint256) external {
return;
}
function unstake(uint256) external {
return;
}
function leave() external {
return;
}
function migrateToVault(address) external {
return;
}
function updateVault(address) external {
return;
}
function emergencyModeEnabled() external view returns (bool) {
return false;
}
function totalStaked() external view returns (uint256) {
return 0;
}
function totalMPAccrued() external view returns (uint256) {
return 0;
}
function totalMaxMP() external view returns (uint256) {
return 0;
}
function stakedBalanceOf(address) external view returns (uint256) {
return 0;
}
function STAKING_TOKEN() external view returns (IERC20) {
return IERC20(address(0));
}
function MIN_LOCKUP_PERIOD() external view returns (uint256) {
return 0;
}
function MAX_LOCKUP_PERIOD() external view returns (uint256) {
return 0;
}
function MP_APY() external view returns (uint256) {
return 0;
}
function MAX_MULTIPLIER() external view returns (uint256) {
return 0;
}
}