# IMultiDepositorVaultFactory

**Inherits:** IFeeVaultDeployer

Interface for the multi depositor vault factory

## Functions

### create

Create multi depositor vault

```solidity
function create(
    bytes32 salt,
    string calldata description,
    ERC20Parameters calldata erc20Params,
    BaseVaultParameters calldata baseVaultParams,
    FeeVaultParameters calldata feeVaultParams,
    IBeforeTransferHook beforeTransferHook,
    address expectedVaultAddress
) external returns (address deployedVault);
```

**Parameters**

| Name                   | Type                  | Description                                                    |
| ---------------------- | --------------------- | -------------------------------------------------------------- |
| `salt`                 | `bytes32`             | The salt used to generate the vault address                    |
| `description`          | `string`              | Vault description                                              |
| `erc20Params`          | `ERC20Parameters`     | ERC20 parameters for deployment                                |
| `baseVaultParams`      | `BaseVaultParameters` | Base vault parameters for deployment                           |
| `feeVaultParams`       | `FeeVaultParameters`  | Fee vault parameters for deployment                            |
| `beforeTransferHook`   | `IBeforeTransferHook` | Before transfer hooks for deployment                           |
| `expectedVaultAddress` | `address`             | Expected vault address to check against deployed vault address |

**Returns**

| Name            | Type      | Description            |
| --------------- | --------- | ---------------------- |
| `deployedVault` | `address` | Deployed vault address |

### getERC20Name

Get the ERC20 name of vault units

```solidity
function getERC20Name() external view returns (string memory name);
```

**Returns**

| Name   | Type     | Description                       |
| ------ | -------- | --------------------------------- |
| `name` | `string` | The name of the vault ERC20 token |

### getERC20Symbol

Get the ERC20 symbol of vault units

```solidity
function getERC20Symbol() external view returns (string memory symbol);
```

**Returns**

| Name     | Type     | Description                         |
| -------- | -------- | ----------------------------------- |
| `symbol` | `string` | The symbol of the vault ERC20 token |

### multiDepositorVaultParameters

Get the vault parameters

```solidity
function multiDepositorVaultParameters() external view returns (IBeforeTransferHook beforeTransferHook);
```

**Returns**

| Name                 | Type                  | Description                                  |
| -------------------- | --------------------- | -------------------------------------------- |
| `beforeTransferHook` | `IBeforeTransferHook` | The hooks called before vault unit transfers |

## Events

### VaultCreated

Emitted when the vault is created

```solidity
event VaultCreated(
    address indexed vault,
    address indexed owner,
    address hooks,
    ERC20Parameters erc20Params,
    FeeVaultParameters feeVaultParams,
    IBeforeTransferHook beforeTransferHook,
    string description
);
```

**Parameters**

| Name                 | Type                  | Description           |
| -------------------- | --------------------- | --------------------- |
| `vault`              | `address`             | Vault address         |
| `owner`              | `address`             | Initial owner address |
| `hooks`              | `address`             | Vault hooks address   |
| `erc20Params`        | `ERC20Parameters`     | ERC20 parameters      |
| `feeVaultParams`     | `FeeVaultParameters`  | Fee vault parameters  |
| `beforeTransferHook` | `IBeforeTransferHook` | Before transfer hooks |
| `description`        | `string`              | Vault description     |

## Errors

### Aera\_\_ZeroAddressDeployDelegate

Thrown when deploy delegate is the zero address

```solidity
error Aera__ZeroAddressDeployDelegate();
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aera.finance/the-protocol/core/imultidepositorvaultfactory.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
