From 35aa22b8e8a23cb4bdda335afd7569cf9b142e9a Mon Sep 17 00:00:00 2001 From: owen05 Date: Sun, 3 Jan 2021 23:52:46 +0800 Subject: [PATCH] proxy dpp&&dvm test --- test/Proxy/proxy.dpp.test.ts | 328 +++++++++++++++++++++-------------- test/Proxy/proxy.dvm.test.ts | 120 ++++++++----- test/utils/ProxyContextV2.ts | 3 +- 3 files changed, 280 insertions(+), 171 deletions(-) diff --git a/test/Proxy/proxy.dpp.test.ts b/test/Proxy/proxy.dpp.test.ts index f6eb813..a3cfb15 100644 --- a/test/Proxy/proxy.dpp.test.ts +++ b/test/Proxy/proxy.dpp.test.ts @@ -19,9 +19,8 @@ let trader: string; let config = { lpFeeRate: decimalStr("0.002"), - mtFeeRate: decimalStr("0.001"), k: decimalStr("0.1"), - i: decimalStr("100"), + i: decimalStr("1"), }; async function init(ctx: ProxyContext): Promise { @@ -35,13 +34,16 @@ async function init(ctx: ProxyContext): Promise { await ctx.mintTestToken(lp, ctx.USDT, mweiStr("1000000")); await ctx.mintTestToken(project, ctx.USDT, mweiStr("1000000")); + await ctx.mintTestToken(lp, ctx.USDC, mweiStr("1000000")); + await ctx.mintTestToken(project, ctx.USDC, mweiStr("1000000")); + await ctx.approveProxy(lp); await ctx.approveProxy(project); await ctx.approveProxy(trader); } -async function initCreateDPP(ctx: ProxyContext, token0: string, token1:string, token0Amount: string, token1Amount: string, ethValue:string,i:string): Promise { +async function initCreateDPP(ctx: ProxyContext, token0: string, token1: string, token0Amount: string, token1Amount: string, ethValue: string, i: string): Promise { let PROXY = ctx.DODOProxyV2; await PROXY.methods.createDODOPrivatePool( token0, @@ -49,14 +51,13 @@ async function initCreateDPP(ctx: ProxyContext, token0: string, token1:string, t token0Amount, token1Amount, config.lpFeeRate, - config.mtFeeRate, i, config.k, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ).send(ctx.sendParam(project,ethValue)); - if(token0 == '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') token0 = ctx.WETH.options.address; - if(token1 == '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') token1 = ctx.WETH.options.address; - var addr = await ctx.DPPFactory.methods._REGISTRY_(token0,token1,0).call(); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ).send(ctx.sendParam(project, ethValue)); + if (token0 == '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') token0 = ctx.WETH.options.address; + if (token1 == '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') token1 = ctx.WETH.options.address; + var addr = await ctx.DPPFactory.methods._REGISTRY_(token0, token1, 0).call(); return addr; } @@ -65,8 +66,12 @@ describe("DODOProxyV2.0", () => { let ctx: ProxyContext; let dpp_DODO_USDT: string; let dpp_WETH_USDT: string; + let dpp_WETH_USDC: string; + let dpp_USDT_USDC: string; let DPP_DODO_USDT: Contract; let DPP_WETH_USDT: Contract; + let DPP_WETH_USDC: Contract; + let DPP_USDT_USDC: Contract; before(async () => { let ETH = await contracts.newContract( @@ -74,12 +79,18 @@ describe("DODOProxyV2.0", () => { ); ctx = await getProxyContext(ETH.options.address); await init(ctx); - dpp_DODO_USDT = await initCreateDPP(ctx,ctx.DODO.options.address,ctx.USDT.options.address,decimalStr("100000"),mweiStr("30000"), "0",mweiStr("0.3")); - DPP_DODO_USDT = contracts.getContractWithAddress(contracts.DPP_NAME,dpp_DODO_USDT); - dpp_WETH_USDT = await initCreateDPP(ctx,'0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',ctx.USDT.options.address,decimalStr("5"),mweiStr("30000"),"5",mweiStr("600")); - DPP_WETH_USDT = contracts.getContractWithAddress(contracts.DPP_NAME,dpp_WETH_USDT); - console.log("dpp_DODO_USDT:",dpp_DODO_USDT); - console.log("dpp_WETH_USDT:",dpp_WETH_USDT); + dpp_DODO_USDT = await initCreateDPP(ctx, ctx.DODO.options.address, ctx.USDT.options.address, decimalStr("100000"), mweiStr("20000"), "0", mweiStr("0.2")); + DPP_DODO_USDT = contracts.getContractWithAddress(contracts.DPP_NAME, dpp_DODO_USDT); + dpp_USDT_USDC = await initCreateDPP(ctx, ctx.USDT.options.address, ctx.USDC.options.address, mweiStr("100000"), mweiStr("100000"), "0", decimalStr("1")); + DPP_USDT_USDC = contracts.getContractWithAddress(contracts.DPP_NAME, dpp_USDT_USDC); + dpp_WETH_USDC = await initCreateDPP(ctx, '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', ctx.USDC.options.address, decimalStr("5"), mweiStr("3000"), "5", mweiStr("600")); + DPP_WETH_USDC = contracts.getContractWithAddress(contracts.DPP_NAME, dpp_WETH_USDC); + dpp_WETH_USDT = await initCreateDPP(ctx, '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', ctx.USDT.options.address, decimalStr("5"), mweiStr("3000"), "5", mweiStr("600")); + DPP_WETH_USDT = contracts.getContractWithAddress(contracts.DPP_NAME, dpp_WETH_USDT); + console.log("dpp_DODO_USDT:", dpp_DODO_USDT); + console.log("dpp_WETH_USDT:", dpp_WETH_USDT); + console.log("dpp_WETH_USDC:", dpp_WETH_USDC); + console.log("dpp_USDT_USDC:", dpp_USDT_USDC); }); beforeEach(async () => { @@ -102,12 +113,11 @@ describe("DODOProxyV2.0", () => { baseAmount, quoteAmount, config.lpFeeRate, - config.mtFeeRate, config.i, config.k, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(project),"createDPP"); - var addrs = await ctx.DPPFactory.methods.getPrivatePool(baseToken,quoteToken).call(); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(project), "createDPP"); + var addrs = await ctx.DPPFactory.methods.getPrivatePool(baseToken, quoteToken).call(); assert.equal( await ctx.DODO.methods.balanceOf(addrs[1]).call(), baseAmount @@ -119,103 +129,102 @@ describe("DODOProxyV2.0", () => { }); - it("createDPP - ETH", async () => { - var baseToken = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; - var quoteToken = ctx.USDT.options.address; - var baseAmount = decimalStr("5"); - var quoteAmount = mweiStr("10000"); - await logGas(await ctx.DODOProxyV2.methods.createDODOPrivatePool( - baseToken, - quoteToken, - baseAmount, - quoteAmount, - config.lpFeeRate, - config.mtFeeRate, - config.i, - config.k, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(project, "5"),"createDPP - Wrap ETH"); - var addrs = await ctx.DPPFactory.methods.getPrivatePool(ctx.WETH.options.address,quoteToken).call(); - assert.equal( - await ctx.WETH.methods.balanceOf(addrs[1]).call(), - baseAmount - ); - assert.equal( - await ctx.USDT.methods.balanceOf(addrs[1]).call(), - quoteAmount - ); - }); + // it("createDPP - ETH", async () => { + // var baseToken = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; + // var quoteToken = ctx.USDT.options.address; + // var baseAmount = decimalStr("5"); + // var quoteAmount = mweiStr("10000"); + // await logGas(await ctx.DODOProxyV2.methods.createDODOPrivatePool( + // baseToken, + // quoteToken, + // baseAmount, + // quoteAmount, + // config.lpFeeRate, + // config.i, + // config.k, + // Math.floor(new Date().getTime()/1000 + 60 * 10) + // ),ctx.sendParam(project, "5"),"createDPP - Wrap ETH"); + // var addrs = await ctx.DPPFactory.methods.getPrivatePool(ctx.WETH.options.address,quoteToken).call(); + // assert.equal( + // await ctx.WETH.methods.balanceOf(addrs[1]).call(), + // baseAmount + // ); + // assert.equal( + // await ctx.USDT.methods.balanceOf(addrs[1]).call(), + // quoteAmount + // ); + // }); it("resetDPP", async () => { var beforeState = await DPP_DODO_USDT.methods.getPMMState().call(); - assert.equal(beforeState.K,config.k); - assert.equal(beforeState.B0,decimalStr("100000")); - assert.equal(beforeState.Q0,mweiStr("30000")); + assert.equal(beforeState.K, config.k); + assert.equal(beforeState.B0, decimalStr("100000")); + assert.equal(beforeState.Q0, mweiStr("20000")); await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool( dpp_DODO_USDT, - [config.lpFeeRate, config.mtFeeRate, mweiStr("0.3"), decimalStr("0.2")], + [config.lpFeeRate, mweiStr("0.2"), decimalStr("0.2")], [decimalStr("1000"), mweiStr("1000"), decimalStr("0"), mweiStr("0")], 0, decimalStr("100000"), mweiStr("0"), - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(project),"resetDPP"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(project), "resetDPP"); var afterState = await DPP_DODO_USDT.methods.getPMMState().call(); - assert.equal(afterState.K,decimalStr("0.2")); - assert.equal(afterState.B0,decimalStr("101000")); - assert.equal(afterState.Q0,mweiStr("31000")); + assert.equal(afterState.K, decimalStr("0.2")); + assert.equal(afterState.B0, decimalStr("101000")); + assert.equal(afterState.Q0, mweiStr("21000")); }); it("resetDPP - OutETH", async () => { var beforeState = await DPP_WETH_USDT.methods.getPMMState().call(); - assert.equal(beforeState.K,config.k); - assert.equal(beforeState.B0,decimalStr("5")); - assert.equal(beforeState.Q0,mweiStr("30000")); + assert.equal(beforeState.K, config.k); + assert.equal(beforeState.B0, decimalStr("5")); + assert.equal(beforeState.Q0, mweiStr("3000")); var b_ETH = await ctx.Web3.eth.getBalance(project); - var tx = await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool( + await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool( dpp_WETH_USDT, - [config.lpFeeRate, config.mtFeeRate, mweiStr("600"), decimalStr("0.2")], - [decimalStr("0"), mweiStr("1000"), decimalStr("1"), mweiStr("0")], + [config.lpFeeRate, mweiStr("600"), decimalStr("0.2")], + [decimalStr("0"), mweiStr("100"), decimalStr("1"), mweiStr("0")], 3, decimalStr("0"), mweiStr("0"), - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(project),"resetDPP-OutETH"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(project), "resetDPP-OutETH"); var afterState = await DPP_WETH_USDT.methods.getPMMState().call(); - assert.equal(afterState.K,decimalStr("0.2")); - assert.equal(afterState.B0,decimalStr("4")); - assert.equal(afterState.Q0,mweiStr("31000")); + assert.equal(afterState.K, decimalStr("0.2")); + assert.equal(afterState.B0, decimalStr("4")); + assert.equal(afterState.Q0, mweiStr("3100")); var a_ETH = await ctx.Web3.eth.getBalance(project); - console.log("b_ETH:",b_ETH); - console.log("a_ETH:",a_ETH); - assert.equal(new BigNumber(b_ETH).isGreaterThan(new BigNumber(a_ETH).minus(decimalStr("1"))),true); + console.log("b_ETH:", b_ETH); + console.log("a_ETH:", a_ETH); + assert.equal(new BigNumber(b_ETH).isGreaterThan(new BigNumber(a_ETH).minus(decimalStr("1"))), true); }); it("resetDPP - InETH", async () => { var beforeState = await DPP_WETH_USDT.methods.getPMMState().call(); - assert.equal(beforeState.K,config.k); - assert.equal(beforeState.B0,decimalStr("5")); - assert.equal(beforeState.Q0,mweiStr("30000")); + assert.equal(beforeState.K, config.k); + assert.equal(beforeState.B0, decimalStr("5")); + assert.equal(beforeState.Q0, mweiStr("3000")); var b_ETH = await ctx.Web3.eth.getBalance(project); - var tx = await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool( + await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool( dpp_WETH_USDT, - [config.lpFeeRate, config.mtFeeRate, mweiStr("600"), decimalStr("0.2")], - [decimalStr("1"), mweiStr("1000"), decimalStr("0"), mweiStr("0")], + [config.lpFeeRate, mweiStr("600"), decimalStr("0.2")], + [decimalStr("1"), mweiStr("100"), decimalStr("0"), mweiStr("0")], 1, decimalStr("0"), mweiStr("0"), - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(project,"1"),"resetDPP-InETH"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(project, "1"), "resetDPP-InETH"); var afterState = await DPP_WETH_USDT.methods.getPMMState().call(); - assert.equal(afterState.K,decimalStr("0.2")); - assert.equal(afterState.B0,decimalStr("6")); - assert.equal(afterState.Q0,mweiStr("31000")); + assert.equal(afterState.K, decimalStr("0.2")); + assert.equal(afterState.B0, decimalStr("6")); + assert.equal(afterState.Q0, mweiStr("3100")); var a_ETH = await ctx.Web3.eth.getBalance(project); - console.log("b_ETH:",b_ETH); - console.log("a_ETH:",a_ETH); - assert.equal(new BigNumber(b_ETH).isGreaterThan(new BigNumber(a_ETH).plus(decimalStr("1"))),true); + console.log("b_ETH:", b_ETH); + console.log("a_ETH:", a_ETH); + assert.equal(new BigNumber(b_ETH).isGreaterThan(new BigNumber(a_ETH).plus(decimalStr("1"))), true); }); it("swap - one jump", async () => { @@ -225,10 +234,8 @@ describe("DODOProxyV2.0", () => { var dodoPairs = [ dpp_DODO_USDT ] - var directions = [ - 0 - ] - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + var directions = 0 + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( trader, ctx.DODO.options.address, ctx.USDT.options.address, @@ -236,14 +243,24 @@ describe("DODOProxyV2.0", () => { 1, dodoPairs, directions, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(trader),"swap - one jump"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - one jump first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_USDT = await ctx.USDT.methods.balanceOf(trader).call(); - 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,"149474926"); + // 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, "99749900"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + trader, + ctx.DODO.options.address, + ctx.USDT.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - one jump second"); }); it("swap - two jump", async () => { @@ -254,11 +271,8 @@ describe("DODOProxyV2.0", () => { dpp_DODO_USDT, dpp_WETH_USDT ] - var directions = [ - 0, - 1 - ] - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + var directions = 2 + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( trader, ctx.DODO.options.address, ctx.WETH.options.address, @@ -266,14 +280,24 @@ describe("DODOProxyV2.0", () => { 1, dodoPairs, directions, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(trader),"swap - two jump"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); - 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,"247088897795331236"); + // 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, "165350643050738035"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + trader, + ctx.DODO.options.address, + ctx.WETH.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump second"); }); it("swap - two jump - inETH", async () => { @@ -284,30 +308,35 @@ describe("DODOProxyV2.0", () => { dpp_WETH_USDT, dpp_DODO_USDT ] - var directions = [ - 0, - 1 - ] - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( + var directions = 2 + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( trader, ctx.DODO.options.address, 1, dodoPairs, directions, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(trader,"1"),"swap - two jump - inETH"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader, "1"), "swap - two jump - inETH first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); var a_ETH = await ctx.Web3.eth.getBalance(trader); - 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,"1979965734359241770226"); + // 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, "2908497423869401229986"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( + trader, + ctx.DODO.options.address, + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader, "1"), "swap - two jump - inETH second"); }); it("swap - two jump - outETH", async () => { - await ctx.mintTestToken(trader, ctx.DODO, decimalStr("100000")); + await ctx.mintTestToken(trader, ctx.DODO, decimalStr("1000")); var b_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var b_WETH = await ctx.WETH.methods.balanceOf(trader).call(); var b_ETH = await ctx.Web3.eth.getBalance(trader); @@ -315,30 +344,75 @@ describe("DODOProxyV2.0", () => { dpp_DODO_USDT, dpp_WETH_USDT ] - var directions = [ - 0, - 1 - ] + var directions = 2 var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH( trader, ctx.DODO.options.address, - decimalStr("10000"), + decimalStr("500"), 1, dodoPairs, directions, - Math.floor(new Date().getTime()/1000 + 60 * 10) - ),ctx.sendParam(trader),"swap - two jump - outETH"); + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump - outETH - first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); var a_ETH = await ctx.Web3.eth.getBalance(trader); - 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,decimalStr("90000")); + // 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, decimalStr("500")); assert.equal( tx.events['OrderHistory'].returnValues['returnAmount'], - "3760778359898791539" + "165350643050738035" ) + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH( + trader, + ctx.DODO.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump - outETH - second"); + }); + + + it("swap - three jump", async () => { + await ctx.mintTestToken(trader, ctx.DODO, decimalStr("1000")); + var b_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); + var b_WETH = await ctx.WETH.methods.balanceOf(trader).call(); + var dodoPairs = [ + dpp_DODO_USDT, + dpp_USDT_USDC, + dpp_WETH_USDC + ] + var directions = 4 + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + trader, + ctx.DODO.options.address, + ctx.WETH.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - three jump first"); + var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); + var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); + 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, "165004688801375425"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + trader, + ctx.DODO.options.address, + ctx.WETH.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - three jump second"); }); }); }); diff --git a/test/Proxy/proxy.dvm.test.ts b/test/Proxy/proxy.dvm.test.ts index 0ec8762..fa6aec1 100644 --- a/test/Proxy/proxy.dvm.test.ts +++ b/test/Proxy/proxy.dvm.test.ts @@ -82,7 +82,7 @@ describe("DODOProxyV2.0", () => { await init(ctx); dvm_DODO_USDT = await initCreateDVM(ctx, ctx.DODO.options.address, ctx.USDT.options.address, decimalStr("100000"), mweiStr("20000"), "0", mweiStr("0.2")); DVM_DODO_USDT = contracts.getContractWithAddress(contracts.DVM_NAME, dvm_DODO_USDT); - dvm_USDT_USDC = await initCreateDVM(ctx, ctx.USDT.options.address, ctx.USDC.options.address, mweiStr("100000"), mweiStr("100000"), "0", mweiStr("1")); + dvm_USDT_USDC = await initCreateDVM(ctx, ctx.USDT.options.address, ctx.USDC.options.address, mweiStr("100000"), mweiStr("1000"), "0", decimalStr("1")); DVM_USDT_USDC = contracts.getContractWithAddress(contracts.DVM_NAME, dvm_USDT_USDC); dvm_WETH_USDT = await initCreateDVM(ctx, '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', ctx.USDT.options.address, decimalStr("5"), mweiStr("3000"), "5", mweiStr("600")); DVM_WETH_USDT = contracts.getContractWithAddress(contracts.DVM_NAME, dvm_WETH_USDT); @@ -190,7 +190,7 @@ describe("DODOProxyV2.0", () => { var b_quoteReserve = await DVM_WETH_USDT.methods._QUOTE_RESERVE_().call(); var b_dlp = await DVM_WETH_USDT.methods.balanceOf(lp).call(); assert.equal(b_baseReserve, decimalStr("5")); - assert.equal(b_quoteReserve, mweiStr("30000")); + assert.equal(b_quoteReserve, mweiStr("3000")); assert.equal(b_dlp, decimalStr("0")); await logGas(await ctx.DODOProxyV2.methods.addDVMLiquidity( dvm_WETH_USDT, @@ -206,7 +206,7 @@ describe("DODOProxyV2.0", () => { var a_quoteReserve = await DVM_WETH_USDT.methods._QUOTE_RESERVE_().call(); var a_dlp = await DVM_WETH_USDT.methods.balanceOf(lp).call(); assert.equal(a_baseReserve, decimalStr("6")); - assert.equal(a_quoteReserve, mweiStr("36000")); + assert.equal(a_quoteReserve, mweiStr("3600")); assert.equal(a_dlp, "1000000000000000000"); }); @@ -236,10 +236,10 @@ describe("DODOProxyV2.0", () => { var a_ETH = await ctx.Web3.eth.getBalance(project); // console.log("a_baseReserve:" + a_baseReserve + " a_quoteReserve:" + a_quoteReserve + " a_dlp:" + a_dlp + " a_WETH:" + a_WETH + " a_USDT:" + a_USDT + " a_ETH:" + a_ETH); assert.equal(a_baseReserve, decimalStr("4")); - assert.equal(a_quoteReserve, mweiStr("24000")); + assert.equal(a_quoteReserve, mweiStr("2400")); assert.equal(a_dlp, decimalStr("4")); assert.equal(a_WETH, decimalStr("0")); - assert.equal(a_USDT, mweiStr("856000")); + assert.equal(a_USDT, mweiStr("877600")); assert.equal(new BigNumber(b_ETH).isGreaterThan(new BigNumber(a_ETH).minus(decimalStr("1"))), true); }) @@ -268,10 +268,10 @@ describe("DODOProxyV2.0", () => { var a_ETH = await ctx.Web3.eth.getBalance(project); // console.log("a_baseReserve:" + a_baseReserve + " a_quoteReserve:" + a_quoteReserve + " a_dlp:" + a_dlp + " a_WETH:" + a_WETH + " a_USDT:" + a_USDT + " a_ETH:" + a_ETH); assert.equal(a_baseReserve, decimalStr("4")); - assert.equal(a_quoteReserve, mweiStr("24000")); + assert.equal(a_quoteReserve, mweiStr("2400")); assert.equal(a_dlp, decimalStr("4")); assert.equal(a_WETH, decimalStr("1")); - assert.equal(a_USDT, mweiStr("856000")); + assert.equal(a_USDT, mweiStr("877600")); }) it("swap - one jump", async () => { @@ -283,7 +283,7 @@ describe("DODOProxyV2.0", () => { ] var directions = 0 - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( trader, ctx.DODO.options.address, ctx.USDT.options.address, @@ -292,13 +292,23 @@ describe("DODOProxyV2.0", () => { dodoPairs, directions, Math.floor(new Date().getTime() / 1000 + 60 * 10) - ), ctx.sendParam(trader), "swap - one jump"); + ), ctx.sendParam(trader), "swap - one jump first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_USDT = await ctx.USDT.methods.balanceOf(trader).call(); - console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD); - console.log("b_USDT:" + b_USDT + " a_USDT:" + a_USDT); + // 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( + trader, + ctx.DODO.options.address, + ctx.USDT.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - one jump second"); }); @@ -311,7 +321,7 @@ describe("DODOProxyV2.0", () => { dvm_WETH_USDT ] var directions = 2 - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( trader, ctx.DODO.options.address, ctx.WETH.options.address, @@ -320,13 +330,23 @@ describe("DODOProxyV2.0", () => { dodoPairs, directions, Math.floor(new Date().getTime() / 1000 + 60 * 10) - ), ctx.sendParam(trader), "swap - two jump"); + ), ctx.sendParam(trader), "swap - two jump first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); - console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD); - console.log("b_WETH:" + b_WETH + " a_WETH:" + a_WETH); + // 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( + trader, + ctx.DODO.options.address, + ctx.WETH.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump second"); }); it("swap - two jump - inETH", async () => { @@ -338,29 +358,34 @@ describe("DODOProxyV2.0", () => { dvm_DODO_USDT ] var directions = 2 - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( trader, ctx.DODO.options.address, 1, dodoPairs, directions, Math.floor(new Date().getTime() / 1000 + 60 * 10) - ), ctx.sendParam(trader, "1"), "swap - two jump - inETH"); + ), ctx.sendParam(trader, "1"), "swap - two jump - inETH - first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); var a_ETH = await ctx.Web3.eth.getBalance(trader); - 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"); + // 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, "2814340111190341070680"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken( + trader, + ctx.DODO.options.address, + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader, "1"), "swap - two jump - inETH - second"); }); it("swap - two jump - outETH", async () => { - await ctx.mintTestToken(trader, ctx.DODO, decimalStr("1000")); - var b_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); - var b_WETH = await ctx.WETH.methods.balanceOf(trader).call(); - var b_ETH = await ctx.Web3.eth.getBalance(trader); + await ctx.mintTestToken(trader, ctx.DODO, decimalStr("2000")); var dodoPairs = [ dvm_DODO_USDT, dvm_WETH_USDT @@ -374,32 +399,33 @@ describe("DODOProxyV2.0", () => { dodoPairs, directions, Math.floor(new Date().getTime() / 1000 + 60 * 10) - ), ctx.sendParam(trader), "swap - two jump - outETH"); + ), ctx.sendParam(trader), "swap - two jump - outETH first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); - var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); - var a_ETH = await ctx.Web3.eth.getBalance(trader); - 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, decimalStr("0")); + assert.equal(a_DOOD, decimalStr("1000")); assert.equal( tx.events['OrderHistory'].returnValues['returnAmount'], - "317467466094549770" + "323865907568573497" ) + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH( + trader, + ctx.DODO.options.address, + decimalStr("1000"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - two jump - outETH second"); }); - it("swap - three jump", async () => { await ctx.mintTestToken(trader, ctx.DODO, decimalStr("1000")); - var b_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); - var b_WETH = await ctx.WETH.methods.balanceOf(trader).call(); var dodoPairs = [ dvm_DODO_USDT, dvm_USDT_USDC, dvm_WETH_USDC ] var directions = 4 - var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( trader, ctx.DODO.options.address, ctx.WETH.options.address, @@ -408,13 +434,21 @@ describe("DODOProxyV2.0", () => { dodoPairs, directions, Math.floor(new Date().getTime() / 1000 + 60 * 10) - ), ctx.sendParam(trader), "swap - two jump"); + ), ctx.sendParam(trader), "swap - three jump first"); var a_DOOD = await ctx.DODO.methods.balanceOf(trader).call(); var a_WETH = await ctx.WETH.methods.balanceOf(trader).call(); - 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, "158299831331715351"); + assert.equal(a_WETH, "163633965833613187"); + await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken( + trader, + ctx.DODO.options.address, + ctx.WETH.options.address, + decimalStr("500"), + 1, + dodoPairs, + directions, + Math.floor(new Date().getTime() / 1000 + 60 * 10) + ), ctx.sendParam(trader), "swap - three jump second"); }); }); diff --git a/test/utils/ProxyContextV2.ts b/test/utils/ProxyContextV2.ts index 59781aa..a8444d3 100644 --- a/test/utils/ProxyContextV2.ts +++ b/test/utils/ProxyContextV2.ts @@ -62,7 +62,8 @@ export class ProxyContext { var dppAdminTemplate = await contracts.newContract(contracts.DPP_ADMIN_NAME) var permissionManagerTemplate = await contracts.newContract(contracts.PERMISSION_MANAGER_NAME) var mtFeeRateModelTemplate = await contracts.newContract(contracts.FEE_RATE_MODEL_NAME) - await mtFeeRateModelTemplate.methods.init(this.Deployer,decimalStr("0.01")).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, [