Skip to content

Commit 7c04978

Browse files
committed
test(StakeManager): add test to check that inital MPs are minted
This adds a test that ensures multiplier points are minted with a 1:1 ratio to the stake token amount. This scenario covers the case where no lock up time is set during staking.
1 parent 83ca038 commit 7c04978

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

contracts/StakeManager.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ contract StakeManager is Ownable {
3838
uint256 public constant MP_APY = 1;
3939
uint256 public constant MAX_BOOST = 4;
4040

41-
mapping(address => Account) accounts;
41+
mapping(address => Account) public accounts;
4242
mapping(uint256 => Epoch) epochs;
43-
mapping(bytes32 => bool) isVault;
43+
mapping(bytes32 => bool) public isVault;
4444

4545
uint256 public currentEpoch;
4646
uint256 public pendingReward;

test/StakeManager.t.sol

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ contract StakeManagerTest is Test {
1818
address internal stakeToken;
1919
address internal deployer;
2020
address internal testUser = makeAddr("testUser");
21+
address internal testUser2 = makeAddr("testUser2");
2122

2223
function setUp() public virtual {
2324
Deploy deployment = new Deploy();
@@ -40,8 +41,10 @@ contract StakeManagerTest is Test {
4041
vm.prank(owner);
4142
vault = vaultFactory.createVault();
4243

43-
vm.prank(deployer);
44-
stakeManager.setVault(address(vault).codehash);
44+
if (!stakeManager.isVault(address(vault).codehash)) {
45+
vm.prank(deployer);
46+
stakeManager.setVault(address(vault).codehash);
47+
}
4548
}
4649
}
4750

@@ -71,6 +74,32 @@ contract StakeTest is StakeManagerTest {
7174
vm.expectRevert(StakeManager.StakeManager__InvalidLockupPeriod.selector);
7275
userVault.stake(100, lockTime);
7376
}
77+
78+
function test_StakeWithoutLockUpTimeMintsMultiplierPoints() public {
79+
// ensure user has funds
80+
deal(stakeToken, testUser, 1000);
81+
StakeVault userVault = _createTestVault(testUser);
82+
83+
vm.startPrank(testUser);
84+
ERC20(stakeToken).approve(address(userVault), 100);
85+
86+
// stake without lockup time
87+
userVault.stake(100, 0);
88+
89+
(, , uint256 multiplierPoints, , , ) = stakeManager.accounts(address(userVault));
90+
91+
// total multiplier poitn supply
92+
assertEq(stakeManager.multiplierSupply(), 100);
93+
// user multiplier points
94+
assertEq(multiplierPoints, 100);
95+
96+
userVault.unstake(100);
97+
98+
// multiplierpoints are burned after unstaking
99+
(, , multiplierPoints, , , ) = stakeManager.accounts(address(userVault));
100+
assertEq(stakeManager.multiplierSupply(), 0);
101+
assertEq(multiplierPoints, 0);
102+
}
74103
}
75104

76105
contract UnstakeTest is StakeManagerTest {
@@ -215,3 +244,44 @@ contract ExecuteAccountTest is StakeManagerTest {
215244
stakeManager.executeAccount(address(userVault), currentEpoch + 1);
216245
}
217246
}
247+
248+
contract UserFlowsTest is StakeManagerTest {
249+
250+
function setUp() public override {
251+
StakeManagerTest.setUp();
252+
}
253+
254+
function test_StakedSupplyShouldIncreaseAndDecreaseAgain() public {
255+
// ensure users have funds
256+
deal(stakeToken, testUser, 1000);
257+
deal(stakeToken, testUser2, 1000);
258+
259+
StakeVault userVault = _createTestVault(testUser);
260+
StakeVault user2Vault = _createTestVault(testUser2);
261+
262+
vm.startPrank(testUser);
263+
// approve user vault to spend user tokens
264+
ERC20(stakeToken).approve(address(userVault), 100);
265+
userVault.stake(100, 0);
266+
vm.stopPrank();
267+
268+
vm.startPrank(testUser2);
269+
ERC20(stakeToken).approve(address(user2Vault), 100);
270+
user2Vault.stake(100, 0);
271+
vm.stopPrank();
272+
273+
assertEq(ERC20(stakeToken).balanceOf(address(userVault)), 100);
274+
assertEq(ERC20(stakeToken).balanceOf(address(user2Vault)), 100);
275+
assertEq(stakeManager.stakeSupply(), 200);
276+
277+
vm.startPrank(testUser);
278+
userVault.unstake(100);
279+
assertEq(ERC20(stakeToken).balanceOf(address(userVault)), 0);
280+
assertEq(stakeManager.stakeSupply(), 100);
281+
282+
vm.startPrank(testUser2);
283+
user2Vault.unstake(100);
284+
assertEq(ERC20(stakeToken).balanceOf(address(user2Vault)), 0);
285+
assertEq(stakeManager.stakeSupply(), 0);
286+
}
287+
}

0 commit comments

Comments
 (0)