This commit is contained in:
owen05
2021-01-07 21:58:24 +08:00
parent b2c8668a12
commit 267ad24edc
9 changed files with 18 additions and 69 deletions

View File

@@ -55,7 +55,7 @@ contract CrowdPoolingFactory is InitializableOwnable {
require(valueList[3] == _CLIFF_RATE_, "CP_FACTORY : CLIFF_RATE_INVALID");
uint256 baseTokenBalance = IERC20(baseToken).balanceOf(cpAddress);
require(valueList[0].mul(100) <= baseTokenBalance.mul(valueList[2]).div(10**18).mul(_CAP_RATIO_),"CP_FACTORY : QUOTE_CAPE_INVALID");
require(valueList[0].mul(100) <= baseTokenBalance.mul(valueList[2]).div(10**18).mul(_CAP_RATIO_),"CP_FACTORY : QUOTE_CAP_INVALID");
require(timeLine[3]>= _FREEZE_DURATION_, "CP_FACTORY : FREEZE_DURATION_INVALID");
_;
}

View File

@@ -86,7 +86,6 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
// ============ DVM Functions (create & add liquidity) ============
function createDODOVendingMachine(
address assetTo,
address baseToken,
address quoteToken,
uint256 baseInAmount,
@@ -134,12 +133,11 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
);
}
(shares, , ) = IDODOV2(newVendingMachine).buyShares(assetTo);
(shares, , ) = IDODOV2(newVendingMachine).buyShares(msg.sender);
}
function addDVMLiquidity(
address dvmAddress,
address assetTo,
uint256 baseInAmount,
uint256 quoteInAmount,
uint256 baseMinAmount,
@@ -172,7 +170,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
_deposit(msg.sender, _dvm, IDODOV2(_dvm)._BASE_TOKEN_(), baseAdjustedInAmount, flag == 1);
_deposit(msg.sender, _dvm, IDODOV2(_dvm)._QUOTE_TOKEN_(), quoteAdjustedInAmount, flag == 2);
(shares, , ) = IDODOV2(_dvm).buyShares(assetTo);
(shares, , ) = IDODOV2(_dvm).buyShares(msg.sender);
// refund dust eth
if (flag == 1 && msg.value > baseAdjustedInAmount) msg.sender.transfer(msg.value - baseAdjustedInAmount);
if (flag == 2 && msg.value > quoteAdjustedInAmount) msg.sender.transfer(msg.value - quoteAdjustedInAmount);
@@ -293,7 +291,6 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
// ============ Swap ============
function dodoSwapV2ETHToToken(
address payable assetTo,
address toToken,
uint256 minReturnAmount,
address[] memory dodoPairs,
@@ -316,9 +313,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
for (uint256 i = 0; i < dodoPairs.length; i++) {
if (i == dodoPairs.length - 1) {
if (directions & 1 == 0) {
IDODOV2(dodoPairs[i]).sellBase(assetTo);
IDODOV2(dodoPairs[i]).sellBase(msg.sender);
} else {
IDODOV2(dodoPairs[i]).sellQuote(assetTo);
IDODOV2(dodoPairs[i]).sellQuote(msg.sender);
}
} else {
if (directions & 1 == 0) {
@@ -335,14 +332,13 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
emit OrderHistory(
_ETH_ADDRESS_,
toToken,
assetTo,
msg.sender,
msg.value,
returnAmount
);
}
function dodoSwapV2TokenToETH(
address payable assetTo,
address fromToken,
uint256 fromTokenAmount,
uint256 minReturnAmount,
@@ -379,18 +375,17 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
returnAmount = IWETH(_WETH_).balanceOf(address(this));
require(returnAmount >= minReturnAmount, "DODOV2Proxy01: Return amount is not enough");
IWETH(_WETH_).withdraw(returnAmount);
assetTo.transfer(returnAmount);
msg.sender.transfer(returnAmount);
emit OrderHistory(
fromToken,
_ETH_ADDRESS_,
assetTo,
msg.sender,
fromTokenAmount,
returnAmount
);
}
function dodoSwapV2TokenToToken(
address payable assetTo,
address fromToken,
address toToken,
uint256 fromTokenAmount,
@@ -413,9 +408,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
for (uint256 i = 0; i < dodoPairs.length; i++) {
if (i == dodoPairs.length - 1) {
if (directions & 1 == 0) {
IDODOV2(dodoPairs[i]).sellBase(assetTo);
IDODOV2(dodoPairs[i]).sellBase(msg.sender);
} else {
IDODOV2(dodoPairs[i]).sellQuote(assetTo);
IDODOV2(dodoPairs[i]).sellQuote(msg.sender);
}
} else {
if (directions& 1 == 0) {
@@ -431,7 +426,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
emit OrderHistory(
fromToken,
toToken,
assetTo,
msg.sender,
fromTokenAmount,
returnAmount
);
@@ -603,7 +598,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
uint256[] memory timeLine,
uint256[] memory valueList,
uint256 deadLine
) external override payable judgeExpired(deadLine) returns (address payable newCrowdPooling) {
) external override payable preventReentrant judgeExpired(deadLine) returns (address payable newCrowdPooling) {
address _baseToken = baseToken;
address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken;
@@ -630,19 +625,17 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
}
function bid(
address assetTo,
address cpAddress,
uint256 quoteAmount,
uint8 flag, // 0 - ERC20, 1 - quoteInETH
uint256 deadLine
) external override payable judgeExpired(deadLine) {
) external override payable preventReentrant judgeExpired(deadLine) {
_deposit(msg.sender, cpAddress, IDODOV2(cpAddress)._QUOTE_TOKEN_(), quoteAmount, flag == 1);
IDODOV2(cpAddress).bid(assetTo);
IDODOV2(cpAddress).bid(msg.sender);
}
function addLiquidityToV1(
address assetTo,
address pair,
uint256 baseAmount,
uint256 quoteAmount,
@@ -650,7 +643,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
uint256 quoteMinShares,
uint8 flag, // 0 erc20 In 1 baseInETH 2 quoteIn ETH
uint256 deadLine
) external override payable judgeExpired(deadLine) returns(uint256 baseShares, uint256 quoteShares) {
) external override payable preventReentrant judgeExpired(deadLine) returns(uint256 baseShares, uint256 quoteShares) {
address _baseToken = IDODOV1(pair)._BASE_TOKEN_();
address _quoteToken = IDODOV1(pair)._QUOTE_TOKEN_();
@@ -660,11 +653,11 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
if(baseAmount > 0) {
IERC20(_baseToken).universalApproveMax(pair, baseAmount);
baseShares = IDODOV1(pair).depositBaseTo(assetTo, baseAmount);
baseShares = IDODOV1(pair).depositBaseTo(msg.sender, baseAmount);
}
if(quoteAmount > 0) {
IERC20(_quoteToken).universalApproveMax(pair, quoteAmount);
quoteShares = IDODOV1(pair).depositQuoteTo(assetTo, quoteAmount);
quoteShares = IDODOV1(pair).depositQuoteTo(msg.sender, quoteAmount);
}
require(baseShares >= baseMinShares && quoteShares >= quoteMinShares,"DODOV2Proxy01: Return DLP is not enough");

View File

@@ -12,7 +12,6 @@ import {IDODOV1Proxy01} from "./IDODOV1Proxy01.sol";
interface IDODOV2Proxy01 is IDODOV1Proxy01 {
function dodoSwapV2ETHToToken(
address payable assetTo,
address toToken,
uint256 minReturnAmount,
address[] memory dodoPairs,
@@ -21,7 +20,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
) external payable returns (uint256 returnAmount);
function dodoSwapV2TokenToETH(
address payable assetTo,
address fromToken,
uint256 fromTokenAmount,
uint256 minReturnAmount,
@@ -31,7 +29,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
) external returns (uint256 returnAmount);
function dodoSwapV2TokenToToken(
address payable assetTo,
address fromToken,
address toToken,
uint256 fromTokenAmount,
@@ -42,7 +39,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
) external returns (uint256 returnAmount);
function createDODOVendingMachine(
address assetTo,
address baseToken,
address quoteToken,
uint256 baseInAmount,
@@ -55,7 +51,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
function addDVMLiquidity(
address dvmAddress,
address assetTo,
uint256 baseInAmount,
uint256 quoteInAmount,
uint256 baseMinAmount,
@@ -102,7 +97,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
) external payable returns (address payable newCrowdPooling);
function bid(
address assetTo,
address cpAddress,
uint256 quoteAmount,
uint8 flag, // 0 - ERC20, 1 - quoteInETH
@@ -110,7 +104,6 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
) external payable;
function addLiquidityToV1(
address to,
address pair,
uint256 baseAmount,
uint256 quoteAmount,

View File

@@ -82,7 +82,7 @@ library DODOMath {
}else if(ki * delta / ki == delta) {
sqrt = (ki * delta).div(V1).add(DecimalMath.ONE2).sqrt();
}else {
sqrt = (4 * k).mul(i).div(V1).mul(delta).add(DecimalMath.ONE2).sqrt();
sqrt = ki.div(V1).mul(delta).add(DecimalMath.ONE2).sqrt();
}
uint256 premium = DecimalMath.divFloor(sqrt.sub(DecimalMath.ONE), k * 2).add(
DecimalMath.ONE

View File

@@ -175,7 +175,6 @@ describe("AddLiquidity", () => {
await ctxV1.DODO.methods.approve(ctxV2.DODOApprove.options.address, MAX_UINT256).send(ctxV2.sendParam(trader));
await ctxV1.USDT.methods.approve(ctxV2.DODOApprove.options.address, MAX_UINT256).send(ctxV2.sendParam(trader));
await logGas(await ctxV2.DODOProxyV2.methods.addLiquidityToV1(
trader,
ctxV1.DODO_USDT.options.address,
decimalStr("100"),
mweiStr("100"),
@@ -205,7 +204,6 @@ describe("AddLiquidity", () => {
console.log("weth_lp:" + weth_lp + " usdc_lp:" + usdc_lp);
await ctxV1.USDC.methods.approve(ctxV2.DODOApprove.options.address, MAX_UINT256).send(ctxV2.sendParam(trader));
await logGas(await ctxV2.DODOProxyV2.methods.addLiquidityToV1(
trader,
ctxV1.WETH_USDC.options.address,
decimalStr("1"),
mweiStr("100"),

View File

@@ -140,7 +140,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(b_lp_2, decimalStr("0"));
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer1,
cp_DODO_USDT,
mweiStr("50"),
0,
@@ -148,7 +147,6 @@ describe("DODOProxyV2.0", () => {
), ctx.sendParam(buyer1), "bid");
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer2,
cp_DODO_USDT,
mweiStr("80"),
0,
@@ -156,7 +154,6 @@ describe("DODOProxyV2.0", () => {
), ctx.sendParam(buyer2), "bid");
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer2,
cp_DODO_USDT,
mweiStr("80"),
0,
@@ -164,7 +161,6 @@ describe("DODOProxyV2.0", () => {
), ctx.sendParam(buyer2), "bid");
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer2,
cp_DODO_USDT,
mweiStr("80"),
0,
@@ -193,7 +189,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(b_lp_2, decimalStr("0"));
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer1,
cp_DODO_WETH,
decimalStr("2"),
1,
@@ -201,7 +196,6 @@ describe("DODOProxyV2.0", () => {
), ctx.sendParam(buyer1, "2"), "bid");
await logGas(await ctx.DODOProxyV2.methods.bid(
buyer2,
cp_DODO_WETH,
decimalStr("1"),
1,

View File

@@ -236,7 +236,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 0
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.USDT.options.address,
decimalStr("500"),
@@ -252,7 +251,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_USDT, "99749900");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.USDT.options.address,
decimalStr("500"),
@@ -273,7 +271,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -289,7 +286,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_WETH, "165350643050738035");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -310,7 +306,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken(
trader,
ctx.DODO.options.address,
1,
dodoPairs,
@@ -325,7 +320,6 @@ describe("DODOProxyV2.0", () => {
// console.log("b_ETH:" + b_ETH + " a_ETH:" + a_ETH);
assert.equal(a_DOOD, "2908497423869401229986");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken(
trader,
ctx.DODO.options.address,
1,
dodoPairs,
@@ -346,7 +340,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH(
trader,
ctx.DODO.options.address,
decimalStr("500"),
1,
@@ -366,7 +359,6 @@ describe("DODOProxyV2.0", () => {
"165350643050738035"
)
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH(
trader,
ctx.DODO.options.address,
decimalStr("500"),
1,
@@ -388,7 +380,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 4
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -404,7 +395,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_WETH, "165004688801375425");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),

View File

@@ -45,7 +45,6 @@ async function init(ctx: ProxyContext): Promise<void> {
async function initCreateDVM(ctx: ProxyContext, token0: string, token1: string, token0Amount: string, token1Amount: string, ethValue: string, i: string): Promise<string> {
let PROXY = ctx.DODOProxyV2;
await PROXY.methods.createDODOVendingMachine(
project,
token0,
token1,
token0Amount,
@@ -109,7 +108,6 @@ describe("DODOProxyV2.0", () => {
var baseAmount = decimalStr("10000");
var quoteAmount = mweiStr("10000");
await logGas(await ctx.DODOProxyV2.methods.createDODOVendingMachine(
project,
baseToken,
quoteToken,
baseAmount,
@@ -137,7 +135,6 @@ describe("DODOProxyV2.0", () => {
// var baseAmount = decimalStr("5");
// var quoteAmount = mweiStr("10000");
// await logGas(await ctx.DODOProxyV2.methods.createDODOVendingMachine(
// project,
// baseToken,
// quoteToken,
// baseAmount,
@@ -168,7 +165,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(b_dlp, decimalStr("0"));
await logGas(await ctx.DODOProxyV2.methods.addDVMLiquidity(
dvm_DODO_USDT,
lp,
decimalStr("1000"),
mweiStr("300"),
decimalStr("0"),
@@ -194,7 +190,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(b_dlp, decimalStr("0"));
await logGas(await ctx.DODOProxyV2.methods.addDVMLiquidity(
dvm_WETH_USDT,
lp,
decimalStr("1"),
mweiStr("6000"),
decimalStr("0"),
@@ -284,7 +279,6 @@ describe("DODOProxyV2.0", () => {
var directions = 0
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.USDT.options.address,
decimalStr("500"),
@@ -300,7 +294,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_USDT, "126151370");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.USDT.options.address,
decimalStr("500"),
@@ -322,7 +315,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -338,7 +330,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_WETH, "163816613646287588");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -359,7 +350,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken(
trader,
ctx.DODO.options.address,
1,
dodoPairs,
@@ -374,7 +364,6 @@ describe("DODOProxyV2.0", () => {
// console.log("b_ETH:" + b_ETH + " a_ETH:" + a_ETH);
assert.equal(a_DOOD, "2814340111190341070680");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken(
trader,
ctx.DODO.options.address,
1,
dodoPairs,
@@ -392,7 +381,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH(
trader,
ctx.DODO.options.address,
decimalStr("1000"),
1,
@@ -407,7 +395,6 @@ describe("DODOProxyV2.0", () => {
"323865907568573497"
)
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH(
trader,
ctx.DODO.options.address,
decimalStr("1000"),
1,
@@ -426,7 +413,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 4
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -440,7 +426,6 @@ describe("DODOProxyV2.0", () => {
assert.equal(a_DOOD, decimalStr("500"));
assert.equal(a_WETH, "163633965833613187");
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),

View File

@@ -60,7 +60,6 @@ async function initCreateDPP(ctx: ProxyContext, token0: string, token1: string,
async function initCreateDVM(ctx: ProxyContext, token0: string, token1: string, token0Amount: string, token1Amount: string, ethValue: string, i: string): Promise<string> {
let PROXY = ctx.DODOProxyV2;
await PROXY.methods.createDODOVendingMachine(
project,
token0,
token1,
token0Amount,
@@ -114,7 +113,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToToken(
trader,
ctx.DODO.options.address,
ctx.WETH.options.address,
decimalStr("500"),
@@ -141,7 +139,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2ETHToToken(
trader,
ctx.DODO.options.address,
1,
dodoPairs,
@@ -169,7 +166,6 @@ describe("DODOProxyV2.0", () => {
]
var directions = 2
var tx = await logGas(await ctx.DODOProxyV2.methods.dodoSwapV2TokenToETH(
trader,
ctx.DODO.options.address,
decimalStr("10000"),
1,