From 1c92f2e6b4d79c6481e36bafe75f6f2ed5654b28 Mon Sep 17 00:00:00 2001 From: mingda Date: Wed, 25 Nov 2020 17:16:49 +0800 Subject: [PATCH] fix dvm test --- test/DVM/AMMLikeCase.test.ts | 11 +++-- test/DVM/funding.test.ts | 79 ++++++++++++++++++------------------ test/DVM/trader.test.ts | 20 ++++----- test/utils/Converter.ts | 2 +- test/utils/DVMContext.ts | 50 +++++++++-------------- 5 files changed, 75 insertions(+), 87 deletions(-) diff --git a/test/DVM/AMMLikeCase.test.ts b/test/DVM/AMMLikeCase.test.ts index 01c6f98..1c6a668 100644 --- a/test/DVM/AMMLikeCase.test.ts +++ b/test/DVM/AMMLikeCase.test.ts @@ -18,15 +18,13 @@ let trader: string; async function init(ctx: DVMContext): Promise { lp = ctx.SpareAccounts[0]; trader = ctx.SpareAccounts[1]; - await ctx.approveProxy(lp); - await ctx.approveProxy(trader); await ctx.mintTestToken(lp, decimalStr("10"), decimalStr("1000")); await ctx.mintTestToken(trader, decimalStr("10"), decimalStr("1000")); - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("1000")) - .send(ctx.sendParam(lp)); + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.transferQuoteToDVM(lp, decimalStr("1000")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)); console.log("deposit") } @@ -66,7 +64,8 @@ describe("AMMLikeCase", () => { console.log("BASE0 before buy", await ctx.DVM.methods.getBase0().call()) // buy - await logGas(ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")), ctx.sendParam(trader), "buy base token") + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await ctx.DVM.methods.sellQuote(trader).send(ctx.sendParam(trader)) console.log("BASE0 after buy", await ctx.DVM.methods.getBase0().call()) // trader balances console.log( diff --git a/test/DVM/funding.test.ts b/test/DVM/funding.test.ts index 8a32693..18feeda 100644 --- a/test/DVM/funding.test.ts +++ b/test/DVM/funding.test.ts @@ -19,8 +19,6 @@ let trader: string; async function init(ctx: DVMContext): Promise { lp = ctx.SpareAccounts[0]; trader = ctx.SpareAccounts[1]; - await ctx.approveProxy(lp); - await ctx.approveProxy(trader); await ctx.mintTestToken(lp, decimalStr("10"), decimalStr("1000")); await ctx.mintTestToken(trader, decimalStr("10"), decimalStr("1000")); @@ -47,9 +45,8 @@ describe("Funding", () => { it("buy shares from init states", async () => { - await logGas(ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0")) - , ctx.sendParam(lp), "buy shares"); + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await logGas(ctx.DVM.methods.buyShares(lp), ctx.sendParam(lp), "buy shares"); // vault balances assert.equal( @@ -74,24 +71,27 @@ describe("Funding", () => { }); it("buy shares from init states with quote != 0", async () => { - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("100")) - .send(ctx.sendParam(lp)); + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.transferQuoteToDVM(lp, decimalStr("100")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)); assert.equal(await ctx.DVM.methods.balanceOf(lp).call(), decimalStr("10")) assert.equal(await ctx.DVM.methods.getMidPrice().call(), "102078438912577213500") }) it("buy shares with balanced input", async () => { - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0")) - .send(ctx.sendParam(lp)); - await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)) + + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await ctx.DVM.methods.sellQuote(trader).send(ctx.sendParam(trader)) var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call()) var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call()) var increaseRatio = new BigNumber("0.1") - await ctx.DVMProxy.methods.depositToDVM(ctx.DVM.options.address, trader, vaultBaseBalance.multipliedBy(increaseRatio).toFixed(0), vaultQuoteBalance.multipliedBy(increaseRatio).toFixed(0)).send(ctx.sendParam(trader)) + await ctx.transferBaseToDVM(trader, vaultBaseBalance.multipliedBy(increaseRatio).toFixed(0)) + await ctx.transferQuoteToDVM(trader, vaultQuoteBalance.multipliedBy(increaseRatio).toFixed(0)) + await ctx.DVM.methods.buyShares(trader).send(ctx.sendParam(trader)) assert.equal( await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call(), @@ -99,57 +99,58 @@ describe("Funding", () => { ); assert.equal( await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call(), - "219999999999999999800" + "220000000000000000000" ); assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "999999999999999990") }) it("buy shares with unbalanced input (less quote)", async () => { - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0")) - .send(ctx.sendParam(lp)); - await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)) + + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await ctx.DVM.methods.sellQuote(trader).send(ctx.sendParam(trader)) var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call()) var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call()) var increaseRatio = new BigNumber("0.1") - await ctx.DVMProxy.methods.depositToDVM( - ctx.DVM.options.address, - trader, - vaultBaseBalance.multipliedBy(increaseRatio).toFixed(0), - vaultQuoteBalance.multipliedBy(increaseRatio).div(2).toFixed(0) - ).send(ctx.sendParam(trader)) - assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "499999999999999990") + + await ctx.transferBaseToDVM(trader, vaultBaseBalance.multipliedBy(increaseRatio).toFixed(0)) + await ctx.transferQuoteToDVM(trader, vaultQuoteBalance.multipliedBy(increaseRatio).div(2).toFixed(0)) + await ctx.DVM.methods.buyShares(trader).send(ctx.sendParam(trader)) + + assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "500000000000000000") }) it("buy shares with unbalanced input (less base)", async () => { - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0")) - .send(ctx.sendParam(lp)); - await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)) + + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await ctx.DVM.methods.sellQuote(trader).send(ctx.sendParam(trader)) var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call()) var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call()) var increaseRatio = new BigNumber("0.1") - await ctx.DVMProxy.methods.depositToDVM( - ctx.DVM.options.address, - trader, - vaultBaseBalance.multipliedBy(increaseRatio).div(2).toFixed(0), - vaultQuoteBalance.multipliedBy(increaseRatio).toFixed(0) - ).send(ctx.sendParam(trader)) + + await ctx.transferBaseToDVM(trader, vaultBaseBalance.multipliedBy(increaseRatio).div(2).toFixed(0)) + await ctx.transferQuoteToDVM(trader, vaultQuoteBalance.multipliedBy(increaseRatio).toFixed(0)) + await ctx.DVM.methods.buyShares(trader).send(ctx.sendParam(trader)) + assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "499999999999999990") }) }); describe("sell shares", () => { it("sell shares", async () => { - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("100")) - .send(ctx.sendParam(lp)); + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.transferQuoteToDVM(lp, decimalStr("100")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)) + var vaultShares = await ctx.DVM.methods.balanceOf(lp).call() var bob = ctx.SpareAccounts[5] - await ctx.DVM.methods.sellShares(bob, vaultShares, "0x").send(ctx.sendParam(lp)) + await ctx.DVM.methods.sellShares(vaultShares, bob, "0x").send(ctx.sendParam(lp)) assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10")) assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("100")) }) diff --git a/test/DVM/trader.test.ts b/test/DVM/trader.test.ts index fab445d..9b37c88 100644 --- a/test/DVM/trader.test.ts +++ b/test/DVM/trader.test.ts @@ -20,15 +20,12 @@ let trader: string; async function init(ctx: DVMContext): Promise { lp = ctx.SpareAccounts[0]; trader = ctx.SpareAccounts[1]; - await ctx.approveProxy(lp); - await ctx.approveProxy(trader); await ctx.mintTestToken(lp, decimalStr("10"), decimalStr("1000")); await ctx.mintTestToken(trader, decimalStr("10"), decimalStr("1000")); - await ctx.DVMProxy.methods - .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0")) - .send(ctx.sendParam(lp)); + await ctx.transferBaseToDVM(lp, decimalStr("10")) + await ctx.DVM.methods.buyShares(lp).send(ctx.sendParam(lp)) console.log("deposit") } @@ -74,7 +71,8 @@ describe("Trader", () => { console.log("BASE0 before buy", await ctx.DVM.methods.getBase0().call()) // buy - await logGas(ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")), ctx.sendParam(trader), "buy base token") + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await logGas(ctx.DVM.methods.sellQuote(trader), ctx.sendParam(trader), "buy base token") console.log("BASE0 after buy", await ctx.DVM.methods.getBase0().call()) // trader balances assert.equal( @@ -105,7 +103,8 @@ describe("Trader", () => { ); // sell - await logGas(ctx.DVMProxy.methods.sellBaseOnDVM(ctx.DVM.options.address, trader, decimalStr("1"), decimalStr("100")), ctx.sendParam(trader), "sell base token") + await ctx.transferBaseToDVM(trader, decimalStr("1")) + await logGas(ctx.DVM.methods.sellBase(trader), ctx.sendParam(trader), "sell base token") console.log("BASE0 after sell", await ctx.DVM.methods.getBase0().call()) // trader balances assert.equal( @@ -136,7 +135,8 @@ describe("Trader", () => { ); // buy when quoet is not 0 - await logGas(ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")), ctx.sendParam(trader), "buy base token") + await ctx.transferQuoteToDVM(trader, decimalStr("200")) + await logGas(ctx.DVM.methods.sellQuote(trader), ctx.sendParam(trader), "buy base token") console.log("BASE0 after second buy", await ctx.DVM.methods.getBase0().call()) // trader balances assert.equal( @@ -171,13 +171,13 @@ describe("Trader", () => { }) - it.only("revert cases", async () => { + it("revert cases", async () => { var gasPriceLimitContract = getContractWithAddress(EXTERNAL_VALUE_NAME, await ctx.DVM.methods._GAS_PRICE_LIMIT_().call()) await gasPriceLimitContract.methods.set(gweiStr("10")).send(ctx.sendParam(ctx.Deployer)) await truffleAssert.reverts( - ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send({ from: trader, gas: 300000, gasPrice: gweiStr("200") }), "GAS_PRICE_EXCEED" + ctx.DVM.methods.sellQuote(trader).send({ from: trader, gas: 300000, gasPrice: gweiStr("200") }), "GAS_PRICE_EXCEED" ) }) }); diff --git a/test/utils/Converter.ts b/test/utils/Converter.ts index 53edd17..e01ac5d 100644 --- a/test/utils/Converter.ts +++ b/test/utils/Converter.ts @@ -12,4 +12,4 @@ export function gweiStr(gwei: string): string { export function mweiStr(gwei: string): string { return new BigNumber(gwei).multipliedBy(10 ** 6).toFixed(0, BigNumber.ROUND_DOWN) -}s \ No newline at end of file +} \ No newline at end of file diff --git a/test/utils/DVMContext.ts b/test/utils/DVMContext.ts index 1faa357..e2da373 100644 --- a/test/utils/DVMContext.ts +++ b/test/utils/DVMContext.ts @@ -49,8 +49,6 @@ export let DefaultDVMContextInitConfig = { export class DVMContext { EVM: EVM; Web3: Web3; - DVMProxy: Contract; - DVMFactory: Contract; DVM: Contract; BASE: Contract; QUOTE: Contract; @@ -63,24 +61,13 @@ export class DVMContext { async init(config: DVMContextInitConfig) { this.EVM = new EVM(); this.Web3 = getDefaultWeb3(); - this.DVMProxy = await contracts.newContract(contracts.DVM_PROXY_NAME) - var cloneFactory = await contracts.newContract( - contracts.CLONE_FACTORY_CONTRACT_NAME - ); - var dvmTemplate = await contracts.newContract(contracts.DVM_NAME) - var feeRateModelTemplate = await contracts.newContract(contracts.CONST_FEE_RATE_MODEL_NAME) - var permissionManagerTemplate = await contracts.newContract(contracts.PERMISSION_MANAGER_NAME) + this.DVM = await contracts.newContract(contracts.DVM_NAME) + var lpFeeRateModel = await contracts.newContract(contracts.CONST_FEE_RATE_MODEL_NAME) + var mtFeeRateModel = await contracts.newContract(contracts.CONST_FEE_RATE_MODEL_NAME) + var permissionManager = await contracts.newContract(contracts.PERMISSION_MANAGER_NAME) var gasPriceSource = await contracts.newContract(contracts.EXTERNAL_VALUE_NAME) - this.DVMFactory = await contracts.newContract(contracts.DVM_FACTORY_NAME, - [cloneFactory.options.address, - dvmTemplate.options.address, - feeRateModelTemplate.options.address, - permissionManagerTemplate.options.address, - gasPriceSource.options.address, - ]) - this.BASE = await contracts.newContract( contracts.MINTABLE_ERC20_CONTRACT_NAME, ["TestBase", "BASE", 18] @@ -95,21 +82,23 @@ export class DVMContext { this.Maintainer = allAccounts[1]; this.SpareAccounts = allAccounts.slice(2, 10); - await this.DVMFactory.methods.createStandardDODOVendingMachine( + await this.DVM.methods.init( + this.Deployer, + this.Maintainer, this.BASE.options.address, this.QUOTE.options.address, - config.lpFeeRate, - config.mtFeeRate, + lpFeeRateModel.options.address, + mtFeeRateModel.options.address, + permissionManager.options.address, + gasPriceSource.options.address, config.i, config.k ).send(this.sendParam(this.Deployer)) - var vendingMachines = await this.DVMFactory.methods.getVendingMachine(this.BASE.options.address, this.QUOTE.options.address).call() - this.DVM = contracts.getContractWithAddress(contracts.DVM_NAME, vendingMachines[0]) - - await this.DVM.methods.setMaintainer(this.Maintainer).send(this.sendParam(this.Deployer)) await gasPriceSource.methods.initOwner(this.Deployer).send(this.sendParam(this.Deployer)) await gasPriceSource.methods.set(MAX_UINT256).send(this.sendParam(this.Deployer)) + await lpFeeRateModel.methods.init(this.Deployer, config.lpFeeRate).send(this.sendParam(this.Deployer)) + await mtFeeRateModel.methods.init(this.Deployer, config.mtFeeRate).send(this.sendParam(this.Deployer)) console.log(log.blueText("[Init DVM context]")); } @@ -130,13 +119,12 @@ export class DVMContext { .send(this.sendParam(this.Deployer)); } - async approveProxy(account: string) { - await this.BASE.methods - .approve(this.DVMProxy.options.address, MAX_UINT256) - .send(this.sendParam(account)); - await this.QUOTE.methods - .approve(this.DVMProxy.options.address, MAX_UINT256) - .send(this.sendParam(account)); + async transferBaseToDVM(account: string, amount: string) { + await this.BASE.methods.transfer(this.DVM.options.address, amount).send(this.sendParam(account)) + } + + async transferQuoteToDVM(account: string, amount: string) { + await this.QUOTE.methods.transfer(this.DVM.options.address, amount).send(this.sendParam(account)) } }