diff --git a/config/bsc-config.js b/config/bsc-config.js index 54c9b1f..d68bb0c 100644 --- a/config/bsc-config.js +++ b/config/bsc-config.js @@ -47,7 +47,7 @@ module.exports = { //Proxy DODOV2Proxy: "", DSPProxy: "0x2442A8B5cdf1E659F3F949A7E454Caa554D4E65a", - UpCpProxy: "0x01d3E7271c278Aa3AA56EeBa6a109b2C200679fA", + CpProxy: "0xA867241cDC8d3b0C07C85cC06F25a0cD3b5474d8", //vDODO DODOCirculationHelper: "", diff --git a/config/eth-config.js b/config/eth-config.js index 41cf6cb..77b7da4 100644 --- a/config/eth-config.js +++ b/config/eth-config.js @@ -46,8 +46,7 @@ module.exports = { //Proxy DODOV2Proxy: "", DSPProxy: "0x4599ed18F34cFE06820E3684bF0aACB8D75c644d", - UpCpProxy: "0x26D898A37782B04d6c460E11aEeCD8f3d99e91B8", - CpProxy: "0x471e1A083D76C4FC9e088FD259F64Eff0A37DAbD", + CpProxy: "0x048B8926bb0eE9c52e05D61fDffbCCffbeE06Fc2", //vDODO DODOCirculationHelper: "0x357c5e9cfa8b834edcef7c7aabd8f9db09119d11", diff --git a/config/heco-config.js b/config/heco-config.js index 4cfc942..d079183 100644 --- a/config/heco-config.js +++ b/config/heco-config.js @@ -46,7 +46,7 @@ module.exports = { //Proxy DODOV2Proxy: "0xAc7cC7d2374492De2D1ce21e2FEcA26EB0d113e7", DSPProxy: "0x9951CdEc21F42ab69D02daAAFEF4C3fc810B36FF", - UpCpProxy: "0x4E3d4cD40d3a7eaC8C0B064D37d0b5e35a186bC7", + CpProxy: "0x8930101c6cFbe0f3cb31E7526a16E72255388E97", //vDODO DODOCirculationHelper: "", diff --git a/config/kovan-config.js b/config/kovan-config.js index da9f933..46d3b86 100644 --- a/config/kovan-config.js +++ b/config/kovan-config.js @@ -46,8 +46,7 @@ module.exports = { //Proxy DODOV2Proxy: "0x85CAA68ae47f047aa01C48BCaA711CA70a950fFb", DSPProxy: "0xC5fF477667E29df8887D258CaE593e04A1961A69", - UpCpProxy: "0x6F9C270A13fB267216216C53e48de9e3B840aBB6", - CpProxy: "0x648586084AC06cFC8D2A91a55EAc0ca49473eF27", + CpProxy: "0x0e3DAAa1eCfBF2fA4cb990dC34D760c38279C5a8", //vDODO DODOCirculationHelper: "", diff --git a/contracts/SmartRoute/proxies/DODOCpProxy.sol b/contracts/SmartRoute/proxies/DODOCpProxy.sol index 7711893..3a7811b 100644 --- a/contracts/SmartRoute/proxies/DODOCpProxy.sol +++ b/contracts/SmartRoute/proxies/DODOCpProxy.sol @@ -18,7 +18,7 @@ import {ReentrancyGuard} from "../../lib/ReentrancyGuard.sol"; * @title DODOCpProxy * @author DODO Breeder * - * @notice CrowdPooling Proxy + * @notice CrowdPooling && UpCrowdPooling Proxy */ contract DODOCpProxy is ReentrancyGuard { using SafeMath for uint256; @@ -29,6 +29,7 @@ contract DODOCpProxy is ReentrancyGuard { address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public immutable _WETH_; address public immutable _DODO_APPROVE_PROXY_; + address public immutable _UPCP_FACTORY_; address public immutable _CP_FACTORY_; // ============ Modifiers ============ @@ -45,13 +46,53 @@ contract DODOCpProxy is ReentrancyGuard { constructor( address payable weth, address cpFactory, + address upCpFactory, address dodoApproveProxy ) public { _WETH_ = weth; _CP_FACTORY_ = cpFactory; + _UPCP_FACTORY_ = upCpFactory; _DODO_APPROVE_PROXY_ = dodoApproveProxy; } + //============ UpCrowdPooling Functions (create) ============ + + function createUpCrowdPooling( + address baseToken, + address quoteToken, + uint256 baseInAmount, + uint256[] memory timeLine, + uint256[] memory valueList, + bool isOpenTWAP, + uint256 deadLine + ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newUpCrowdPooling) { + address _baseToken = baseToken; + address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken; + + newUpCrowdPooling = IDODOV2(_UPCP_FACTORY_).createCrowdPooling(); + + _deposit( + msg.sender, + newUpCrowdPooling, + _baseToken, + baseInAmount, + false + ); + + (bool success, ) = newUpCrowdPooling.call{value: msg.value}(""); + require(success, "DODOCpProxy: Transfer failed"); + + IDODOV2(_UPCP_FACTORY_).initCrowdPooling( + newUpCrowdPooling, + msg.sender, + _baseToken, + _quoteToken, + timeLine, + valueList, + isOpenTWAP + ); + } + //============ CrowdPooling Functions (create) ============ function createCrowdPooling( diff --git a/contracts/SmartRoute/proxies/DODOUpCpProxy.sol b/contracts/SmartRoute/proxies/DODOUpCpProxy.sol deleted file mode 100644 index 884244b..0000000 --- a/contracts/SmartRoute/proxies/DODOUpCpProxy.sol +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright 2021 DODO ZOO. - SPDX-License-Identifier: Apache-2.0 -*/ - -pragma solidity 0.6.9; - -import {IDODOApproveProxy} from "../DODOApproveProxy.sol"; -import {IDODOV2} from "./../intf/IDODOV2.sol"; -import {IERC20} from "../../intf/IERC20.sol"; -import {SafeERC20} from "../../lib/SafeERC20.sol"; -import {IWETH} from "../../intf/IWETH.sol"; -import {SafeMath} from "../../lib/SafeMath.sol"; -import {SafeERC20} from "../../lib/SafeERC20.sol"; -import {ReentrancyGuard} from "../../lib/ReentrancyGuard.sol"; - -/** - * @title DODOUpCpProxy - * @author DODO Breeder - * - * @notice UpCrowdPooling Proxy - */ -contract DODOUpCpProxy is ReentrancyGuard { - using SafeMath for uint256; - using SafeERC20 for IERC20; - - // ============ Storage ============ - - address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; - address public immutable _WETH_; - address public immutable _DODO_APPROVE_PROXY_; - address public immutable _UPCP_FACTORY_; - - // ============ Modifiers ============ - - modifier judgeExpired(uint256 deadLine) { - require(deadLine >= block.timestamp, "DODOUpCpProxy: EXPIRED"); - _; - } - - fallback() external payable {} - - receive() external payable {} - - constructor( - address payable weth, - address upCpFactory, - address dodoApproveProxy - ) public { - _WETH_ = weth; - _UPCP_FACTORY_ = upCpFactory; - _DODO_APPROVE_PROXY_ = dodoApproveProxy; - } - - //============ UpCrowdPooling Functions (create) ============ - - function createUpCrowdPooling( - address baseToken, - address quoteToken, - uint256 baseInAmount, - uint256[] memory timeLine, - uint256[] memory valueList, - bool isOpenTWAP, - uint256 deadLine - ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newUpCrowdPooling) { - address _baseToken = baseToken; - address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken; - - newUpCrowdPooling = IDODOV2(_UPCP_FACTORY_).createCrowdPooling(); - - _deposit( - msg.sender, - newUpCrowdPooling, - _baseToken, - baseInAmount, - false - ); - - newUpCrowdPooling.transfer(msg.value); - - IDODOV2(_UPCP_FACTORY_).initCrowdPooling( - newUpCrowdPooling, - msg.sender, - _baseToken, - _quoteToken, - timeLine, - valueList, - isOpenTWAP - ); - } - - //====================== internal ======================= - - function _deposit( - address from, - address to, - address token, - uint256 amount, - bool isETH - ) internal { - if (isETH) { - if (amount > 0) { - IWETH(_WETH_).deposit{value: amount}(); - if (to != address(this)) SafeERC20.safeTransfer(IERC20(_WETH_), to, amount); - } - } else { - IDODOApproveProxy(_DODO_APPROVE_PROXY_).claimTokens(token, from, to, amount); - } - } -} \ No newline at end of file diff --git a/deploy-detail-periphery.txt b/deploy-detail-periphery.txt index 71105f2..a76dc45 100644 --- a/deploy-detail-periphery.txt +++ b/deploy-detail-periphery.txt @@ -445,3 +445,33 @@ network type: live Deploy time: 2021/4/29 上午12:47:09 Deploy type: DODOCpProxy CpProxy address: 0x471e1A083D76C4FC9e088FD259F64Eff0A37DAbD +==================================================== +network type: kovan +Deploy time: 2021/4/29 上午9:02:50 +Deploy type: DODOUpCpProxy +UpCpProxy address: 0x1fcE72d3954BDBCdfEe99cd2649370E26180dD29 +==================================================== +network type: live +Deploy time: 2021/4/29 上午9:15:13 +Deploy type: DODOUpCpProxy +UpCpProxy address: 0x48D77f44416fD0b08f1Eca90Bc437D0a3e4e550d +==================================================== +network type: kovan +Deploy time: 2021/4/29 上午10:16:54 +Deploy type: DODOCpProxy +CpProxy address: 0x0e3DAAa1eCfBF2fA4cb990dC34D760c38279C5a8 +==================================================== +network type: bsclive +Deploy time: 2021/4/29 上午10:23:34 +Deploy type: DODOCpProxy +CpProxy address: 0xA867241cDC8d3b0C07C85cC06F25a0cD3b5474d8 +==================================================== +network type: live +Deploy time: 2021/4/29 上午10:28:14 +Deploy type: DODOCpProxy +CpProxy address: 0x048B8926bb0eE9c52e05D61fDffbCCffbeE06Fc2 +==================================================== +network type: heco +Deploy time: 2021/4/29 上午10:33:01 +Deploy type: DODOCpProxy +CpProxy address: 0x8930101c6cFbe0f3cb31E7526a16E72255388E97 diff --git a/migrations/4_deploy_periphery.js b/migrations/4_deploy_periphery.js index c6fa962..4675a84 100644 --- a/migrations/4_deploy_periphery.js +++ b/migrations/4_deploy_periphery.js @@ -18,7 +18,6 @@ const CpFactory = artifacts.require("CrowdPoolingFactory"); const MultiCall = artifacts.require("Multicall"); const LockedTokenVault = artifacts.require("LockedTokenVault"); const DODORouteProxy = artifacts.require("DODORouteProxy"); -const DODOUpCpProxy = artifacts.require("DODOUpCpProxy"); const DODOCpProxy = artifacts.require("DODOCpProxy"); const DspTemplate = artifacts.require("DSP"); @@ -156,20 +155,6 @@ module.exports = async (deployer, network, accounts) => { logger.log("DODODspProxy Address: ", DODODspProxy.address); } - if (deploySwitch.UpCpProxy) { - logger.log("===================================================="); - logger.log("network type: " + network); - logger.log("Deploy time: " + new Date().toLocaleString()); - logger.log("Deploy type: DODOUpCpProxy"); - await deployer.deploy( - DODOUpCpProxy, - WETHAddress, - UpCpFactoryAddress, - DODOApproveProxyAddress - ); - logger.log("UpCpProxy address: ", DODOUpCpProxy.address); - } - if (deploySwitch.CpProxy) { logger.log("===================================================="); logger.log("network type: " + network); @@ -179,6 +164,7 @@ module.exports = async (deployer, network, accounts) => { DODOCpProxy, WETHAddress, CpFactoryAddress, + UpCpFactoryAddress, DODOApproveProxyAddress ); logger.log("CpProxy address: ", DODOCpProxy.address); diff --git a/truffle-config.js b/truffle-config.js index 9acb3a1..2d914f8 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -58,8 +58,7 @@ module.exports = { DSP: false, LockedVault: false, MULTIHOP: false, - UpCpProxy: false, - CpProxy: true + CpProxy: false }, networks: { @@ -94,7 +93,7 @@ module.exports = { return new HDWalletProvider(privKey, "https://mainnet.infura.io/v3/" + infuraId); }, gas: 6000000, - gasPrice: 120000000000, + gasPrice: 80000000000, network_id: 1, skipDryRun: true },