Files
dodo-contractV2/contracts/NFTPool/impl/Controller.sol

88 lines
2.9 KiB
Solidity
Raw Normal View History

2021-09-10 19:37:06 +08:00
/*
Copyright 2021 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";
contract Controller is InitializableOwnable {
using SafeMath for uint256;
uint256 public _GLOBAL_NFT_IN_FEE_RATE_ = 0;
uint256 public _GLOBAL_NFT_OUT_FEE_RATE_ = 0;
struct FilterAdminFeeRateInfo {
uint256 nftInFeeRate;
uint256 nftOutFeeRate;
bool isOpen;
}
mapping(address => FilterAdminFeeRateInfo) filterAdminFeeRates;
mapping(address => bool) public isEmergencyWithdrawOpen;
//==================== Event =====================
event SetEmergencyWithdraw(address filter, bool isOpen);
2021-09-14 22:02:07 +08:00
event SetFilterAdminFeeRateInfo(address filterAdmin, uint256 nftInFee, uint256 nftOutFee, bool isOpen);
event SetGlobalParam(uint256 nftInFee, uint256 nftOutFee);
2021-09-10 19:37:06 +08:00
//==================== Ownable ====================
function setFilterAdminFeeRateInfo(
address filterAdminAddr,
uint256 nftInFeeRate,
uint256 nftOutFeeRate,
bool isOpen
) external onlyOwner {
2021-09-24 09:39:15 +08:00
require(nftInFeeRate <= 1e18 && nftOutFeeRate <= 1e18, "FEE_RATE_TOO_LARGE");
2021-09-10 19:37:06 +08:00
FilterAdminFeeRateInfo memory feeRateInfo = FilterAdminFeeRateInfo({
nftInFeeRate: nftInFeeRate,
nftOutFeeRate: nftOutFeeRate,
isOpen: isOpen
});
filterAdminFeeRates[filterAdminAddr] = feeRateInfo;
2021-09-14 22:02:07 +08:00
emit SetFilterAdminFeeRateInfo(filterAdminAddr, nftInFeeRate, nftOutFeeRate, isOpen);
2021-09-10 19:37:06 +08:00
}
function setGlobalParam(uint256 nftInFeeRate, uint256 nftOutFeeRate) external onlyOwner {
2021-09-24 09:39:15 +08:00
require(nftInFeeRate <= 1e18 && nftOutFeeRate <= 1e18, "FEE_RATE_TOO_LARGE");
2021-09-10 19:37:06 +08:00
_GLOBAL_NFT_IN_FEE_RATE_ = nftInFeeRate;
_GLOBAL_NFT_OUT_FEE_RATE_ = nftOutFeeRate;
2021-09-14 22:02:07 +08:00
emit SetGlobalParam(nftInFeeRate, nftOutFeeRate);
2021-09-10 19:37:06 +08:00
}
function setEmergencyWithdraw(address filter, bool isOpen) external onlyOwner {
isEmergencyWithdrawOpen[filter] = isOpen;
emit SetEmergencyWithdraw(filter, isOpen);
}
//===================== View ========================
function getMintFeeRate(address filterAdminAddr) external view returns (uint256) {
FilterAdminFeeRateInfo memory filterAdminFeeRateInfo = filterAdminFeeRates[filterAdminAddr];
2021-09-10 21:16:47 +08:00
if (filterAdminFeeRateInfo.isOpen) {
2021-09-10 19:37:06 +08:00
return filterAdminFeeRateInfo.nftInFeeRate;
} else {
2021-09-10 21:16:47 +08:00
return _GLOBAL_NFT_IN_FEE_RATE_;
2021-09-10 19:37:06 +08:00
}
}
function getBurnFeeRate(address filterAdminAddr) external view returns (uint256) {
2021-09-10 21:16:47 +08:00
FilterAdminFeeRateInfo memory filterAdminFeeInfo = filterAdminFeeRates[filterAdminAddr];
2021-09-10 19:37:06 +08:00
2021-09-10 21:16:47 +08:00
if (filterAdminFeeInfo.isOpen) {
return filterAdminFeeInfo.nftOutFeeRate;
2021-09-10 19:37:06 +08:00
} else {
2021-09-10 21:16:47 +08:00
return _GLOBAL_NFT_OUT_FEE_RATE_;
2021-09-10 19:37:06 +08:00
}
}
}