diff --git a/contracts/DODOVendingMachine/impl/DVMStorage.sol b/contracts/DODOVendingMachine/impl/DVMStorage.sol index b1f1afb..d938f28 100644 --- a/contracts/DODOVendingMachine/impl/DVMStorage.sol +++ b/contracts/DODOVendingMachine/impl/DVMStorage.sol @@ -88,4 +88,14 @@ contract DVMStorage is InitializableOwnable, ReentrancyGuard { function setSell(bool open) external onlyOwner { _SELLING_CLOSE_ = !open; } + + // ============ View Functions ============ + + function getLpFeeRate(address trader) external view returns (uint256 feeRate) { + return _LP_FEE_RATE_MODEL_.getFeeRate(trader); + } + + function getMtFeeRate(address trader) external view returns (uint256 feeRate) { + return _MT_FEE_RATE_MODEL_.getFeeRate(trader); + } } diff --git a/contracts/lib/DODOMath.sol b/contracts/lib/DODOMath.sol index be219d8..ba5be02 100644 --- a/contracts/lib/DODOMath.sol +++ b/contracts/lib/DODOMath.sol @@ -52,8 +52,8 @@ library DODOMath { c=-kQ0^2 and Q2=(-b+sqrt(b^2+4(1-k)kQ0^2))/2(1-k) note: another root is negative, abondan - if deltaBSig=true, then Q2>Q1 - if deltaBSig=false, then Q2Q1, user sell Q and receive B + if deltaBSig=false, then Q2 { // vault balances assert.equal( - await ctx.BASE.methods.balanceOf(ctx.Vault.options.address).call(), + await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call(), decimalStr("10") ); assert.equal( - await ctx.QUOTE.methods.balanceOf(ctx.Vault.options.address).call(), + await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call(), decimalStr("0") ); assert.equal( - await ctx.Vault.methods._BASE_RESERVE_().call(), + await ctx.DVM.methods._BASE_RESERVE_().call(), decimalStr("10") ) assert.equal( - await ctx.Vault.methods._QUOTE_RESERVE_().call(), + await ctx.DVM.methods._QUOTE_RESERVE_().call(), decimalStr("0") ) // shares number - assert.equal(await ctx.Vault.methods.balanceOf(lp).call(), decimalStr("10")) + assert.equal(await ctx.DVM.methods.balanceOf(lp).call(), decimalStr("10")) }); 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)); - assert.equal(await ctx.Vault.methods.balanceOf(lp).call(), decimalStr("10")) + assert.equal(await ctx.DVM.methods.balanceOf(lp).call(), decimalStr("10")) assert.equal(await ctx.DVM.methods.getMidPrice().call(), "102078438912577213500") }) @@ -87,22 +87,22 @@ describe("Funding", () => { .send(ctx.sendParam(lp)); await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) - var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.Vault.options.address).call()) - var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.Vault.options.address).call()) + 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)) assert.equal( - await ctx.BASE.methods.balanceOf(ctx.Vault.options.address).call(), + await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call(), "8856412162577279149" ); assert.equal( - await ctx.QUOTE.methods.balanceOf(ctx.Vault.options.address).call(), + await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call(), "219999999999999999800" ); - assert.equal(await ctx.Vault.methods.balanceOf(trader).call(), "999999999999999990") + assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "999999999999999990") }) it("buy shares with unbalanced input (less quote)", async () => { @@ -111,8 +111,8 @@ describe("Funding", () => { .send(ctx.sendParam(lp)); await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) - var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.Vault.options.address).call()) - var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.Vault.options.address).call()) + 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, @@ -120,7 +120,7 @@ describe("Funding", () => { vaultBaseBalance.multipliedBy(increaseRatio).toFixed(0), vaultQuoteBalance.multipliedBy(increaseRatio).div(2).toFixed(0) ).send(ctx.sendParam(trader)) - assert.equal(await ctx.Vault.methods.balanceOf(trader).call(), "499999999999999990") + assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "499999999999999990") }) it("buy shares with unbalanced input (less base)", async () => { @@ -129,8 +129,8 @@ describe("Funding", () => { .send(ctx.sendParam(lp)); await ctx.DVMProxy.methods.sellQuoteOnDVM(ctx.DVM.options.address, trader, decimalStr("200"), decimalStr("1")).send(ctx.sendParam(trader)) - var vaultBaseBalance = new BigNumber(await ctx.BASE.methods.balanceOf(ctx.Vault.options.address).call()) - var vaultQuoteBalance = new BigNumber(await ctx.QUOTE.methods.balanceOf(ctx.Vault.options.address).call()) + 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, @@ -138,16 +138,16 @@ describe("Funding", () => { vaultBaseBalance.multipliedBy(increaseRatio).div(2).toFixed(0), vaultQuoteBalance.multipliedBy(increaseRatio).toFixed(0) ).send(ctx.sendParam(trader)) - assert.equal(await ctx.Vault.methods.balanceOf(trader).call(), "499999999999999990") + assert.equal(await ctx.DVM.methods.balanceOf(trader).call(), "499999999999999990") }) }); describe("sell shares", () => { - it.only("sell shares", async () => { + it("sell shares", async () => { await ctx.DVMProxy.methods .depositToDVM(ctx.DVM.options.address, lp, decimalStr("10"), decimalStr("100")) .send(ctx.sendParam(lp)); - var vaultShares = await ctx.Vault.methods.balanceOf(lp).call() + 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)) assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10")) diff --git a/test/DVM/trader.test.ts b/test/DVM/trader.test.ts index 3390132..4cce507 100644 --- a/test/DVM/trader.test.ts +++ b/test/DVM/trader.test.ts @@ -49,10 +49,12 @@ describe("Trader", () => { }); describe("trade", () => { - it.only("basic check", async () => { - console.log(await ctx.DVM.methods.getPMMState().call()) - console.log(await ctx.DVM.methods.querySellQuote(ctx.Deployer, decimalStr("200")).call()) - }) + // it.only("basic check", async () => { + // console.log(await ctx.DVM.methods.getPMMState().call()) + // console.log(await ctx.DVM.methods.getLpFeeRate(ctx.Deployer).call()) + // console.log(await ctx.DVM.methods.getMtFeeRate(ctx.Deployer).call()) + // console.log(await ctx.DVM.methods.querySellQuote(ctx.Deployer, decimalStr("200")).call()) + // }) it("buy & sell", async () => { console.log("BASE0 before buy", await ctx.DVM.methods.getBase0().call()) @@ -121,31 +123,31 @@ 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") - console.log("BASE0 after second buy", await ctx.DVM.methods.getBase0().call()) + assert.equal("BASE0 after second buy", await ctx.DVM.methods.getBase0().call()) // trader balances - console.log( + assert.equal( await ctx.BASE.methods.balanceOf(trader).call(), "12837528824326616018" ); - console.log( + assert.equal( await ctx.QUOTE.methods.balanceOf(trader).call(), "703421810640399874603" ); // vault balances - console.log( + assert.equal( await ctx.BASE.methods.balanceOf(ctx.DVM.options.address).call(), "7158622099620899913" ); - console.log( + assert.equal( await ctx.QUOTE.methods.balanceOf(ctx.DVM.options.address).call(), "296474456349930717298" ); // maintainer balances - console.log( + assert.equal( await ctx.BASE.methods.balanceOf(ctx.Maintainer).call(), "3849076052484069" ); - console.log( + assert.equal( await ctx.QUOTE.methods.balanceOf(ctx.Maintainer).call(), "103733009669408099" );