# IMaverickV2VotingEscrowFactory

### Functions <a href="#functions" id="functions"></a>

#### legacyVeMav <a href="#legacyvemav" id="legacyvemav"></a>

This function retrieves the address of the legacy Maverick V1 Voting Escrow (veMAV) token. The address will be zero for blockchains where this contract is deployed that do not have a legacy MAV contract deployed.

```solidity
function legacyVeMav() external view returns (IERC20);
```

**Returns**

| Name     | Type     | Description                                               |
| -------- | -------- | --------------------------------------------------------- |
| `<none>` | `IERC20` | legacyVeMav The address of the IERC20 legacy veMav token. |

#### isFactoryToken <a href="#isfactorytoken" id="isfactorytoken"></a>

This function checks whether a provided IMaverickV2VotingEscrow contract address was created by this factory.

```solidity
function isFactoryToken(IMaverickV2VotingEscrow veToken) external view returns (bool);
```

**Parameters**

| Name      | Type                      | Description                                                        |
| --------- | ------------------------- | ------------------------------------------------------------------ |
| `veToken` | `IMaverickV2VotingEscrow` | The address of the IMaverickV2VotingEscrow contract to be checked. |

**Returns**

| Name     | Type   | Description                                                                             |
| -------- | ------ | --------------------------------------------------------------------------------------- |
| `<none>` | `bool` | isFactoryToken True if the veToken was created by this factory, False otherwise (bool). |

#### createVotingEscrow <a href="#createvotingescrow" id="createvotingescrow"></a>

This function creates a new Maverick V2 Voting Escrow (veToken) contract for a specified ERC20 base token.

Once the ve contract is created, it will call `name()` and `symbol()` on the `baseToken`. If those functions do not exist, the ve creation will revert.

```solidity
function createVotingEscrow(IERC20 baseToken) external returns (IMaverickV2VotingEscrow veToken);
```

**Parameters**

| Name        | Type     | Description                                                                       |
| ----------- | -------- | --------------------------------------------------------------------------------- |
| `baseToken` | `IERC20` | The address of the ERC-20 token to be used as the base token for the new veToken. |

**Returns**

| Name      | Type                      | Description                                                        |
| --------- | ------------------------- | ------------------------------------------------------------------ |
| `veToken` | `IMaverickV2VotingEscrow` | The address of the newly created IMaverickV2VotingEscrow contract. |

#### votingEscrows <a href="#votingescrows" id="votingescrows"></a>

This function retrieves a paginated list of existing Maverick V2 Voting Escrow (veToken) contracts within a specified index range.

```solidity
function votingEscrows(uint256 startIndex, uint256 endIndex)
    external
    view
    returns (IMaverickV2VotingEscrow[] memory votingEscrows);
```

**Parameters**

| Name         | Type      | Description                                           |
| ------------ | --------- | ----------------------------------------------------- |
| `startIndex` | `uint256` | The starting index for the desired range of veTokens. |
| `endIndex`   | `uint256` | The ending index for the desired range of veTokens.   |

**Returns**

| Name            | Type                        | Description                                                                                         |
| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------- |
| `votingEscrows` | `IMaverickV2VotingEscrow[]` | An array of IMaverickV2VotingEscrow addresses representing the veTokens within the specified range. |

#### votingEscrowsLength <a href="#votingescrowslength" id="votingescrowslength"></a>

This function retrieves the total number of deployed Maverick V2 Voting Escrow (veToken) contracts.

```solidity
function votingEscrowsLength() external view returns (uint256 count);
```

**Returns**

| Name    | Type      | Description                   |
| ------- | --------- | ----------------------------- |
| `count` | `uint256` | The total number of veTokens. |

#### votingEscrowAddress <a href="#votingescrowaddress" id="votingescrowaddress"></a>

This function retrieves the address of the existing Maverick V2 Voting Escrow (veToken) contract associated with a specific ERC20 base token.

```solidity
function votingEscrowAddress(IERC20 baseToken) external view returns (IMaverickV2VotingEscrow veToken);
```

**Parameters**

| Name        | Type     | Description                                                                     |
| ----------- | -------- | ------------------------------------------------------------------------------- |
| `baseToken` | `IERC20` | The address of the ERC-20 base token for which to retrieve the veToken address. |

**Returns**

| Name      | Type                      | Description                                                                                                             |
| --------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `veToken` | `IMaverickV2VotingEscrow` | The address of the IMaverickV2VotingEscrow contract associated with the base token, or the zero address if none exists. |

#### baseTokenParameter <a href="#basetokenparameter" id="basetokenparameter"></a>

This function retrieves the default base token used for creating new voting escrow contracts. This state variable is only used temporarily when a new veToken is deployed.

```solidity
function baseTokenParameter() external returns (IERC20);
```

**Returns**

| Name     | Type     | Description                                             |
| -------- | -------- | ------------------------------------------------------- |
| `<none>` | `IERC20` | baseToken The address of the default ERC-20 base token. |

### Errors <a href="#errors" id="errors"></a>

#### VotingEscrowTokenAlreadyExists <a href="#votingescrowtokenalreadyexists" id="votingescrowtokenalreadyexists"></a>

```solidity
error VotingEscrowTokenAlreadyExists(IERC20 baseToken, IMaverickV2VotingEscrow veToken);
```

<br>


---

# 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.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-reward-contracts/interfaces/imaverickv2votingescrowfactory.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.
