This commit is contained in:
owen05
2020-11-28 21:57:09 +08:00
parent 13904ae413
commit c52e7960b6
10 changed files with 31 additions and 68 deletions

View File

@@ -179,7 +179,6 @@ contract DPPTrader is DPPVault {
receiveQuoteAmount = receiveQuoteAmount
.sub(DecimalMath.mulFloor(receiveQuoteAmount, lpFeeRate))
.sub(mtFee);
return (receiveQuoteAmount, mtFee, newRState, state.B0);
}

View File

@@ -9,9 +9,9 @@ pragma solidity 0.6.9;
import {Ownable} from "../lib/Ownable.sol";
import {IERC20} from "../intf/IERC20.sol";
import {UniversalERC20} from "./UniversalERC20.sol";
import {UniversalERC20} from "./lib/UniversalERC20.sol";
import {SafeMath} from "../lib/SafeMath.sol";
import {IDODOSellHelper} from "../intf/IDODOSellHelper.sol";
import {IDODOSellHelper} from "./intf/IDODOSellHelper.sol";
import {IDODOApprove} from "../intf/IDODOApprove.sol";
import {IDODO} from "../intf/IDODO.sol";
import {IWETH} from "../intf/IWETH.sol";
@@ -59,7 +59,7 @@ contract DODOV1Proxy01 is Ownable {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) public payable judgeExpired(deadline) returns (uint256 returnAmount) {
if (fromToken != ETH_ADDRESS) {

View File

@@ -7,12 +7,12 @@
pragma solidity 0.6.9;
import {IDODOV2Proxy01} from "../intf/IDODOV2Proxy01.sol";
import {IDODOV2} from "../intf/IDODOV2.sol";
import {IDODOV2Proxy01} from "./intf/IDODOV2Proxy01.sol";
import {IDODOV2} from "./intf/IDODOV2.sol";
import {IERC20} from "../intf/IERC20.sol";
import {IWETH} from "../intf/IWETH.sol";
import {SafeMath} from "../lib/SafeMath.sol";
import {UniversalERC20} from "./UniversalERC20.sol";
import {UniversalERC20} from "./lib/UniversalERC20.sol";
import {SafeERC20} from "../lib/SafeERC20.sol";
import {DecimalMath} from "../lib/DecimalMath.sol";
@@ -266,7 +266,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external virtual override payable judgeExpired(deadline) returns (uint256 returnAmount) {
uint256 originToTokenBalance = IERC20(toToken).balanceOf(msg.sender);
@@ -309,7 +309,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) {
IDODOV2(dodoApprove).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount);
@@ -350,7 +350,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) {
uint256 originToTokenBalance = IERC20(toToken).balanceOf(msg.sender);

View File

@@ -27,7 +27,7 @@ interface IDODOV2 {
//========== DODOVendingMachine ========
function createDODOVendingMachine(
address from,
address creator,
address baseToken,
address quoteToken,
uint256 lpFeeRate,
@@ -46,7 +46,7 @@ interface IDODOV2 {
function initDODOPrivatePool(
address dppAddress,
address from,
address creator,
address baseToken,
address quoteToken,
uint256 lpFeeRate,
@@ -56,7 +56,7 @@ interface IDODOV2 {
) external;
function reset(
address assetTo,
address operator,
uint256 newLpFeeRate,
uint256 newMtFeeRate,
uint256 newI,
@@ -65,23 +65,8 @@ interface IDODOV2 {
uint256 quoteOutAmount
) external;
function resetETH(
address from,
uint256 newLpFeeRate,
uint256 newMtFeeRate,
uint256 newI,
uint256 newK,
uint256 baseOutAmount,
uint256 quoteOutAmount
) external;
//========== DODOSellHelper ============
function querySellQuoteToken(address pair, uint256 quoteInAmount) external view returns (uint256 expectedReceiveBaseAmount);
function querySellBaseToken(address pair, uint256 baseInAmount) external view returns (uint256 expectedReceiveQuoteAmount);
//========== SmartApprove =============
//========== IDODOApprove =============
function claimTokens(address token,address who,address dest,uint256 amount) external;

View File

@@ -15,7 +15,7 @@ interface IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external payable returns (uint256 returnAmount);
@@ -25,7 +25,7 @@ interface IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external returns (uint256 returnAmount);
@@ -36,7 +36,7 @@ interface IDODOV2Proxy01 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256[] memory directions,
uint8[] memory directions,
uint256 deadline
) external returns (uint256 returnAmount);
@@ -111,4 +111,6 @@ interface IDODOV2Proxy01 {
//TODO: addLiquidityToClassical
//TODO: removeLiquidityToClassical
//TODO: Compatible with classical swap
}

View File

@@ -7,9 +7,9 @@
pragma solidity 0.6.9;
import {SafeMath} from "../lib/SafeMath.sol";
import {IERC20} from "../intf/IERC20.sol";
import {SafeERC20} from "../lib/SafeERC20.sol";
import {SafeMath} from "../../lib/SafeMath.sol";
import {IERC20} from "../../intf/IERC20.sol";
import {SafeERC20} from "../../lib/SafeERC20.sol";
library UniversalERC20 {
using SafeMath for uint256;

View File

@@ -109,11 +109,6 @@ describe("DODOProxyV2.0", () => {
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(project),"createDPP");
var addrs = await ctx.DPPFactory.methods.getPrivatePool(baseToken,quoteToken).call();
var dppInfo = await ctx.DPPFactory.methods._DPP_INFO_(addrs[1]).call();
assert.equal(
dppInfo[0],
project
);
assert.equal(
await ctx.DODO.methods.balanceOf(addrs[1]).call(),
baseAmount
@@ -142,11 +137,6 @@ describe("DODOProxyV2.0", () => {
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(project, "5"),"createDPP - Wrap ETH");
var addrs = await ctx.DPPFactory.methods.getPrivatePool(ctx.WETH.options.address,quoteToken).call();
var dppInfo = await ctx.DPPFactory.methods._DPP_INFO_(addrs[1]).call();
assert.equal(
dppInfo[0],
project
);
assert.equal(
await ctx.WETH.methods.balanceOf(addrs[1]).call(),
baseAmount
@@ -172,6 +162,7 @@ describe("DODOProxyV2.0", () => {
mweiStr("1000"),
decimalStr("0"),
mweiStr("0"),
0,
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(project),"resetDPP");
var afterState = await DPP_DODO_USDT.methods.getPMMState().call();
@@ -187,7 +178,7 @@ describe("DODOProxyV2.0", () => {
assert.equal(beforeState.B0,decimalStr("5"));
assert.equal(beforeState.Q0,mweiStr("30000"));
var b_ETH = await ctx.Web3.eth.getBalance(project);
var tx = await logGas(await ctx.DODOProxy.methods.resetDODOPrivatePoolETH(
var tx = await logGas(await ctx.DODOProxy.methods.resetDODOPrivatePool(
dpp_WETH_USDT,
config.lpFeeRate,
config.mtFeeRate,
@@ -217,7 +208,7 @@ describe("DODOProxyV2.0", () => {
assert.equal(beforeState.B0,decimalStr("5"));
assert.equal(beforeState.Q0,mweiStr("30000"));
var b_ETH = await ctx.Web3.eth.getBalance(project);
var tx = await logGas(await ctx.DODOProxy.methods.resetDODOPrivatePoolETH(
var tx = await logGas(await ctx.DODOProxy.methods.resetDODOPrivatePool(
dpp_WETH_USDT,
config.lpFeeRate,
config.mtFeeRate,
@@ -265,7 +256,7 @@ describe("DODOProxyV2.0", () => {
console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD);
console.log("b_USDT:" + b_USDT + " a_USDT:" + a_USDT);
assert.equal(a_DOOD,decimalStr("500"));
assert.equal(a_USDT,"149474924");
assert.equal(a_USDT,"149474926");
});
@@ -296,7 +287,7 @@ describe("DODOProxyV2.0", () => {
console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD);
console.log("b_WETH:" + b_WETH + " a_WETH:" + a_WETH);
assert.equal(a_DOOD,decimalStr("500"));
assert.equal(a_WETH,"247088894507188480");
assert.equal(a_WETH,"247088897795331236");
});
it("swap - two hop - inETH", async () => {
@@ -326,7 +317,7 @@ describe("DODOProxyV2.0", () => {
console.log("b_DOOD:" + b_DOOD + " a_DODO:" + a_DOOD);
console.log("b_WETH:" + b_WETH + " a_WETH:" + a_WETH);
console.log("b_ETH:" + b_ETH + " a_ETH:" + a_ETH);
assert.equal(a_DOOD,"1979965731049456633086");
assert.equal(a_DOOD,"1979965734359241770226");
});
@@ -361,7 +352,7 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD,decimalStr("90000"));
assert.equal(
tx.events['OrderHistory'].returnValues['returnAmount'],
"3760778358599649282"
"3760778359898791539"
)
});

View File

@@ -111,11 +111,6 @@ describe("DODOProxyV2.0", () => {
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(project),"createDVM");
var addrs = await ctx.DVMFactory.methods.getVendingMachine(baseToken,quoteToken).call();
var dvmInfo = await ctx.DVMFactory.methods._DVM_INFO_(addrs[1]).call();
assert.equal(
dvmInfo[0],
project
);
assert.equal(
await ctx.DODO.methods.balanceOf(addrs[1]).call(),
baseAmount
@@ -145,11 +140,6 @@ describe("DODOProxyV2.0", () => {
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(project, '5'),"createDVM - Wrap ETH");
var addrs = await ctx.DVMFactory.methods.getVendingMachine(ctx.WETH.options.address,quoteToken).call();
var dvmInfo = await ctx.DVMFactory.methods._DVM_INFO_(addrs[1]).call();
assert.equal(
dvmInfo[0],
project
);
assert.equal(
await ctx.WETH.methods.balanceOf(addrs[1]).call(),
baseAmount
@@ -175,6 +165,7 @@ describe("DODOProxyV2.0", () => {
mweiStr("300"),
decimalStr("0"),
mweiStr("0"),
0,
Math.floor(new Date().getTime()/1000 + 60 * 10)
),ctx.sendParam(lp),"addLiquidity");
var a_baseReserve = await DVM_DODO_USDT.methods._BASE_RESERVE_().call();
@@ -193,7 +184,7 @@ describe("DODOProxyV2.0", () => {
assert.equal(b_baseReserve,decimalStr("5"));
assert.equal(b_quoteReserve,mweiStr("30000"));
assert.equal(b_dlp,decimalStr("0"));
await logGas(await ctx.DODOProxy.methods.addDVMLiquidityETH(
await logGas(await ctx.DODOProxy.methods.addDVMLiquidity(
dvm_WETH_USDT,
lp,
decimalStr("1"),

View File

@@ -93,17 +93,12 @@ export class ProxyContext {
]
)
var dodoSellHelper = await contracts.newContract(
contracts.DODO_SELL_HELPER
);
this.DODOProxy = await contracts.newContract(contracts.DODO_PROXY_NAME,
[
this.DVMFactory.options.address,
this.DPPFactory.options.address,
this.WETH.options.address,
this.SmartApprove.options.address,
dodoSellHelper.options.address
this.SmartApprove.options.address
]
);