From 450069ec1b710f62a5b46c02b1a2e9d211d3f848 Mon Sep 17 00:00:00 2001 From: owen05 Date: Thu, 14 Jan 2021 19:36:29 +0800 Subject: [PATCH] trade incentive fix && test --- contracts/SmartRoute/DODOIncentive.sol | 8 ++--- contracts/lib/FeeRateModelLogicUpdate.sol | 28 ---------------- test/V2Proxy/proxy.dvm.test.ts | 41 ++++++----------------- test/V2Proxy/proxy.incentive.test.ts | 40 ++++++---------------- test/utils/ProxyContextV2.ts | 4 +-- 5 files changed, 28 insertions(+), 93 deletions(-) delete mode 100644 contracts/lib/FeeRateModelLogicUpdate.sol diff --git a/contracts/SmartRoute/DODOIncentive.sol b/contracts/SmartRoute/DODOIncentive.sol index bf5a92d..a1a2506 100644 --- a/contracts/SmartRoute/DODOIncentive.sol +++ b/contracts/SmartRoute/DODOIncentive.sol @@ -33,7 +33,7 @@ contract DODOIncentive is InitializableOwnable { // ============ Storage ============ address public immutable _DODO_TOKEN_; address public _DODO_PROXY_; - uint256 public dodoPerBlock = 10 * 10**18; + uint256 public dodoPerBlock; uint256 public defaultRate = 10; mapping(address => uint256) public boosts; @@ -44,7 +44,6 @@ contract DODOIncentive is InitializableOwnable { // ============ Events ============ event SetBoost(address token, uint256 boostRate); - event SetSwitch(bool isOpen); event SetNewProxy(address dodoProxy); event SetPerReward(uint256 dodoPerBlock); event SetDefaultRate(uint256 defaultRate); @@ -63,6 +62,7 @@ contract DODOIncentive is InitializableOwnable { emit SetBoost(_token, _boostRate); } + //switch function changePerReward(uint256 _dodoPerBlock) public onlyOwner { _updateTotalReward(); dodoPerBlock = _dodoPerBlock; @@ -110,8 +110,8 @@ contract DODOIncentive is InitializableOwnable { } function _updateTotalReward() internal { - lastRewardBlock = uint32(block.number); totalReward = uint112(_getTotalReward()); + lastRewardBlock = uint32(block.number); } function _update(uint256 _totalReward, uint256 _totalDistribution) internal { @@ -127,7 +127,7 @@ contract DODOIncentive is InitializableOwnable { } function _getTotalReward() internal view returns (uint256) { - if (block.number < lastRewardBlock || lastRewardBlock == 0) { + if (lastRewardBlock == 0) { return totalReward; } else { return totalReward + (block.number - lastRewardBlock) * dodoPerBlock; diff --git a/contracts/lib/FeeRateModelLogicUpdate.sol b/contracts/lib/FeeRateModelLogicUpdate.sol deleted file mode 100644 index d8fa19e..0000000 --- a/contracts/lib/FeeRateModelLogicUpdate.sol +++ /dev/null @@ -1,28 +0,0 @@ -/* - - Copyright 2020 DODO ZOO. - SPDX-License-Identifier: Apache-2.0 - -*/ - -pragma solidity 0.6.9; -pragma experimental ABIEncoderV2; - -import {ReentrancyGuard} from "../lib/ReentrancyGuard.sol"; -import {InitializableOwnable} from "../lib/InitializableOwnable.sol"; - -//for test update -contract FeeRateModelLogicUpdate is ReentrancyGuard ,InitializableOwnable{ - //DEFAULT - uint256 public _FEE_RATE_; - mapping(address => uint256) feeMapping; - - function setSpecificFeeRate(address trader, uint256 feeRate) external onlyOwner { - require(trader != address(0), "INVALID ADDRESS!"); - feeMapping[trader] = 0; - } - - function setFeeRate(uint256 newFeeRate) external onlyOwner { - _FEE_RATE_ = _FEE_RATE_+ newFeeRate; - } -} diff --git a/test/V2Proxy/proxy.dvm.test.ts b/test/V2Proxy/proxy.dvm.test.ts index fccffbc..f3944ec 100644 --- a/test/V2Proxy/proxy.dvm.test.ts +++ b/test/V2Proxy/proxy.dvm.test.ts @@ -126,19 +126,19 @@ describe("DODOProxyV2.0", () => { await ctx.USDT.methods.balanceOf(addrs[1]).call(), quoteAmount ); - + }); it("updateFeeRateModel", async () => { var feeRate = await DVM_DODO_USDT.methods.getUserFeeRate(project).call() assert.equal( - feeRate[1], - "10000000000000000" + feeRate[1], //mtFee + "0" ); - var mtFeeResult0 = await DVM_DODO_USDT.methods.querySellQuote(ctx.Deployer, decimalStr("10")).call() + var mtFeeResult0 = await DVM_DODO_USDT.methods.querySellQuote(ctx.Deployer, decimalStr("10")).call() assert.equal( mtFeeResult0[1], - "999999999265727652176" + "0" ); var feerateLogicAddress = ctx.MtFeeRateModelLogic.options.address; @@ -151,30 +151,11 @@ describe("DODOProxyV2.0", () => { feeRateSet[1], "30000000000000000" ); - var mtFeeResult1 = await DVM_DODO_USDT.methods.querySellQuote(ctx.Deployer, decimalStr("10")).call() + var mtFeeResult1 = await DVM_DODO_USDT.methods.querySellQuote(ctx.Deployer, decimalStr("10")).call() assert.equal( mtFeeResult1[1], "2999999997797182956530" ); - - - var feerateLogicUpdateAddress = ctx.MtFeeRateModelLogicUpdate.options.address; - await logGas(await ctx.mtFeeRateModel.methods.setFeeRate( - decimalStr("0.01"), - feerateLogicUpdateAddress - ), ctx.sendParam(ctx.Deployer), "setFeeRateUpdate"); - var feeRateUpdate = await DVM_DODO_USDT.methods.getUserFeeRate(lp).call() - assert.equal( - feeRateUpdate[1], - "40000000000000000" - ); - var mtFeeResult2 = await DVM_DODO_USDT.methods.querySellQuote(ctx.Deployer, decimalStr("10")).call() - assert.equal( - mtFeeResult2[1], - "3999999997062910608707" - ); - - }); // it("createDVM - ETH", async () => { @@ -341,7 +322,7 @@ describe("DODOProxyV2.0", () => { // console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD); // console.log("b_USDT:" + b_USDT + " a_USDT:" + a_USDT); assert.equal(a_DOOD, decimalStr("500")); - assert.equal(a_USDT, "124886061"); + assert.equal(a_USDT, "126151370"); await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( ctx.DODO.options.address, ctx.USDT.options.address, @@ -379,7 +360,7 @@ describe("DODOProxyV2.0", () => { // console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD); // console.log("b_WETH:" + b_WETH + " a_WETH:" + a_WETH); assert.equal(a_DOOD, decimalStr("500")); - assert.equal(a_WETH, "160562971834401560"); + assert.equal(a_WETH, "163816613646287588"); await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( ctx.DODO.options.address, ctx.WETH.options.address, @@ -415,7 +396,7 @@ describe("DODOProxyV2.0", () => { // console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD); // console.log("b_WETH:" + b_WETH + " a_WETH:" + a_WETH); // console.log("b_ETH:" + b_ETH + " a_ETH:" + a_ETH); - assert.equal(a_DOOD, "2758402621041673925359"); + assert.equal(a_DOOD, "2814340111190341070680"); await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( ctx.DODO.options.address, 1, @@ -447,7 +428,7 @@ describe("DODOProxyV2.0", () => { assert.equal(a_DOOD, decimalStr("1000")); assert.equal( tx.events['OrderHistory'].returnValues['returnAmount'], - "317467466094549770" + "323865907568573497" ) await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH( ctx.DODO.options.address, @@ -481,7 +462,7 @@ describe("DODOProxyV2.0", () => { var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); assert.equal(a_DOOD, decimalStr("500")); - assert.equal(a_WETH, "158791178116238085"); + assert.equal(a_WETH, "163633965833613187"); await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( ctx.DODO.options.address, ctx.WETH.options.address, diff --git a/test/V2Proxy/proxy.incentive.test.ts b/test/V2Proxy/proxy.incentive.test.ts index 696d2a8..d47355d 100644 --- a/test/V2Proxy/proxy.incentive.test.ts +++ b/test/V2Proxy/proxy.incentive.test.ts @@ -76,8 +76,7 @@ async function initCreateDVM(ctx: ProxyContext, token0: string, token1: string, } async function initIncentive(ctx: ProxyContext): Promise { - var blockNum = await ctx.Web3.eth.getBlockNumber(); - await ctx.DODOIncentive.methods.switchIncentive(blockNum + 1).send(ctx.sendParam(ctx.Deployer)); + await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); await ctx.mintTestToken(ctx.DODOIncentive.options.address, ctx.DODO, decimalStr("1000000")); } @@ -115,29 +114,23 @@ describe("DODOProxyV2.0", () => { await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); var totalReward = await ctx.DODOIncentive.methods.totalReward().call(); var totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - var blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("Init - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("Init - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); //Aim to increase block await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("Close BlockNumber:", blockNum + 1) - await ctx.DODOIncentive.methods.switchIncentive(0).send(ctx.sendParam(ctx.Deployer)); + await ctx.DODOIncentive.methods.changePerReward(0).send(ctx.sendParam(ctx.Deployer)); totalReward = await ctx.DODOIncentive.methods.totalReward().call(); totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("Close incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("Close incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); //Aim to increase block await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); - blockNum = await ctx.Web3.eth.getBlockNumber(); - await ctx.DODOIncentive.methods.switchIncentive(blockNum + 1).send(ctx.sendParam(ctx.Deployer)); - console.log("Open BlockNumber:", blockNum + 1) + await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); //Aim to increase block await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); @@ -145,8 +138,7 @@ describe("DODOProxyV2.0", () => { await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); totalReward = await ctx.DODOIncentive.methods.totalReward().call(); totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("End incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("End incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); assert(totalReward, decimalStr("100")); }); @@ -154,21 +146,17 @@ describe("DODOProxyV2.0", () => { await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); var totalReward = await ctx.DODOIncentive.methods.totalReward().call(); var totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - var blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("Init - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("Init - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); //Aim to increase block await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("Change BlockNumber:", blockNum + 1) await ctx.DODOIncentive.methods.changePerReward(decimalStr("20")).send(ctx.sendParam(ctx.Deployer)); totalReward = await ctx.DODOIncentive.methods.totalReward().call(); totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("change incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("change incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); //Aim to increase block await ctx.mintTestToken(lp, ctx.DODO, decimalStr("1000")); @@ -177,13 +165,12 @@ describe("DODOProxyV2.0", () => { await ctx.DODOIncentive.methods.changePerReward(decimalStr("10")).send(ctx.sendParam(ctx.Deployer)); totalReward = await ctx.DODOIncentive.methods.totalReward().call(); totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); - blockNum = await ctx.Web3.eth.getBlockNumber(); - console.log("End incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution + "; BlockNumber:" + blockNum); + console.log("End incentive - Total Reward:" + totalReward + "; Total distribution:" + totalDistribution); assert(totalReward, decimalStr("140")); }); - it("tigger - incentive", async () => { + it.only("tigger - incentive", async () => { await ctx.mintTestToken(trader, ctx.DODO, decimalStr("2000")); var b_DODO = await ctx.DODO.methods.balanceOf(trader).call() var b_USDT = await ctx.USDT.methods.balanceOf(trader).call() @@ -193,16 +180,11 @@ describe("DODOProxyV2.0", () => { var b_totalDistribution = await ctx.DODOIncentive.methods.totalDistribution().call(); console.log("Before Total Reward:" + b_totalReward + "; Total distribution:" + b_totalDistribution) - var a_DODO = await ctx.DODO.methods.balanceOf(trader).call() - var a_USDT = await ctx.USDT.methods.balanceOf(trader).call() - console.log("After No Incentive DODO:" + a_DODO + "; USDT:" + a_USDT); - var dodoPairs = [ dpp_DODO_USDT ] var directions = 0 - await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( ctx.DODO.options.address, ctx.USDT.options.address, @@ -213,7 +195,7 @@ describe("DODOProxyV2.0", () => { false, Math.floor(new Date().getTime() / 1000 + 60 * 10) ), ctx.sendParam(trader), "swap without incentive first"); - + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( ctx.DODO.options.address, ctx.USDT.options.address, diff --git a/test/utils/ProxyContextV2.ts b/test/utils/ProxyContextV2.ts index 74a7f2f..a1c62a4 100644 --- a/test/utils/ProxyContextV2.ts +++ b/test/utils/ProxyContextV2.ts @@ -82,8 +82,8 @@ export class ProxyContext { var permissionManagerTemplate = await contracts.newContract(contracts.PERMISSION_MANAGER_NAME) var mtFeeRateModelTemplate = await contracts.newContract(contracts.FEE_RATE_MODEL_NAME) this.mtFeeRateModel = mtFeeRateModelTemplate; - await mtFeeRateModelTemplate.methods.init(this.Deployer,decimalStr("0.01")).send(this.sendParam(this.Deployer)); - // await mtFeeRateModelTemplate.methods.init(this.Deployer,decimalStr("0")).send(this.sendParam(this.Deployer)); + // await mtFeeRateModelTemplate.methods.init(this.Deployer,decimalStr("0.01")).send(this.sendParam(this.Deployer)); + await mtFeeRateModelTemplate.methods.init(this.Deployer,decimalStr("0")).send(this.sendParam(this.Deployer)); this.DVMFactory = await contracts.newContract(contracts.DVM_FACTORY_NAME, [