> ## Documentation Index
> Fetch the complete documentation index at: https://tech.ramses.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# PoolInitializer

## Functions

### createAndInitializePoolIfNecessary

```solidity theme={null}
  function createAndInitializePoolIfNecessary(
    address token0,
    address token1,
    int24 tickSpacing,
    uint160 sqrtPriceX96
  ) external returns (address pool)
```

Creates a new pool if it does not exist, then initializes if not initialized

This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool

#### Parameters:

| Name           | Type    | Description                                                  |
| :------------- | :------ | :----------------------------------------------------------- |
| `token0`       | address | The contract address of token0 of the pool                   |
| `token1`       | address | The contract address of token1 of the pool                   |
| `tickSpacing`  | int24   | The tick spacing of the v3 pool for the specified token pair |
| `sqrtPriceX96` | uint160 | The initial square root price of the pool as a Q64.96 value  |

#### Return Values:

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