Files
dodo-contractV2/contracts/CrowdPooling/impl/CPStorage.sol
2022-04-24 11:21:14 +08:00

135 lines
3.6 KiB
Solidity

/*
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";
import {IPermissionManager} from "../../lib/PermissionManager.sol";
import {IFeeRateModel} from "../../lib/FeeRateModel.sol";
import {SafeMath} from "../../lib/SafeMath.sol";
import {IERC20} from "../../intf/IERC20.sol";
contract CPStorage is InitializableOwnable, ReentrancyGuard {
using SafeMath for uint256;
// ============ Constant ============
uint256 internal constant _SETTLEMENT_EXPIRE_ = 86400 * 7;
uint256 internal constant _SETTEL_FUND_ = 200 finney;
bool public _IS_OPEN_TWAP_ = false;
bool public _IS_OVERCAP_STOP = false;
bool public _FORCE_STOP_ = false;
// ============ Timeline ============
uint256 public _PHASE_BID_STARTTIME_;
uint256 public _PHASE_BID_ENDTIME_;
uint256 public _PHASE_CALM_ENDTIME_;
uint256 public _SETTLED_TIME_;
bool public _SETTLED_;
// ============ Core Address ============
IERC20 public _BASE_TOKEN_;
IERC20 public _QUOTE_TOKEN_;
// ============ Distribution Parameters ============
uint256 public _TOTAL_BASE_;
uint256 public _POOL_QUOTE_CAP_;
// ============ Settlement ============
uint256 public _QUOTE_RESERVE_;
uint256 public _UNUSED_BASE_;
uint256 public _UNUSED_QUOTE_;
uint256 public _TOTAL_SHARES_;
mapping(address => uint256) internal _SHARES_;
mapping(address => bool) public _CLAIMED_QUOTE_;
address public _POOL_FACTORY_;
address public _POOL_;
uint256 public _POOL_FEE_RATE_;
uint256 public _AVG_SETTLED_PRICE_;
// ============ Advanced Control ============
address public _MAINTAINER_;
IFeeRateModel public _MT_FEE_RATE_MODEL_;
IPermissionManager public _BIDDER_PERMISSION_;
// ============ PMM Parameters ============
uint256 public _K_;
uint256 public _I_;
// ============ LP Token Vesting && Claim Params ============
uint256 public _TOTAL_LP_AMOUNT_;
uint256 public _FREEZE_DURATION_;
uint256 public _VESTING_DURATION_;
uint256 public _CLIFF_RATE_;
uint256 public _TOKEN_CLAIM_DURATION_;
uint256 public _TOKEN_VESTING_DURATION_;
uint256 public _TOKEN_CLIFF_RATE_;
mapping(address => uint256) _CLAIMED_BASE_TOKEN_;
// ============ Modifiers ============
modifier isForceStop() {
require(!_FORCE_STOP_, "FORCE_STOP");
_;
}
modifier phaseBid() {
require(
block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_BID_ENDTIME_,
"NOT_PHASE_BID"
);
_;
}
modifier phaseCalm() {
require(
block.timestamp >= _PHASE_BID_ENDTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,
"NOT_PHASE_CALM"
);
_;
}
modifier phaseBidOrCalm() {
require(
block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,
"NOT_PHASE_BID_OR_CALM"
);
_;
}
modifier phaseSettlement() {
require(block.timestamp >= _PHASE_CALM_ENDTIME_, "NOT_PHASE_EXE");
_;
}
modifier phaseVesting() {
require(_SETTLED_, "NOT_VESTING");
_;
}
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);
}
}