51 lines
1.6 KiB
Solidity
51 lines
1.6 KiB
Solidity
/*
|
|
|
|
Copyright 2020 DODO ZOO.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
pragma solidity 0.6.9;
|
|
pragma experimental ABIEncoderV2;
|
|
|
|
import {ReentrancyGuard} from "../lib/ReentrancyGuard.sol";
|
|
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;
|
|
}
|
|
|
|
contract FeeRateModel is ReentrancyGuard,InitializableOwnable {
|
|
//DEFAULT
|
|
uint256 public _FEE_RATE_;
|
|
mapping(address => uint256) feeMapping;
|
|
event Log(string str, bool result);
|
|
|
|
function init(address owner, uint256 feeRate) external {
|
|
initOwner(owner);
|
|
_FEE_RATE_ = feeRate;
|
|
}
|
|
|
|
function setSpecificFeeRate(address trader, uint256 feeRate, address logicContractAddr) external onlyOwner {
|
|
bool r;
|
|
(r, ) = logicContractAddr.delegatecall(abi.encodeWithSignature("setSpecificFeeRate(address,uint256)", trader,feeRate));
|
|
emit Log("delegatecall return ", r);
|
|
}
|
|
|
|
function setFeeRate(uint256 newFeeRate, address logicContractAddr) external onlyOwner {
|
|
bool r;
|
|
(r, ) = logicContractAddr.delegatecall(abi.encodeWithSignature("setFeeRate(uint256)", newFeeRate));
|
|
emit Log("delegatecall return ", r);
|
|
|
|
}
|
|
|
|
function getFeeRate(address trader) external view returns (uint256) {
|
|
uint256 feeRate = feeMapping[trader];
|
|
if(feeRate == 0)
|
|
return _FEE_RATE_;
|
|
return feeRate;
|
|
}
|
|
}
|