# V3Factory

&#x20;This contract deploys V3 pools and manages ownership and control over pool protocol fees

## Code

Github Link: (Will be updated after official launch)<br>

## Address

* Cypress :  [0xA15Be7e90df29A4aeaD0C7Fc86f7a9fBe6502Ac9](https://scope.klaytn.com/account/0xA15Be7e90df29A4aeaD0C7Fc86f7a9fBe6502Ac9?tabId=txList):&#x20;

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

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

## Events

**PoolCreated**&#x20;

```solidity
event PoolCreated(
    address indexed token0,
    address indexed token1,
    uint24 indexed fee,
    int24 tickSpacing,
    address pool,
    uint256 exid
)
```

Emitted when a pool is created

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters-6)

<table><thead><tr><th width="162.66666666666666">Name</th><th width="98">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>token0</code></td><td>address</td><td>The first token of the pool by address sort order</td></tr><tr><td><code>token1</code></td><td>address</td><td>The second token of the pool by address sort order</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>The fee collected upon every swap in the pool, denominated in hundredths of a bip</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>The minimum number of ticks between initialized ticks</td></tr><tr><td><code>pool</code></td><td>address</td><td>The address of the created pool</td></tr></tbody></table>

#### FeeAmountEnabled[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#feeamountenabled) <a href="#feeamountenabled" id="feeamountenabled"></a>

```solidity
event FeeAmountEnabled(
    uint24 fee,
    int24 tickSpacing
)
```

Emitted when a new fee amount is enabled for pool creation via the factory

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters-7)

<table><thead><tr><th width="168.66666666666666">Name</th><th width="90">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>The enabled fee, denominated in hundredths of a bip</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>The minimum number of ticks between initialized ticks for pools created with the given fee</td></tr></tbody></table>
{% endtab %}

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

## Read-Only Functions

**getPoolCount**

```solidity
function getPoolCount() external view override returns (uint256);
```

Get the number of pools created in V3

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Factory#return-values)

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td></td><td>uint256</td><td>The number of pools created in V3</td></tr></tbody></table>

**getPoolAddress**

```solidity
function getPoolAddress(uint256 idx) external view override returns (address);
```

**Parameters:**

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>idx</code></td><td>uint256</td><td>The index number</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Factory#return-values)

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td></td><td>address</td><td>The address of the pool</td></tr></tbody></table>

#### getPool[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#getpool) <a href="#getpool" id="getpool"></a>

```solidity
function getPool(
    address tokenA,
    address tokenB,
    uint24 fee
) external view returns (address pool)
```

Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist

tokenA and tokenB may be passed in either token0/token1 or token1/token0 order

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters-1)

<table><thead><tr><th width="137.66666666666666">Name</th><th width="105">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenA</code></td><td>address</td><td>The contract address of either token0 or token1</td></tr><tr><td><code>tokenB</code></td><td>address</td><td>The contract address of the other token</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>The fee collected upon every swap in the pool, denominated in hundredths of a bip</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#return-values-2)

<table><thead><tr><th width="145.66666666666666">Name</th><th width="119">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td>address</td><td>The pool address</td></tr></tbody></table>

**feeAmountTickSpacing**[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#feeamounttickspacing)

```solidity
function feeAmountTickSpacing(
    uint24 fee
) external view returns (int24)
```

Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled

A fee amount can never be removed, so this value should be hard coded or cached in the calling context

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters)

<table><thead><tr><th width="133.66666666666666">Name</th><th width="106">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#return-values-1)

<table><thead><tr><th width="179">Type</th><th>Description</th></tr></thead><tbody><tr><td>int24</td><td>tick spacing</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

**createPool**

```solidity
function createPool(
    address tokenA,
    address tokenB,
    uint24 fee
) external returns (address pool)
```

* Creates a pool for the given two tokens and fee
* tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved from the fee.&#x20;

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Factory#parameters)

<table><thead><tr><th width="135.66666666666666">Name</th><th width="111">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenA</code></td><td>address</td><td>One of the two tokens in the desired pool</td></tr><tr><td><code>tokenB</code></td><td>address</td><td>The other of the two tokens in the desired pool</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>The desired fee for the pool</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Factory#return-values)

<table><thead><tr><th width="138.66666666666666">Name</th><th width="109">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td>address</td><td>The address of the newly created pool</td></tr></tbody></table>

#### enableFeeAmount[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#enablefeeamount) <a href="#enablefeeamount" id="enablefeeamount"></a>

```solidity
function enableFeeAmount(
    uint24 fee,
    int24 tickSpacing
) external
```

Enables a fee amount with the given tickSpacing

Fee amounts may never be removed once enabled

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters-4)

<table><thead><tr><th width="164.66666666666666">Name</th><th width="108">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>The spacing between ticks to be enforced for all pools created with the given fee amount</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
