update mineV3

This commit is contained in:
owen05
2021-06-09 12:29:36 +08:00
parent 546c25653b
commit aebf0275bb
6 changed files with 256 additions and 193 deletions

View File

@@ -172,6 +172,10 @@ contract BaseMine is InitializableOwnable {
rt.rewardPerBlock = rewardPerBlock;
rt.rewardVault = address(new RewardVault(rewardToken));
uint256 rewardAmount = rewardPerBlock.mul(endBlock.sub(startBlock));
IERC20(rewardToken).transfer(rt.rewardVault, rewardAmount);
RewardVault(rt.rewardVault).syncValue();
emit NewRewardToken(len, rewardToken);
}
@@ -183,6 +187,12 @@ contract BaseMine is InitializableOwnable {
_updateReward(address(0), i);
RewardTokenInfo storage rt = rewardTokenInfos[i];
uint256 totalDepositReward = RewardVault(rt.rewardVault)._TOTAL_REWARD_();
uint256 gap = newEndBlock.sub(rt.lastFlagBlock);
uint256 totalReward = rt.workThroughReward.add(gap.mul(rt.rewardPerBlock));
require(totalDepositReward >= totalReward, "DODOMineV3: REWARD_NOT_ENOUGH");
require(block.number < newEndBlock, "DODOMineV3: END_BLOCK_INVALID");
require(block.number > rt.startBlock, "DODOMineV3: NOT_START");
require(block.number < rt.endBlock, "DODOMineV3: ALREADY_CLOSE");
@@ -205,6 +215,11 @@ contract BaseMine is InitializableOwnable {
rt.rewardPerBlock = newRewardPerBlock;
rt.lastFlagBlock = block.number;
uint256 totalDepositReward = RewardVault(rt.rewardVault)._TOTAL_REWARD_();
uint256 gap = rt.endBlock.sub(block.number);
uint256 totalReward = rt.workThroughReward.add(gap.mul(newRewardPerBlock));
require(totalDepositReward >= totalReward, "DODOMineV3: REWARD_NOT_ENOUGH");
emit UpdateReward(i, newRewardPerBlock);
}

View File

@@ -16,7 +16,7 @@ import {IERC20} from "../../intf/IERC20.sol";
interface IRewardVault {
function reward(address to, uint256 amount) external;
function withdrawLeftOver(address to, uint256 amount) external;
function depositReward() external;
function syncValue() external;
function _TOTAL_REWARD_() external view returns(uint256);
}
@@ -47,7 +47,7 @@ contract RewardVault is Ownable {
IERC20(_REWARD_TOKEN_).safeTransfer(to, amount);
}
function depositReward() external {
function syncValue() external {
uint256 rewardBalance = IERC20(_REWARD_TOKEN_).balanceOf(address(this));
uint256 rewardInput = rewardBalance.sub(_REWARD_RESERVE_);