# IPoolInitializer

Creates and initializes V3 Pools

Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that require the pool to exist.

*Developer note: Credit to Uniswap Labs under GPL-2.0-or-later license: <https://github.com/Uniswap/v3-periphery>*

## Functions

### createAndInitializePoolIfNecessary

`function createAndInitializePoolIfNecessary(address token0, address token1, uint160 sqrtPriceX96) external payable returns (address pool)` payable external

Creates a new pool if it does not exist, then initializes if not initialized *Developer note: This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool*

| Name         | Type    | Description                                                 |
| ------------ | ------- | ----------------------------------------------------------- |
| token0       | address | The contract address of token0 of the pool                  |
| token1       | address | The contract address of token1 of the pool                  |
| sqrtPriceX96 | uint160 | The initial square root price of the pool as a Q64.96 value |

**Returns:**

| Name | Type    | Description                                                                                                           |
| ---- | ------- | --------------------------------------------------------------------------------------------------------------------- |
| pool | address | Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary |
