Skip to main content
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.
It has its own 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:
  • admin
  • proxyAdmin
  • feeRecipient
  • feeBaseAsset
  • 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_ROLE
  • SET_SHARE_FACTORY_ROLE
  • SET_DEPOSIT_QUEUE_FACTORY_ROLE
  • SET_REDEEM_QUEUE_FACTORY_ROLE
  • SET_ORACLE_FACTORY_ROLE
  • SET_FEE_MANAGER_FACTORY_ROLE
  • SET_RISK_MANAGER_FACTORY_ROLE
  • SET_STRATEGY_FACTORY_ROLE
Existing fund proxies are not affected by either—they are upgraded through their own ProxyAdmins.

Views

FundManagerDeployer · Fund · Factory