Skip to content

Commit

Permalink
Merge pull request #148 from nayms/NAYM-4-2_disable_reward_payment_if…
Browse files Browse the repository at this point in the history
…_staking_not_initialised

NAY4-2_revert_reward_payment_if_staking_not_initialised
  • Loading branch information
Huanzhang89 authored Oct 3, 2024
2 parents 353849f + 21424f8 commit bfc8965
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
6 changes: 5 additions & 1 deletion src/libs/LibTokenizedVaultStaking.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { LibObject } from "./LibObject.sol";
import { LibTokenizedVault } from "../libs/LibTokenizedVault.sol";
import { StakingConfig, StakingState, RewardsBalances } from "../shared/FreeStructs.sol";

import { StakingNotStarted, StakingAlreadyStarted, IntervalRewardPayedOutAlready, InvalidAValue, InvalidRValue, InvalidDividerValue, InvalidStakingInitDate, InvalidIntervalSecondsValue, InvalidTokenRewardAmount, EntityDoesNotExist, InitDateTooFar, IntervalOutOfRange, BoostDividerNotEqualError, InvalidTokenId, InvalidStakingAmount, InvalidStaker } from "../shared/CustomErrors.sol";
import { StakingConfigDoesNotExist, StakingNotStarted, StakingAlreadyStarted, IntervalRewardPayedOutAlready, InvalidAValue, InvalidRValue, InvalidDividerValue, InvalidStakingInitDate, InvalidIntervalSecondsValue, InvalidTokenRewardAmount, EntityDoesNotExist, InitDateTooFar, IntervalOutOfRange, BoostDividerNotEqualError, InvalidTokenId, InvalidStakingAmount, InvalidStaker } from "../shared/CustomErrors.sol";

library LibTokenizedVaultStaking {
event TokenStakingStarted(bytes32 indexed entityId, bytes32 tokenId, uint256 initDate, uint64 a, uint64 r, uint64 divider, uint64 interval);
Expand Down Expand Up @@ -97,6 +97,10 @@ library LibTokenizedVaultStaking {
function _payReward(bytes32 _stakingRewardId, bytes32 _entityId, bytes32 _rewardTokenId, uint256 _rewardAmount) internal {
AppStorage storage s = LibAppStorage.diamondStorage();

if (s.stakingConfigs[_entityId].initDate == 0) {
revert StakingConfigDoesNotExist(_entityId);
}

if (_rewardAmount <= s.objectMinimumSell[_rewardTokenId]) {
revert InvalidTokenRewardAmount(_stakingRewardId, _entityId, _rewardTokenId, _rewardAmount);
}
Expand Down
3 changes: 3 additions & 0 deletions src/shared/CustomErrors.sol
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ error StakingAlreadyStarted(bytes32 entityId, bytes32 tokenId);
/// @dev Staking must be started
error StakingNotStarted(bytes32 entityId, bytes32 tokenId);

/// @dev Staking must be enabled
error StakingConfigDoesNotExist(bytes32 entityId);

/// @dev Invalid A parameter value provided
error InvalidAValue();

Expand Down
9 changes: 8 additions & 1 deletion test/T06Staking.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { DummyToken } from "./utils/DummyToken.sol";
import { LibTokenizedVaultStaking } from "src/libs/LibTokenizedVaultStaking.sol";
import { IERC20 } from "src/interfaces/IERC20.sol";

import { IntervalRewardPayedOutAlready, InvalidTokenRewardAmount, InvalidStakingAmount, InvalidStaker, EntityDoesNotExist, StakingAlreadyStarted, StakingNotStarted } from "src/shared/CustomErrors.sol";
import { IntervalRewardPayedOutAlready, InvalidTokenRewardAmount, InvalidStakingAmount, InvalidStaker, EntityDoesNotExist, StakingAlreadyStarted, StakingNotStarted, StakingConfigDoesNotExist } from "src/shared/CustomErrors.sol";

function makeId2(bytes12 _objecType, bytes20 randomBytes) pure returns (bytes32) {
return bytes32((_objecType)) | (bytes32(randomBytes));
Expand Down Expand Up @@ -333,6 +333,13 @@ contract T06Staking is D03ProtocolDefaults {
nayms.payReward(makeId(LC.OBJECT_TYPE_STAKING_REWARD, bytes20("reward1")), nlf.entityId, usdcId, 100 ether);
}

function test_payRewardWithoutEnablingStaking() public {
startPrank(nlf);

vm.expectRevert(abi.encodeWithSelector(StakingConfigDoesNotExist.selector, nlf.entityId));
nayms.payReward(makeId(LC.OBJECT_TYPE_STAKING_REWARD, bytes20("reward1")), nlf.entityId, usdcId, 100 ether);
}

function test_StakingScenario1() public {
initStaking(block.timestamp + stakingStart);

Expand Down

0 comments on commit bfc8965

Please sign in to comment.