LogoLogo
General DocsTechnical DocsSource CodeMarketing SiteGet Early Access
  • Protocol
    • Overview
    • Treasury & Departments
      • Signers & Access Control
      • Spending Funds & Allowance
      • Departments
    • Capital Stack
      • Share Classes
      • Debt
    • Shareholder Governance
    • Modules
      • Equity Financing Module
        • Priced Rounds
        • SAFEs
      • Billing
      • Payroll
      • Documents
      • Vesting & Unlocks
    • Lifecycle Events
      • Recapitalization
      • Liquidation
      • Acquisition
    • KYC Procceses
  • Smart Contracts
    • Overview
    • Smart Contract Security
    • Deployment of Core Contracts
    • Contract Upgrades
    • Mezz Guards
    • Documents
    • Glossary
    • Source Code
      • Core
        • Base
          • Team
          • TeamControlled
          • AdminControlled
          • Credentialed
          • MezzUUPSUpgradeable
        • MezzShares
          • CommonShares
          • PreferredShares
        • Treasury
        • Department
          • GeneralDepartment
        • Module
          • EquityFinancingModule
        • CapitalStack
        • DelegateRegistry
        • TokenTimelock
        • PayrollManager
        • PricedRound
        • MezzGovernor
          • ProposalGovernor
          • StartupGovernor
          • ShareClassGovernor
          • LateStageGovernor
        • MezzGuard
          • BlacklistGuard
          • WhitelistGuard
          • ShareholderGuard
      • MezzHub
      • MezzDeployer
      • MezzMigrator
      • BillingRouter
      • DocumentRegistry
      • FeeController
      • Events
      • Errors
  • Technical Documentation
    • Creating a Custom Module
Powered by GitBook
On this page
  • State Variables
  • MAX_IMPLEMENTATION_FEE
  • FeeControllerStorageLocation
  • Functions
  • _getFeeControllerStorage
  • constructor
  • setImplementationFee
  • collectFees
  • calculateFee
  • getFeeByImplementation
  • supportsInterface
  • Structs
  • FeeControllerStorage
  1. Smart Contracts
  2. Source Code

FeeController

PreviousDocumentRegistryNextEvents

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