107 lines
3.1 KiB
Solidity
107 lines
3.1 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 {SafeMath} from "../lib/SafeMath.sol";
|
|
import {DecimalMath} from "../lib/DecimalMath.sol";
|
|
import {ReentrancyGuard} from "../lib/ReentrancyGuard.sol";
|
|
import {IOracle} from "../intf/IOracle.sol";
|
|
import {IDODOLpToken} from "../intf/IDODOLpToken.sol";
|
|
import {Types} from "../lib/Types.sol";
|
|
|
|
/**
|
|
* @title Storage
|
|
* @author DODO Breeder
|
|
*
|
|
* @notice Local Variables
|
|
*/
|
|
contract Storage is InitializableOwnable, ReentrancyGuard {
|
|
using SafeMath for uint256;
|
|
|
|
// ============ Variables for Control ============
|
|
|
|
bool internal _INITIALIZED_;
|
|
bool public _CLOSED_;
|
|
bool public _DEPOSIT_QUOTE_ALLOWED_;
|
|
bool public _DEPOSIT_BASE_ALLOWED_;
|
|
bool public _TRADE_ALLOWED_;
|
|
uint256 public _GAS_PRICE_LIMIT_;
|
|
|
|
// ============ Core Address ============
|
|
|
|
address public _SUPERVISOR_; // could freeze system in emergency
|
|
address public _MAINTAINER_; // collect maintainer fee to buy food for DODO
|
|
|
|
address public _BASE_TOKEN_;
|
|
address public _QUOTE_TOKEN_;
|
|
address public _ORACLE_;
|
|
|
|
// ============ Variables for PMM Algorithm ============
|
|
|
|
uint256 public _LP_FEE_RATE_;
|
|
uint256 public _MT_FEE_RATE_;
|
|
uint256 public _K_;
|
|
|
|
Types.RStatus public _R_STATUS_;
|
|
uint256 public _TARGET_BASE_TOKEN_AMOUNT_;
|
|
uint256 public _TARGET_QUOTE_TOKEN_AMOUNT_;
|
|
uint256 public _BASE_BALANCE_;
|
|
uint256 public _QUOTE_BALANCE_;
|
|
|
|
address public _BASE_CAPITAL_TOKEN_;
|
|
address public _QUOTE_CAPITAL_TOKEN_;
|
|
|
|
// ============ Variables for Final Settlement ============
|
|
|
|
uint256 public _BASE_CAPITAL_RECEIVE_QUOTE_;
|
|
uint256 public _QUOTE_CAPITAL_RECEIVE_BASE_;
|
|
mapping(address => bool) public _CLAIMED_;
|
|
|
|
// ============ Modifiers ============
|
|
|
|
modifier onlySupervisorOrOwner() {
|
|
require(msg.sender == _SUPERVISOR_ || msg.sender == _OWNER_, "NOT_SUPERVISOR_OR_OWNER");
|
|
_;
|
|
}
|
|
|
|
modifier notClosed() {
|
|
require(!_CLOSED_, "DODO_CLOSED");
|
|
_;
|
|
}
|
|
|
|
// ============ Helper Functions ============
|
|
|
|
function _checkDODOParameters() internal view returns (uint256) {
|
|
require(_K_ < DecimalMath.ONE, "K>=1");
|
|
require(_K_ > 0, "K=0");
|
|
require(_LP_FEE_RATE_.add(_MT_FEE_RATE_) < DecimalMath.ONE, "FEE_RATE>=1");
|
|
}
|
|
|
|
function getOraclePrice() public view returns (uint256) {
|
|
return IOracle(_ORACLE_).getPrice();
|
|
}
|
|
|
|
function getBaseCapitalBalanceOf(address lp) public view returns (uint256) {
|
|
return IDODOLpToken(_BASE_CAPITAL_TOKEN_).balanceOf(lp);
|
|
}
|
|
|
|
function getTotalBaseCapital() public view returns (uint256) {
|
|
return IDODOLpToken(_BASE_CAPITAL_TOKEN_).totalSupply();
|
|
}
|
|
|
|
function getQuoteCapitalBalanceOf(address lp) public view returns (uint256) {
|
|
return IDODOLpToken(_QUOTE_CAPITAL_TOKEN_).balanceOf(lp);
|
|
}
|
|
|
|
function getTotalQuoteCapital() public view returns (uint256) {
|
|
return IDODOLpToken(_QUOTE_CAPITAL_TOKEN_).totalSupply();
|
|
}
|
|
}
|