From 9d45b310bbd4fdd55e76218a9243e5d60582370d Mon Sep 17 00:00:00 2001 From: owen05 Date: Thu, 7 Jan 2021 14:21:57 +0800 Subject: [PATCH] update cpfactory --- contracts/Factory/CrowdPoolingFactory.sol | 54 +++++++++++++++++------ contracts/SmartRoute/DODOV2Proxy01.sol | 6 +-- test/Proxy/proxy.dpp.test.ts | 2 +- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/contracts/Factory/CrowdPoolingFactory.sol b/contracts/Factory/CrowdPoolingFactory.sol index aa6979e..5010bf9 100644 --- a/contracts/Factory/CrowdPoolingFactory.sol +++ b/contracts/Factory/CrowdPoolingFactory.sol @@ -26,8 +26,15 @@ contract CrowdPoolingFactory is InitializableOwnable { address public immutable _DEFAULT_PERMISSION_MANAGER_; address public _CP_TEMPLATE_; - uint256 public _X_ = 50; //default - uint256 public _Y_ = 0; //default + // ============ Settings ============= + uint256 public _CAP_RATIO_ = 50; + uint256 public _FREEZE_DURATION_ = 30 days; + uint256 public _CALM_DURATION_ = 0; + uint256 public _VEST_DURATION_ = 0; + uint256 public _K_ = 0; + uint256 public _CLIFF_RATE_ = 10**18; + + // ============ Registry ============ // base -> quote -> CP address list @@ -42,14 +49,14 @@ contract CrowdPoolingFactory is InitializableOwnable { uint256[] memory timeLine, uint256[] memory valueList) { - require(timeLine[2] == 0,"CP_FACTORY : PHASE_CALM_DURATION_ZERO_ONLY"); - require(timeLine[4] == 0,"CP_FACTORY : VEST_DURATION_ZERO_ONLY"); - require(valueList[1] == 0,"CP_FACTORY : K_ZERO_ONLY"); - require(valueList[3] == DecimalMath.ONE,"CP_FACTORY : CLIFF_RATE_DECIMAL_MATH_ONE_ONLY"); + require(timeLine[2] == _CALM_DURATION_, "CP_FACTORY : PHASE_CALM_DURATION_INVALID"); + require(timeLine[4] == _VEST_DURATION_, "CP_FACTORY : VEST_DURATION_INVALID"); + require(valueList[1] == _K_, "CP_FACTORY : K_INVALID"); + 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(_X_),"CP_FACTORY : QUOTE_CAPE_INVALID"); - require(timeLine[3]>= _Y_,"CP_FACTORY : FREEZE_DURATION_INVALID"); + require(valueList[0].mul(100) <= baseTokenBalance.mul(valueList[2]).div(10**18).mul(_CAP_RATIO_),"CP_FACTORY : QUOTE_CAPE_INVALID"); + require(timeLine[3]>= _FREEZE_DURATION_, "CP_FACTORY : FREEZE_DURATION_INVALID"); _; } @@ -78,8 +85,6 @@ contract CrowdPoolingFactory is InitializableOwnable { _DEFAULT_MAINTAINER_ = defaultMaintainer; _DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel; _DEFAULT_PERMISSION_MANAGER_ = defaultPermissionManager; - _X_ = 50; - _Y_ = 30 days; } function createCrowdPooling() external returns (address newCrowdPooling) { @@ -148,9 +153,30 @@ contract CrowdPoolingFactory is InitializableOwnable { _CP_TEMPLATE_ = _newCPTemplate; } - function setXY(uint256 x,uint256 y) public onlyOwner { - require(x>0&&x<=100,"CP_FACTORY : INVALID_X"); - _X_=x; - _Y_=y; + function setCapRatio(uint256 _newCapRatio) public onlyOwner { + require(_newCapRatio > 0 && _newCapRatio <= 100, "CP_FACTORY : INVALID"); + _CAP_RATIO_ = _newCapRatio; + } + + function setFreezeDuration(uint256 _newFreeDuration) public onlyOwner { + _FREEZE_DURATION_ = _newFreeDuration; + } + + function setCalmDuration(uint256 _newCalmDuration) public onlyOwner { + _CALM_DURATION_ = _newCalmDuration; + } + + function setVestDuration(uint256 _newVestDuration) public onlyOwner { + _VEST_DURATION_ = _newVestDuration; + } + + function setK(uint256 _newK) public onlyOwner { + require(_newK <= 10**18, "CP_FACTORY : INVALID"); + _K_ = _newK; + } + + function setCliffRate(uint256 _newCliffRate) public onlyOwner { + require(_newCliffRate <= 10**18, "CP_FACTORY : INVALID"); + _CLIFF_RATE_ = _newCliffRate; } } diff --git a/contracts/SmartRoute/DODOV2Proxy01.sol b/contracts/SmartRoute/DODOV2Proxy01.sol index 88a481e..8e00524 100644 --- a/contracts/SmartRoute/DODOV2Proxy01.sol +++ b/contracts/SmartRoute/DODOV2Proxy01.sol @@ -642,7 +642,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable function addLiquidityToV1( - address to, + address assetTo, address pair, uint256 baseAmount, uint256 quoteAmount, @@ -660,11 +660,11 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable if(baseAmount > 0) { IERC20(_baseToken).universalApproveMax(pair, baseAmount); - baseShares = IDODOV1(pair).depositBaseTo(to, baseAmount); + baseShares = IDODOV1(pair).depositBaseTo(assetTo, baseAmount); } if(quoteAmount > 0) { IERC20(_quoteToken).universalApproveMax(pair, quoteAmount); - quoteShares = IDODOV1(pair).depositQuoteTo(to, quoteAmount); + quoteShares = IDODOV1(pair).depositQuoteTo(assetTo, quoteAmount); } require(baseShares >= baseMinShares && quoteShares >= quoteMinShares,"DODOV2Proxy01: Return DLP is not enough"); diff --git a/test/Proxy/proxy.dpp.test.ts b/test/Proxy/proxy.dpp.test.ts index 4599efc..776b391 100644 --- a/test/Proxy/proxy.dpp.test.ts +++ b/test/Proxy/proxy.dpp.test.ts @@ -155,7 +155,7 @@ describe("DODOProxyV2.0", () => { // ); // }); - it.only("resetDPP", async () => { + it("resetDPP", async () => { var beforeState = await DPP_DODO_USDT.methods.getPMMState().call(); assert.equal(beforeState.K, config.k); assert.equal(beforeState.B, decimalStr("100000"));