feat(RewardsStreamerMP.t.sol): Make tests use calc functions and test those functions

chore(linter): added solhint-disable-next-line max-line-length to circumvent bug in linter

chore(RewardsStreamerMP.t.sol): rename _calculateTimeToMP -> _calculateTimeToAccureMP
This commit is contained in:
Ricardo Guilherme Schmidt
2024-12-09 11:21:34 -03:00
committed by r4bbit
parent a565dbbac4
commit 6afc760974
3 changed files with 168 additions and 102 deletions

View File

@@ -3,15 +3,15 @@
| Deployment Cost | Deployment Size | | | | |
| 6200681 | 29704 | | | | |
| Function Name | min | avg | median | max | # calls |
| run | 5302574 | 5302574 | 5302574 | 5302574 | 57 |
| run | 5302574 | 5302574 | 5302574 | 5302574 | 63 |
| script/DeploymentConfig.s.sol:DeploymentConfig contract | | | | | |
|---------------------------------------------------------|-----------------|-----|--------|-----|---------|
| Deployment Cost | Deployment Size | | | | |
| 0 | 0 | | | | |
| 0 | 7132 | | | | |
| Function Name | min | avg | median | max | # calls |
| activeNetworkConfig | 454 | 454 | 454 | 454 | 114 |
| activeNetworkConfig | 454 | 454 | 454 | 454 | 126 |
| src/RewardsStreamer.sol:RewardsStreamer contract | | | | | |
@@ -33,11 +33,11 @@
| Deployment Cost | Deployment Size | | | | |
| 2525879 | 11640 | | | | |
| Function Name | min | avg | median | max | # calls |
| MAX_LOCKUP_PERIOD | 349 | 349 | 349 | 349 | 4 |
| MAX_MULTIPLIER | 251 | 251 | 251 | 251 | 11 |
| MIN_LOCKUP_PERIOD | 297 | 297 | 297 | 297 | 11 |
| MP_RATE_PER_YEAR | 253 | 253 | 253 | 253 | 3 |
| STAKING_TOKEN | 428 | 2037 | 2428 | 2428 | 292 |
| MAX_LOCKUP_PERIOD | 349 | 349 | 349 | 349 | 6 |
| MAX_MULTIPLIER | 251 | 251 | 251 | 251 | 33 |
| MIN_LOCKUP_PERIOD | 297 | 297 | 297 | 297 | 15 |
| MP_RATE_PER_YEAR | 253 | 253 | 253 | 253 | 9 |
| STAKING_TOKEN | 428 | 2036 | 2428 | 2428 | 322 |
| emergencyModeEnabled | 2420 | 2420 | 2420 | 2420 | 7 |
| enableEmergencyMode | 2485 | 19392 | 24677 | 24677 | 8 |
| getAccount | 1661 | 1661 | 1661 | 1661 | 72 |
@@ -46,17 +46,17 @@
| getUserTotalMaxMP | 3123 | 3123 | 3123 | 3123 | 1 |
| getUserTotalStakedBalance | 15118 | 15118 | 15118 | 15118 | 1 |
| getUserVaults | 5201 | 5201 | 5201 | 5201 | 4 |
| initialize | 115611 | 115611 | 115611 | 115611 | 59 |
| initialize | 115611 | 115611 | 115611 | 115611 | 65 |
| lastRewardTime | 395 | 1395 | 1395 | 2395 | 2 |
| leave | 56244 | 56244 | 56244 | 56244 | 1 |
| lock | 12063 | 34172 | 16480 | 73975 | 3 |
| proxiableUUID | 331 | 331 | 331 | 331 | 3 |
| registerVault | 55866 | 72745 | 72966 | 72966 | 233 |
| registerVault | 55866 | 72766 | 72966 | 72966 | 257 |
| rewardEndTime | 373 | 1373 | 1373 | 2373 | 2 |
| rewardStartTime | 352 | 1352 | 1352 | 2352 | 2 |
| rewardsBalanceOf | 1317 | 1317 | 1317 | 1317 | 4 |
| setReward | 2583 | 50892 | 60278 | 102595 | 7 |
| setTrustedCodehash | 24243 | 24310 | 24243 | 26243 | 59 |
| setTrustedCodehash | 24243 | 24304 | 24243 | 26243 | 65 |
| stake | 131082 | 170202 | 177899 | 198232 | 66 |
| totalMP | 373 | 373 | 373 | 373 | 81 |
| totalMaxMP | 350 | 350 | 350 | 350 | 81 |
@@ -69,39 +69,13 @@
| upgradeToAndCall | 3225 | 9387 | 10926 | 10936 | 5 |
| src/StakeManagerProxy.sol:StakeManagerProxy contract | | | | | |
|------------------------------------------------------|-----------------|-------|--------|--------|---------|
| Deployment Cost | Deployment Size | | | | |
| 256467 | 1263 | | | | |
| Function Name | min | avg | median | max | # calls |
| MAX_LOCKUP_PERIOD | 5276 | 5276 | 5276 | 5276 | 4 |
| MAX_MULTIPLIER | 678 | 3132 | 5178 | 5178 | 11 |
| MIN_LOCKUP_PERIOD | 724 | 3996 | 5224 | 5224 | 11 |
| MP_RATE_PER_YEAR | 680 | 680 | 680 | 680 | 3 |
| STAKING_TOKEN | 855 | 6086 | 7355 | 7355 | 292 |
| emergencyModeEnabled | 7347 | 7347 | 7347 | 7347 | 7 |
| enableEmergencyMode | 28480 | 45381 | 50665 | 50665 | 8 |
| getAccount | 2115 | 2115 | 2115 | 2115 | 72 |
| getStakedBalance | 7559 | 7559 | 7559 | 7559 | 1 |
| getUserTotalMP | 9660 | 9660 | 9660 | 9660 | 1 |
| getUserTotalMaxMP | 3553 | 3553 | 3553 | 3553 | 1 |
| getUserTotalStakedBalance | 15548 | 15548 | 15548 | 15548 | 1 |
| getUserVaults | 5637 | 6762 | 5637 | 10137 | 4 |
| implementation | 343 | 808 | 343 | 2343 | 382 |
| lastRewardTime | 822 | 1822 | 1822 | 2822 | 2 |
| rewardEndTime | 800 | 1800 | 1800 | 2800 | 2 |
| rewardStartTime | 779 | 4029 | 4029 | 7279 | 2 |
| rewardsBalanceOf | 1747 | 1747 | 1747 | 1747 | 4 |
| setReward | 28863 | 77206 | 86636 | 128881 | 7 |
| setTrustedCodehash | 52889 | 52889 | 52889 | 52889 | 2 |
| totalMP | 800 | 800 | 800 | 800 | 81 |
| totalMaxMP | 777 | 777 | 777 | 777 | 81 |
| totalRewardsAccrued | 800 | 800 | 800 | 800 | 3 |
| totalRewardsSupply | 1387 | 2498 | 2151 | 11627 | 30 |
| totalStaked | 823 | 823 | 823 | 823 | 82 |
| updateAccountMP | 41755 | 44833 | 44257 | 61357 | 21 |
| updateGlobalState | 37076 | 54033 | 51237 | 136272 | 21 |
| upgradeToAndCall | 29868 | 36025 | 37562 | 37572 | 5 |
| src/StakeManagerProxy.sol:StakeManagerProxy contract | | | | | |
|------------------------------------------------------|-----------------|------|--------|--------|---------|
| Deployment Cost | Deployment Size | | | | |
| 256467 | 1231 | | | | |
| Function Name | min | avg | median | max | # calls |
| fallback | 678 | 7210 | 2115 | 136272 | 823 |
| implementation | 343 | 775 | 343 | 2343 | 412 |
| src/StakeVault.sol:StakeVault contract | | | | | |
@@ -113,10 +87,10 @@
| emergencyExit | 36375 | 48879 | 48113 | 65213 | 7 |
| leave | 33507 | 131439 | 60635 | 370978 | 4 |
| lock | 33245 | 60677 | 50845 | 107772 | 4 |
| owner | 2339 | 2339 | 2339 | 2339 | 233 |
| register | 87015 | 103894 | 104115 | 104115 | 233 |
| owner | 2339 | 2339 | 2339 | 2339 | 257 |
| register | 87015 | 103915 | 104115 | 104115 | 257 |
| stake | 33411 | 241491 | 252403 | 272784 | 67 |
| stakeManager | 368 | 368 | 368 | 368 | 233 |
| stakeManager | 368 | 368 | 368 | 368 | 257 |
| trustStakeManager | 28953 | 28953 | 28953 | 28953 | 1 |
| unstake | 33282 | 96630 | 102062 | 109909 | 14 |
| withdraw | 42289 | 42289 | 42289 | 42289 | 1 |
@@ -195,9 +169,9 @@
| Deployment Cost | Deployment Size | | | | |
| 625454 | 3260 | | | | |
| Function Name | min | avg | median | max | # calls |
| approve | 46330 | 46339 | 46342 | 46342 | 238 |
| approve | 46330 | 46339 | 46342 | 46342 | 262 |
| balanceOf | 558 | 989 | 558 | 2558 | 139 |
| mint | 51279 | 56523 | 51279 | 68379 | 251 |
| mint | 51279 | 56438 | 51279 | 68379 | 275 |
| transfer | 34384 | 42934 | 42934 | 51484 | 2 |

