FeeController
Inherits: Initializable, ERC165Upgradeable, HubOwnableUUPSUpgradeable, IFeeController
Author: Daniel Yamagata & Naveen Ailawadi
A contract to set and manage fees for the Mezzanine Protocol
All fees are denominated in 100_000 as 100%. For example, a fee of 1_000 is equivalent to 1% All fees in Mezzanine are transferred to the fee controller, which then can be collected by the owner of the Mezz Hub. All implementations that charge a fee are responsible for transferring the fees to the fee controller.
State Variables
MAX_IMPLEMENTATION_FEE
uint256 public constant MAX_IMPLEMENTATION_FEE = Constants.MAX_IMPLEMENTATION_FEE;
FeeControllerStorageLocation
bytes32 private constant FeeControllerStorageLocation =
0x9980cbcd1eea9936b8d3caaf89dd2ea96db52917f1123c39e72b02e9cb513100;
Functions
_getFeeControllerStorage
function _getFeeControllerStorage() internal pure returns (FeeControllerStorage storage $);
constructor
constructor(address _mezzHub) HubOwnableUUPSUpgradeable(_mezzHub);
setImplementationFee
Sets the fee of the 'implementation' to 'newFee'. Only callable by the 'owner' of the MezzHub
function setImplementationFee(address implementation, uint256 newFee) external virtual onlyHubOwner;
collectFees
Transfers 'amount' of 'asset' to the owner of the Mezz Hub
function collectFees(address asset, uint256 amount) external virtual onlyHubOwner;
calculateFee
Returns the fee for 'amount' based on the 'asset' and 'implementation' Returns zero if 'asset' is not a denomination asset or the implementation does not have a fee
function calculateFee(address asset, uint256 amount, address implementation) public view virtual returns (uint256);
getFeeByImplementation
Returns the fee for 'implementation'. Returns zero if there is no fee
function getFeeByImplementation(address implementation) public view returns (uint256);
supportsInterface
ERC165 support
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(ERC165Upgradeable, IERC165)
returns (bool);
Structs
FeeControllerStorage
struct FeeControllerStorage {
mapping(address => uint256) _feeByImplementation;
}