105 lines
3.1 KiB
Solidity
105 lines
3.1 KiB
Solidity
/*
|
|
Copyright 2021 DODO ZOO.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
pragma solidity 0.6.9;
|
|
pragma experimental ABIEncoderV2;
|
|
|
|
import {InitializableOwnable} from "../../lib/InitializableOwnable.sol";
|
|
|
|
interface IDODOMineV3Registry {
|
|
function addMineV3(
|
|
address mine,
|
|
bool isLpToken,
|
|
address stakeToken
|
|
) external;
|
|
}
|
|
|
|
/**
|
|
* @title DODOMineV3 Registry
|
|
* @author DODO Breeder
|
|
*
|
|
* @notice Register DODOMineV3 Pools
|
|
*/
|
|
contract DODOMineV3Registry is InitializableOwnable, IDODOMineV3Registry {
|
|
|
|
mapping (address => bool) public isAdminListed;
|
|
|
|
// ============ Registry ============
|
|
// minePool -> stakeToken
|
|
mapping(address => address) public _MINE_REGISTRY_;
|
|
// lpToken -> minePool
|
|
mapping(address => address[]) public _LP_REGISTRY_;
|
|
// singleToken -> minePool
|
|
mapping(address => address[]) public _SINGLE_REGISTRY_;
|
|
|
|
|
|
// ============ Events ============
|
|
event NewMineV3(address mine, address stakeToken, bool isLpToken);
|
|
event RemoveMineV3(address mine, address stakeToken);
|
|
event addAdmin(address admin);
|
|
event removeAdmin(address admin);
|
|
|
|
|
|
function addMineV3(
|
|
address mine,
|
|
bool isLpToken,
|
|
address stakeToken
|
|
) override external {
|
|
require(isAdminListed[msg.sender], "ACCESS_DENIED");
|
|
_MINE_REGISTRY_[mine] = stakeToken;
|
|
if(isLpToken) {
|
|
_LP_REGISTRY_[stakeToken].push(mine);
|
|
}else {
|
|
_SINGLE_REGISTRY_[stakeToken].push(mine);
|
|
}
|
|
|
|
emit NewMineV3(mine, stakeToken, isLpToken);
|
|
}
|
|
|
|
// ============ Admin Operation Functions ============
|
|
|
|
function removeMineV3(
|
|
address mine,
|
|
bool isLpToken,
|
|
address stakeToken
|
|
) external onlyOwner {
|
|
_MINE_REGISTRY_[mine] = address(0);
|
|
if(isLpToken) {
|
|
uint256 len = _LP_REGISTRY_[stakeToken].length;
|
|
for (uint256 i = 0; i < len; i++) {
|
|
if (mine == _LP_REGISTRY_[stakeToken][i]) {
|
|
if(i != len - 1) {
|
|
_LP_REGISTRY_[stakeToken][i] = _LP_REGISTRY_[stakeToken][len - 1];
|
|
}
|
|
_LP_REGISTRY_[stakeToken].pop();
|
|
break;
|
|
}
|
|
}
|
|
}else {
|
|
uint256 len = _SINGLE_REGISTRY_[stakeToken].length;
|
|
for (uint256 i = 0; i < len; i++) {
|
|
if (mine == _SINGLE_REGISTRY_[stakeToken][i]) {
|
|
if(i != len - 1) {
|
|
_SINGLE_REGISTRY_[stakeToken][i] = _SINGLE_REGISTRY_[stakeToken][len - 1];
|
|
}
|
|
_SINGLE_REGISTRY_[stakeToken].pop();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
emit RemoveMineV3(mine, stakeToken);
|
|
}
|
|
|
|
function addAdminList (address contractAddr) external onlyOwner {
|
|
isAdminListed[contractAddr] = true;
|
|
emit addAdmin(contractAddr);
|
|
}
|
|
|
|
function removeAdminList (address contractAddr) external onlyOwner {
|
|
isAdminListed[contractAddr] = false;
|
|
emit removeAdmin(contractAddr);
|
|
}
|
|
} |