init test env
This commit is contained in:
85
test/DVM/trader.ts
Normal file
85
test/DVM/trader.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
|
||||
Copyright 2020 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
// import * as assert from 'assert';
|
||||
|
||||
import { decimalStr } from '../utils/Converter';
|
||||
import { logGas } from '../utils/Log';
|
||||
import { DVMContext, getDVMContext } from '../utils/DVMContext';
|
||||
import { DVM_VAULT_NAME, getContractWithAddress } from '../utils/Contracts';
|
||||
import { Contract } from 'web3-eth-contract';
|
||||
|
||||
let lp: string;
|
||||
let trader: string;
|
||||
let vault: Contract
|
||||
|
||||
async function init(ctx: DVMContext): Promise<void> {
|
||||
lp = ctx.SpareAccounts[0];
|
||||
trader = ctx.SpareAccounts[1];
|
||||
await ctx.approveRoute(lp);
|
||||
await ctx.approveRoute(trader);
|
||||
|
||||
console.log("approve")
|
||||
|
||||
await ctx.mintTestToken(lp, decimalStr("10"), decimalStr("1000"));
|
||||
await ctx.mintTestToken(trader, decimalStr("10"), decimalStr("1000"));
|
||||
|
||||
console.log("mint")
|
||||
|
||||
var vaultAddress = await ctx.DVM.methods._VAULT_().call();
|
||||
vault = getContractWithAddress(DVM_VAULT_NAME, vaultAddress)
|
||||
|
||||
await ctx.Route.methods
|
||||
.depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("0"))
|
||||
.send(ctx.sendParam(lp));
|
||||
|
||||
console.log(await vault.methods.getVaultBalance().call())
|
||||
|
||||
console.log("deposit")
|
||||
}
|
||||
|
||||
describe("Trader", () => {
|
||||
let snapshotId: string;
|
||||
let ctx: DVMContext;
|
||||
|
||||
before(async () => {
|
||||
ctx = await getDVMContext();
|
||||
await init(ctx);
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
snapshotId = await ctx.EVM.snapshot();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await ctx.EVM.reset(snapshotId);
|
||||
});
|
||||
|
||||
describe("trade", () => {
|
||||
it("buy when R equals ONE", async () => {
|
||||
await logGas(ctx.Route.methods.sellBaseOnDVM(ctx.DVM.options.address, trader, decimalStr("1"), decimalStr("90")), ctx.sendParam(trader), "buy base token when balanced")
|
||||
// trader balances
|
||||
console.log(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
decimalStr("11")
|
||||
);
|
||||
console.log(
|
||||
await ctx.QUOTE.methods.balanceOf(trader).call(),
|
||||
"898581839502056240973"
|
||||
);
|
||||
// maintainer balances
|
||||
console.log(
|
||||
await ctx.BASE.methods.balanceOf(ctx.Maintainer).call(),
|
||||
decimalStr("0.001")
|
||||
);
|
||||
console.log(
|
||||
await ctx.QUOTE.methods.balanceOf(ctx.Maintainer).call(),
|
||||
decimalStr("0")
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -15,7 +15,7 @@ import { Contract } from 'web3-eth-contract';
|
||||
|
||||
export const CLONE_FACTORY_CONTRACT_NAME = "CloneFactory"
|
||||
export const DODO_CONTRACT_NAME = "DODO"
|
||||
export const TEST_ERC20_CONTRACT_NAME = "TestERC20"
|
||||
export const MINTABLE_ERC20_CONTRACT_NAME = "MintableERC20"
|
||||
export const NAIVE_ORACLE_CONTRACT_NAME = "NaiveOracle"
|
||||
export const DODO_LP_TOKEN_CONTRACT_NAME = "DODOLpToken"
|
||||
export const DODO_ZOO_CONTRACT_NAME = "DOOZoo"
|
||||
|
||||
@@ -77,12 +77,12 @@ export class DVMContext {
|
||||
this.DVMFactory = await contracts.newContract(contracts.DVM_FACTORY_NAME, [cloneFactory.options.address, vaultTemplate.options.address, controllerTemplate.options.address])
|
||||
|
||||
this.BASE = await contracts.newContract(
|
||||
contracts.TEST_ERC20_CONTRACT_NAME,
|
||||
["TestBase", 18]
|
||||
contracts.MINTABLE_ERC20_CONTRACT_NAME,
|
||||
["TestBase", "BASE", 18]
|
||||
);
|
||||
this.QUOTE = await contracts.newContract(
|
||||
contracts.TEST_ERC20_CONTRACT_NAME,
|
||||
["TestQuote", 18]
|
||||
contracts.MINTABLE_ERC20_CONTRACT_NAME,
|
||||
["TestQuote", "QUOTE", 18]
|
||||
);
|
||||
|
||||
const allAccounts = await this.Web3.eth.getAccounts();
|
||||
@@ -92,7 +92,7 @@ export class DVMContext {
|
||||
|
||||
var lpFeeRateModel = await contracts.newContract(contracts.NAIVE_FEE_RATE_MODEL_NAME, [config.lpFeeRate])
|
||||
var mtFeeRateModel = await contracts.newContract(contracts.NAIVE_FEE_RATE_MODEL_NAME, [config.mtFeeRate])
|
||||
var DVMAddress = this.DVMFactory.methods.createDODOVenderMachine(
|
||||
await this.DVMFactory.methods.createDODOVendorMachine(
|
||||
this.Maintainer,
|
||||
this.BASE.options.address,
|
||||
this.QUOTE.options.address,
|
||||
@@ -102,7 +102,8 @@ export class DVMContext {
|
||||
config.k,
|
||||
config.gasPriceLimit).send(this.sendParam(this.Deployer))
|
||||
|
||||
this.DVM = contracts.getContractWithAddress(contracts.DVM_CONTROLLER_NAME, DVMAddress)
|
||||
var vendorMachines = await this.DVMFactory.methods.getVendorMachine(this.BASE.options.address, this.QUOTE.options.address).call()
|
||||
this.DVM = contracts.getContractWithAddress(contracts.DVM_CONTROLLER_NAME, vendorMachines[0])
|
||||
|
||||
console.log(log.blueText("[Init DVM context]"));
|
||||
}
|
||||
@@ -133,7 +134,7 @@ export class DVMContext {
|
||||
}
|
||||
}
|
||||
|
||||
export async function getDODOContext(
|
||||
export async function getDVMContext(
|
||||
config: DVMContextInitConfig = DefaultDVMContextInitConfig
|
||||
): Promise<DVMContext> {
|
||||
var context = new DVMContext();
|
||||
|
||||
Reference in New Issue
Block a user