FeeController

Git Source

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;
}