Fees Configuration
Types of Fees
Management Fee - Set by Node owner, charged on total assets
Protocol Management Fee - Set by Registry owner, determines protocol's share of management fees
Execution Fee - Set by Registry owner, charged on component investments
Fee Descriptions
Management Fee
An annual fee charged on the Node's total assets. The Node owner sets this rate and designates a fee recipient address. This fee is split between the Node owner and the protocol according to the protocol management fee ratio.
Protocol Management Fee
Determines what percentage of each Node's management fees go to the protocol. For example, if a Node charges 1% management fee and the protocol fee is 20%, then 0.2% goes to the protocol and 0.8% to the Node owner.
Execution Fee
A fee charged whenever assets are invested into components. This fee goes entirely to the protocol and is automatically deducted by Routers during investment operations. Not charged on withdrawals or redemptions.
Setting and Reading Fees
Node Owner Controls
// Set management fee rate
function setAnnualManagementFee(uint64 newAnnualManagementFee)
// Set fee recipient
function setNodeOwnerFeeAddress(address newNodeOwnerFeeAddress)
Registry Owner Controls
// Set protocol's share of management fees
function setProtocolManagementFee(uint64 newProtocolManagementFee)
// Set execution fee rate
function setProtocolExecutionFee(uint64 newProtocolExecutionFee)
// Set protocol fee recipient
function setProtocolFeeAddress(address newProtocolFeeAddress)
Fee Calculations and Distribution
Management Fee Collection
Management fees are calculated and collected by calling payManagementFees()
, which can be executed by the Node owner or rebalancer outside of rebalance windows:
feeForPeriod = (annualManagementFee * totalAssets * timeSinceLastPayment) / (SECONDS_PER_YEAR * WAD)
protocolShare = feeForPeriod * protocolManagementFee / WAD
nodeOwnerShare = feeForPeriod - protocolShare
The calculated amounts are:
Deducted from Node's reserve
Protocol share sent to protocol fee address
Remaining amount sent to Node owner fee address
Management Fee Collection
The payManagementFees()
function:
function payManagementFees() external onlyOwnerOrRebalancer onlyWhenNotRebalancing returns (uint256 feeForPeriod)
Access Control
Can be called by Node owner or whitelisted rebalancer
Must be called outside rebalance window
Requires valid fee recipient addresses set for both Node owner and protocol
Function Behavior
Updates
totalAssets
cacheCalculates fee based on time since last payment:
feeForPeriod = (annualManagementFee * cacheTotalAssets * (block.timestamp - lastPayment)) / (SECONDS_PER_YEAR * WAD)
Splits fee between protocol and Node owner:
protocolFeeAmount = feeForPeriod * protocolManagementFee / WAD nodeOwnerFeeAmount = feeForPeriod - protocolFeeAmount
Updates
lastPayment
timestampTransfers fees from reserve to recipients
Reduces
cacheTotalAssets
by fee amount
Will revert if reserve balance insufficient to pay full fee amount.
Execution Fee Collection
Execution fees are automatically deducted during component investments:
executionFee = investmentAmount * protocolExecutionFee / WAD
finalInvestment = investmentAmount - executionFee
The Router:
Calculates fee amount
Deducts from investment amount
Transfers fee to protocol address
Proceeds with reduced investment
All fees require sufficient reserve balance and valid fee recipient addresses. Fee rates must be less than 100% (1e18).
Last updated