将gmx改为cec

This commit is contained in:
CounterFire2023 2024-08-23 18:36:07 +08:00
parent 74b0503050
commit ca4bd927c8

View File

@ -12,22 +12,22 @@ import {Governable} from "../core/Governable.sol";
contract RewardRouter is ReentrancyGuard, Governable { contract RewardRouter is ReentrancyGuard, Governable {
using SafeERC20 for IERC20; using SafeERC20 for IERC20;
address public gmx; address public cec;
address public esGmx; address public esCec;
address public stakedGmxTracker; address public stakedCecTracker;
address public gmxVester; address public cecVester;
mapping(address sender => address receiver) public pendingReceivers; mapping(address sender => address receiver) public pendingReceivers;
event StakeGmx(address account, address token, uint256 amount); event StakeCec(address account, address token, uint256 amount);
event UnstakeGmx(address account, address token, uint256 amount); event UnstakeCec(address account, address token, uint256 amount);
constructor(address _gmx, address _esGmx, address _stakedGmxTracker, address _gmxVester) { constructor(address _cec, address _esCec, address _stakedCecTracker, address _cecVester) {
gmx = _gmx; cec = _cec;
esGmx = _esGmx; esCec = _esCec;
stakedGmxTracker = _stakedGmxTracker; stakedCecTracker = _stakedCecTracker;
gmxVester = _gmxVester; cecVester = _cecVester;
} }
// to help users who accidentally send their tokens to this contract // to help users who accidentally send their tokens to this contract
@ -35,45 +35,45 @@ contract RewardRouter is ReentrancyGuard, Governable {
IERC20(_token).safeTransfer(_account, _amount); IERC20(_token).safeTransfer(_account, _amount);
} }
function batchStakeGmxForAccount( function batchStakeCecForAccount(
address[] memory _accounts, address[] memory _accounts,
uint256[] memory _amounts uint256[] memory _amounts
) external nonReentrant onlyGov { ) external nonReentrant onlyGov {
address _gmx = gmx; address _cec = cec;
for (uint256 i = 0; i < _accounts.length; i++) { for (uint256 i = 0; i < _accounts.length; i++) {
_stakeGmx(msg.sender, _accounts[i], _gmx, _amounts[i]); _stakeCec(msg.sender, _accounts[i], _cec, _amounts[i]);
} }
} }
function stakeGmxForAccount(address _account, uint256 _amount) external nonReentrant onlyGov { function stakeCecForAccount(address _account, uint256 _amount) external nonReentrant onlyGov {
_stakeGmx(msg.sender, _account, gmx, _amount); _stakeCec(msg.sender, _account, cec, _amount);
} }
function stakeGmx(uint256 _amount) external nonReentrant { function stakeCec(uint256 _amount) external nonReentrant {
_stakeGmx(msg.sender, msg.sender, gmx, _amount); _stakeCec(msg.sender, msg.sender, cec, _amount);
} }
function stakeEsGmx(uint256 _amount) external nonReentrant { function stakeEsCec(uint256 _amount) external nonReentrant {
_stakeGmx(msg.sender, msg.sender, esGmx, _amount); _stakeCec(msg.sender, msg.sender, esCec, _amount);
} }
function unstakeGmx(uint256 _amount) external nonReentrant { function unstakeCec(uint256 _amount) external nonReentrant {
_unstakeGmx(msg.sender, gmx, _amount); _unstakeCec(msg.sender, cec, _amount);
} }
function unstakeEsGmx(uint256 _amount) external nonReentrant { function unstakeEsCec(uint256 _amount) external nonReentrant {
_unstakeGmx(msg.sender, esGmx, _amount); _unstakeCec(msg.sender, esCec, _amount);
} }
function claim() external nonReentrant { function claim() external nonReentrant {
address account = msg.sender; address account = msg.sender;
IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedCecTracker).claimForAccount(account, account);
} }
function claimEsGmx() external nonReentrant { function claimEsCec() external nonReentrant {
address account = msg.sender; address account = msg.sender;
IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedCecTracker).claimForAccount(account, account);
} }
function compound() external nonReentrant { function compound() external nonReentrant {
@ -85,29 +85,29 @@ contract RewardRouter is ReentrancyGuard, Governable {
} }
function handleRewards( function handleRewards(
bool _shouldClaimGmx, bool _shouldClaimCec,
bool _shouldStakeGmx, bool _shouldStakeCec,
bool _shouldClaimEsGmx, bool _shouldClaimEsCec,
bool _shouldStakeEsGmx bool _shouldStakeEsCec
) external nonReentrant { ) external nonReentrant {
address account = msg.sender; address account = msg.sender;
uint256 gmxAmount = 0; uint256 cecAmount = 0;
if (_shouldClaimGmx) { if (_shouldClaimCec) {
gmxAmount = IVester(gmxVester).claimForAccount(account, account); cecAmount = IVester(cecVester).claimForAccount(account, account);
} }
if (_shouldStakeGmx && gmxAmount > 0) { if (_shouldStakeCec && cecAmount > 0) {
_stakeGmx(account, account, gmx, gmxAmount); _stakeCec(account, account, cec, cecAmount);
} }
uint256 esGmxAmount = 0; uint256 esCecAmount = 0;
if (_shouldClaimEsGmx) { if (_shouldClaimEsCec) {
esGmxAmount = IRewardTracker(stakedGmxTracker).claimForAccount(account, account); esCecAmount = IRewardTracker(stakedCecTracker).claimForAccount(account, account);
} }
if (_shouldStakeEsGmx && esGmxAmount > 0) { if (_shouldStakeEsCec && esCecAmount > 0) {
_stakeGmx(account, account, esGmx, esGmxAmount); _stakeCec(account, account, esCec, esCecAmount);
} }
} }
@ -118,7 +118,7 @@ contract RewardRouter is ReentrancyGuard, Governable {
} }
function signalTransfer(address _receiver) external nonReentrant { function signalTransfer(address _receiver) external nonReentrant {
require(IERC20(gmxVester).balanceOf(msg.sender) == 0, "sender has vested tokens"); require(IERC20(cecVester).balanceOf(msg.sender) == 0, "sender has vested tokens");
_validateReceiver(_receiver); _validateReceiver(_receiver);
@ -126,7 +126,7 @@ contract RewardRouter is ReentrancyGuard, Governable {
} }
function acceptTransfer(address _sender) external nonReentrant { function acceptTransfer(address _sender) external nonReentrant {
require(IERC20(gmxVester).balanceOf(_sender) == 0, "sender has vested tokens"); require(IERC20(cecVester).balanceOf(_sender) == 0, "sender has vested tokens");
address receiver = msg.sender; address receiver = msg.sender;
require(pendingReceivers[_sender] == receiver, "transfer not signalled"); require(pendingReceivers[_sender] == receiver, "transfer not signalled");
@ -135,72 +135,72 @@ contract RewardRouter is ReentrancyGuard, Governable {
_validateReceiver(receiver); _validateReceiver(receiver);
_compound(_sender); _compound(_sender);
uint256 stakedGmx = IRewardTracker(stakedGmxTracker).depositBalances(_sender, gmx); uint256 stakedCec = IRewardTracker(stakedCecTracker).depositBalances(_sender, cec);
if (stakedGmx > 0) { if (stakedCec > 0) {
_unstakeGmx(_sender, gmx, stakedGmx); _unstakeCec(_sender, cec, stakedCec);
_stakeGmx(_sender, receiver, gmx, stakedGmx); _stakeCec(_sender, receiver, cec, stakedCec);
} }
uint256 stakedEsGmx = IRewardTracker(stakedGmxTracker).depositBalances(_sender, esGmx); uint256 stakedEsCec = IRewardTracker(stakedCecTracker).depositBalances(_sender, esCec);
if (stakedEsGmx > 0) { if (stakedEsCec > 0) {
_unstakeGmx(_sender, esGmx, stakedEsGmx); _unstakeCec(_sender, esCec, stakedEsCec);
_stakeGmx(_sender, receiver, esGmx, stakedEsGmx); _stakeCec(_sender, receiver, esCec, stakedEsCec);
} }
uint256 esGmxBalance = IERC20(esGmx).balanceOf(_sender); uint256 esCecBalance = IERC20(esCec).balanceOf(_sender);
if (esGmxBalance > 0) { if (esCecBalance > 0) {
IERC20(esGmx).transferFrom(_sender, receiver, esGmxBalance); IERC20(esCec).transferFrom(_sender, receiver, esCecBalance);
} }
IVester(gmxVester).transferStakeValues(_sender, receiver); IVester(cecVester).transferStakeValues(_sender, receiver);
} }
function _validateReceiver(address _receiver) private view { function _validateReceiver(address _receiver) private view {
require( require(
IRewardTracker(stakedGmxTracker).averageStakedAmounts(_receiver) == 0, IRewardTracker(stakedCecTracker).averageStakedAmounts(_receiver) == 0,
"stakedGmxTracker.averageStakedAmounts > 0" "stakedCecTracker.averageStakedAmounts > 0"
); );
require( require(
IRewardTracker(stakedGmxTracker).cumulativeRewards(_receiver) == 0, IRewardTracker(stakedCecTracker).cumulativeRewards(_receiver) == 0,
"stakedGmxTracker.cumulativeRewards > 0" "stakedCecTracker.cumulativeRewards > 0"
); );
require( require(
IVester(gmxVester).transferredAverageStakedAmounts(_receiver) == 0, IVester(cecVester).transferredAverageStakedAmounts(_receiver) == 0,
"gmxVester.transferredAverageStakedAmounts > 0" "cecVester.transferredAverageStakedAmounts > 0"
); );
require( require(
IVester(gmxVester).transferredCumulativeRewards(_receiver) == 0, IVester(cecVester).transferredCumulativeRewards(_receiver) == 0,
"gmxVester.transferredCumulativeRewards > 0" "cecVester.transferredCumulativeRewards > 0"
); );
require(IERC20(gmxVester).balanceOf(_receiver) == 0, "gmxVester.balance > 0"); require(IERC20(cecVester).balanceOf(_receiver) == 0, "cecVester.balance > 0");
} }
function _compound(address _account) private { function _compound(address _account) private {
_compoundGmx(_account); _compoundCec(_account);
} }
function _compoundGmx(address _account) private { function _compoundCec(address _account) private {
uint256 esGmxAmount = IRewardTracker(stakedGmxTracker).claimForAccount(_account, _account); uint256 esCecAmount = IRewardTracker(stakedCecTracker).claimForAccount(_account, _account);
if (esGmxAmount > 0) { if (esCecAmount > 0) {
_stakeGmx(_account, _account, esGmx, esGmxAmount); _stakeCec(_account, _account, esCec, esCecAmount);
} }
} }
function _stakeGmx(address _fundingAccount, address _account, address _token, uint256 _amount) private { function _stakeCec(address _fundingAccount, address _account, address _token, uint256 _amount) private {
require(_amount > 0, "invalid _amount"); require(_amount > 0, "invalid _amount");
IRewardTracker(stakedGmxTracker).stakeForAccount(_fundingAccount, _account, _token, _amount); IRewardTracker(stakedCecTracker).stakeForAccount(_fundingAccount, _account, _token, _amount);
emit StakeGmx(_account, _token, _amount); emit StakeCec(_account, _token, _amount);
} }
function _unstakeGmx(address _account, address _token, uint256 _amount) private { function _unstakeCec(address _account, address _token, uint256 _amount) private {
require(_amount > 0, "invalid _amount"); require(_amount > 0, "invalid _amount");
// uint256 balance = IRewardTracker(stakedGmxTracker).stakedAmounts(_account); // uint256 balance = IRewardTracker(stakedCecTracker).stakedAmounts(_account);
IRewardTracker(stakedGmxTracker).unstakeForAccount(_account, _token, _amount, _account); IRewardTracker(stakedCecTracker).unstakeForAccount(_account, _token, _amount, _account);
emit UnstakeGmx(_account, _token, _amount); emit UnstakeCec(_account, _token, _amount);
} }
} }