Skip to main content

Overview

The FolioDAOFeeRegistry contract manages the protocol-level fee configuration for all Folios. It determines what percentage of Folio fees go to the DAO versus fee recipients, and enforces minimum fee floors to ensure the protocol remains sustainable.

Key Features

  • DAO Fee Split: Configurable percentage of fees that go to the protocol
  • Fee Floor: Minimum fees charged to users, regardless of Folio settings
  • Per-Folio Overrides: Custom fee settings for specific Folios
  • Chain-Specific Maximums: Different max fees based on blockchain

Fee Mechanics

The registry implements a two-tier fee system:
  1. DAO Fee Percentage: The DAO receives a percentage of collected fees (e.g., 50%)
  2. Fee Floor: A minimum amount the DAO receives, even if the percentage calculation is lower
Example: If DAO fee is 50% and floor is 0.15%:
  • At 0.30% TVL fee: DAO gets 0.15%, recipients get 0.15%
  • At 0.20% TVL fee: DAO gets 0.15%, recipients get 0.05%
  • At 0.10% TVL fee: DAO gets 0.15%, recipients get 0%

Configuration Functions

Set Fee Recipient

Set the address that receives DAO fees.
address
New fee recipient address (cannot be zero)
FolioDAOFeeRegistry.sol

Set Default Fee Numerator

Set the default DAO fee percentage for all Folios.
uint256
New fee numerator as D18 (e.g., 0.5e18 = 50%)
FolioDAOFeeRegistry.sol
The fee numerator must not exceed the chain-specific MAX_DAO_FEE. The denominator is always FEE_DENOMINATOR (1e18).

Set Token Fee Numerator

Set a custom DAO fee percentage for a specific Folio.
address
Address of the Folio token
uint256
Custom fee numerator (D18)
FolioDAOFeeRegistry.sol

Set Default Fee Floor

Set the default minimum DAO fee for all Folios.
uint256
New default fee floor as D18 (e.g., 0.0015e18 = 0.15% = 15 bps)
FolioDAOFeeRegistry.sol

Set Token Fee Floor

Set a custom minimum DAO fee for a specific Folio.
address
Address of the Folio token
uint256
Custom fee floor (cannot exceed default floor)
FolioDAOFeeRegistry.sol
Token-specific fee floors cannot exceed the default fee floor. This ensures a baseline minimum across the protocol.

Reset Token Fees

Remove custom fee settings for a Folio, reverting to defaults.
address
Address of the Folio token
FolioDAOFeeRegistry.sol

View Functions

Get Fee Details

Retrieve complete fee configuration for a Folio.
address
Address of the Folio token
FolioDAOFeeRegistry.sol
Returns:
  • recipient: Address receiving DAO fees
  • feeNumerator: DAO percentage numerator (D18)
  • feeDenominator: Always 1e18
  • feeFloor: Minimum DAO fee (D18)

Chain-Specific Limits

Maximum fees vary by blockchain:

Ethereum Mainnet (Chain ID: 1)

uint256
default:"0.5e18"
Maximum DAO fee: 50%
uint256
default:"0.0015e18"
Maximum fee floor: 0.15% (15 bps)

Base (Chain ID: 8453)

uint256
default:"0.5e18"
Maximum DAO fee: 50%
uint256
default:"0.0015e18"
Maximum fee floor: 0.15% (15 bps)

BNB Smart Chain (Chain ID: 56)

uint256
default:"0.333...e18"
Maximum DAO fee: 33.33%
uint256
default:"0.001e18"
Maximum fee floor: 0.10% (10 bps)

Events

event
Emitted when DAO fee recipient is changedParameters:
  • feeRecipient - New recipient address
event
Emitted when default DAO fee percentage is updatedParameters:
  • feeNumerator - New default numerator (D18)
event
Emitted when a Folio-specific fee numerator is setParameters:
  • fToken - Folio token address
  • feeNumerator - Custom numerator
  • isActive - Whether override is active
event
Emitted when default fee floor is updatedParameters:
  • defaultFeeFloor - New default floor (D18)
event
Emitted when a Folio-specific fee floor is setParameters:
  • fToken - Folio token address
  • feeFloor - Custom floor
  • isActive - Whether override is active

Constants

uint256
default:"1e18"
Denominator for all fee calculations (D18 precision)

Access Control

IRoleRegistry
Immutable reference to the RoleRegistry contract for owner checks
All configuration functions require the caller to be an owner in the RoleRegistry.

Fee Distribution Flow

When fee settings are changed, the registry automatically calls distributeFees() on the affected Folio before applying changes. This ensures pending fees are calculated with old settings.

Usage Example