# Vaults

The `vaults` module in the Inception protocol manages how assets are deposited, tokenized, and routed through strategy-specific adapters. It forms the foundation of the Inception inToken infrastructure and enables composability by abstracting different underlying strategies behind a unified vault interface.

Vaults are modular and extensible, powered by a plug-in architecture using adapters and handlers. Each vault is deployed through a factory and interacts with both assets and strategies via well-defined adapter interfaces.

## Key Components

#### 1. **Base Adapters**

* **`InceptionBaseAdapter.sol`**: Core abstract contract that standardizes the adapter structure. It handles initialization, asset registration, access control, and compatibility with ERC-4626-like logic.
* **`InceptionEigenAdapter.sol`**: Adapter implementation integrating EigenLayer strategies into Inception vaults.

#### 2. **Adapter Handler**

* **`AdapterHandler.sol`**: A router that maps vaults to their respective adapters. Ensures that calls from vaults are correctly forwarded to the adapter implementing the logic for the selected strategy.

#### 3. **Asset Handler**

* Controls the list of supported tokens and tracks relationships between vaults and the tokens they can accept.

#### 4. **Interfaces**

* Define the expected structure and communication standard between vaults, adapters, and other contracts (e.g., `IVault`, `IAdapter`, etc.).

## Flow Overview

1. A new vault is created via the factory, specifying:
   * Accepted asset(s)
   * Adapter to use
   * Configuration parameters
2. Deposits into the vault are routed to the adapter, which executes strategy-specific logic (e.g., restaking, yield generation).
3. Withdrawals are similarly processed through the adapter, ensuring asset recovery and accounting.
4. Tokenized representations (e.g., `inETH`) are minted and burned based on deposits/withdrawals.

## Smart Contract Highlights

| Contract                      | Role                                       |
| ----------------------------- | ------------------------------------------ |
| `InceptionBaseAdapter.sol`    | Defines adapter logic base class           |
| `InceptionEigenAdapter.sol`   | Specific adapter for EigenLayer strategies |
| `AdapterHandler.sol`          | Central adapter registry and router        |
| `AssetHandler.sol`            | Asset registry and validation              |
| `VaultFactory.sol` (external) | Deploys and configures new vaults          |

## Extensibility

* Developers can build new adapters for different protocols (e.g., Lido, Pendle, Morpho).
* New strategies only require adapter contracts to follow the same interfaces.
* Vaults are upgradeable (OpenZeppelin proxies), allowing iterative improvements and safety fixes.

## Notes

* Contracts are written in Solidity and follow Hardhat development standards.
* `.openzeppelin/` folder contains proxy deployment metadata.
* Tests and deployment scripts are found in `test/` and `scripts/` respectively.
