RedirectingDepositHook
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)
callHook(address asset, uint256 assets)
Distributes a given amount of asset
across available subvaults based on their individual deposit capacity.
Execution Logic:
Retrieves:
Active
vault
context viaIVaultModule(address(this))
Configured
RiskManager
viavault.riskManager()
Number of subvaults via
vault.subvaults()
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
assets
accordinglyStops early if full amount has been distributed
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