Fee Wrapper
What is a Fee Wrapper?
A Fee Wrapper is a Vault V2 configured in a specific, constrained mode that enables distribution channels to add a fee layer on top of an existing Morpho Vault V2.
- Main Morpho Vault V2: Handles actual capital allocation to Morpho Markets (V1, V2, future versions). This is where yield is generated.
- Fee Wrapper: A lightweight Vault V2 that deposits into the main Morpho Vault V2, with the sole purpose of adding a fee layer per customer/distributor.

Key Properties
| Property | Description |
|---|---|
| ERC-4626 Mostly Compliant | Mostly compliant, with shares remaining fully ERC-20. See Vault V2 principles |
| Immutably Bound | Bound to a single Morpho Vault V2 at deployment. Can not be changed |
| Fee Flexibility | Owner can configure performance fees (up to 50%) and management fees (up to 5%) |
| Simplified Configuration | Risk management functions are abdicated, making operation simpler |
| Shared Liquidity | Users share the liquidity of the underlying Morpho Vault V2 |
Architecture
A Fee Wrapper is deployed with a carefully designed split between immutable, defaulted, and configurable parameters.
Fixed at deployment (addAdapter / removeAdapter abdicated):
- The single adapter pointing to the underlying Morpho Vault V2
- The adapter registry lock (no new adapters can ever be added)
- Absolute and relative caps set to maximum values
- Max rate set to maximum
- Force-deallocate penalty set to 2% (MAX_FORCE_DEALLOCATE_PENALTY)
- Liquidity adapter set to the single Morpho Vault V2 adapter
- All roles (Curator, Allocator, Sentinel) default to the owner
- Owner address
- Vault name and symbol
- Performance fee (up to 50%) and management fee (up to 5%)
- Fee recipient address
- Gate abdication mode (
abdicateNonCriticalGates)
Gates & Non-Custodiality
Gates control who can interact with the vault. Each gate is a contract slot that, when set, enforces on-chain rules on a specific action. A Fee Wrapper has four gates:
| Gate | Action it governs | Critical? |
|---|---|---|
| receiveAssetsGate | Who can deposit assets | Yes - can lock funds |
| receiveSharesGate | Who can receive shares | Yes - can lock funds |
| sendSharesGate | Who can send/transfer shares | Yes - can lock funds |
| sendAssetsGate | Who can be a withdrawal recipient | No - cannot lock funds |
The three critical gates can prevent users from accessing their own funds if misconfigured. The fourth gate (sendAssetsGate) only restricts who can receive withdrawn assets and cannot lock funds.
By default all four gates are set to address(0) (permissionless): anyone can deposit, withdraw, and transfer shares freely.
Non-custodial (recommended for DeFi)
Permanently abdicate the three critical gate setters at deployment. This locks them to address(0) forever - no one can ever restrict user access to funds. This action is irreversible.
The non-critical sendAssetsGate remains configurable so the curator can still set withdrawal-recipient rules post-deployment if needed, without affecting fund safety.
Compliance-ready (KYC/AML)
Keep all gate setters configurable and set gate contracts post-deployment to enforce on-chain rules (e.g., KYC whitelists). The curator can set or change gate contracts at any time via timelocked actions.
This enables compliance-ready distribution but makes the vault partially custodial, because the critical gates could restrict certain users from accessing their funds.
For more details on gates, see the Gates concept page and the Abdicate Gates tutorial.
Use Cases
- B2B Distribution: Distributors can deploy one Fee Wrapper per customer, each with custom fee configurations
- Revenue Sharing: Split native yield between the distribution channel and end users (e.g., 50/50 split via fee configuration)
- White-Label Products: Distributor can offer Morpho yield under their own brand with their own fee structure
Yield and Rewards
Native Yield (Inside ERC-4626 Flow)Native yield comes from interest paid by borrowers on underlying Morpho Markets. It accrues automatically to shares over time, requiring no separate claim - shares simply appreciate in value. Users withdraw the same token they deposited (e.g., USDC) plus accrued interest. Performance and management fees are applied to this yield.
External Rewards (Outside ERC-4626 Flow)External rewards (e.g., MORPHO tokens) come from incentives provided by Morpho governance, market creators, or token issuers, and are distributed via Merkl (updated every 8 hours). These rewards require a separate claim action through Merkl and are automatically forwarded to end depositors by default. It is possible to implement custom distribution. For specific reward routing (e.g., distributor claims rewards instead of users), coordinate with the Merkl team for address remapping configuration.
Deployment
Fee Wrapper Demo App
The simplest way to deploy a Fee Wrapper is through the Fee Wrapper Demo App, which provides a UI to:
- Deploy a new Fee Wrapper
- Check if a Fee Wrapper is properly configured
- Update fees on an existing Fee Wrapper
- View the full yield breakdown for a fee wrapper address
Find the factory addresses in the addresses section.
Programmatic Deployment
For programmatic deployments, use the FeeWrapperDeployer periphery contract to create and configure a wrapper in a single transaction.
Integration Guide
Query the Morpho API to compute post-fee APY. No on-chain reads needed - all data comes from the API.
1. Query the Morpho API
Endpoint: POST https://api.morpho.org/graphql
Use the fee wrapper address directly (not the underlying Morpho Vault V2 address) along with the chainID.
query FeeWrapperAPY {
feeWrapper: vaultV2ByAddress(
address: "0x2861ABE7AB28484Fb8375def4A7eb56C8F53fE8F"
chainId: 8453
) {
avgNetApy
avgNetApyExcludingRewards
performanceFee
managementFee
name
symbol
rewards {
supplyApr
asset { address, symbol }
}
adapters {
items {
type
address
... on MorphoVaultV2Adapter {
innerVault {
address
name
avgNetApyExcludingRewards
performanceFee
managementFee
rewards {
supplyApr
asset { address, symbol }
}
}
}
}
}
}
}2. Read Net APY
The API response includes pre-computed net APY values that account for the full fee chain (inner vault fees + wrapper fees + rewards):
avgNetApy- 6h rolling average net APY, including rewards. This is the recommended value for most integrations.avgNetApyExcludingRewards- Same as above but excluding reward incentives.
These values are ready to use directly - no manual computation needed.
If rewards are redirected via Merkl address remapping,
avgNetApyExcludingRewardsis the correct value to display (end users do not receive the rewards).
3. Advanced: Manual APY Breakdown (Optional)
For newly deployed fee wrappers, avgNetApy may be zero or noisy until sufficient history accumulates. The manual computation below uses innerVault.avgNetApyExcludingRewards for consistent results in those cases, and is also useful when a granular per-layer fee breakdown is needed.
// innerVault.avgNetApyExcludingRewards already includes inner vault fee deductions
adapterYield = innerVault.avgNetApyExcludingRewards
wrapperPerfFeeDeduction = max(adapterYield, 0) * feeWrapper.performanceFee
nativeYield = adapterYield - wrapperPerfFeeDeduction - feeWrapper.managementFee
rewardsApr = sum(innerVault.rewards[].supplyApr)
netApy = nativeYield + rewardsAprNote:
avgNetApyExcludingRewardsis the 6h rolling average net yield after the inner vault's own performance and management fees, but excluding reward incentives. Rewards are sourced from the inner vault (innerVault.rewards[]) and distributed via Merkl based on the inner vault's market positions.
More Fee Wrapper API data can be found here.
Roles & Auth Model
All roles default to the owner at deployment:
| Role | Default | Description |
|---|---|---|
| Owner | deployer | Top-level permissions. No timelock on ownership actions. |
| Curator | owner | Risk manager. Most actions are timelocked. |
| Allocator | owner | Portfolio manager. No timelock on allocation actions. |
| Sentinel | owner | Safety role. Can revoke pending actions and reduce risk. |
- Owner-level: Transfer ownership, set roles - no timelock
- Curator-level: Change fees, fee recipients, caps - timelocked
- Allocator-level: Allocate/deallocate to the adapter - no timelock
Security Considerations
What the Owner CAN Do:- Change performance fees (up to 50%, timelocked)
- Change management fees (up to 5%, timelocked)
- Change fee recipients (timelocked)
- Add/remove allocators (timelocked)
- Change the underlying vault (abdicated)
- Add new adapters (abdicated)
- Remove the existing adapter (abdicated)
- Access user funds directly
- Prevent users from exiting (via forceDeallocate)
