# Factory

The Factory smart contract oversees the full functionality of token pair registration and transactions in MESHswap.&#x20;

## Address

* Polygon Mainnet :[ ](https://scope.klaytn.com/account/0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654?tabId=txList)[0x9f3044f7f9fc8bc9ed615d54845b4577b833282d](https://polygonscan.com/address/0x9f3044f7f9fc8bc9ed615d54845b4577b833282d)

## Events, Read-Only Functions, and State-Changing Functions

{% tabs %}
{% tab title="Events" %}

## Events

#### ChangeCreateFee

```solidity
event ChangeCreateFee(uint _createFee);
```

* &#x20;An event to change the Pool Contract Creation Fee when adding a new liquidity pool pair

#### CreatePool

```solidity
event CreatePool(address token0, uint amount0, address token1, uint amount1, uint fee, address exchange, uint exid);
```

* Event to create new liquidity pool
* parameters
  * `token0` : token0 address in pair
  * `amount0` : token0 amount in pool
  * `token1` : token1 address in pair
  * `amount1` : token1 amount in pool
  * `fee` : pool fee rate
  * `exchange` : exchange contract address of this pool
  * `exid` : exchange id

{% endtab %}

{% tab title="Read-Only Functions" %}

## Read-Only Functions

#### WETH

* WETH contract address.

#### mesh

* MESH contract address

#### allPairsLength

* Returns the total number of pairs created through the factory so far.

#### getPoolCount

* Returns the total number of pairs created through the factory so far.

#### createFee

* The amount of MESH that must be paired to create a new liquidity pool pair

#### owner

* Factory Contract Address

#### nextOwner

* The next Governance Contract Address set in advance.

#### pools

* List of liquidity pool pairings&#x20;
* Each item saves the smart contract address of the liquidity pool

#### poolExist

* Returns if the contract for the given liquidiy pool pair exists

#### tokenToPool

* The contract address corresponding to the token0, token1 pair
* When the addresses of token0 and token1 are inputted, this returns the contract address of the corresponding pairing
* Returns the  same contract address regardless of the order of the liquidity pool pairing tokens:

  tokenToPool\[token0]\[token1] == tokenToPool\[token1]\[token0]

####

#### allPairs

```
function allPairs(uint) external view returns (address pair);
```

* Returns the address of the `n`th pair (`0`-indexed) created through the factory

#### getPair

```
function getPair(address token0, address token1) external view returns (address pair);
```

* Returns the address of the pair for `token0` and `token1`, if it has been created, else `address(0)` (`0x0000000000000000000000000000000000000000`).

#### getPoolAddress

```
function getPoolAddress(uint idx) public view returns (address)
```

* Returns the address of the `n`th pair (`0`-indexed) created through the factory
  {% endtab %}

{% tab title="State-Changing Functions" %}

## State-Changing Functions

#### createETHPool

```solidity
function createETHPool(address token, uint amount, uint fee) public payable 
```

* A method called to add a liquidity pair with one side as MATIC
* The wallet that calls this must have MESH greater than or equal to createFee
* Token for when the WMATIC / ERC-20 pair to be registered has never been registered before
* Parameters
  * `token` : ERC-20 token address to add liquidity
  * `amount` : the amount of tokens (ERC-20) to be provided for the initial liquidity
  * `fee` : Sets the initial fee value for liquidity pairs
    * A value between 0 and 100
    * Meaning: 0 -> 0%, 100 -> 1%
  * `msg.value` : MATIC quantity to initially supply liquidity&#x20;
    * Delivers the transaction value without specifying otherwise

#### createTokenPool

```solidity
 function createTokenPool(address token0, uint amount0, address token1, uint amount1, uint fee) public
```

* Method called to add liquidity pair in case of ERC-20 token pair
* The wallet calling the MESH above createFee must have it.
* parameter
  * `token0` : The address of the first token
  * `amount0` : The quantity of the first token that supplies the initial liquidity
  * `token1` : The address of the second token
  * `amount1` : The quantity of the second token that supplies the initial liquidity
  * `fee` : Sets the initial fee value for liquidity pairs

{% endtab %}
{% endtabs %}


---

# 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.meshswap.fi/developers/contract/factory.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.
