From cff1bbe53e83ae244e0adbd151fd79a4bb6aec83 Mon Sep 17 00:00:00 2001 From: mingda Date: Tue, 24 Nov 2020 00:20:23 +0800 Subject: [PATCH] fix dvm trader test --- contracts/lib/ConstFeeRateModel.sol | 6 +++-- package-lock.json | 16 ++++++++++++ package.json | 3 ++- test/DVM/trader.test.ts | 39 +++++++++++++++++++++-------- test/utils/DVMContext.ts | 4 +-- 5 files changed, 52 insertions(+), 16 deletions(-) diff --git a/contracts/lib/ConstFeeRateModel.sol b/contracts/lib/ConstFeeRateModel.sol index 546d4aa..ab4995e 100644 --- a/contracts/lib/ConstFeeRateModel.sol +++ b/contracts/lib/ConstFeeRateModel.sol @@ -12,8 +12,10 @@ import {InitializableOwnable} from "../lib/InitializableOwnable.sol"; interface IConstFeeRateModel { function init(address owner, uint256 feeRate) external; + function setFeeRate(uint256 newFeeRate) external; - function getFeeRate() external view returns (uint256); + + function getFeeRate(address trader) external view returns (uint256); } contract ConstFeeRateModel is InitializableOwnable { @@ -28,7 +30,7 @@ contract ConstFeeRateModel is InitializableOwnable { _FEE_RATE_ = newFeeRate; } - function getFeeRate() external view returns (uint256) { + function getFeeRate(address trader) external view returns (uint256) { return _FEE_RATE_; } } diff --git a/package-lock.json b/package-lock.json index 123b1ea..af6f651 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6121,6 +6121,12 @@ "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, "lodash.toarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", @@ -8910,6 +8916,16 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, + "truffle-assertions": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/truffle-assertions/-/truffle-assertions-0.9.2.tgz", + "integrity": "sha512-9g2RhaxU2F8DeWhqoGQvL/bV8QVoSnQ6PY+ZPvYRP5eF7+/8LExb4mjLx/FeliLTjc3Tv1SABG05Gu5qQ/ErmA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "lodash.isequal": "^4.5.0" + } + }, "truffle-hdwallet-provider": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.17.tgz", diff --git a/package.json b/package.json index de2e88b..ce97aee 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "ganache-cli": "^6.9.1", "prettier": "^2.0.5", "prettier-plugin-solidity": "^1.0.0-alpha.52", - "solidity-coverage": "^0.7.7" + "solidity-coverage": "^0.7.7", + "truffle-assertions": "^0.9.2" } } diff --git a/test/DVM/trader.test.ts b/test/DVM/trader.test.ts index d9cba34..fab445d 100644 --- a/test/DVM/trader.test.ts +++ b/test/DVM/trader.test.ts @@ -11,6 +11,8 @@ import { decimalStr, gweiStr } from '../utils/Converter'; import { logGas } from '../utils/Log'; import { DVMContext, getDVMContext } from '../utils/DVMContext'; import { assert } from 'chai'; +import { EXTERNAL_VALUE_NAME, getContractWithAddress } from '../utils/Contracts'; +const truffleAssert = require('truffle-assertions'); let lp: string; let trader: string; @@ -49,12 +51,23 @@ describe("Trader", () => { }); describe("trade", () => { - it.only("basic check", async () => { - console.log(await ctx.DVM.methods.getVaultReserve().call()) - console.log(await ctx.DVM.methods.getPMMState().call()) - console.log(await ctx.DVM.methods.getMidPrice().call()) - console.log(await ctx.DVM.methods.querySellQuote(ctx.Deployer, decimalStr("200")).call()) - }) + // it.only("basic check", async () => { + // console.log(await ctx.DVM.methods.getVaultReserve().call()) + // console.log(await ctx.DVM.methods.getPMMState().call()) + // console.log(await ctx.DVM.methods.getMidPrice().call()) + // console.log(await ctx.DVM.methods.querySellQuote(ctx.Deployer, decimalStr("200")).call()) + // console.log(ctx.BASE.options.address) + // console.log(await ctx.DVM.methods._BASE_TOKEN_().call()) + // console.log(ctx.QUOTE.options.address) + // console.log(await ctx.DVM.methods._QUOTE_TOKEN_().call()) + // }) + + // it.only("mannually buy", async () => { + // await ctx.QUOTE.methods.transfer(ctx.DVM.options.address, decimalStr("100")).send(ctx.sendParam(lp)) + // console.log(await ctx.DVM.methods.getQuoteInput().call()) + // console.log(await ctx.DVM.methods.querySellQuote(lp, decimalStr("100")).call()) + // await ctx.DVM.methods.sellQuote(lp).send(ctx.sendParam(lp)) + // }) it("buy & sell", async () => { @@ -128,7 +141,7 @@ describe("Trader", () => { // trader balances assert.equal( await ctx.BASE.methods.balanceOf(trader).call(), - "12837528824326616018" + "12837528824326616010" ); assert.equal( await ctx.QUOTE.methods.balanceOf(trader).call(), @@ -137,7 +150,7 @@ describe("Trader", () => { // vault balances assert.equal( await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call(), - "7158622099620899913" + "7158622099620899921" ); assert.equal( await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call(), @@ -158,9 +171,13 @@ describe("Trader", () => { }) - it("revert cases", async () => { - await assert.fail( - ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send({ from: trader, gas: 300000, gasPrice: gweiStr("200") }), /GAS_PRICE_EXCEED/ + it.only("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" ) }) }); diff --git a/test/utils/DVMContext.ts b/test/utils/DVMContext.ts index c457789..1faa357 100644 --- a/test/utils/DVMContext.ts +++ b/test/utils/DVMContext.ts @@ -104,8 +104,8 @@ export class DVMContext { config.k ).send(this.sendParam(this.Deployer)) - var vendorMachines = await this.DVMFactory.methods.getVendorMachine(this.BASE.options.address, this.QUOTE.options.address).call() - this.DVM = contracts.getContractWithAddress(contracts.DVM_NAME, vendorMachines[0]) + 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))