diff --git a/contracts/Factory/CrowdPoolingFactory.sol b/contracts/Factory/CrowdPoolingFactory.sol index 5010bf9..566b00a 100644 --- a/contracts/Factory/CrowdPoolingFactory.sol +++ b/contracts/Factory/CrowdPoolingFactory.sol @@ -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"); _; } diff --git a/contracts/SmartRoute/DODOV2Proxy01.sol b/contracts/SmartRoute/DODOV2Proxy01.sol index 8e00524..cf784cb 100644 --- a/contracts/SmartRoute/DODOV2Proxy01.sol +++ b/contracts/SmartRoute/DODOV2Proxy01.sol @@ -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"); diff --git a/contracts/SmartRoute/intf/IDODOV2Proxy01.sol b/contracts/SmartRoute/intf/IDODOV2Proxy01.sol index 51b93de..3228c09 100644 --- a/contracts/SmartRoute/intf/IDODOV2Proxy01.sol +++ b/contracts/SmartRoute/intf/IDODOV2Proxy01.sol @@ -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, diff --git a/contracts/lib/DODOMath.sol b/contracts/lib/DODOMath.sol index 641b659..33758cd 100644 --- a/contracts/lib/DODOMath.sol +++ b/contracts/lib/DODOMath.sol @@ -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 diff --git a/test/Proxy/proxy.classical.test.ts b/test/Proxy/proxy.classical.test.ts index caf6cf2..074ea92 100644 --- a/test/Proxy/proxy.classical.test.ts +++ b/test/Proxy/proxy.classical.test.ts @@ -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"), diff --git a/test/Proxy/proxy.cp.test.ts b/test/Proxy/proxy.cp.test.ts index 9322903..e7685e6 100644 --- a/test/Proxy/proxy.cp.test.ts +++ b/test/Proxy/proxy.cp.test.ts @@ -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, diff --git a/test/Proxy/proxy.dpp.test.ts b/test/Proxy/proxy.dpp.test.ts index 776b391..e456563 100644 --- a/test/Proxy/proxy.dpp.test.ts +++ b/test/Proxy/proxy.dpp.test.ts @@ -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"), diff --git a/test/Proxy/proxy.dvm.test.ts b/test/Proxy/proxy.dvm.test.ts index fa6aec1..f398c6b 100644 --- a/test/Proxy/proxy.dvm.test.ts +++ b/test/Proxy/proxy.dvm.test.ts @@ -45,7 +45,6 @@ async function init(ctx: ProxyContext): Promise { async function initCreateDVM(ctx: ProxyContext, token0: string, token1: string, token0Amount: string, token1Amount: string, ethValue: string, i: string): Promise { 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"), diff --git a/test/Proxy/proxy.mix.test.ts b/test/Proxy/proxy.mix.test.ts index df6e1a7..513b660 100644 --- a/test/Proxy/proxy.mix.test.ts +++ b/test/Proxy/proxy.mix.test.ts @@ -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 { 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,