For the complete documentation index, see llms.txt. This page is also available as Markdown.

Fees

The three fees a fund can charge — management, performance (high-water mark), and redemption.

A fund can charge three fees, all configured by the admin and all paid as newly minted (or transferred) shares to the fund's fee receiver (the Manager Safe). Every rate is expressed in basis points and capped at 2000 bps (20%).

Fee
When it is charged
Base

Management

During request settlement, time-based

Net share supply, annualized

Performance

During request settlement, on gains above the high-water mark

Net share supply

Redemption

On each approved redemption

The shares being redeemed

Throughout, net supply means totalSupply - feeReceiverBalance — the fee receiver's own shares are excluded so fees don't compound on themselves.

Management fee

Accrues continuously and is realized when processRequests runs, provided at least MIN_TIME_ELAPSED (6 hours) have passed since the last management-fee update:

managementFee = netSupply * managementFeeRate * timeElapsed / (10_000 * 365 days)

The elapsed time is tracked with a single timestamp shared across all assets, so the fee is charged once per settlement window regardless of which asset is being processed.

Performance fee (high-water mark)

Computed by a pluggable module — WatermarkFee — and only charged when the share price rises above the highest price previously seen (the high-water mark). It is evaluated during settlement when the processed asset has isFeeModuleAsset = true and a module is configured.

function calculatePerformanceFee(
    uint256 sharesPrice,  // current price, 8-decimal USD
    uint256 timeElapsed,
    uint256 feePct,       // performanceFeeRate, bps
    uint256 netSupply
) external returns (uint256 fee);

Logic:

  • If sharesPrice ≤ highWatermark, the fee is 0 — no profit above the mark.

  • Otherwise the watermark is raised to the current price and the fee is taken on the profit since the previous mark:

Because the mark only ever moves up, a draw-down must be fully recovered before any new performance fee is charged. Swapping the module (or disabling it with address(0)) is an admin action; the base asset is flagged isFeeModuleAsset = true at deployment so performance fees can be computed for it.

Redemption fee

Taken in shares on every approved redemption, before the remaining shares are burned:

The fee shares go to the fee receiver; the net shares are burned and the corresponding assets are paid to the receiver. See Redemptions.

Events

When management and/or performance fees are charged, the contract emits a single event (only if at least one is non-zero):

The redemption fee is reported in the RedemptionApproval event's redemptionFee field. Rate changes emit ManagementFeeRateUpdate / PerformanceFeeRateUpdate / RedemptionFeeRateUpdate only when the value actually changes, and any fee accrued under the old rate is charged before the new rate takes effect.

Last updated