Skip to main content

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:
  1. Checks how much of the asset the vault already holds.
  2. If balance is sufficient → no-op.
  3. 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
Guarantees:
  • Only pulls the exact missing amount, no over-pulling
  • Efficient: stops once liquidity need is satisfied
  • Skips subvaults with 0 balance

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 vault invoking this hook implements IVaultModule and supports:
    • subvaults() → total number of subvaults
    • subvaultAt(index) → address of a given subvault
    • hookPullAssets(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.