From 11aa918fc9ba4a1448564beba3e4f2b77c93fb95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E6=B6=9B=E6=B6=9B?= <15700059289@163.com> Date: Mon, 21 Dec 2020 20:38:25 +0800 Subject: [PATCH 1/3] add value check --- contracts/Factory/CrowdPoolingFactory.sol | 37 +++++++++++++++++++++-- package.json | 2 +- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/contracts/Factory/CrowdPoolingFactory.sol b/contracts/Factory/CrowdPoolingFactory.sol index 37b5dba..60b74af 100644 --- a/contracts/Factory/CrowdPoolingFactory.sol +++ b/contracts/Factory/CrowdPoolingFactory.sol @@ -11,8 +11,11 @@ pragma experimental ABIEncoderV2; import {Ownable} from "../lib/Ownable.sol"; import {ICloneFactory} from "../lib/CloneFactory.sol"; import {ICP} from "../CrowdPooling/intf/ICP.sol"; +import {SafeMath} from "../lib/SafeMath.sol"; +import {IERC20} from "../intf/IERC20.sol"; -contract CrowdPoolingFactory { +contract CrowdPoolingFactory is Ownable { + using SafeMath for uint256; // ============ Templates ============ address public immutable _CLONE_FACTORY_; @@ -25,6 +28,8 @@ contract CrowdPoolingFactory { address public immutable _DEFAULT_PERMISSION_MANAGER_; address public immutable _DEFAULT_GAS_PRICE_SOURCE_; + uint256 public _X_; + uint256 public _Y_; // ============ Registry ============ // base -> quote -> CP address list @@ -32,6 +37,24 @@ contract CrowdPoolingFactory { // creator -> CP address list mapping(address => address[]) public _USER_REGISTRY_; + // ============ modifiers =========== + modifier valueCheck( + address cpAddress, + address baseToken, + uint256[] memory timeLine, + uint256[] memory valueList) + { + require(timeLine[2] == 0,"phase calm duration should be 0"); + require(timeLine[4] == 0,"vesting duration should be 0"); + require(valueList[1] == 0,"k should be 0"); + require(valueList[3] == 1,"cliff rate should be 1"); + + uint256 baseTokenBalance = IERC20(baseToken).balanceOf(cpAddress); + require(valueList[0].mul(100) <= baseTokenBalance.mul(_X_),"pool quote cap should be less then _X_% "); + require(timeLine[3]>= _Y_,"freeze duration not less then _Y_"); + _; + } + // ============ Events ============ event NewCP( @@ -61,6 +84,8 @@ contract CrowdPoolingFactory { _DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel; _DEFAULT_PERMISSION_MANAGER_ = defaultPermissionManager; _DEFAULT_GAS_PRICE_SOURCE_ = defaultGasPriceSource; + _X_ = 50; + _Y_ = 30 days; } function createCrowdPooling() external returns (address newCrowdPooling) { @@ -74,7 +99,7 @@ contract CrowdPoolingFactory { address quoteToken, uint256[] memory timeLine, uint256[] memory valueList - ) external { + ) external valueCheck(cpAddress,baseToken,timeLine,valueList) { { address[] memory addressList = new address[](7); addressList[0] = creator; @@ -84,7 +109,7 @@ contract CrowdPoolingFactory { addressList[4] = _DEFAULT_PERMISSION_MANAGER_; addressList[5] = _DEFAULT_MT_FEE_RATE_MODEL_; addressList[6] = _UNOWNED_DVM_FACTORY_; - + ICP(cpAddress).init( addressList, timeLine, @@ -123,4 +148,10 @@ contract CrowdPoolingFactory { { return _USER_REGISTRY_[user]; } + + // ============ Owner Functions ============ + function setXY(uint256 x,uint256 y) public onlyOwner { + _X_=x; + _Y_=y; + } } diff --git a/package.json b/package.json index a88a522..48a765b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "ethjs": "^0.4.0", "lodash": "^4.17.20", "mocha": "^7.2.0", - "solc": "0.6.9", + "solc": "^0.6.9", "truffle-hdwallet-provider": "^1.0.17", "ts-node": "^8.10.2", "typescript": "^3.9.5", From 4cd56fa5530d410d44266b226b2ee7713069bb48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E6=B6=9B=E6=B6=9B?= <15700059289@163.com> Date: Mon, 21 Dec 2020 20:43:15 +0800 Subject: [PATCH 2/3] fix desc for require --- contracts/Factory/CrowdPoolingFactory.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/Factory/CrowdPoolingFactory.sol b/contracts/Factory/CrowdPoolingFactory.sol index 60b74af..af35a0a 100644 --- a/contracts/Factory/CrowdPoolingFactory.sol +++ b/contracts/Factory/CrowdPoolingFactory.sol @@ -50,8 +50,8 @@ contract CrowdPoolingFactory is Ownable { require(valueList[3] == 1,"cliff rate should be 1"); uint256 baseTokenBalance = IERC20(baseToken).balanceOf(cpAddress); - require(valueList[0].mul(100) <= baseTokenBalance.mul(_X_),"pool quote cap should be less then _X_% "); - require(timeLine[3]>= _Y_,"freeze duration not less then _Y_"); + require(valueList[0].mul(100) <= baseTokenBalance.mul(_X_),"pool quote cap should not be greater than _X_% "); + require(timeLine[3]>= _Y_,"freeze duration should not be less than _Y_"); _; } From f215d3629779798b5b34d1e0019dfcb7ac8c97f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E6=B6=9B=E6=B6=9B?= <15700059289@163.com> Date: Mon, 21 Dec 2020 21:42:27 +0800 Subject: [PATCH 3/3] limit x 0 100 --- contracts/Factory/CrowdPoolingFactory.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/Factory/CrowdPoolingFactory.sol b/contracts/Factory/CrowdPoolingFactory.sol index af35a0a..d9e0efb 100644 --- a/contracts/Factory/CrowdPoolingFactory.sol +++ b/contracts/Factory/CrowdPoolingFactory.sol @@ -151,6 +151,7 @@ contract CrowdPoolingFactory is Ownable { // ============ Owner Functions ============ function setXY(uint256 x,uint256 y) public onlyOwner { + require(x>0&&x<=100,"between 0,100"); _X_=x; _Y_=y; }