Skip to content

Controller

Source: src/controllers/Controller.sol

The Controller is the central UUPS-upgradeable coordinator of the King's Vault V2 ecosystem. It manages vault registration, strategy registries, fund routing, NAV (Net Asset Value) proposals and confirmations, and the minting of performance fee shares.

State Structures

Struct Fields Purpose
Values timestamp, assets, supply, feeRate, pnl, isProfit A vault NAV snapshot.
VaultValues feeRate, activeBookValue, recalledYield, epochs, pending/confirmed values Per-vault NAV and PnL accounting.
VaultStrategies registered, strategies Per-vault strategy registry.
ControllerStorage manager, vaults, vaultValues, vaultStrategies ERC-7201 namespaced storage.

Public And External Functions

Function Access Description
initialize(address owner, address manager_) initializer Initializes Controller proxy, grants admin to owner, stores fee manager.
manager() public view Returns fee receiver address.
feeRate(address vault_) public view Returns vault performance fee rate where 1_000_000 = 100%.
pnlBasis(address vault_) public view Returns activeBookValue + recalledYield.
isVaultRegistered(address vault) public view Returns whether vault is registered.
totalStrategyAssets(address vault) public view Sums totalAssets() of all registered strategies for a vault.
strategies(address vault) public view Returns registered strategy list.
markedElapsedTime(address vault) public view Returns seconds between confirmed and previous confirmed snapshots.
markedValues(address vault) public view Returns current confirmed NAV assets and supply.
prevMarkedValues(address vault) public view Returns previous confirmed NAV assets and supply.
setManager(address manager_) Admin Updates fee receiver. Emits FeeReceiverSet.
setFeeRate(address vault_, uint256 feeRate_) Keeper, registered vault Sets performance fee rate. Reverts if feeRate_ >= 1_000_000. Emits FeeRateSet.
registerVault(address vault) Developer Registers a vault and initializes confirmed values. Emits VaultRegistered.
vaultExit(address vault) Guardian, registered vault Force exits every strategy for a vault and returns total exited amount.
vaultHarvest(address vault, address token) Keeper, registered vault Tells vault to sweep token to manager if manager is set.
strategyAdd(address vault, address strategy_) Developer, registered vault Adds compatible strategy to vault registry. Emits StrategyAdded.
strategyRevoke(address vault, address strategy_, bool force) Developer, registered vault, registered strategy Exits and removes strategy. Emits StrategyRevoked.
fundInvest(address vault, address strategy_, uint256 amount) Keeper, registered vault, registered strategy Moves vault idle assets into strategy and increases book value.
fundDivest(address vault, address strategy_, uint256 amount) Keeper, registered vault, registered strategy Withdraws from strategy to vault and decreases book value by actual withdrawn amount.
fundReplenishOnlyForVault(address vault, uint256 shortage) Registered vault only; msg.sender must equal vault Pro-rata liquidity waterfall across strategies.
fundExitOnlyForVault(address vault) Registered vault only; msg.sender must equal vault Exits all strategies for shutdown.
proposeValues(address vault) Keeper, registered vault Creates pending NAV epoch. Emits ValuesProposed.
confirmValues(address vault, uint256 epoch) Admin, registered vault Confirms latest pending epoch and mints fee shares if profitable. Emits ValuesConfirmed and possibly FeeSharesMinted.

Internal Functions

Function Description
_getControllerStorage() Returns Controller's ERC-7201 namespaced storage pointer.
_onlyRegisteredVault(address vault) Reverts if vault is not registered.
_onlyRegisteredStrategy(address vault, address strategy_) Reverts if strategy is not registered for the vault.
_onlyNoneRegisteredStrategy(address vault, address strategy_) Reverts if strategy is already registered for the vault.
_authorizeUpgrade(address) UUPS authorization, Admin only.
_initialValues(address vault) Writes initial confirmed NAV snapshot.
_confirmValues(address vault, uint256 epoch) Validates freshness/epoch and promotes pending to confirmed.
_exitAllStrategies(address vault) Calls exit(true) on every strategy and decreases book value.
_increaseBookValue(address vault, uint256 amount) Adds invested capital to active book value, first offsetting recalled yield.
_decreaseBookValue(address vault, uint256 amount) Reduces active book value; excess becomes recalled yield.