From 898c5c0fb4425bd04cb1b87a85f5ce9b61f7673e Mon Sep 17 00:00:00 2001 From: mingda Date: Mon, 30 Nov 2020 00:04:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E9=81=8D=E8=B5=B0=E6=9F=A5?= =?UTF-8?q?=20snapshot3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/DODOPrivatePool/impl/DPPVault.sol | 7 ++++ .../DODOVendingMachine/impl/DVMFunding.sol | 12 +++++-- .../DODOVendingMachine/impl/DVMVault.sol | 36 +++++++++++++++---- test/DVM/funding.test.ts | 14 ++++---- 4 files changed, 53 insertions(+), 16 deletions(-) diff --git a/contracts/DODOPrivatePool/impl/DPPVault.sol b/contracts/DODOPrivatePool/impl/DPPVault.sol index 5cc8b8b..303e4b1 100644 --- a/contracts/DODOPrivatePool/impl/DPPVault.sol +++ b/contracts/DODOPrivatePool/impl/DPPVault.sol @@ -25,6 +25,13 @@ contract DPPVault is DPPStorage { event Reset(); + // ============ View Functions ============ + + function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve) { + baseReserve = _BASE_RESERVE_; + quoteReserve = _QUOTE_RESERVE_; + } + // ============ Get Input ============ function getBaseInput() public view returns (uint256 input) { diff --git a/contracts/DODOVendingMachine/impl/DVMFunding.sol b/contracts/DODOVendingMachine/impl/DVMFunding.sol index 5629573..08fa562 100644 --- a/contracts/DODOVendingMachine/impl/DVMFunding.sol +++ b/contracts/DODOVendingMachine/impl/DVMFunding.sol @@ -15,9 +15,14 @@ import {IDODOCallee} from "../../intf/IDODOCallee.sol"; contract DVMFunding is DVMVault { // ============ Events ============ - event BuyShares(address indexed user, uint256 increaseShares, uint256 totalShares); + event BuyShares(address indexed to, uint256 increaseShares, uint256 totalShares); - event SellShares(address indexed user, uint256 decreaseShares, uint256 totalShares); + event SellShares( + address indexed payer, + address indexed to, + uint256 decreaseShares, + uint256 totalShares + ); // ============ Buy & Sell Shares ============ @@ -70,7 +75,7 @@ contract DVMFunding is DVMVault { bytes calldata data, uint256 deadline ) external preventReentrant returns (uint256 baseAmount, uint256 quoteAmount) { - require(deadline >= block.timestamp, 'DODOV2 DVMFUNDING: EXPIRED'); + require(deadline >= block.timestamp, "DODOV2 DVMFUNDING: EXPIRED"); require(shareAmount <= _SHARES_[msg.sender], "DLP_NOT_ENOUGH"); uint256 baseBalance = _BASE_TOKEN_.balanceOf(address(this)); uint256 quoteBalance = _QUOTE_TOKEN_.balanceOf(address(this)); @@ -97,5 +102,6 @@ contract DVMFunding is DVMVault { ); } _sync(); + emit SellShares(msg.sender, to, shareAmount, _SHARES_[msg.sender]); } } diff --git a/contracts/DODOVendingMachine/impl/DVMVault.sol b/contracts/DODOVendingMachine/impl/DVMVault.sol index aec1b4e..49aa374 100644 --- a/contracts/DODOVendingMachine/impl/DVMVault.sol +++ b/contracts/DODOVendingMachine/impl/DVMVault.sol @@ -28,6 +28,13 @@ contract DVMVault is DVMStorage { event Burn(address indexed user, uint256 value); + // ============ View Functions ============ + + function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve) { + baseReserve = _BASE_RESERVE_; + quoteReserve = _QUOTE_RESERVE_; + } + // ============ Asset In ============ function getBaseInput() public view returns (uint256 input) { @@ -121,7 +128,11 @@ contract DVMVault is DVMStorage { return true; } - function _approve(address owner, address spender, uint256 amount) private { + function _approve( + address owner, + address spender, + uint256 amount + ) private { _ALLOWED_[owner][spender] = amount; emit Approval(owner, spender, amount); } @@ -151,17 +162,30 @@ contract DVMVault is DVMStorage { } // ============================ Permit ====================================== - function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external { - require(deadline >= block.timestamp, 'DODO_DVM_LP: EXPIRED'); + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external { + require(deadline >= block.timestamp, "DODO_DVM_LP: EXPIRED"); bytes32 digest = keccak256( abi.encodePacked( - '\x19\x01', + "\x19\x01", DOMAIN_SEPARATOR, - keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) + keccak256( + abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline) + ) ) ); address recoveredAddress = ecrecover(digest, v, r, s); - require(recoveredAddress != address(0) && recoveredAddress == owner, 'DODO_DVM_LP: INVALID_SIGNATURE'); + require( + recoveredAddress != address(0) && recoveredAddress == owner, + "DODO_DVM_LP: INVALID_SIGNATURE" + ); _approve(owner, spender, value); } // =========================================================================== diff --git a/test/DVM/funding.test.ts b/test/DVM/funding.test.ts index c0e82ab..fe16e8b 100644 --- a/test/DVM/funding.test.ts +++ b/test/DVM/funding.test.ts @@ -7,7 +7,7 @@ // import * as assert from 'assert'; -import { decimalStr } from '../utils/Converter'; +import { decimalStr, MAX_UINT256 } from '../utils/Converter'; import { logGas } from '../utils/Log'; import { DVMContext, getDVMContext } from '../utils/DVMContext'; import { assert } from 'chai'; @@ -155,11 +155,11 @@ describe("Funding", () => { var vaultShares = new BigNumber(await ctx.DVM.methods.balanceOf(lp).call()) var bob = ctx.SpareAccounts[5] - await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x").send(ctx.sendParam(lp)) + await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)) assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("5")) assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("50")) - await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x").send(ctx.sendParam(lp)) + await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)) assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10")) assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("100")) }) @@ -171,7 +171,7 @@ describe("Funding", () => { var vaultShares = await ctx.DVM.methods.balanceOf(lp).call() var bob = ctx.SpareAccounts[5] - await ctx.DVM.methods.sellShares(vaultShares, bob, 0, 0, "0x").send(ctx.sendParam(lp)) + await ctx.DVM.methods.sellShares(vaultShares, bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)) assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10")) assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("100")) }) @@ -184,15 +184,15 @@ describe("Funding", () => { var vaultShares = await ctx.DVM.methods.balanceOf(lp).call() var bob = ctx.SpareAccounts[5] await truffleAssert.reverts( - ctx.DVM.methods.sellShares(new BigNumber(vaultShares).multipliedBy(2), bob, 0, 0, "0x").send(ctx.sendParam(lp)), + ctx.DVM.methods.sellShares(new BigNumber(vaultShares).multipliedBy(2), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)), "DLP_NOT_ENOUGH" ) await truffleAssert.reverts( - ctx.DVM.methods.sellShares(vaultShares, bob, decimalStr("100"), 0, "0x").send(ctx.sendParam(lp)), + ctx.DVM.methods.sellShares(vaultShares, bob, decimalStr("100"), 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)), "WITHDRAW_NOT_ENOUGH" ) await truffleAssert.reverts( - ctx.DVM.methods.sellShares(vaultShares, bob, 0, decimalStr("10000"), "0x").send(ctx.sendParam(lp)), + ctx.DVM.methods.sellShares(vaultShares, bob, 0, decimalStr("10000"), "0x", MAX_UINT256).send(ctx.sendParam(lp)), "WITHDRAW_NOT_ENOUGH" ) })