diff --git a/contracts/staking/RewardDistributor.sol b/contracts/staking/RewardDistributor.sol index adb0106..943ffb0 100644 --- a/contracts/staking/RewardDistributor.sol +++ b/contracts/staking/RewardDistributor.sol @@ -13,11 +13,8 @@ contract RewardDistributor is IRewardDistributor, ReentrancyGuard, Governable { using SafeERC20 for IERC20; address public override rewardToken; - // 1个token, 在指定周期内, 每秒可获得的收益 - // 比如收益是150%, 周期是1年, 那么 1.5 / (365 * 24 * 3600) uint256 public override tokensPerInterval; uint256 public lastDistributionTime; - // RewardTracker合约地址 address public rewardTracker; address public admin; @@ -64,9 +61,7 @@ contract RewardDistributor is IRewardDistributor, ReentrancyGuard, Governable { uint256 timeDiff = block.timestamp - lastDistributionTime; return tokensPerInterval * timeDiff; } - // changed - // 从RewardTracker合约中调用 - // 由于我们是每个用户单独计算收益, 所以这里需要传入具体数量, 用于计算需要transafer的数量 + function distribute(uint256 _amount, uint256 _decimals) external override returns (uint256) { require(msg.sender == rewardTracker, "RewardDistributor: invalid msg.sender"); uint256 amount = pendingRewards(); diff --git a/contracts/staking/RewardTracker.sol b/contracts/staking/RewardTracker.sol index ac88c6a..a4d4e96 100644 --- a/contracts/staking/RewardTracker.sol +++ b/contracts/staking/RewardTracker.sol @@ -26,19 +26,14 @@ contract RewardTracker is IERC20, ReentrancyGuard, IRewardTracker, Governable { address public distributor; mapping(address token => bool status) public isDepositToken; - // 用户存入的token数量 mapping(address account => mapping(address token => uint256 amount)) public override depositBalances; - // token总存入数量, 所有用户 mapping(address token => uint256 amount) public totalDepositSupply; uint256 public cumulativeRewardPerToken; - // 用户stake的token数量 mapping(address account => uint256 amount) public override stakedAmounts; mapping(address account => uint256 amount) public claimableReward; mapping(address account => uint256 amount) public previousCumulatedRewardPerToken; - // 用户累计收益 mapping(address account => uint256 amount) public override cumulativeRewards; - // 平均 mapping(address account => uint256 amount) public override averageStakedAmounts; bool public inPrivateTransferMode; @@ -181,7 +176,6 @@ contract RewardTracker is IERC20, ReentrancyGuard, IRewardTracker, Governable { return claimableReward[_account]; } uint256 pendingRewards = IRewardDistributor(distributor).pendingRewards() * PRECISION; - // 这里是pendingRewards是总的奖励,需要除以总的token数量, 我们是固定的比例的收益, 所以不需要再除以总数 uint256 nextCumulativeRewardPerToken = cumulativeRewardPerToken + pendingRewards; return claimableReward[_account] + diff --git a/contracts/staking/Vester.sol b/contracts/staking/Vester.sol index 487dc0b..9c5b79b 100644 --- a/contracts/staking/Vester.sol +++ b/contracts/staking/Vester.sol @@ -28,14 +28,8 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable { mapping(address account => uint256 amount) public balances; mapping(address account => uint256 amount) public override pairAmounts; - // 累积claim的数量, 每次计算后, 将可claim的数量从balances中转移到cumulativeClaimAmounts中, - // 在claim和deposit时, 会更新cumulativeClaimAmounts - // 然后减去claimedAmounts, 就是可claim的数量 - // claim以后, cumulativeClaimAmounts的值和claimedAmounts的值都会增加, 且相等 mapping(address account => uint256 amount) public override cumulativeClaimAmounts; - // 已经claim了的数量, 只有在claim以后才会更新 mapping(address account => uint256 amount) public override claimedAmounts; - // 最后claim的时间 mapping(address account => uint256 time) public lastVestingTimes; mapping(address account => uint256 amount) public override cumulativeRewardDeductions; @@ -266,7 +260,6 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable { } /** * @dev Deposit ES tokens to the contract - * 将esToken transfer到合约, 更新cumulativeClaimAmounts, lastVestingTimes, balances */ function _deposit(address _account, uint256 _amount) private { require(_amount > 0, "Vester: invalid _amount"); @@ -318,11 +311,8 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable { if (balance == 0) { return 0; } - // vestedAmount = balance + cumulativeClaimAmount + 最后一次vesting 至今的可提取金额 uint256 vestedAmount = getVestedAmount(_account); uint256 claimableAmount = (vestedAmount * timeDiff) / vestingDuration; - // 如果claimableAmount < balance, 返回claimableAmount - // 否则返回balance, 保证claimableAmount <= balance if (claimableAmount < balance) { return claimableAmount; } diff --git a/contracts/staking/interfaces/IRewardDistributor.sol b/contracts/staking/interfaces/IRewardDistributor.sol index e163553..d560210 100644 --- a/contracts/staking/interfaces/IRewardDistributor.sol +++ b/contracts/staking/interfaces/IRewardDistributor.sol @@ -5,6 +5,5 @@ interface IRewardDistributor { function rewardToken() external view returns (address); function tokensPerInterval() external view returns (uint256); function pendingRewards() external view returns (uint256); - // changed function distribute(uint256 _amount, uint256 _decimals) external returns (uint256); }