AUM Fee
Time-based management fee on DALPAsset. Accrues over time based on total supply and is collected by minting new tokens to the fee recipient as an inflationary mechanism.
AUM Fee charges a time-based management fee as a percentage of Assets Under Management. Collection mints new tokens to the configured recipient, so the fee is paid through dilution rather than a treasury transfer.
Related pages:
Interface (capabilities)
This feature exposes the following capabilities. Fee collection is inflationary: it mints new tokens to the configured recipient rather than transferring existing tokens.
| Capability | Who can call | Inputs | On-chain effect | Emits | Notes |
|---|---|---|---|---|---|
| Collect accrued fee | Anyone | None (uses elapsed time + total supply) | Mints tokens to fee recipient | AUMFeeCollected | Permissionless trigger; accrues continuously |
| Set fee rate | GOVERNANCE_ROLE | New rate (basis points) | Updates annual fee rate | FeeRateUpdated | Blocked after freeze |
| Set fee recipient | GOVERNANCE_ROLE | Recipient address | Redirects future collections | FeeRecipientUpdated | Effective immediately |
| Freeze fee rate | GOVERNANCE_ROLE | None | Permanently locks rate | FeeRateFrozen | Irreversible |
Accrued fees, current rate, recipient, and freeze status are available as read-only queries.
Accrued estimate read
GET /api/v2/tokens/{tokenAddress}/aum-fee/accrued-estimate reads the token's attached AUM Fee feature and returns the current accrued fee estimate. DALP reads getAccruedFees() and getLastCollectionTime() together, then returns the estimate in token units with the annual rate, last collection time, measurement time, and feature contract address.
The response uses the standard single-resource envelope. data is null when the token has no attached AUM Fee feature or the attached feature has not been initialised. If the chain read is unavailable, treat the estimate as temporarily unavailable rather than as zero accrued fees.
Use this read when an integration needs the same accrued-fee anchor shown in the token workspace before collecting fees.
Token workspace surface
Tokens with the AUM Fee feature show an AUM Fee tile in the asset detail workspace. The tile summarizes the annual rate, fee recipient, last collection time, accrued estimate, total collected amount, and whether the rate is frozen. Use View AUM fee details to open the token's /aum-fee detail page.
The detail page separates:
- Configuration: annual rate, fee recipient, frozen state, and last collected time.
- Collection stats: estimated accrued fees and total collected fees.
If the token does not have the AUM Fee feature attached, the AUM Fee detail page shows an empty state instead of management controls.
Users with the matching token permissions see a Manage AUM fee menu on the detail page. Depending on their permissions, the menu can include actions to collect accrued fees, set the annual rate, set the fee recipient, and freeze the rate. Users without any of those permissions do not see the menu.
Business impact
- Holders: Fee accrual is inflationary: new tokens are minted, diluting existing holder percentage ownership. NAV per token decreases proportionally over time.
- Issuer / recipient: Fee collected as newly minted tokens to configured
feeRecipient. No treasury drawdown required. - Economics: Fee accrues continuously based on time elapsed and current total supply. Collection is triggered on demand (not automatic).
Risks & abuse cases
- Uncapped dilution: If
freezeFeeRate()is not called after launch, GOVERNANCE_ROLE can raise the fee rate at any time, retroactively increasing the accrued fee on next collection. - Delayed collection: Accrued fees do not execute until someone triggers collection. Large time gaps between collections produce large single-mint events, which may alarm holders or analytics systems.
- Fee recipient manipulation:
setFeeRecipient()can redirect fee flow to any address. No time-lock by default.
Controls & guardrails
| Role | Actions | Recommended guardrail |
|---|---|---|
GOVERNANCE_ROLE | setFeeBps(): set fee rate in basis points | Call freezeFeeRate() immediately after launch to lock rate permanently |
GOVERNANCE_ROLE | setFeeRecipient(): set collection destination | Multi-sig controlled; audit recipient changes |
GOVERNANCE_ROLE | freezeFeeRate(): permanently lock fee rate | Call at launch: prevents future rate changes |
Failure modes & edge cases
- Zero supply: If total supply is zero, no fee accrues regardless of time. Collection produces a zero-mint no-op.
- Rate frozen at zero: If
freezeFeeRate()is called withfeeBps = 0, the feature remains active but never collects. Disable it entirely instead. - Reentrant collection: If collection is called during a lifecycle hook chain, downstream hooks see the inflated supply in the same transaction. Order analytics features after AUM Fee.
Auditability & operational signals
AUMFeeCollected(collector, recipient, feeAmount, timestamp): emitted on each collection. Monitor for anomalous mint sizes.FeeRateUpdated(sender, oldFeeBps, newFeeBps): emitted on rate changes. Alert on any post-launch rate change.FeeRateFrozen(sender): emitted once on freeze. Absence of this event after launch is a configuration risk.
Dependencies
- No external ERC-20 dependency: fee paid in the token itself (minting).
- No treasury contract required.
- No other features required, but analytics features (Historical Balances) should run after AUM Fee in the hook order.
Compatibility & ordering notes
- Run AUM Fee before Historical Balances and Voting Power in the feature array: analytics hooks must see post-fee supply.
- No conflict with compliance modules (AUM Fee does not go through transfer compliance checks: it mints directly).
- Compatible with Maturity Redemption: AUM Fee stops having economic impact once transfers are blocked post-maturity, but it continues accruing until collection or feature removal.
Change impact
- Enable after launch: Retroactive accrual does not occur: accrual starts from the moment the feature is activated.
- Disable: Accrued-but-uncollected fees are lost. Collect before removing the feature.
- Rate change: Takes effect immediately on next collection calculation. Freeze rate to prevent future changes.
- Recipient change: Effective immediately for all future collections.
See also
- Token Features Catalog: return to the full feature catalog
- Asset Contracts: deployment architecture and role model
- Treasury Distribution: yield and fee distribution flows
Feature constraints
Understand DALP token feature dependencies, mutually exclusive pairs, feature-closure expansion, validated configuration ranges, and the split between UI, API, and smart-contract enforcement.
Transaction Fee
Per-transaction fee deducted from transfer amounts on every mint, burn, or transfer. Uses supportsRewriting to reduce the amount in-flight before compliance checks and recipient receipt.