View File

@@ -1,19 +1,25 @@
EmergencyExitTest:test_CannotEnableEmergencyModeTwice() (gas: 92690)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 297717)
EmergencyExitTest:test_CannotLeaveBeforeEmergencyMode() (gas: 297695)
EmergencyExitTest:test_EmergencyExitBasic() (gas: 384455)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 659210)
EmergencyExitTest:test_EmergencyExitMultipleUsers() (gas: 659275)
EmergencyExitTest:test_EmergencyExitToAlternateAddress() (gas: 392374)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 391784)
EmergencyExitTest:test_EmergencyExitWithLock() (gas: 391762)
EmergencyExitTest:test_EmergencyExitWithRewards() (gas: 377316)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39430)
EmergencyExitTest:test_OnlyOwnerCanEnableEmergencyMode() (gas: 39426)
IntegrationTest:testStakeFoo() (gas: 1178499)
LeaveTest:test_LeaveShouldProperlyUpdateAccounting() (gas: 2960876)
LeaveTest:test_RevertWhenStakeManagerIsTrusted() (gas: 294826)
LeaveTest:test_TrustNewStakeManager() (gas: 3038518)
LeaveTest:test_TrustNewStakeManager() (gas: 3036018)
LockTest:test_LockFailsWithInvalidPeriod() (gas: 309911)
LockTest:test_LockFailsWithNoStake() (gas: 63708)
LockTest:test_LockWithoutPriorLock() (gas: 385937)
LockTest:test_LockFailsWithNoStake() (gas: 63730)
LockTest:test_LockWithoutPriorLock() (gas: 385915)
MaliciousUpgradeTest:test_UpgradeStackOverflowStakeManager() (gas: 1745333)
MathTest:test_CalcAbsoluteMaxTotalMP() (gas: 18908)
MathTest:test_CalcAccrueMP() (gas: 22207)
MathTest:test_CalcBonusMP() (gas: 17713)
MathTest:test_CalcInitialMP() (gas: 5395)
MathTest:test_CalcMaxAccruedMP() (gas: 15586)
MathTest:test_CalcMaxTotalMP() (gas: 23298)
MultipleVaultsStakeTest:test_StakeMultipleVaults() (gas: 716776)
NFTMetadataGeneratorSVGTest:testGenerateMetadata() (gas: 85934)
NFTMetadataGeneratorSVGTest:testSetImageStrings() (gas: 58332)
@@ -23,46 +29,46 @@ NFTMetadataGeneratorURLTest:testSetBaseURL() (gas: 49555)
NFTMetadataGeneratorURLTest:testSetBaseURLRevert() (gas: 35979)
RewardsStreamerMP_RewardsTest:testRewardsBalanceOf() (gas: 670670)
RewardsStreamerMP_RewardsTest:testSetRewards() (gas: 160274)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39339)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39362)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadAmount() (gas: 39404)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsBadDuration() (gas: 39340)
RewardsStreamerMP_RewardsTest:testSetRewards_RevertsNotAuthorized() (gas: 39375)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 610684)
RewardsStreamerMP_RewardsTest:testTotalRewardsSupply() (gas: 610662)
RewardsStreamerTest:testStake() (gas: 869181)
StakeTest:test_StakeMultipleAccounts() (gas: 494442)
StakeTest:test_StakeMultipleAccountsAndRewards() (gas: 500380)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 830635)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 507518)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 529355)
StakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 830612)
StakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 510842)
StakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 532885)
StakeTest:test_StakeOneAccount() (gas: 276933)
StakeTest:test_StakeOneAccountAndRewards() (gas: 282902)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 499586)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 494699)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 296811)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 296745)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 296812)
StakeTest:test_StakeOneAccountAndRewards() (gas: 282880)
StakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 499564)
StakeTest:test_StakeOneAccountReachingMPLimit() (gas: 493508)
StakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 296788)
StakeTest:test_StakeOneAccountWithMinLockUp() (gas: 298477)
StakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 298544)
StakingTokenTest:testStakeToken() (gas: 10422)
UnstakeTest:test_StakeMultipleAccounts() (gas: 494464)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 500380)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 830612)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 507540)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 529377)
UnstakeTest:test_StakeMultipleAccountsAndRewards() (gas: 500402)
UnstakeTest:test_StakeMultipleAccountsMPIncreasesMaxMPDoesNotChange() (gas: 830634)
UnstakeTest:test_StakeMultipleAccountsWithMinLockUp() (gas: 510841)
UnstakeTest:test_StakeMultipleAccountsWithRandomLockUp() (gas: 532907)
UnstakeTest:test_StakeOneAccount() (gas: 276956)
UnstakeTest:test_StakeOneAccountAndRewards() (gas: 282924)
UnstakeTest:test_StakeOneAccountMPIncreasesMaxMPDoesNotChange() (gas: 499608)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 494679)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 296811)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 296745)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 296856)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 536198)
UnstakeTest:test_StakeOneAccountReachingMPLimit() (gas: 493510)
UnstakeTest:test_StakeOneAccountWithMaxLockUp() (gas: 296788)
UnstakeTest:test_StakeOneAccountWithMinLockUp() (gas: 298477)
UnstakeTest:test_StakeOneAccountWithRandomLockUp() (gas: 298543)
UnstakeTest:test_UnstakeBonusMPAndAccuredMP() (gas: 537915)
UnstakeTest:test_UnstakeMultipleAccounts() (gas: 692599)
UnstakeTest:test_UnstakeMultipleAccountsAndRewards() (gas: 786234)
UnstakeTest:test_UnstakeOneAccount() (gas: 472857)
UnstakeTest:test_UnstakeOneAccountAndAccruedMP() (gas: 494565)
UnstakeTest:test_UnstakeOneAccountAndRewards() (gas: 404122)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 516307)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2602182)
UpgradeTest:test_UpgradeStakeManager() (gas: 2875621)
VaultRegistrationTest:test_VaultRegistration() (gas: 62035)
UnstakeTest:test_UnstakeOneAccountWithLockUpAndAccruedMP() (gas: 523042)
UpgradeTest:test_RevertWhenNotOwner() (gas: 2602178)
UpgradeTest:test_UpgradeStakeManager() (gas: 2875664)
VaultRegistrationTest:test_VaultRegistration() (gas: 62013)
WithdrawTest:test_CannotWithdrawStakedFunds() (gas: 310550)
XPNFTTokenTest:testApproveNotAllowed() (gas: 10500)
XPNFTTokenTest:testGetApproved() (gas: 10523)

