# 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();
```
