DODO Token
This commit is contained in:
@@ -65,6 +65,13 @@ describe("DODO ZOO", () => {
|
||||
// console.log(await ctx.DODOZoo.methods.getDODOs().call())
|
||||
})
|
||||
|
||||
// it.only("remove dodo", async () => {
|
||||
// console.log(await ctx.DODOZoo.methods.getDODOs().call())
|
||||
// await ctx.DODOZoo.methods.removeDODO(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
// console.log(await ctx.DODOZoo.methods.getDODO(ctx.BASE.options.address, ctx.QUOTE.options.address).call())
|
||||
// console.log(await ctx.DODOZoo.methods.getDODOs().call())
|
||||
// })
|
||||
|
||||
it("dodo register control flow", async () => {
|
||||
await ctx.DODOZoo.methods.removeDODO(ctx.DODO.options.address).send(ctx.sendParam(ctx.Deployer))
|
||||
assert.equal(await ctx.DODOZoo.methods.getDODO(ctx.BASE.options.address, ctx.QUOTE.options.address).call(), "0x0000000000000000000000000000000000000000")
|
||||
|
||||
@@ -52,11 +52,15 @@ describe("Trader", () => {
|
||||
|
||||
describe("R goes above ONE", () => {
|
||||
it("buy when R equals ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x"),
|
||||
ctx.sendParam(trader),
|
||||
"buy base token when balanced"
|
||||
);
|
||||
=======
|
||||
await logGas(ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x"), ctx.sendParam(trader), "buy base token when balanced")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -92,6 +96,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("buy when R is ABOVE ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -100,6 +105,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"buy when R is ABOVE ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("130"), "0x"), ctx.sendParam(trader), "buy when R is ABOVE ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -130,6 +139,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("sell when R is ABOVE ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -142,6 +152,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"sell when R is ABOVE ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.sellBaseToken(decimalStr("0.5"), decimalStr("40"), "0x"), ctx.sendParam(trader), "sell when R is ABOVE ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -172,6 +186,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("sell when R is ABOVE ONE and RStatus back to ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -184,6 +199,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"sell when R is ABOVE ONE and RStatus back to ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.sellBaseToken("1003002430889317763", decimalStr("90"), "0x"), ctx.sendParam(trader), "sell when R is ABOVE ONE and RStatus back to ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// R status
|
||||
assert.equal(await ctx.DODO.methods._R_STATUS_().call(), "0");
|
||||
// trader balances
|
||||
@@ -225,6 +244,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("sell when R is ABOVE ONE and RStatus becomes BELOW ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -233,6 +253,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"sell when R is ABOVE ONE and RStatus becomes BELOW ONE [gas cost worst case]"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.buyBaseToken(decimalStr("1"), decimalStr("110"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.sellBaseToken(decimalStr("2"), decimalStr("90"), "0x"), ctx.sendParam(trader), "sell when R is ABOVE ONE and RStatus becomes BELOW ONE [gas cost worst case]")
|
||||
>>>>>>> Stashed changes
|
||||
// R status
|
||||
assert.equal(await ctx.DODO.methods._R_STATUS_().call(), "2");
|
||||
// trader balances
|
||||
@@ -276,11 +300,15 @@ describe("Trader", () => {
|
||||
|
||||
describe("R goes below ONE", () => {
|
||||
it("sell when R equals ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x"),
|
||||
ctx.sendParam(trader),
|
||||
"sell base token when balanced"
|
||||
);
|
||||
=======
|
||||
await logGas(ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x"), ctx.sendParam(trader), "sell base token when balanced")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -316,6 +344,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("sell when R is BELOW ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.sellBaseToken(decimalStr("3"), decimalStr("90"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -324,6 +353,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"sell when R is BELOW ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.sellBaseToken(decimalStr("3"), decimalStr("90"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.sellBaseToken(decimalStr("3"), decimalStr("90"), "0x"), ctx.sendParam(trader), "sell when R is BELOW ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -354,6 +387,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("buy when R is BELOW ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -366,6 +400,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"buy when R is BELOW ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.buyBaseToken(decimalStr("0.5"), decimalStr("60"), "0x"), ctx.sendParam(trader), "buy when R is BELOW ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// trader balances
|
||||
assert.equal(
|
||||
await ctx.BASE.methods.balanceOf(trader).call(),
|
||||
@@ -396,6 +434,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("buy when R is BELOW ONE and RStatus back to ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -408,6 +447,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"buy when R is BELOW ONE and RStatus back to ONE"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.buyBaseToken("997008973080757728", decimalStr("110"), "0x"), ctx.sendParam(trader), "buy when R is BELOW ONE and RStatus back to ONE")
|
||||
>>>>>>> Stashed changes
|
||||
// R status
|
||||
assert.equal(await ctx.DODO.methods._R_STATUS_().call(), "0");
|
||||
// trader balances
|
||||
@@ -449,6 +492,7 @@ describe("Trader", () => {
|
||||
});
|
||||
|
||||
it("buy when R is BELOW ONE and RStatus becomes ABOVE ONE", async () => {
|
||||
<<<<<<< Updated upstream
|
||||
await ctx.DODO.methods
|
||||
.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x")
|
||||
.send(ctx.sendParam(trader));
|
||||
@@ -457,6 +501,10 @@ describe("Trader", () => {
|
||||
ctx.sendParam(trader),
|
||||
"buy when R is BELOW ONE and RStatus becomes ABOVE ONE [gas cost worst case]"
|
||||
);
|
||||
=======
|
||||
await ctx.DODO.methods.sellBaseToken(decimalStr("1"), decimalStr("90"), "0x").send(ctx.sendParam(trader))
|
||||
await logGas(ctx.DODO.methods.buyBaseToken(decimalStr("2"), decimalStr("220"), "0x"), ctx.sendParam(trader), "buy when R is BELOW ONE and RStatus becomes ABOVE ONE [gas cost worst case]")
|
||||
>>>>>>> Stashed changes
|
||||
// R status
|
||||
assert.equal(await ctx.DODO.methods._R_STATUS_().call(), "1");
|
||||
// trader balances
|
||||
|
||||
@@ -97,6 +97,7 @@ describe("Uniswap Arbitrageur", () => {
|
||||
await ctx.setOraclePrice(decimalStr("100"));
|
||||
// dodo price 100 uniswap price 200
|
||||
// buy at dodo
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
UniswapArbitrageur.methods.executeBuyArbitrage(decimalStr("1")),
|
||||
ctx.sendParam(keeper),
|
||||
@@ -107,11 +108,17 @@ describe("Uniswap Arbitrageur", () => {
|
||||
"79836384956601695518"
|
||||
);
|
||||
});
|
||||
=======
|
||||
logGas(await UniswapArbitrageur.methods.executeBuyArbitrage(decimalStr("1")), ctx.sendParam(keeper), "arbitrage buy at dodo not reverse")
|
||||
assert.equal(await ctx.QUOTE.methods.balanceOf(keeper).call(), "79836384956601695518")
|
||||
})
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
it("sell at dodo", async () => {
|
||||
await ctx.setOraclePrice(decimalStr("300"));
|
||||
// dodo price 300 uniswap price 200
|
||||
// sell at dodo
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
UniswapArbitrageur.methods.executeSellArbitrage(decimalStr("1")),
|
||||
ctx.sendParam(keeper),
|
||||
@@ -123,12 +130,19 @@ describe("Uniswap Arbitrageur", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
=======
|
||||
logGas(await UniswapArbitrageur.methods.executeSellArbitrage(decimalStr("1")), ctx.sendParam(keeper), "arbitrage sell at dodo not reverse")
|
||||
assert.equal(await ctx.BASE.methods.balanceOf(keeper).call(), "252761069524143743")
|
||||
})
|
||||
})
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
describe("arbitrage with reverse pair", () => {
|
||||
it("buy at dodo", async () => {
|
||||
await ctx.setOraclePrice(decimalStr("100"));
|
||||
// dodo price 100 uniswap price 200
|
||||
// buy at dodo
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
UniswapArbitrageurReverse.methods.executeBuyArbitrage(decimalStr("1")),
|
||||
ctx.sendParam(keeper),
|
||||
@@ -139,11 +153,17 @@ describe("Uniswap Arbitrageur", () => {
|
||||
"79836384956601695518"
|
||||
);
|
||||
});
|
||||
=======
|
||||
logGas(await UniswapArbitrageurReverse.methods.executeBuyArbitrage(decimalStr("1")), ctx.sendParam(keeper), "arbitrage buy at dodo reverse")
|
||||
assert.equal(await ctx.QUOTE.methods.balanceOf(keeper).call(), "79836384956601695518")
|
||||
})
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
it("sell at dodo", async () => {
|
||||
await ctx.setOraclePrice(decimalStr("300"));
|
||||
// dodo price 300 uniswap price 200
|
||||
// sell at dodo
|
||||
<<<<<<< Updated upstream
|
||||
await logGas(
|
||||
UniswapArbitrageurReverse.methods.executeSellArbitrage(decimalStr("1")),
|
||||
ctx.sendParam(keeper),
|
||||
@@ -155,6 +175,12 @@ describe("Uniswap Arbitrageur", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
=======
|
||||
logGas(await UniswapArbitrageurReverse.methods.executeSellArbitrage(decimalStr("1")), ctx.sendParam(keeper), "arbitrage sell at dodo reverse")
|
||||
assert.equal(await ctx.BASE.methods.balanceOf(keeper).call(), "252761069524143743")
|
||||
})
|
||||
})
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
describe("revert cases", () => {
|
||||
it("price not match", async () => {
|
||||
|
||||
@@ -13,6 +13,7 @@ if (process.env["COVERAGE"]) {
|
||||
const CloneFactory = require(`${jsonPath}CloneFactory.json`)
|
||||
const DODO = require(`${jsonPath}DODO.json`)
|
||||
const DODOZoo = require(`${jsonPath}DODOZoo.json`)
|
||||
// const DODOWild = require(`${jsonPath}DODOWild.json`)
|
||||
const DODOEthProxy = require(`${jsonPath}DODOEthProxy.json`)
|
||||
const WETH = require(`${jsonPath}WETH9.json`)
|
||||
const TestERC20 = require(`${jsonPath}TestERC20.json`)
|
||||
@@ -20,6 +21,8 @@ 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 LockedTokenVault = require(`${jsonPath}LockedTokenVault.json`)
|
||||
|
||||
import { getDefaultWeb3 } from './EVM';
|
||||
import { Contract } from 'web3-eth-contract';
|
||||
@@ -30,10 +33,13 @@ 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"
|
||||
|
||||
var contractMap: { [name: string]: any } = {}
|
||||
contractMap[CLONE_FACTORY_CONTRACT_NAME] = CloneFactory
|
||||
@@ -46,6 +52,8 @@ 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
|
||||
|
||||
interface ContractJson {
|
||||
abi: any;
|
||||
|
||||
@@ -3,9 +3,25 @@ function calculateSlippage(buyPercentage: number) {
|
||||
console.log(buyPercentage, ":", ((1 / (1 - buyPercentage)) * k - k) * 100, "%")
|
||||
}
|
||||
|
||||
function calculateLoss(priceGap: number) {
|
||||
const feeRate = 0.0025
|
||||
const k = 0.1
|
||||
let amountPartial = Math.sqrt(priceGap / k + 1) - 1
|
||||
let loss = amountPartial * (priceGap - feeRate * 2)
|
||||
console.log(priceGap, ":", loss * 100, "%")
|
||||
}
|
||||
|
||||
// calculateSlippage(0.01)
|
||||
// calculateSlippage(0.05)
|
||||
// calculateSlippage(0.1)
|
||||
// calculateSlippage(0.2)
|
||||
// calculateSlippage(0.5)
|
||||
// calculateSlippage(0.7)
|
||||
|
||||
// calculateLoss(0.006)
|
||||
// calculateLoss(0.007)
|
||||
// calculateLoss(0.008)
|
||||
// calculateLoss(0.009)
|
||||
// calculateLoss(0.01)
|
||||
// calculateLoss(0.02)
|
||||
// calculateLoss(0.03)
|
||||
Reference in New Issue
Block a user