From 896b43ddc1c9e9fb50577a2ae6885f62cf1c39de Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:15:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0unstake=20cec=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/staking/RewardRouter.sol | 5 +++++ contracts/staking/Vester.sol | 6 +++++- contracts/staking/interfaces/IVester.sol | 3 +++ simple_abi/RewardRouter.json | 22 +--------------------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/contracts/staking/RewardRouter.sol b/contracts/staking/RewardRouter.sol index 9c41df7..5c4ad05 100644 --- a/contracts/staking/RewardRouter.sol +++ b/contracts/staking/RewardRouter.sol @@ -56,6 +56,11 @@ contract RewardRouter is ReentrancyGuard, Governable { } 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); } diff --git a/contracts/staking/Vester.sol b/contracts/staking/Vester.sol index 9c5b79b..f3096aa 100644 --- a/contracts/staking/Vester.sol +++ b/contracts/staking/Vester.sol @@ -289,7 +289,11 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable { 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); lastVestingTimes[_account] = block.timestamp; diff --git a/contracts/staking/interfaces/IVester.sol b/contracts/staking/interfaces/IVester.sol index dcc60aa..6c332d6 100644 --- a/contracts/staking/interfaces/IVester.sol +++ b/contracts/staking/interfaces/IVester.sol @@ -2,6 +2,9 @@ pragma solidity 0.8.19; interface IVester { + function needCheckStake() external view returns (bool); + function updateVesting(address _account) external; + function rewardTracker() external view returns (address); function claimForAccount(address _account, address _receiver) external returns (uint256); diff --git a/simple_abi/RewardRouter.json b/simple_abi/RewardRouter.json index 75f3881..fd6baa5 100644 --- a/simple_abi/RewardRouter.json +++ b/simple_abi/RewardRouter.json @@ -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 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)" -] +["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)"] \ No newline at end of file