restruct contract repo
This commit is contained in:
101
test/Rebalance.test.ts
Normal file
101
test/Rebalance.test.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
|
||||
Copyright 2020 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { Contract } from 'web3-eth-contract';
|
||||
|
||||
import { DODOContext, getDODOContext } from './utils/Context';
|
||||
import { DODO_REBALANCER_NAME, newContract } from './utils/Contracts';
|
||||
import { decimalStr } from './utils/Converter';
|
||||
|
||||
let lp: string;
|
||||
let trader: string;
|
||||
let rebalancer: Contract;
|
||||
|
||||
async function init(ctx: DODOContext): Promise<void> {
|
||||
await ctx.setOraclePrice(decimalStr("100"));
|
||||
|
||||
lp = ctx.spareAccounts[0];
|
||||
trader = ctx.spareAccounts[1];
|
||||
await ctx.approveDODO(lp);
|
||||
await ctx.approveDODO(trader);
|
||||
|
||||
await ctx.mintTestToken(lp, decimalStr("10"), decimalStr("1000"));
|
||||
await ctx.mintTestToken(trader, decimalStr("10"), decimalStr("1000"));
|
||||
|
||||
await ctx.DODO.methods
|
||||
.depositBaseTo(lp, decimalStr("10"))
|
||||
.send(ctx.sendParam(lp));
|
||||
await ctx.DODO.methods
|
||||
.depositQuoteTo(lp, decimalStr("1000"))
|
||||
.send(ctx.sendParam(lp));
|
||||
|
||||
rebalancer = await newContract(DODO_REBALANCER_NAME)
|
||||
}
|
||||
|
||||
describe("Trader", () => {
|
||||
let snapshotId: string;
|
||||
let ctx: DODOContext;
|
||||
|
||||
before(async () => {
|
||||
ctx = await getDODOContext();
|
||||
await init(ctx);
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
snapshotId = await ctx.EVM.snapshot();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await ctx.EVM.reset(snapshotId);
|
||||
});
|
||||
|
||||
describe("rebalance", () => {
|
||||
it("R above ONE rebalance", async () => {
|
||||
await ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x").send(ctx.sendParam(trader))
|
||||
await ctx.DODO.methods.disableTrading().send(ctx.sendParam(ctx.Deployer))
|
||||
await ctx.DODO.methods.transferOwnership(rebalancer.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
await rebalancer.methods.claimOwnership(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
await ctx.BASE.methods.transfer(rebalancer.options.address, decimalStr("2")).send(ctx.sendParam(trader))
|
||||
await rebalancer.methods.rebalance(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer));
|
||||
|
||||
assert.equal(await ctx.DODO.methods.getMidPrice().call(), await ctx.DODO.methods.getOraclePrice().call())
|
||||
|
||||
await rebalancer.methods.transferOwnership(ctx.DODO.options.address, ctx.Deployer).send(ctx.sendParam(ctx.Deployer))
|
||||
await ctx.DODO.methods.claimOwnership().send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
await rebalancer.methods.retrieve(ctx.BASE.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
await rebalancer.methods.retrieve(ctx.QUOTE.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
assert.equal(await ctx.BASE.methods.balanceOf(ctx.Deployer).call(), "996997569110682237")
|
||||
assert.equal(await ctx.QUOTE.methods.balanceOf(ctx.Deployer).call(), "101113906016449927750")
|
||||
});
|
||||
|
||||
it("R below ONE rebalance", async () => {
|
||||
await ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x").send(ctx.sendParam(trader))
|
||||
await ctx.DODO.methods.disableTrading().send(ctx.sendParam(ctx.Deployer))
|
||||
await ctx.DODO.methods.transferOwnership(rebalancer.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
await rebalancer.methods.claimOwnership(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
await ctx.QUOTE.methods.transfer(rebalancer.options.address, decimalStr("200")).send(ctx.sendParam(trader))
|
||||
await rebalancer.methods.rebalance(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer));
|
||||
|
||||
assert.equal(await ctx.DODO.methods.getMidPrice().call(), await ctx.DODO.methods.getOraclePrice().call())
|
||||
|
||||
await rebalancer.methods.transferOwnership(ctx.DODO.options.address, ctx.Deployer).send(ctx.sendParam(ctx.Deployer))
|
||||
await ctx.DODO.methods.claimOwnership().send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
await rebalancer.methods.retrieve(ctx.BASE.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
await rebalancer.methods.retrieve(ctx.QUOTE.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
|
||||
assert.equal(await ctx.BASE.methods.balanceOf(ctx.Deployer).call(), "997008973080757726")
|
||||
assert.equal(await ctx.QUOTE.methods.balanceOf(ctx.Deployer).call(), "101085569972088780856")
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
@@ -10,56 +10,9 @@ if (process.env["COVERAGE"]) {
|
||||
jsonPath = "../../.coverage_artifacts/contracts/"
|
||||
}
|
||||
|
||||
const CloneFactory = require(`${jsonPath}CloneFactory.json`)
|
||||
const DODO = require(`${jsonPath}DODO.json`)
|
||||
const DODOZoo = require(`${jsonPath}DODOZoo.json`)
|
||||
const DODOEthProxy = require(`${jsonPath}DODOEthProxy.json`)
|
||||
const WETH = require(`${jsonPath}WETH9.json`)
|
||||
const TestERC20 = require(`${jsonPath}TestERC20.json`)
|
||||
const NaiveOracle = require(`${jsonPath}NaiveOracle.json`)
|
||||
const DODOLpToken = require(`${jsonPath}DODOLpToken.json`)
|
||||
const Uniswap = require(`${jsonPath}UniswapV2Pair.json`)
|
||||
const UniswapArbitrageur = require(`${jsonPath}UniswapArbitrageur.json`)
|
||||
const DODOToken = require(`${jsonPath}DODOToken.json`)
|
||||
const DODOMine = require(`${jsonPath}DODOMine.json`)
|
||||
const DODOMineReader = require(`${jsonPath}DODOMineReader.json`)
|
||||
const LockedTokenVault = require(`${jsonPath}LockedTokenVault.json`)
|
||||
|
||||
import { getDefaultWeb3 } from './EVM';
|
||||
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 NAIVE_ORACLE_CONTRACT_NAME = "NaiveOracle"
|
||||
export const DODO_LP_TOKEN_CONTRACT_NAME = "DODOLpToken"
|
||||
export const DODO_ZOO_CONTRACT_NAME = "DOOZoo"
|
||||
export const DODO_WILD_CONTRACT_NAME = "DOOWild"
|
||||
export const DODO_ETH_PROXY_CONTRACT_NAME = "DODOEthProxy"
|
||||
export const WETH_CONTRACT_NAME = "WETH"
|
||||
export const UNISWAP_CONTRACT_NAME = "Uniswap"
|
||||
export const UNISWAP_ARBITRAGEUR_CONTRACT_NAME = "UniswapArbitrageur"
|
||||
export const DODO_TOKEN_CONTRACT_NAME = "DODOToken"
|
||||
export const LOCKED_TOKEN_VAULT_CONTRACT_NAME = "LockedTokenVault"
|
||||
export const DODO_MINE_NAME = "DODOMine"
|
||||
export const DODO_MINE_READER_NAME = "DODOMineReader"
|
||||
|
||||
var contractMap: { [name: string]: any } = {}
|
||||
contractMap[CLONE_FACTORY_CONTRACT_NAME] = CloneFactory
|
||||
contractMap[DODO_CONTRACT_NAME] = DODO
|
||||
contractMap[TEST_ERC20_CONTRACT_NAME] = TestERC20
|
||||
contractMap[NAIVE_ORACLE_CONTRACT_NAME] = NaiveOracle
|
||||
contractMap[DODO_LP_TOKEN_CONTRACT_NAME] = DODOLpToken
|
||||
contractMap[DODO_ZOO_CONTRACT_NAME] = DODOZoo
|
||||
contractMap[DODO_ETH_PROXY_CONTRACT_NAME] = DODOEthProxy
|
||||
contractMap[WETH_CONTRACT_NAME] = WETH
|
||||
contractMap[UNISWAP_CONTRACT_NAME] = Uniswap
|
||||
contractMap[UNISWAP_ARBITRAGEUR_CONTRACT_NAME] = UniswapArbitrageur
|
||||
contractMap[DODO_TOKEN_CONTRACT_NAME] = DODOToken
|
||||
contractMap[LOCKED_TOKEN_VAULT_CONTRACT_NAME] = LockedTokenVault
|
||||
contractMap[DODO_MINE_NAME] = DODOMine
|
||||
contractMap[DODO_MINE_READER_NAME] = DODOMineReader
|
||||
|
||||
interface ContractJson {
|
||||
abi: any;
|
||||
networks: { [network: number]: any };
|
||||
@@ -67,7 +20,7 @@ interface ContractJson {
|
||||
}
|
||||
|
||||
export function getContractJSON(contractName: string): ContractJson {
|
||||
var info = contractMap[contractName]
|
||||
var info = require(`${jsonPath}${contractName}.json`)
|
||||
return {
|
||||
abi: info.abi,
|
||||
networks: info.networks,
|
||||
|
||||
Reference in New Issue
Block a user