Saltar al contenido principal
Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
Banner de versión. Todas las demostraciones de TypeScript apuntan a @raydium-io/raydium-sdk-v2@0.2.64-alpha; se ejecutaron por última vez contra 0.2.42-alpha (2026-04) y sus firmas de llamada se verificaron nuevamente contra la fuente 0.2.64-alpha el 2026-09-09, contra Solana mainnet-beta. El esqueleto de Rust CPI apunta a raydium-cp-swap en master, Anchor 1.0.2. Los ID de programa se extraen mediante constantes de reference/program-addresses.

Requisitos previos

Cada demostración en esta página refleja un archivo en raydium-sdk-V2-demo/src/cpmm; el enlace de GitHub se encuentra junto a cada sección. El arranque sigue el config.ts.template del repositorio de demostración (fuente):
La instancia Raydium es la fachada del SDK — cada demostración a continuación la utiliza. Raydium.load es asincrónica porque carga la lista de tokens de forma predeterminada; pasa disableLoadToken: true para omitir esa búsqueda. La verificación de características de disponibilidad ya se omite a menos que pases disableFeatureCheck: false. Las configuraciones de comisiones se obtienen de forma perezosa en el primer uso a través de raydium.api.getCpmmConfigs().

Crear un pool CPMM

Fuente: src/cpmm/createCpmmPool.ts
Algunas cosas que el SDK maneja silenciosamente:
  • Ordenar los mints en orden token0/token1 antes de derivar el PDA.
  • Pagar la create_pool_fee única a poolFeeAccount.
  • Crear las cuentas de token asociadas del llamador si faltan.
  • Elegir el programa de token correcto (SPL Token vs Token-2022) por lado.
createPool construye Initialize, por lo que la comisión del creador del pool queda desactivada. Para crear un pool con la comisión del creador habilitada, usa InitializeV2 (agregada en la actualización del programa 2026-10-30). Sus primeras 19 cuentas coinciden con las de Initialize. Elimina rent y toma un argumento más, creator_fee_on: Option<CreatorFeeOn>. El pin 0.2.64-alpha de esta página es anterior a la instrucción. Hasta que tu versión del SDK incluya un constructor, codifícala a partir del IDL actualizado. Consulta products/cpmm/instructions.
Después de la confirmación, puedes obtener el estado del pool en vivo con:

Swap (entrada base)

Fuente: src/cpmm/swap.ts
Nota: el SDK siempre vuelve a obtener el estado del pool desde un RPC dentro de getPoolInfoFromRpc. No hagas cotizaciones desde api-v3.raydium.io para una transacción que estés a punto de firmar — una cotización que está un bloque desactualizada puede deslizarse en ExceededSlippage en el momento del aterrizaje.

Swap (salida base)

Fuente: src/cpmm/swapBaseOut.ts

Depositar liquidez

Fuente: src/cpmm/deposit.ts
El SDK deriva la cantidad emparejada de las reservas actuales del pool, infla cada lado por el slippage para los argumentos maximum_* de la instrucción, y construye las creaciones de ATA si es necesario. raydium.cpmm.computePairAmount({ ... }) devuelve los mismos números si los quieres para una vista previa de la interfaz de usuario.

Retirar liquidez

Fuente: src/cpmm/withdraw.ts

Recopilar comisiones de protocolo/fondo/creador

Fuente: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts La recopilación de protocolo y fondo permanece controlada por autoridad. Las comisiones del creador tienen dos caminos: la instrucción CollectCreatorFee firmada por el creador, y la aditiva CollectCreatorFeePermissionless, que cualquier pagador puede invocar pero que solo puede transferir a las ATAs canónicas del creador. 0.2.64-alpha incluye constructores a nivel de módulo para ambos caminos del creador:
Ambas instrucciones del creador cambiaron sus listas de cuentas en la actualización del programa del 2026-09-19. Cada una ahora toma un PDA creator_fee_share en ["creator_fee_share", creator, ammConfig], y la sin permisos también toma amm_config — ambos añadidos después de system_program en lugar de insertados, por lo que las cuentas que ya estaban allí mantienen sus posiciones. Un constructor fijado a una versión del SDK anterior a la actualización emite la lista más corta y la transacción se rechaza por cuentas faltantes. Verifica que la versión que instales incluya las nuevas cuentas antes de usar estos ayudantes contra el programa actualizado, y actualiza el IDL si generas clientes a partir de él.Pasar el PDA es obligatorio incluso cuando nunca ha sido creado — derívalo y pásalo; el programa recurre a AmmConfig.creator_fee_share_rate cuando la cuenta está vacía.
Las dos instrucciones del creador tienen discriminadores y diseños de cuentas diferentes — la sin permisos reemplaza el firmante del creador con un payer separado y un creator que no firma. Usa el constructor correspondiente en lugar de intercambiar manualmente cuentas en el otro.No hay constructor de comisión de protocolo o fondo en el SDK (makeCollectProtocolFeeInstruction y makeCollectFundFeeInstruction no existen bajo ningún nombre) — esos son caminos de administrador, al igual que CreateCreatorFeeShare / CloseCreatorFeeShare, que tampoco tienen constructor. Los constructores de instrucciones de bajo nivel que sí existen son collectCpFeeInstruction, makeCollectCreatorFeeInstruction y collectCreatorFeePermissionlessInInstruction.
Fuera de la cadena puedes leer las comisiones acumuladas directamente desde PoolState:

Esqueleto de CPI en Rust

Si quieres invocar CPMM desde tu propio programa Anchor — por ejemplo, una bóveda que realiza swaps en nombre de sus depositantes — el contexto de CPI se ve así. El orden de cuentas sigue products/cpmm/instructions.
Si tu CPI firma como un PDA (por ejemplo, administras una bóveda en nombre de depositantes), intercambia CpiContext::new por CpiContext::new_with_signer y pasa tus semillas.

Errores comunes

Una breve lista de verificación antes de abrir un ticket de soporte:
  • Mints ordenados. Si tu PDA poolState derivado no coincide con el pool en la cadena, probablemente olvidaste ordenar los mints.
  • Cotización de API obsoleta. Nunca pases un valor de reserva de api-v3.raydium.io a CurveCalculator.swap. Obtén datos de un RPC.
  • Programa de token incorrecto. El vault de un mint Token-2022 es propiedad del programa Token-2022, no del SPL Token. Siempre usa los campos token_0_program / token_1_program del pool.
  • Slippage insuficiente para mints con comisión de transferencia. Si cualquiera de los lados del pool es un mint Token-2022 con comisión de transferencia, tu minimum_amount_out debe estar denominado en lo que el usuario realmente recibe, no en lo que el vault envía.
  • NotApproved en un swap. Verifica PoolState.status — el administrador puede haber pausado los swaps en ese pool. Ver products/cpmm/instructions para la máscara de estado.

Dónde ir a continuación

Fuentes: