Creando un pool

Crea un pool de producto constante CPMM y seméalo con liquidez inicial en una sola transacción.

Hay dos formas de crear un pool CPMM:

Method
Método SDK
Quién puede llamar
Creator fees

Sin permisos

createPool()

Cualquiera

Deshabilitado

Con permisos

createPoolWithPermission()

Solo direcciones aprobadas

Habilitado, configurable

La mayoría de los integradores usa la ruta sin permisos. La ruta con permisos está diseñada para launchpads y socios aprobados que necesitan ingresos por creator fee a partir de los swaps.


Obteniendo configuraciones de fee

Cada pool CPMM referencia una AmmConfig on-chain que define su nivel de fee. Obtén las configuraciones disponibles antes de crear un pool.

const feeConfigs = await raydium.api.getCpmmConfigs()

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

circle-info

También se admiten configuraciones de fee personalizadas. Ponte en contacto con el equipo si necesitas personalización de fees.


Creando un pool

Usa raydium.cpmm.createPool() para inicializar un nuevo pool con dos mint de token y montos de depósito iniciales.

import {
  CREATE_CPMM_POOL_PROGRAM,
  CREATE_CPMM_POOL_FEE_ACC,
  DEVNET_PROGRAM_ID,
  getCpmmPdaAmmConfigId,
  TxVersion,
} from '@raydium-io/raydium-sdk-v2'
import BN from 'bn.js'
import { initSdk } from '../config'

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

  const mintA = await raydium.token.getTokenInfo('So11111111111111111111111111111111111111112')
  const mintB = await raydium.token.getTokenInfo('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v')

  /**
   * También puedes proporcionar la información del mint directamente en lugar de obtenerla:
   * {
   *   address: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
   *   programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
   *   decimals: 6,
   * }
   */

  const feeConfigs = await raydium.api.getCpmmConfigs()

  // En devnet, vuelve a derivar los IDs de configuración desde el programa de devnet
  if (raydium.cluster === 'devnet') {
    feeConfigs.forEach((config) => {
      config.id = getCpmmPdaAmmConfigId(
        DEVNET_PROGRAM_ID.CREATE_CPMM_POOL_PROGRAM,
        config.index
      ).publicKey.toBase58()
    })
  }

  const { execute, extInfo } = await raydium.cpmm.createPool({
    programId: CREATE_CPMM_POOL_PROGRAM,
    // devnet: DEVNET_PROGRAM_ID.CREATE_CPMM_POOL_PROGRAM
    poolFeeAccount: CREATE_CPMM_POOL_FEE_ACC,
    // devnet: DEVNET_PROGRAM_ID.CREATE_CPMM_POOL_FEE_ACC
    mintA,
    mintB,
    mintAAmount: new BN(1_000_000),
    mintBAmount: new BN(1_000_000),
    startTime: new BN(0),
    feeConfig: feeConfigs[0],
    associatedOnly: false,
    ownerInfo: {
      useSOLBalance: true,
    },
    txVersion: TxVersion.V0,
    // opcional: configura aquí la prioridad de fee
    // computeBudgetConfig: {
    //   units: 600000,
    //   microLamports: 46591500,
    // },
  })

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

createPool()

Parámetros

Parámetro
Tipo
Descripción

programId

PublicKey

ID del programa CPMM. Usa CREATE_CPMM_POOL_PROGRAM para mainnet, DEVNET_PROGRAM_ID.CREATE_CPMM_POOL_PROGRAM para devnet.

poolFeeAccount

PublicKey

Cuenta de fee del protocolo. Usa CREATE_CPMM_POOL_FEE_ACC para mainnet, DEVNET_PROGRAM_ID.CREATE_CPMM_POOL_FEE_ACC para devnet.

mintA

TokenInfo

Información del mint del primer token (address, programId, decimals).

mintB

TokenInfo

Información del mint del segundo token. Debe ser diferente de mintA.

mintAAmount

BN

Monto de depósito inicial para el token A, en las unidades más pequeñas.

mintBAmount

BN

Monto de depósito inicial para el token B, en las unidades más pequeñas.

startTime

BN

Marca de tiempo Unix en la que se habilitan los swaps. 0 para inmediato.

feeConfig

object

Configuración del nivel de fee de getCpmmConfigs(). Determina las comisiones de trading y la fee de creación del pool.

associatedOnly

boolean

Si true, usa solo cuentas de token asociadas.

ownerInfo

object

{ useSOLBalance: true } para usar el saldo nativo de SOL para el wrapping.

txVersion

TxVersion

Versión de la transacción. TxVersion.V0 para transacciones versionadas, TxVersion.LEGACY para legacy.

Valor devuelto

El objeto extInfo.address contiene las direcciones derivadas del pool:

Campo
Descripción

poolId

La public key del pool creado.

mintA

Dirección del mint del token A.

mintB

Dirección del mint del token B.

lpMint

Dirección del mint del token LP.

vaultA

Vault del pool para el token A.

vaultB

Vault del pool para el token B.


Creando un pool con permiso (creator fees)

La ruta con permisos usa la instrucción on-chain initialize_with_permission . Requiere un Permission PDA que el administrador de Raydium ha creado para tu dirección. A cambio, obtienes:

  • Creator fees habilitados — una fee por swap enviada al creador del pool, además de la comisión de trading normal.

  • Token de fee configurable — elige si la creator fee se cobra sobre ambos tokens, solo el token A o solo el token B.

  • Dirección del creador separada — el pagador y el creador del pool pueden ser wallets diferentes.

circle-info

Para solicitar un Permission PDA para tu dirección, contacta con el equipo de Raydium. Sin uno, la createPoolWithPermission() llamada fallará.

Usa raydium.cpmm.createPoolWithPermission() para crear un pool con creator fees habilitados.

Parámetros adicionales (vs. sin permisos)

Parámetro
Tipo
Descripción

feeOn

FeeOn

Controla sobre qué token se cobra la creator fee. BothToken, OnlyTokenA, o OnlyTokenB.

Todos los demás parámetros son los mismos que en la versión sin permisos createPool().

FeeOn enum

Valor
Comportamiento

BothToken

La creator fee se cobra sobre el token que sea la entrada del swap.

OnlyTokenA

La creator fee solo se cobra cuando el token A es la entrada del swap.

OnlyTokenB

La creator fee solo se cobra cuando el token B es la entrada del swap.

Diferencias clave frente a sin permisos

createPool()

createPoolWithPermission()

Permiso requerido

Ninguno

El administrador de Raydium debe crear un Permission PDA para tu dirección

Creator fees

Deshabilitado (enable_creator_fee: false)

Habilitado (enable_creator_fee: true)

Modelo de creator fee

Fijo (BothToken, no usado)

El llamador elige (BothToken, OnlyTokenA, OnlyTokenB)

Pagador vs. creador

La misma wallet

Pueden ser wallets diferentes

circle-exclamation

Última actualización

¿Te fue útil?