> For the complete documentation index, see [llms.txt](https://docs.aera.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aera.finance/v2-archive/contracts/aerav2factory.md).

# AeraV2Factory

## AeraV2Factory

**Inherits:** IAeraV2Factory, Sweepable

Used to create new vaults and deploy modules.

*Only one instance of the factory will be required per chain.*

### State Variables

#### wrappedNativeToken

The address of wrapped native token.

```solidity
address public immutable wrappedNativeToken;
```

#### parameters

STORAGE ///

Vault parameters for vault deployment.

```solidity
Parameters public override parameters;
```

### Functions

#### constructor

FUNCTIONS ///

Initialize the factory contract.

```solidity
constructor(address wrappedNativeToken_) Ownable;
```

**Parameters**

| Name                  | Type      | Description                          |
| --------------------- | --------- | ------------------------------------ |
| `wrappedNativeToken_` | `address` | The address of wrapped native token. |

#### create

Create V2 vault.

```solidity
function create(
    bytes32 saltInput,
    string calldata description,
    VaultParameters calldata vaultParameters,
    AssetRegistryParameters calldata assetRegistryParameters,
    HooksParameters calldata hooksParameters
)
    external
    override
    onlyOwner
    returns (
        address deployedVault,
        address deployedAssetRegistry,
        address deployedHooks
    );
```

**Parameters**

| Name                      | Type                      | Description                                   |
| ------------------------- | ------------------------- | --------------------------------------------- |
| `saltInput`               | `bytes32`                 | The salt input value to generate salt.        |
| `description`             | `string`                  | Vault description.                            |
| `vaultParameters`         | `VaultParameters`         | Struct details for vault deployment.          |
| `assetRegistryParameters` | `AssetRegistryParameters` | Struct details for asset registry deployment. |
| `hooksParameters`         | `HooksParameters`         | Struct details for hooks deployment.          |

**Returns**

| Name                    | Type      | Description                             |
| ----------------------- | --------- | --------------------------------------- |
| `deployedVault`         | `address` | The address of deployed vault.          |
| `deployedAssetRegistry` | `address` | The address of deployed asset registry. |
| `deployedHooks`         | `address` | The address of deployed hooks.          |

#### computeVaultAddress

Calculate deployment address of V2 vault.

```solidity
function computeVaultAddress(
    bytes32 saltInput,
    string calldata description,
    VaultParameters calldata vaultParameters
) external view override returns (address);
```

**Parameters**

| Name              | Type              | Description                            |
| ----------------- | ----------------- | -------------------------------------- |
| `saltInput`       | `bytes32`         | The salt input value to generate salt. |
| `description`     | `string`          | Vault description.                     |
| `vaultParameters` | `VaultParameters` | Struct details for vault deployment.   |

#### \_deployAssetRegistry

INTERNAL FUNCTIONS ///

Deploy asset registry.

```solidity
function _deployAssetRegistry(
    bytes32 salt,
    address vault,
    AssetRegistryParameters memory assetRegistryParameters
) internal returns (address deployed);
```

**Parameters**

| Name                      | Type                      | Description                                   |
| ------------------------- | ------------------------- | --------------------------------------------- |
| `salt`                    | `bytes32`                 | The salt value to deploy asset registry.      |
| `vault`                   | `address`                 | Vault address.                                |
| `assetRegistryParameters` | `AssetRegistryParameters` | Struct details for asset registry deployment. |

**Returns**

| Name       | Type      | Description                             |
| ---------- | --------- | --------------------------------------- |
| `deployed` | `address` | The address of deployed asset registry. |

#### \_deployHooks

Deploy hooks.

```solidity
function _deployHooks(
    bytes32 salt,
    address vault,
    HooksParameters memory hooksParameters
) internal returns (address deployed);
```

**Parameters**

| Name              | Type              | Description                          |
| ----------------- | ----------------- | ------------------------------------ |
| `salt`            | `bytes32`         | The salt value to deploy hooks.      |
| `vault`           | `address`         | Vault address.                       |
| `hooksParameters` | `HooksParameters` | Struct details for hooks deployment. |

**Returns**

| Name       | Type      | Description                    |
| ---------- | --------- | ------------------------------ |
| `deployed` | `address` | The address of deployed hooks. |

#### \_deployVault

Deploy V2 vault.

```solidity
function _deployVault(
    bytes32 salt,
    address assetRegistry,
    address hooks,
    string calldata description,
    VaultParameters memory vaultParameters
) internal returns (address deployed);
```

**Parameters**

| Name              | Type              | Description                          |
| ----------------- | ----------------- | ------------------------------------ |
| `salt`            | `bytes32`         | The salt value to create vault.      |
| `assetRegistry`   | `address`         | Asset registry address.              |
| `hooks`           | `address`         | Hooks address.                       |
| `description`     | `string`          | Vault description.                   |
| `vaultParameters` | `VaultParameters` | Struct details for vault deployment. |

**Returns**

| Name       | Type      | Description                    |
| ---------- | --------- | ------------------------------ |
| `deployed` | `address` | The address of deployed vault. |

#### \_computeVaultAddress

Calculate deployment address of V2 vault.

```solidity
function _computeVaultAddress(bytes32 salt) internal view returns (address);
```

**Parameters**

| Name   | Type      | Description                     |
| ------ | --------- | ------------------------------- |
| `salt` | `bytes32` | The salt value to create vault. |

**Returns**

| Name     | Type      | Description                    |
| -------- | --------- | ------------------------------ |
| `<none>` | `address` | Calculated deployment address. |

#### \_calculateSalt

Calculate salt from vault parameters.

```solidity
function _calculateSalt(
    bytes32 saltInput,
    VaultParameters memory vaultParameters,
    string calldata description
) internal pure returns (bytes32);
```

**Parameters**

| Name              | Type              | Description                          |
| ----------------- | ----------------- | ------------------------------------ |
| `saltInput`       | `bytes32`         | The salt value to create vault.      |
| `vaultParameters` | `VaultParameters` | Struct details for vault deployment. |
| `description`     | `string`          | Vault description.                   |

### Events

#### VaultCreated

EVENTS ///

Emitted when the vault is created.

```solidity
event VaultCreated(
    address indexed vault,
    address assetRegistry,
    address hooks,
    address indexed owner,
    address indexed guardian,
    address feeRecipient,
    uint256 fee,
    string description,
    address wrappedNativeToken
);
```

### Errors

#### Aera\_\_DescriptionIsEmpty

ERRORS ///

```solidity
error Aera__DescriptionIsEmpty();
```

#### Aera\_\_WrappedNativeTokenIsZeroAddress

```solidity
error Aera__WrappedNativeTokenIsZeroAddress();
```

#### Aera\_\_InvalidWrappedNativeToken

```solidity
error Aera__InvalidWrappedNativeToken();
```

#### Aera\_\_VaultAddressMismatch

```solidity
error Aera__VaultAddressMismatch(address deployed, address computed);
```

#### Aera\_\_GuardianIsAssetRegistryOwner

```solidity
error Aera__GuardianIsAssetRegistryOwner();
```

#### Aera\_\_GuardianIsHooksOwner

```solidity
error Aera__GuardianIsHooksOwner();
```
