Overview
RedirectingDepositHook is a deposit-time liquidity allocation hook implementing the IHook interface. It is designed to redirect newly deposited assets from a vault into its underlying subvaults, based on per-subvault risk and capacity constraints defined by a RiskManager.
This hook helps distribute liquidity optimally during deposit flows.
Purpose
- Automatically forwards newly deposited assets from the main vault into eligible subvaults.
- Delegates decision-making to the vault’s configured
RiskManager, which determines per-subvault deposit limits. - Ensures that subvaults do not exceed their capacity constraints.
Key Function
callHook(address asset, uint256 assets)
Distributes a given amount of asset across available subvaults based on their individual deposit capacity.
Execution Logic:
- Retrieves:
- Active
vaultcontext viaIVaultModule(address(this)) - Configured
RiskManagerviavault.riskManager() - Number of subvaults via
vault.subvaults()
- Active
- Iterates over each subvault:
- Fetches max allowed deposit via
riskManager.maxDeposit(subvault, asset) - If allowed amount is zero → skip
- Otherwise:
- Pushes
min(assets, allowed)viavault.hookPushAssets() - Decrements
assetsaccordingly - Stops early if full amount has been distributed
- Pushes
- Fetches max allowed deposit via
Components and Assumptions
- Vault: Must implement
IVaultModule:subvaults()→ number of subvaultssubvaultAt(index)→ returns subvault addresshookPushAssets(subvault, asset, amount)→ transfers tokens to subvaultriskManager()→ returns associatedIRiskManager
- Risk Manager: Must implement:
maxDeposit(subvault, asset)→ returns max allowed deposit into that subvault