Source: src/FundManager.sol
Responsibility
FundManager is a tenant-level fund launchpad. One FundManager is created per tenant/organization by the FundManagerDeployer, and it can create any number of funds. It owns eight Factory instances—one per component—and wires a complete fund (hub + six spokes) in a single createFund transaction.
It also:
- Deploys Strategy proxies on behalf of its funds (
createStrategyForFund). - Lets role holders swap factories or upgrade the implementation used for future components, per component type.
- Forwards the protocol fee recipient from the FundManagerDeployer down to funds (
protocolFeeRecipient()), so FeeManager can resolve it live.
ACLModule access control, independent of any fund’s roles.
Fund creation flow
The Fund proxy is created uninitialized first so every spoke can be initialized with its address; the Fund is initialized last with all spoke addresses.
Every proxy’s ProxyAdmin is owned by
params.proxyAdmin—the tenant controls upgrades of everything belonging to its funds.CreateFundParams bundles:
adminproxyAdminfeeRecipientfeeBaseAsset- Share name and symbol
- Deposit and redeem asset lists
- First cutoff time
- Report delays
- Price safeties
- Fee config
- Risk config
- Initial role holders
Function reference
Fund creation
Factory / implementation management
One pair per component type, each guarded by its own role:SET_FUND_FACTORY_ROLESET_SHARE_FACTORY_ROLESET_DEPOSIT_QUEUE_FACTORY_ROLESET_REDEEM_QUEUE_FACTORY_ROLESET_ORACLE_FACTORY_ROLESET_FEE_MANAGER_FACTORY_ROLESET_RISK_MANAGER_FACTORY_ROLESET_STRATEGY_FACTORY_ROLE