/* 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 CAStorage is InitializableOwnable, ReentrancyGuard { using SafeMath for uint256; uint256 internal constant _SETTLEMENT_EXPIRED_TIME_ = 86400 * 7; // ============ Timeline ============ uint256 _PHASE_BID_STARTTIME_; uint256 _PHASE_BID_ENDTIME_; uint256 _PHASE_CALM_ENDTIME_; bool _SETTLED_; // ============ Core Address ============ IERC20 public _BASE_TOKEN_; IERC20 public _QUOTE_TOKEN_; // ============ Distribution Parameters ============ uint256 _QUOTE_CAP_; uint256 _OWNER_RATIO_; address public _BASE_PAY_BACK_; address public _QUOTE_PAY_BACK_; bytes _BASE_PAY_BACK_CALL_DATA_; bytes _QUOTE_PAY_BACK_CALL_DATA_; // ============ Balances ============ uint256 public _QUOTE_RESERVE_; uint256 public _TOTAL_SOLD_BASE_; uint256 public _TOTAL_UNUSED_QUOTE_; uint256 public _TOTAL_QUOTE_SHARES_; mapping(address => uint256) internal _QUOTE_SHARES_; mapping(address => bool) internal _QUOTE_CLAIMED_; mapping(address => uint256) internal _CLAIMED_BASE_; // ============ Advanced Control ============ address public _MAINTAINER_; IFeeRateModel public _MT_FEE_RATE_MODEL_; IPermissionManager public _BIDDER_PERMISSION_; // ============ Time Lock ============ uint256 public _START_VESTING_TIME_; uint256 public _VESTING_DURATION_; uint256 public _CLIFF_RATE_; // ============ PMM Parameters ============ uint256 public _K_; uint256 public _I_; // ============ Modifiers ============ modifier phasePreBid() { require(block.timestamp <= _PHASE_BID_STARTTIME_, "NOT_PHASE_PREBID"); _; } 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"); _; } }