增加unstake cec时的约束

This commit is contained in:
CounterFire2023 2024-09-03 11:15:39 +08:00
parent 1c372ec6a4
commit 896b43ddc1
4 changed files with 14 additions and 22 deletions

View File

@ -56,6 +56,11 @@ contract RewardRouter is ReentrancyGuard, Governable {
} }
function unstakeCec(uint256 _amount) external nonReentrant { function unstakeCec(uint256 _amount) external nonReentrant {
// check if the user has staked CEC in the vester
if (IVester(cecVester).needCheckStake()) {
IVester(cecVester).updateVesting(msg.sender);
require(IERC20(cecVester).balanceOf(msg.sender) + _amount <= IRewardTracker(stakedCecTracker).depositBalances(msg.sender, cec), "RewardRouter: insufficient CEC balance");
}
_unstakeCec(msg.sender, cec, _amount); _unstakeCec(msg.sender, cec, _amount);
} }

View File

@ -289,7 +289,11 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable {
emit Deposit(_account, _amount); emit Deposit(_account, _amount);
} }
function _updateVesting(address _account) private { function updateVesting(address _account) public {
_updateVesting(_account);
}
function _updateVesting(address _account) public {
uint256 amount = _getNextClaimableAmount(_account); uint256 amount = _getNextClaimableAmount(_account);
lastVestingTimes[_account] = block.timestamp; lastVestingTimes[_account] = block.timestamp;

View File

@ -2,6 +2,9 @@
pragma solidity 0.8.19; pragma solidity 0.8.19;
interface IVester { interface IVester {
function needCheckStake() external view returns (bool);
function updateVesting(address _account) external;
function rewardTracker() external view returns (address); function rewardTracker() external view returns (address);
function claimForAccount(address _account, address _receiver) external returns (uint256); function claimForAccount(address _account, address _receiver) external returns (uint256);

View File

@ -1,21 +1 @@
[ ["constructor(address,address,address,address)","event StakeCec(address,address,uint256)","event UnstakeCec(address,address,uint256)","function batchStakeCecForAccount(address[],uint256[])","function cec() view returns (address)","function cecVester() view returns (address)","function claim()","function esCec() view returns (address)","function gov() view returns (address)","function handleRewards(bool,bool,bool,bool)","function setGov(address)","function stakeCec(uint256)","function stakeCecForAccount(address,uint256)","function stakeEsCec(uint256)","function stakedCecTracker() view returns (address)","function unstakeCec(uint256)","function unstakeEsCec(uint256)","function withdrawToken(address,address,uint256)"]
"constructor(address,address,address,address)",
"event StakeCec(address,address,uint256)",
"event UnstakeCec(address,address,uint256)",
"function batchStakeCecForAccount(address[],uint256[])",
"function cec() view returns (address)",
"function cecVester() view returns (address)",
"function claim()",
"function claimEsCec()",
"function esCec() view returns (address)",
"function gov() view returns (address)",
"function handleRewards(bool,bool,bool,bool)",
"function setGov(address)",
"function stakeCec(uint256)",
"function stakeCecForAccount(address,uint256)",
"function stakeEsCec(uint256)",
"function stakedCecTracker() view returns (address)",
"function unstakeCec(uint256)",
"function unstakeEsCec(uint256)",
"function withdrawToken(address,address,uint256)"
]