Files
dodo-contractV2/contracts/DODOZoo.sol

133 lines
3.8 KiB
Solidity
Raw Normal View History

2020-06-26 00:31:25 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {Ownable} from "./lib/Ownable.sol";
2020-07-30 01:32:22 +08:00
import {IDODO} from "./intf/IDODO.sol";
2020-07-25 01:18:50 +08:00
import {ICloneFactory} from "./helper/CloneFactory.sol";
2020-07-24 01:53:58 +08:00
2020-06-26 00:31:25 +08:00
/**
* @title DODOZoo
* @author DODO Breeder
*
* @notice Register of All DODO
*/
contract DODOZoo is Ownable {
2020-07-24 01:53:58 +08:00
address public _DODO_LOGIC_;
2020-07-25 01:18:50 +08:00
address public _CLONE_FACTORY_;
2020-07-25 14:52:36 +08:00
address public _DEFAULT_SUPERVISOR_;
2020-06-26 00:31:25 +08:00
mapping(address => mapping(address => address)) internal _DODO_REGISTER_;
2020-07-30 01:32:22 +08:00
address[] public _DODOs;
2020-06-26 00:31:25 +08:00
// ============ Events ============
event DODOBirth(address newBorn, address baseToken, address quoteToken);
2020-06-26 00:31:25 +08:00
2020-07-24 01:53:58 +08:00
// ============ Constructor Function ============
2020-07-25 14:52:36 +08:00
constructor(
address _dodoLogic,
address _cloneFactory,
address _defaultSupervisor
) public {
2020-07-24 01:53:58 +08:00
_DODO_LOGIC_ = _dodoLogic;
2020-07-25 01:18:50 +08:00
_CLONE_FACTORY_ = _cloneFactory;
2020-07-25 14:52:36 +08:00
_DEFAULT_SUPERVISOR_ = _defaultSupervisor;
2020-07-24 01:53:58 +08:00
}
2020-07-25 15:48:50 +08:00
// ============ Admin Function ============
function setDODOLogic(address _dodoLogic) external onlyOwner {
_DODO_LOGIC_ = _dodoLogic;
}
function setCloneFactory(address _cloneFactory) external onlyOwner {
_CLONE_FACTORY_ = _cloneFactory;
}
function setDefaultSupervisor(address _defaultSupervisor) external onlyOwner {
_DEFAULT_SUPERVISOR_ = _defaultSupervisor;
}
2020-07-30 01:32:22 +08:00
function removeDODO(address dodo) external onlyOwner {
address baseToken = IDODO(dodo)._BASE_TOKEN_();
address quoteToken = IDODO(dodo)._QUOTE_TOKEN_();
require(isDODORegistered(baseToken, quoteToken), "DODO_NOT_REGISTERED");
2020-07-25 15:48:50 +08:00
_DODO_REGISTER_[baseToken][quoteToken] = address(0);
2020-07-30 01:32:22 +08:00
for (uint256 i = 0; i < _DODOs.length - 1; i++)
if (_DODOs[i] == dodo) {
_DODOs[i] = _DODOs[_DODOs.length - 1];
break;
}
_DODOs.pop();
}
2020-07-30 13:57:38 +08:00
function addDODO(address dodo) public onlyOwner {
2020-07-30 01:32:22 +08:00
address baseToken = IDODO(dodo)._BASE_TOKEN_();
address quoteToken = IDODO(dodo)._QUOTE_TOKEN_();
require(!isDODORegistered(baseToken, quoteToken), "DODO_REGISTERED");
_DODO_REGISTER_[baseToken][quoteToken] = dodo;
_DODOs.push(dodo);
2020-07-25 15:48:50 +08:00
}
2020-06-26 00:31:25 +08:00
// ============ Breed DODO Function ============
function breedDODO(
address maintainer,
address baseToken,
address quoteToken,
address oracle,
uint256 lpFeeRate,
uint256 mtFeeRate,
uint256 k,
uint256 gasPriceLimit
2020-07-24 01:53:58 +08:00
) external onlyOwner returns (address newBornDODO) {
require(!isDODORegistered(baseToken, quoteToken), "DODO_REGISTERED");
2020-07-25 01:18:50 +08:00
newBornDODO = ICloneFactory(_CLONE_FACTORY_).clone(_DODO_LOGIC_);
2020-06-26 00:31:25 +08:00
IDODO(newBornDODO).init(
2020-07-25 17:58:06 +08:00
_OWNER_,
2020-07-25 14:52:36 +08:00
_DEFAULT_SUPERVISOR_,
2020-06-26 00:31:25 +08:00
maintainer,
baseToken,
quoteToken,
oracle,
lpFeeRate,
mtFeeRate,
k,
gasPriceLimit
);
2020-07-30 13:57:38 +08:00
addDODO(newBornDODO);
emit DODOBirth(newBornDODO, baseToken, quoteToken);
2020-06-26 00:31:25 +08:00
return newBornDODO;
}
// ============ View Functions ============
function isDODORegistered(address baseToken, address quoteToken) public view returns (bool) {
if (
_DODO_REGISTER_[baseToken][quoteToken] == address(0) &&
_DODO_REGISTER_[quoteToken][baseToken] == address(0)
) {
return false;
} else {
return true;
}
}
function getDODO(address baseToken, address quoteToken) external view returns (address) {
return _DODO_REGISTER_[baseToken][quoteToken];
}
2020-07-30 13:57:38 +08:00
function getDODOs() external view returns (address[] memory) {
return _DODOs;
}
2020-06-26 00:31:25 +08:00
}