Files
dodo-contractV2/contracts/lib/FeeRateModel.sol

53 lines
1.6 KiB
Solidity
Raw Normal View History

2020-11-22 18:20:09 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
2021-01-12 18:12:42 +08:00
import {ReentrancyGuard} from "../lib/ReentrancyGuard.sol";
2020-11-22 18:20:09 +08:00
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
interface IFeeRateModel {
function getFeeRate(address trader) external view returns (uint256);
function init(address owner, uint256 feeRate) external;
function setFeeRate(uint256 newFeeRate) external;
}
2021-01-12 18:12:42 +08:00
contract FeeRateModel is ReentrancyGuard,InitializableOwnable {
2020-11-22 18:20:09 +08:00
//DEFAULT
uint256 public _FEE_RATE_;
mapping(address => uint256) feeMapping;
2021-01-12 21:20:04 +08:00
event SetSpecificFeeRate(bool result);
event SetFeeRate(bool result);
2020-11-22 18:20:09 +08:00
function init(address owner, uint256 feeRate) external {
initOwner(owner);
_FEE_RATE_ = feeRate;
}
2021-01-12 18:12:42 +08:00
function setSpecificFeeRate(address trader, uint256 feeRate, address logicContractAddr) external onlyOwner {
bool r;
(r, ) = logicContractAddr.delegatecall(abi.encodeWithSignature("setSpecificFeeRate(address,uint256)", trader,feeRate));
2021-01-12 21:20:04 +08:00
emit SetSpecificFeeRate(r);
2020-11-22 18:20:09 +08:00
}
2021-01-12 18:12:42 +08:00
function setFeeRate(uint256 newFeeRate, address logicContractAddr) external onlyOwner {
bool r;
(r, ) = logicContractAddr.delegatecall(abi.encodeWithSignature("setFeeRate(uint256)", newFeeRate));
2021-01-12 21:20:04 +08:00
emit SetFeeRate(r);
2021-01-12 18:12:42 +08:00
2020-11-22 18:20:09 +08:00
}
function getFeeRate(address trader) external view returns (uint256) {
uint256 feeRate = feeMapping[trader];
if(feeRate == 0)
return _FEE_RATE_;
return feeRate;
}
}