# プールを作成する

単一のトランザクションで、定義済みの初期価格を持つ CLMM の concentrated-liquidity pool を作成します。

***

### 手数料設定を取得しています

各 CLMM pool はオンチェーンの `AmmConfig` を参照し、fee tier と tick spacing を定義します。pool を作成する前に、利用可能な config を取得してください。

```typescript
const clmmConfigs = await raydium.api.getClmmConfigs()
```

各 config には次が含まれます:

| Field             | Description                        |
| ----------------- | ---------------------------------- |
| `id`              | オンチェーンの config account address。    |
| `tradeFeeRate`    | swap 入力から差し引かれる手数料。単位は 1e-6。       |
| `tickSpacing`     | tick 間の最小距離。小さいほど、より細かい範囲になります。    |
| `protocolFeeRate` | 取引手数料のうち、Raydium protocol に送られる割合。 |
| `fundFeeRate`     | 取引手数料のうち、Raydium treasury に送られる割合。 |

公開 config ID は以下でも確認できます:

* Mainnet: [api-v3.raydium.io/main/clmm-config](https://api-v3.raydium.io/main/clmm-config)
* Devnet: [api-v3-devnet.raydium.io/main/clmm-config](https://api-v3-devnet.raydium.io/main/clmm-config)

***

### pool の作成

以下を使用します `raydium.clmm.createPool()` 2つの token mint と初期価格で新しい pool を初期化します。

```typescript
import { CLMM_PROGRAM_ID, DEVNET_PROGRAM_ID } from '@raydium-io/raydium-sdk-v2'
import { PublicKey } from '@solana/web3.js'
import Decimal from 'decimal.js'
import { initSdk, txVersion } from '../config'

const createPool = async () => {
  const raydium = await initSdk({ loadToken: true })

  const mint1 = await raydium.token.getTokenInfo('4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R')
  const mint2 = await raydium.token.getTokenInfo('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB')

  /**
   * 取得する代わりに、mint 情報を直接指定することもできます:
   * {
   *   address: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
   *   programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
   *   decimals: 6,
   * }
   */

  const clmmConfigs = await raydium.api.getClmmConfigs()

  const { execute } = await raydium.clmm.createPool({
    programId: CLMM_PROGRAM_ID,
    // devnet: DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID
    mint1,
    mint2,
    ammConfig: {
      ...clmmConfigs[0],
      id: new PublicKey(clmmConfigs[0].id),
      fundOwner: '',
      description: '',
    },
    initialPrice: new Decimal(1),
    txVersion,
    // optional: set up priority fee here
    // computeBudgetConfig: {
    //   units: 600000,
    //   microLamports: 46591500,
    // },
  })

  const { txId } = await execute({ sendAndConfirm: true })
  console.log('clmm pool created:', { txId: `https://explorer.solana.com/tx/${txId}` })
}

createPool()
```

{% hint style="info" %}
CPMM pools とは異なり、CLMM pools は初期流動性なしで作成されます。pool を作成した後は、position を開いて別途流動性を入金してください。詳細は Opening and closing positions を参照してください。
{% endhint %}

***

### Parameters

| Parameter      | Type       | Description                                                                                             |
| -------------- | ---------- | ------------------------------------------------------------------------------------------------------- |
| `programId`    | PublicKey  | CLMM program ID。mainnet では `CLMM_PROGRAM_ID` を使用し、 `DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID` を devnet で使用します。 |
| `mint1`        | ApiV3Token | 最初の token mint 情報（address、programId、decimals）。                                                          |
| `mint2`        | ApiV3Token | 2つ目の token mint 情報。以下と異なる必要があります `mint1`.                                                               |
| `ammConfig`    | object     | 以下から取得した fee tier config `getClmmConfigs()`。取引手数料と tick spacing を決定します。                                 |
| `initialPrice` | Decimal    | mint2 に対する mint1 の初期価格。                                                                                 |
| `txVersion`    | TxVersion  | トランザクションのバージョン。 `TxVersion.V0` は versioned transactions 用、 `TxVersion.LEGACY` は legacy 用です。             |
