Overview
BasicRedeemHook is a minimal hook implementation for IHook, designed to dynamically fetch liquidity from subvaults during redemption processing in a VaultModule. It ensures that enough assets are available for user redemptions by pulling liquidity from a set of registered subvaults.
This hook is typically invoked by a vault’s redemption queue or during redeem() operations when assets must be made liquid.
Purpose
- Ensures sufficient liquidity in the vault to fulfill asset redemptions.
- Minimizes idle capital by pulling only when needed.
- Supports liquidity routing across subvaults.
Key Functions
callHook(address asset, uint256 assets)
Attempts to make assets of asset liquid within the main vault by pulling from subvaults if needed.
Execution Flow:
- Checks how much of the
assetthe vault already holds. - If balance is sufficient → no-op.
- Otherwise:
- Iterates over subvaults (via
subvaultAt(i)) - For each subvault:
- Pulls only the required portion via
hookPullAssets() - Stops when total required assets have been pulled
- Pulls only the required portion via
- Iterates over subvaults (via
- Only pulls the exact missing amount, no over-pulling
- Efficient: stops once liquidity need is satisfied
- Skips subvaults with
0balance
getLiquidAssets(address asset) → uint256
Returns the total liquid amount of a given asset available across the vault and all its subvaults.
- Reads balances:
vault.balanceOf(asset)subvault[i].balanceOf(asset)for each subvault
- Aggregates and returns sum
Contract Assumptions
- The
vaultinvoking this hook implementsIVaultModuleand supports:subvaults()→ total number of subvaultssubvaultAt(index)→ address of a given subvaulthookPullAssets(subvault, asset, amount)→ callable method to move funds
Security Considerations
- Hook only pulls assets using vault-controlled
hookPullAssets(), ensuring controlled asset flow. - Assumes vault validates which hook is active — no permissioning within the hook itself.