Skip to main content
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 la rama chore/upgrade-anchor, Anchor 1.0.2 — master aún fija 0.32.1. 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.
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 cites 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 de la ejecución.

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

Cobrar comisiones de protocolo/fondo/creador

Fuente: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts La recopilación de protocolo y fondo sigue siendo controlada por autoridad. Las comisiones del creador tienen dos caminos: el CollectCreatorFee firmado por el creador, y el aditivo CollectCreatorFeePermissionless, que cualquier pagador puede invocar pero que solo puede transferir a las ATA canónicas del creador. 0.2.64-alpha envía constructores a nivel de módulo para ambas rutas 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 — ambas añadidas después de system_program en lugar de insertadas, por lo que las cuentas que ya estaban allí conservan 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 es rechazada por faltar cuentas. Verifica que la versión que instales lleve 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 se ha 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 coincidente 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 instrucción 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 Rust CPI

Si quieres invocar CPMM desde tu propio programa Anchor — por ejemplo, una bóveda que intercambia 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 lista de verificación breve antes de abrir un ticket de soporte:
  • Mints ordenados. Si tu PDA poolState derivado no coincide con el pool en cadena, probablemente olvidaste ordenar los mints.
  • Cotización de API desactualizada. Nunca pases un valor de reserva de api-v3.raydium.io a CurveCalculator.swap. Obtén desde un RPC.
  • Programa de token incorrecto. El vault de un mint de Token-2022 es propiedad del programa Token-2022, no de SPL Token. Siempre usa los campos token_0_program / token_1_program del pool.
  • Slippage sub-denominado para mints de comisión de transferencia. Si cualquiera de los lados del pool es un mint de comisión de transferencia de Token-2022, 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: