# Creación de un pool

Crear un pool de liquidez concentrada CLMM con un precio inicial definido en una sola transacción.

***

### Obteniendo configuraciones de comisiones

Cada pool CLMM hace referencia a una `AmmConfig` en cadena, que define su nivel de comisiones y el tick spacing. Obtén las configuraciones disponibles antes de crear un pool.

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

Cada configuración incluye:

| Campo             | Descripción                                                   |
| ----------------- | ------------------------------------------------------------- |
| `id`              | Dirección de la cuenta de configuración en cadena.            |
| `tradeFeeRate`    | Comisión tomada del input del swap, en unidades de 1e-6.      |
| `tickSpacing`     | Distancia mínima entre ticks. Menor = rangos más granulares.  |
| `protocolFeeRate` | Parte de la comisión de trading enviada al protocolo Raydium. |
| `fundFeeRate`     | Parte de la comisión de trading enviada al tesoro de Raydium. |

También puedes ver los IDs de configuración pública en:

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

***

### Creación de un pool

Usa `raydium.clmm.createPool()` para inicializar un nuevo pool con dos mint de token y un precio inicial.

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

  /**
   * También puedes proporcionar la información de mint directamente en lugar de recuperarla:
   * {
   *   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,
    // opcional: configura la comisión de prioridad aquí
    // 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" %}
A diferencia de los pools CPMM, los pools CLMM se crean sin liquidez inicial. Después de crear el pool, abre una posición y deposita liquidez por separado — consulta Abrir y cerrar posiciones.
{% endhint %}

***

### Parámetros

| Parámetro      | Tipo       | Descripción                                                                                                         |
| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------- |
| `programId`    | PublicKey  | ID del programa CLMM. Usa `CLMM_PROGRAM_ID` para mainnet, `DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID` para devnet.          |
| `mint1`        | ApiV3Token | Información del primer mint de token (address, programId, decimals).                                                |
| `mint2`        | ApiV3Token | Información del segundo mint de token. Debe ser diferente de `mint1`.                                               |
| `ammConfig`    | object     | Configuración del nivel de comisiones de `getClmmConfigs()`. Determina las comisiones de trading y el tick spacing. |
| `initialPrice` | Decimal    | Precio inicial de mint1 en términos de mint2.                                                                       |
| `txVersion`    | TxVersion  | Versión de la transacción. `TxVersion.V0` para transacciones versionadas, `TxVersion.LEGACY` para legacy.           |
