# IBonsaiswapV3Factory

The Bonsaiswap V3 Factory facilitates creation of Bonsaiswap V3 pools and control over the protocol fees

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

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

```solidity
  function owner(
  ) external view returns (address)
```

Returns the current owner of the factory

Can be changed by the current owner via setOwner

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

| Type    | Description                  |
| ------- | ---------------------------- |
| address | address of the factory owner |

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

```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)

| Name  | Type   | Description                                                                             |
| ----- | ------ | --------------------------------------------------------------------------------------- |
| `fee` | uint24 | The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee |

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

| Type  | Description  |
| ----- | ------------ |
| int24 | tick spacing |

#### 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)

| Name     | Type    | Description                                                                       |
| -------- | ------- | --------------------------------------------------------------------------------- |
| `tokenA` | address | The contract address of either token0 or token1                                   |
| `tokenB` | address | The contract address of the other token                                           |
| `fee`    | uint24  | The fee collected upon every swap in the pool, denominated in hundredths of a bip |

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

| Name   | Type    | Description      |
| ------ | ------- | ---------------- |
| `pool` | address | The pool address |

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

```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. The call will revert if the pool already exists, the fee is invalid, or the token arguments are invalid.

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

| Name     | Type    | Description                                     |
| -------- | ------- | ----------------------------------------------- |
| `tokenA` | address | One of the two tokens in the desired pool       |
| `tokenB` | address | The other of the two tokens in the desired pool |
| `fee`    | uint24  | The desired fee for the pool                    |

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

| Name   | Type    | Description                           |
| ------ | ------- | ------------------------------------- |
| `pool` | address | The address of the newly created pool |

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

```solidity
  function setOwner(
    address _owner
  ) external
```

Updates the owner of the factory

Must be called by the current owner

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

| Name     | Type    | Description                  |
| -------- | ------- | ---------------------------- |
| `_owner` | address | The new owner of the factory |

#### 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)

| Name          | Type   | Description                                                                              |
| ------------- | ------ | ---------------------------------------------------------------------------------------- |
| `fee`         | uint24 | The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)                 |
| `tickSpacing` | int24  | The spacing between ticks to be enforced for all pools created with the given fee amount |

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

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

```solidity
  event OwnerChanged(
    address oldOwner,
    address newOwner
  )
```

Emitted when the owner of the factory is changed

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

| Name       | Type    | Description                            |
| ---------- | ------- | -------------------------------------- |
| `oldOwner` | address | The owner before the owner was changed |
| `newOwner` | address | The owner after the owner was changed  |

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

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

Emitted when a pool is created

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

| Name          | Type    | Description                                                                       |
| ------------- | ------- | --------------------------------------------------------------------------------- |
| `token0`      | address | The first token of the pool by address sort order                                 |
| `token1`      | address | The second token of the pool by address sort order                                |
| `fee`         | uint24  | The fee collected upon every swap in the pool, denominated in hundredths of a bip |
| `tickSpacing` | int24   | The minimum number of ticks between initialized ticks                             |
| `pool`        | address | The address of the created pool                                                   |

#### 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
  )l
```

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)

| Name          | Type   | Description                                                                                |
| ------------- | ------ | ------------------------------------------------------------------------------------------ |
| `fee`         | uint24 | The enabled fee, denominated in hundredths of a bip                                        |
| `tickSpacing` | int24  | The minimum number of ticks between initialized ticks for pools created with the given fee |
