# createPool

To create a clmm pool with some initial liquidity to be added

### Signature

`createPool(options: CreatePoolOptions): Promise<Transaction>`

### Params

```typescript
interface CreatePoolOptions {
  // From sdk.contract.getFees()
  fee: Contract.Fee;
  // Coin type such as 0x2::sui::SUI
  coinTypeA: string;
  // Coin type such as 0x2::sui::SUI
  coinTypeB: string;
  // Amount of coin A
  amountA: string | number;
  // Amount of coin B
  amountB: string | number;
  // Represents the index of the lower tick boundary
  tickLower: number;
  // Represents the index of the upper tick boundary
  tickUpper: number;
  // Initial price
  sqrtPrice: string;
  // Creator wallet address
  address: string;
  // Acceptable wasted amount percentage. Range: [0, 100)
  slippage: string | number;
  // Expires timeout(ms), defaults 60_000
  deadline?: number;
  // Custom transaction handler
  txb?: Transaction;
}
```

#### fee

fee will affect price precision. Now mainnet exist some different type fee type, they correspond to different fee rates and tick\_spacing.

```json
[
  {
    objectId: '0x49dcf28ac3b5480e65bee812ad2d6e60108ab8037d5a815c3c11bbe7bc47c270',
    type: '0x2e8c645bcd20436b6178d17dd7093dfd8ce097bc360414ca25d24f94e78eb18e::fee10bps::FEE10BPS',
    fee: 10,
    tickSpacing: 1
    //fee rate 0.00001
  },
  {
    objectId: '0x18136d55969b970330e6991e0deaa713fca99f4e526152c10d5592a01d45f857',
    type: '0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1::fee100bps::FEE100BPS',
    fee: 100,
    tickSpacing: 2
    //fee rate 0.0001
  },
  {
    objectId: '0xdfcd1043f54fef3aa649eccd4d0b2b09a3da6c87a8a62736467b686268869365',
    type: '0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1::fee500bps::FEE500BPS',
    fee: 500,
    tickSpacing: 10
    //fee rate 0.0005
  },
  {
    objectId: '0x5121798d1ac50ee8d5c3213c69d4955814318901070ac06a8accfba39fb30198',
    type: '0xb924dd4ca619fdb3199f9e96129328da0bb7df1f57054dcc765debb360282726::fee2000bps::FEE2000BPS',
    fee: 2000,
    tickSpacing: 40
    //fee rate 0.002
  },
  {
    objectId: '0x0dfa811ff9d86f7680f212a78b2dd886f10916383d80accf287612a0df3906a0',
    type: '0xb924dd4ca619fdb3199f9e96129328da0bb7df1f57054dcc765debb360282726::fee2500bps::FEE2500BPS',
    fee: 2500,
    tickSpacing: 50
    //fee rate 0.0025
  },
  {
    objectId: '0x6bc433c8604f58272155d0c65327ae0b316f63869e5de3846f70aef4625d8c46',
    type: '0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1::fee3000bps::FEE3000BPS',
    fee: 3000,
    tickSpacing: 60
    //fee rate 0.003
  },
  {
    objectId: '0xd30c41ec4b4d0eb9b30b0b898c53f81cd53a9eb0f75b5d3273584cd874b2d4c4',
    type: '0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1::fee10000bps::FEE10000BPS',
    fee: 10000,
    tickSpacing: 200
    //fee rate 0.01
  },
  {
    objectId: '0x9724fd1e579956dcaabe97399a374c7726cb96eabea2dec53a5509c41f2c1573',
    type: '0xb924dd4ca619fdb3199f9e96129328da0bb7df1f57054dcc765debb360282726::fee20000bps::FEE20000BPS',
    fee: 20000,
    tickSpacing: 220
    //fee rate 0.02
  }
]
```

#### coinTypeA

Is a base token, such as turbos, wal

#### coinTypeB

is a quote token, It is recommended to use highly liquid  token, such as sui, usdc, and usdt as quote tokens, which is conducive to the display and calculation of prices.

#### amountA

the amount about coin A, which used to add liquidity.

#### amountB

the amount about coin B, which used to add liquidity.

#### tickLower

Represents the index of the lower tick boundary.

tickUpper

Represents the index of the upper tick boundary.

> The tick index must satisfy the condition: `-443636 < tickLowerIndex < currentTickIndex < tickUpperIndex < 443636`, where 443636 is a constant derived from the maximum range of the Q32.62 fixed-point number format. Additionally, the tick index should be an integer multiple of `tickSpacing`. If not, the contract will trigger an error.

### Examples

```typescript
    const turbosSdk = new TurbosSdk(Network.testnet, {
      url: 'https://fullnode.testnet.sui.io',
    });
    const signer = turbosSdk.account.getKeypairFromMnemonics("your mnemonic");
    const tickSpacing = 200;
    const coinTypeA =
      '0x541826891e877178df82f2df2996599618a259e719ef54a8e1969211c609cd21::turbos::TURBOS';
    const coinTypeB = '0x2::sui::SUI';
    const coinADecimals = 9;
    const coinBDecimals = 9;
    const fee = await turbosSdk.contract.getFee(tickSpacing);
    const sqrtPrice = turbosSdk.math
      .priceToSqrtPriceX64(0.01, coinADecimals, coinBDecimals)
      .toString();
    // 0.0001 - 10000 price range
    const tickLower = turbosSdk.math.priceToInitializableTickIndex(
      0.0001,
      coinADecimals,
      coinBDecimals,
      tickSpacing,
    );
    const tickUpper = turbosSdk.math.priceToInitializableTickIndex(
      10000,
      coinADecimals,
      coinBDecimals,
      tickSpacing,
    );
    console.log(tickLower, tickUpper);
    // initial liquidity
    const amountA = 1 * 10 ** coinADecimals;
    const amounts = turbosSdk.pool.estimateAmountsFromOneAmount({
      sqrtPrice,
      tickLower,
      tickUpper,
      amount: amountA.toString(),
      isAmountA: true,
    });
    const txb = await turbosSdk.pool.createPool({
      fee,
      coinTypeA,
      coinTypeB,
      sqrtPrice,
      tickLower,
      tickUpper,
      address: signer.toSuiAddress(),
      amountA: amounts[0],
      amountB: amounts[1],
      slippage: 3,
      deadline: Date.now() + 60 * 60 * 1000,
    });
    txb.setSender(signer.toSuiAddress());
    const result = await turbosSdk.provider.signAndExecuteTransaction({
      transaction: txb,
      signer,
    });
    console.log(result);
```


---

# 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://turbos.gitbook.io/turbos/developer-docs/via-sdk/clmm/createpool.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.
