This commit is contained in:
owen05
2021-04-09 20:36:25 +08:00
parent 5ecbc2df10
commit 0e59f643b8
4 changed files with 43 additions and 25 deletions

View File

@@ -44,7 +44,7 @@ contract BaseMine is InitializableOwnable {
event UpdateEndBlock(uint256 indexed i, uint256 endBlock); event UpdateEndBlock(uint256 indexed i, uint256 endBlock);
event NewRewardToken(uint256 indexed i, address rewardToken); event NewRewardToken(uint256 indexed i, address rewardToken);
event RemoveRewardToken(address rewardToken); event RemoveRewardToken(address rewardToken);
event WithdrawLeftOver(address owner, uint256 i);
// ============ View ============ // ============ View ============
@@ -176,10 +176,22 @@ contract BaseMine is InitializableOwnable {
{ {
_updateReward(address(0), i); _updateReward(address(0), i);
RewardTokenInfo storage rt = rewardTokenInfos[i]; RewardTokenInfo storage rt = rewardTokenInfos[i];
require(block.number < rt.endBlock, "DODOMineV2: ALREADY_CLOSE");
rt.rewardPerBlock = newRewardPerBlock; rt.rewardPerBlock = newRewardPerBlock;
emit UpdateReward(i, newRewardPerBlock); emit UpdateReward(i, newRewardPerBlock);
} }
function withdrawLeftOver(uint256 i) external onlyOwner {
RewardTokenInfo storage rt = rewardTokenInfos[i];
require(block.number > rt.endBlock, "DODOMineV2: MINING_NOT_FINISHED");
IRewardVault(rt.rewardVault).withdrawLeftOver(msg.sender);
emit WithdrawLeftOver(msg.sender, i);
}
// ============ Internal ============ // ============ Internal ============

View File

@@ -14,6 +14,7 @@ import {IERC20} from "../../intf/IERC20.sol";
interface IRewardVault { interface IRewardVault {
function reward(address to, uint256 amount) external; function reward(address to, uint256 amount) external;
function withdrawLeftOver(address to) external;
} }
contract RewardVault is Ownable { contract RewardVault is Ownable {
@@ -28,4 +29,9 @@ contract RewardVault is Ownable {
function reward(address to, uint256 amount) external onlyOwner { function reward(address to, uint256 amount) external onlyOwner {
IERC20(rewardToken).safeTransfer(to, amount); IERC20(rewardToken).safeTransfer(to, amount);
} }
function withdrawLeftOver(address to) external onlyOwner {
uint256 leftover = IERC20(rewardToken).balanceOf(address(this));
IERC20(rewardToken).safeTransfer(to, leftover);
}
} }

View File

@@ -299,37 +299,37 @@ describe("erc20Mine", () => {
assert.equal(rewardBalance, "40000000000000000000"); assert.equal(rewardBalance, "40000000000000000000");
}) })
it("setReward - after", async () => { // it("setReward - after", async () => {
var curBlock = await ctx.Web3.eth.getBlockNumber(); // var curBlock = await ctx.Web3.eth.getBlockNumber();
await addRewardToken(ctx, ctx.REWARD_1, curBlock + 2, curBlock + 10, decimalStr("10")); // await addRewardToken(ctx, ctx.REWARD_1, curBlock + 2, curBlock + 10, decimalStr("10"));
//增加区块 // //增加区块
await ctx.increBlock(3); // await ctx.increBlock(3);
await logGas(await ctx.ERC20Mine.methods.deposit( // await logGas(await ctx.ERC20Mine.methods.deposit(
decimalStr("10") // decimalStr("10")
), ctx.sendParam(account0), "deposit"); // ), ctx.sendParam(account0), "deposit");
await logGas(await ctx.ERC20Mine.methods.deposit( // await logGas(await ctx.ERC20Mine.methods.deposit(
decimalStr("10") // decimalStr("10")
), ctx.sendParam(account1), "deposit"); // ), ctx.sendParam(account1), "deposit");
//增加区块 // //增加区块
await ctx.increBlock(3); // await ctx.increBlock(3);
let [, pendingReward] = await getRewardInfo(ctx, 0, account0, "UserRewardInfo - After"); // let [, pendingReward] = await getRewardInfo(ctx, 0, account0, "UserRewardInfo - After");
assert.equal(pendingReward, "25000000000000000000"); // assert.equal(pendingReward, "25000000000000000000");
await ctx.ERC20Mine.methods.setReward(0, decimalStr("5")).send(ctx.sendParam(projector)); // await ctx.ERC20Mine.methods.setReward(0, decimalStr("5")).send(ctx.sendParam(projector));
//增加区块 // //增加区块
await ctx.increBlock(3); // await ctx.increBlock(3);
[, pendingReward] = await getRewardInfo(ctx, 0, account0, "UserRewardInfo - After"); // [, pendingReward] = await getRewardInfo(ctx, 0, account0, "UserRewardInfo - After");
await logGas(await ctx.ERC20Mine.methods.claimReward(0), ctx.sendParam(account0), "claimReward - 0"); // await logGas(await ctx.ERC20Mine.methods.claimReward(0), ctx.sendParam(account0), "claimReward - 0");
let rewardBalance = await ctx.REWARD_1.methods.balanceOf(account0).call(); // let rewardBalance = await ctx.REWARD_1.methods.balanceOf(account0).call();
assert.equal(rewardBalance, "25000000000000000000"); // assert.equal(rewardBalance, "25000000000000000000");
}) // })
it("setEndBlock", async () => { it("setEndBlock", async () => {
var curBlock = await ctx.Web3.eth.getBlockNumber(); var curBlock = await ctx.Web3.eth.getBlockNumber();

View File

@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# truffle compile --all truffle compile --all
if [ "$1"x = "proxy-dpp"x ] if [ "$1"x = "proxy-dpp"x ]
then then