Files
dodo-contractV2/contracts/CrowdPooling/impl/CPStorage.sol

135 lines
3.6 KiB
Solidity
Raw Normal View History

2020-12-06 11:25:03 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {InitializableOwnable} from "../../lib/InitializableOwnable.sol";
import {ReentrancyGuard} from "../../lib/ReentrancyGuard.sol";
2020-12-08 18:13:45 +08:00
import {IPermissionManager} from "../../lib/PermissionManager.sol";
2020-12-10 19:46:06 +08:00
import {IFeeRateModel} from "../../lib/FeeRateModel.sol";
2020-12-06 11:25:03 +08:00
import {SafeMath} from "../../lib/SafeMath.sol";
import {IERC20} from "../../intf/IERC20.sol";
2020-12-12 15:53:42 +08:00
contract CPStorage is InitializableOwnable, ReentrancyGuard {
2020-12-06 11:25:03 +08:00
using SafeMath for uint256;
// ============ Constant ============
2020-12-13 17:47:47 +08:00
uint256 internal constant _SETTLEMENT_EXPIRE_ = 86400 * 7;
2020-12-30 17:05:31 +08:00
uint256 internal constant _SETTEL_FUND_ = 200 finney;
2021-01-19 17:10:46 +08:00
bool public _IS_OPEN_TWAP_ = false;
2021-11-09 21:05:54 +08:00
bool public _IS_OVERCAP_STOP = false;
2020-12-08 19:52:32 +08:00
2021-12-02 16:15:22 +08:00
bool public _FORCE_STOP_ = false;
2020-12-06 11:25:03 +08:00
// ============ Timeline ============
2020-12-13 17:47:47 +08:00
uint256 public _PHASE_BID_STARTTIME_;
uint256 public _PHASE_BID_ENDTIME_;
uint256 public _PHASE_CALM_ENDTIME_;
uint256 public _SETTLED_TIME_;
bool public _SETTLED_;
2020-12-06 11:25:03 +08:00
// ============ Core Address ============
IERC20 public _BASE_TOKEN_;
IERC20 public _QUOTE_TOKEN_;
// ============ Distribution Parameters ============
2020-12-13 17:47:47 +08:00
uint256 public _TOTAL_BASE_;
uint256 public _POOL_QUOTE_CAP_;
2020-12-11 22:52:00 +08:00
// ============ Settlement ============
2020-12-06 11:25:03 +08:00
uint256 public _QUOTE_RESERVE_;
2020-12-11 22:52:00 +08:00
uint256 public _UNUSED_BASE_;
uint256 public _UNUSED_QUOTE_;
uint256 public _TOTAL_SHARES_;
mapping(address => uint256) internal _SHARES_;
2021-11-29 17:19:41 +08:00
mapping(address => bool) public _CLAIMED_QUOTE_;
2020-12-11 22:52:00 +08:00
2020-12-13 17:47:47 +08:00
address public _POOL_FACTORY_;
address public _POOL_;
2021-12-02 16:15:22 +08:00
uint256 public _POOL_FEE_RATE_;
2020-12-13 17:47:47 +08:00
uint256 public _AVG_SETTLED_PRICE_;
2020-12-10 19:46:06 +08:00
// ============ Advanced Control ============
address public _MAINTAINER_;
IFeeRateModel public _MT_FEE_RATE_MODEL_;
2020-12-08 18:13:45 +08:00
IPermissionManager public _BIDDER_PERMISSION_;
2020-12-06 11:25:03 +08:00
// ============ PMM Parameters ============
uint256 public _K_;
uint256 public _I_;
2021-11-09 21:05:54 +08:00
// ============ LP Token Vesting && Claim Params ============
2020-12-18 16:08:02 +08:00
uint256 public _TOTAL_LP_AMOUNT_;
2020-12-18 18:31:45 +08:00
uint256 public _FREEZE_DURATION_;
2020-12-18 16:08:02 +08:00
uint256 public _VESTING_DURATION_;
uint256 public _CLIFF_RATE_;
2021-11-29 17:19:41 +08:00
uint256 public _TOKEN_CLAIM_DURATION_;
uint256 public _TOKEN_VESTING_DURATION_;
uint256 public _TOKEN_CLIFF_RATE_;
2021-12-21 16:17:13 +08:00
mapping(address => uint256) public _CLAIMED_BASE_TOKEN_;
2020-12-18 16:08:02 +08:00
2020-12-06 11:25:03 +08:00
// ============ Modifiers ============
2021-12-13 10:34:27 +08:00
modifier isNotForceStop() {
2021-12-02 16:15:22 +08:00
require(!_FORCE_STOP_, "FORCE_STOP");
_;
}
2020-12-06 11:25:03 +08:00
modifier phaseBid() {
require(
2020-12-12 15:53:42 +08:00
block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_BID_ENDTIME_,
2020-12-06 11:25:03 +08:00
"NOT_PHASE_BID"
);
_;
}
modifier phaseCalm() {
require(
2020-12-12 15:53:42 +08:00
block.timestamp >= _PHASE_BID_ENDTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,
2020-12-06 11:25:03 +08:00
"NOT_PHASE_CALM"
);
_;
}
modifier phaseBidOrCalm() {
require(
2020-12-12 15:53:42 +08:00
block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,
2020-12-06 11:25:03 +08:00
"NOT_PHASE_BID_OR_CALM"
);
_;
}
modifier phaseSettlement() {
2020-12-12 15:53:42 +08:00
require(block.timestamp >= _PHASE_CALM_ENDTIME_, "NOT_PHASE_EXE");
2020-12-06 11:25:03 +08:00
_;
}
modifier phaseVesting() {
require(_SETTLED_, "NOT_VESTING");
_;
}
2021-12-02 16:15:22 +08:00
function forceStop() external onlyOwner {
require(block.timestamp < _PHASE_BID_STARTTIME_, "CP_ALREADY_STARTED");
_FORCE_STOP_ = true;
_TOTAL_BASE_ = 0;
uint256 baseAmount = _BASE_TOKEN_.balanceOf(address(this));
_BASE_TOKEN_.transfer(_OWNER_, baseAmount);
}
2020-12-06 11:25:03 +08:00
}