View File

@@ -132,19 +132,96 @@ contract RewardsStreamerMPTest is Test {
vault.leave(account);
}
function _calculateBonusMP(uint256 amount, uint256 lockupTime) public view returns (uint256) {
function _calculeInitialMP(uint256 amount) internal pure returns (uint256) {
return amount;
}
function _calculateMaxAccruedMP(uint256 amount) internal view returns (uint256) {
return amount * streamer.MAX_MULTIPLIER();
}
function _calculateAbsoluteMaxTotalMP(uint256 amount) internal view returns (uint256) {
return _calculeInitialMP(amount) + _calculateBonusMP(amount, streamer.MAX_LOCKUP_PERIOD())
+ _calculateMaxAccruedMP(amount);
}
function _calculateMaxTotalMP(uint256 amount, uint256 lockPeriod) internal view returns (uint256 maxTotalMaxMP) {
uint256 bonusMP = 0;
if (lockPeriod != 0) {
bonusMP = _calculateBonusMP(amount, lockPeriod);
}
return _calculeInitialMP(amount) + bonusMP + _calculateMaxAccruedMP(amount);
}
function _calculateBonusMP(uint256 amount, uint256 lockupTime) internal view returns (uint256) {
// solhint-disable-next-line
return Math.mulDiv(amount, lockupTime, 365 days);
}
function _calculeAccuredMP(uint256 totalStaked, uint256 timeDiff) public view returns (uint256) {
function _calculateAccuredMP(uint256 totalStaked, uint256 timeDiff) internal view returns (uint256) {
return Math.mulDiv(timeDiff * totalStaked, streamer.MP_RATE_PER_YEAR(), 365 days);
}
function _calculateTimeToMPLimit(uint256 amount) public view returns (uint256) {
function _calculateTimeToAccureMPLimit(uint256 amount) internal view returns (uint256) {
uint256 maxMP = amount * streamer.MAX_MULTIPLIER();
uint256 timeInSeconds = _calculateTimeToAccureMP(amount, maxMP);
return timeInSeconds;
}
function _calculateTimeToAccureMP(uint256 amount, uint256 target) internal view returns (uint256) {
uint256 mpPerYear = amount * streamer.MP_RATE_PER_YEAR();
return maxMP * 365 days / mpPerYear;
return target * 365 days / mpPerYear;
}
}
contract MathTest is RewardsStreamerMPTest {
function test_CalcInitialMP() public {
assertEq(_calculeInitialMP(1), 1, "wrong initial MP");
assertEq(_calculeInitialMP(10e18), 10e18, "wrong initial MP");
assertEq(_calculeInitialMP(20e18), 20e18, "wrong initial MP");
assertEq(_calculeInitialMP(30e18), 30e18, "wrong initial MP");
}
function test_CalcAccrueMP() public {
assertEq(_calculateAccuredMP(10e18, 0), 0, "wrong accrued MP");
assertEq(_calculateAccuredMP(10e18, 365 days / 2), 5e18, "wrong accrued MP");
assertEq(_calculateAccuredMP(10e18, 365 days), 10e18, "wrong accrued MP");
assertEq(_calculateAccuredMP(10e18, 365 days * 2), 20e18, "wrong accrued MP");
assertEq(_calculateAccuredMP(10e18, 365 days * 3), 30e18, "wrong accrued MP");
}
function test_CalcBonusMP() public {
assertEq(_calculateBonusMP(10e18, 0), 0, "wrong bonus MP");
assertEq(_calculateBonusMP(10e18, streamer.MIN_LOCKUP_PERIOD()), 2_465_753_424_657_534_246, "wrong bonus MP");
assertEq(
_calculateBonusMP(10e18, streamer.MIN_LOCKUP_PERIOD() + 13 days),
2_821_917_808_219_178_082,
"wrong bonus MP"
);
assertEq(_calculateBonusMP(100e18, 0), 0, "wrong bonus MP");
}
function test_CalcMaxTotalMP() public {
assertEq(_calculateMaxTotalMP(10e18, 0), 50e18, "wrong max total MP");
assertEq(
_calculateMaxTotalMP(10e18, streamer.MIN_LOCKUP_PERIOD()), 52_465_753_424_657_534_246, "wrong max total MP"
);
assertEq(
_calculateMaxTotalMP(10e18, streamer.MIN_LOCKUP_PERIOD() + 13 days),
52_821_917_808_219_178_082,
"wrong max total MP"
);
assertEq(_calculateMaxTotalMP(100e18, 0), 500e18, "wrong max total MP");
}
function test_CalcAbsoluteMaxTotalMP() public {
assertEq(_calculateAbsoluteMaxTotalMP(10e18), 90e18, "wrong absolute max total MP");
assertEq(_calculateAbsoluteMaxTotalMP(100e18), 900e18, "wrong absolute max total MP");
}
function test_CalcMaxAccruedMP() public {
assertEq(_calculateMaxAccruedMP(10e18), 40e18, "wrong max accrued MP");
assertEq(_calculateMaxAccruedMP(100e18), 400e18, "wrong max accrued MP");
}
}
@@ -580,13 +657,14 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 expectedBonusMP = _calculateBonusMP(stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod);
uint256 expectedMaxTotalMP = _calculateMaxTotalMP(stakeAmount, lockUpPeriod);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
// 10e18 + (amount * (lockPeriod * MAX_MULTIPLIER * SCALE_FACTOR / MAX_LOCKUP_PERIOD) / SCALE_FACTOR)
totalMP: stakeAmount + expectedBonusMP,
totalMaxMP: 52_465_753_424_657_534_246,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: stakeAmount,
rewardBalance: 0,
rewardIndex: 0
@@ -620,13 +698,14 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 expectedBonusMP = _calculateBonusMP(stakeAmount, lockUpPeriod);
_stake(alice, stakeAmount, lockUpPeriod);
uint256 expectedMaxTotalMP = _calculateMaxTotalMP(stakeAmount, lockUpPeriod);
checkStreamer(
CheckStreamerParams({
totalStaked: stakeAmount,
// 10 + (amount * (lockPeriod * MAX_MULTIPLIER * SCALE_FACTOR / MAX_LOCKUP_PERIOD) / SCALE_FACTOR)
totalMP: stakeAmount + expectedBonusMP,
totalMaxMP: 52_821_917_808_219_178_082,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: stakeAmount,
rewardBalance: 0,
rewardIndex: 0
@@ -748,7 +827,7 @@ contract StakeTest is RewardsStreamerMPTest {
);
uint256 currentTime = vm.getBlockTimestamp();
uint256 timeToMaxMP = _calculateTimeToMPLimit(stakeAmount);
uint256 timeToMaxMP = _calculateTimeToAccureMP(stakeAmount, totalMaxMP - totalMP);
vm.warp(currentTime + timeToMaxMP);
streamer.updateGlobalState();
@@ -911,12 +990,13 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 sumOfStakeAmount = aliceStakeAmount + bobStakeAmount;
uint256 sumOfExpectedBonusMP = aliceExpectedBonusMP + bobExpectedBonusMP;
uint256 expectedMaxTotalMP = _calculateMaxTotalMP(aliceStakeAmount, aliceLockUpPeriod)
+ _calculateMaxTotalMP(bobStakeAmount, bobLockUpPeriod);
checkStreamer(
CheckStreamerParams({
totalStaked: sumOfStakeAmount,
totalMP: sumOfStakeAmount + sumOfExpectedBonusMP,
totalMaxMP: 202_465_753_424_657_534_246,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: sumOfStakeAmount,
rewardBalance: 0,
rewardIndex: 0
@@ -941,12 +1021,14 @@ contract StakeTest is RewardsStreamerMPTest {
uint256 sumOfStakeAmount = aliceStakeAmount + bobStakeAmount;
uint256 sumOfExpectedBonusMP = aliceExpectedBonusMP + bobExpectedBonusMP;
uint256 expectedMaxTotalMP = _calculateMaxTotalMP(aliceStakeAmount, aliceLockUpPeriod)
+ _calculateMaxTotalMP(bobStakeAmount, bobLockUpPeriod);
checkStreamer(
CheckStreamerParams({
totalStaked: sumOfStakeAmount,
totalMP: sumOfStakeAmount + sumOfExpectedBonusMP,
totalMaxMP: 250_356_164_383_561_643_835,
totalMaxMP: expectedMaxTotalMP,
stakingBalance: sumOfStakeAmount,
rewardBalance: 0,
rewardIndex: 0
@@ -1194,10 +1276,12 @@ contract UnstakeTest is StakeTest {
uint256 lockUpPeriod = streamer.MIN_LOCKUP_PERIOD();
// 10e18 is what's used in `test_StakeOneAccountWithMinLockUp`
uint256 expectedBonusMP = _calculateBonusMP(stakeAmount, lockUpPeriod);
uint256 unstakeAmount = 5e18;
uint256 warpLength = (365 days);
// wait for 1 year
uint256 currentTime = vm.getBlockTimestamp();
vm.warp(currentTime + (365 days));
vm.warp(currentTime + (warpLength));
streamer.updateGlobalState();
streamer.updateAccountMP(vaults[alice]);
@@ -1207,23 +1291,24 @@ contract UnstakeTest is StakeTest {
totalStaked: stakeAmount,
totalMP: (stakeAmount + expectedBonusMP) + stakeAmount, // we do `+ stakeAmount` we've accrued
// `stakeAmount` after 1 year
totalMaxMP: 52_465_753_424_657_534_246,
totalMaxMP: _calculateMaxTotalMP(stakeAmount, lockUpPeriod),
stakingBalance: 10e18,
rewardBalance: 0,
rewardIndex: 0
})
);
uint256 newBalance = stakeAmount - unstakeAmount;
// unstake half of the tokens
_unstake(alice, 5e18);
expectedBonusMP = _calculateBonusMP(5e18, lockUpPeriod);
uint256 expectedTotalMP = _calculeInitialMP(newBalance) + _calculateBonusMP(newBalance, lockUpPeriod)
+ _calculateAccuredMP(newBalance, warpLength);
checkStreamer(
CheckStreamerParams({
totalStaked: 5e18,
totalMP: (5e18 + expectedBonusMP) + 5e18,
totalMaxMP: 26_232_876_712_328_767_123,
stakingBalance: 5e18,
totalStaked: newBalance,
totalMP: expectedTotalMP,
totalMaxMP: _calculateMaxTotalMP(newBalance, lockUpPeriod),
stakingBalance: newBalance,
rewardBalance: 0,
rewardIndex: 0
})
@@ -1281,7 +1366,7 @@ contract UnstakeTest is StakeTest {
timestamp[stage] = block.timestamp;
totalStaked[stage] = amountStaked;
predictedBonusMP[stage] = totalStaked[stage] + _calculateBonusMP(totalStaked[stage], secondsLocked);
predictedTotalMaxMP[stage] = 52_465_753_424_657_534_246;
predictedTotalMaxMP[stage] = _calculateMaxTotalMP(totalStaked[stage], secondsLocked);
increasedAccuredMP[stage] = 0; //no increased accured MP in first stage
predictedAccuredMP[stage] = 0; //no accured MP in first stage
predictedTotalMP[stage] = predictedBonusMP[stage] + predictedAccuredMP[stage];
@@ -1292,7 +1377,8 @@ contract UnstakeTest is StakeTest {
totalStaked[stage] = totalStaked[stage - 1];
predictedBonusMP[stage] = predictedBonusMP[stage - 1]; //no change in bonusMP in second stage
predictedTotalMaxMP[stage] = predictedTotalMaxMP[stage - 1];
increasedAccuredMP[stage] = _calculeAccuredMP(totalStaked[stage], timestamp[stage] - timestamp[stage - 1]);
// solhint-disable-next-line max-line-length
increasedAccuredMP[stage] = _calculateAccuredMP(totalStaked[stage], timestamp[stage] - timestamp[stage - 1]);
predictedAccuredMP[stage] = predictedAccuredMP[stage - 1] + increasedAccuredMP[stage];
predictedTotalMP[stage] = predictedBonusMP[stage] + predictedAccuredMP[stage];
}