> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mellow.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# LidoDepositHook

### Overview

`LidoDepositHook` is an implementation of the `IHook` interface that acts as a **conversion adapter** for incoming deposits. It standardizes various ETH-like assets into **`wstETH`** for use in downstream vault logic. The hook supports **ETH**, **WETH**, and **stETH** as input formats and ensures conversion to `wstETH` before optionally forwarding execution to a downstream `nextHook`.

### Primary Purpose

* Converts **ETH**, **WETH**, or **stETH** into **`wstETH`** on deposit.
* Ensures compatibility with protocols that expect `wstETH`.
* Provides **composable hooks** by chaining into a downstream `IHook` (`nextHook`).

### Constructor Parameters

| Parameter   | Type    | Description                                                          |
| ----------- | ------- | -------------------------------------------------------------------- |
| `wsteth_`   | address | Address of the `wstETH` token contract                               |
| `weth_`     | address | Address of the `WETH` token contract                                 |
| `nextHook_` | address | Address of the optional downstream hook to forward to after wrapping |

### Key Function

### `callHook(address asset, uint256 assets)`

Handles conversion of an input asset into `wstETH` and optionally delegates the call to a downstream hook.

**Supported Input Types:**

1. `wstETH` — forwarded directly
2. `stETH` — wrapped into `wstETH` via `IWSTETH(wsteth).wrap()`
3. `WETH` — unwrapped into ETH via `IWETH(weth).withdraw()`, then deposited into `wstETH`
4. `ETH` (i.e. `address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)`) — directly deposited into `wstETH`

**Execution Steps:**

* If `asset == wstETH`: do nothing
* If `asset == stETH`:
  * Approves `wstETH` to pull `stETH`
  * Calls `wrap()` on `wstETH` to convert to `wstETH`
* If `asset == WETH`:
  * Unwraps to ETH using `withdraw()`
  * Sends ETH to `wstETH` contract to mint `wstETH`
* If `asset == ETH`:
  * Sends ETH directly to `wstETH`
* After conversion:
  * Calculates how much new `wstETH` was received
  * If `nextHook` is configured, delegates `callHook(wstETH, amount)` to it

### Errors

* `UnsupportedAsset(address asset)` — Thrown if the provided asset is neither `wstETH`, `stETH`, `WETH`, nor `ETH`

### Assumptions:

It is assumed this hook will not trigger `STAKE_LIMIT` or other limit-related errors in the Lido contracts. If such errors do occur, the vault admin can reconfigure the system to bypass the automated staking hook. In this case, `RedirectingDepositHook` can be assigned to the relevant queues, delegating staking responsibilities to the vault curator via manual liquidity management.
