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 →
Los programas de productos de Raydium son bases de código independientes, pero fueron diseñados contra un conjunto compartido de convenciones. Esta página es la referencia canónica de esas convenciones. Los capítulos por producto describen cómo las convenciones se instancian en sus cuentas; esta página describe las convenciones en sí.
Qué significa “compartido” aquí
Tres tipos de compartición recorren la base de código:- Compartición de convenciones. Cada programa usa el mismo patrón de derivación de PDA, la misma forma de división de comisiones y la misma idea de cuenta de observación — pero cada uno los implementa en su propio programa con sus propias semillas.
- Compartición de cuentas. Un puñado de cuentas son literalmente el mismo registro en muchos pools (el PDA de autoridad global en CPMM, las cuentas AmmConfig).
- Compartición fuera de cadena. Una API REST y un SDK de TypeScript frontal para los cuatro programas. Los integradores interactúan con un host HTTP y un paquete NPM sin importar qué programa terminen llamando.
1. PDAs de autoridad
Cada programa de Raydium tiene exactamente un PDA que posee sus bóvedas de tokens. Los usuarios nunca mantienen la autoridad de la bóveda directamente — el PDA de autoridad es el único firmante que puede mover fondos, y solo firma cuando una instrucción de programa válida se lo indica. El patrón es idéntico en todos los productos; las semillas difieren:
Algunas cosas se derivan de esto:
- Para CPMM y CLMM, el PDA de autoridad es una cuenta global — cada pool de ese tipo la usa. Si estás haciendo CPI en CPMM la necesitas una vez, no por pool.
- Para autoridades por pool / por granja, derivas el PDA del ID del pool/granja. El SDK lo hace en
getPoolKeys/getFarmKeys; si estás integrando directamente, derivas confindProgramAddressSync. - La propiedad de la bóveda no puede cambiar. Una vez que se crea una cuenta de token con el PDA de autoridad como propietario, solo ese PDA — invocado por el programa — puede transferir. No hay anulación de administrador.
products/cpmm/accounts, products/clmm/accounts, products/amm-v4/accounts, products/farm-staking/accounts, products/launchlab/accounts.
2. Cuentas de administrador y configuración
CPMM y CLMM comparten un patrón de cuenta de configuración llamadoAmmConfig: una pequeña cuenta global, indexada por un u16, que contiene las tasas de comisión y destinos de administrador que se aplican a un nivel de comisión completo. Los pools se vinculan a una configuración en la creación y nunca se re-vinculan.
- Los niveles de comisión son globales. Cuando un pool dice “este es un pool del 0,25%”, significa que se vincula al AmmConfig cuya
trade_fee_rateera del 0,25% en el momento de la creación. No hay anulación de tasa por pool. - Una configuración puede cambiar pero los pools no la siguen. Si la autoridad de configuración edita un AmmConfig, cada pool existente vinculado a esa configuración recoge la nueva tasa inmediatamente. Esta es una característica, no un error; es cómo los cambios económicos a nivel de protocolo se propagan sin migraciones por pool.
disable_create_pooles la palanca de deprecación. Cuando se pone fin a un nivel de comisión, el multisig del protocolo establece esta bandera — los pools existentes siguen funcionando pero no se pueden elegir nuevos pools en el nivel.protocol_owner/fund_ownerson los firmantes para las llamadas de recopilación de comisiones. Establecerlos en un multisig es lo que controla el retiro de comisiones. NO son las direcciones de destino de las comisiones en sí; eso esprotocol_fee_destination/fund_fee_destinationen la misma cuenta.
AmmConfig — sus parámetros de comisión son por pool, codificados en la creación. Farm y LaunchLab tienen sus propios equivalentes (FarmConfig, LaunchConfig) cubiertos en sus respectivos capítulos.
Una tabla completa de quién puede cambiar qué está en security/admin-and-multisig. Las divisiones de comisiones actuales visibles para el usuario están en ray/protocol-fees.
3. La división de comisiones de protocolo / fondo / creador
Cada comisión de swap de CPMM y CLMM se divide entre hasta cuatro destinos en el camino:- La comisión comercial se acumula en el pool. La comisión se elimina del lado de entrada del swap y la cantidad post-comisión es lo que ve la matemática de producto constante. Esto es lo que significa “el LP gana la comisión” —
ksube y también lo hace el valor implícito de token por LP. - Las porciones de protocolo/fondo/creador se deducen de esa acumulación del lado LP en cuentas de contador por pool. Se sientan en el estado del pool (
protocol_fees_token{0,1},fund_fees_token{0,1}, etc.) hasta que alguien llama a la instrucción de recopilación correspondiente. No salen de las bóvedas del pool hasta entonces; desde la perspectiva de un swap todavía están “en el pool”. - La recopilación las saca. Las rutas de protocolo y fondo requieren el firmante respectivo
protocol_owner/fund_ownerdeAmmConfig. Las comisiones de creador de CPMM usan la rutaCollectCreatorFeefirmada por el creador oCollectCreatorFeePermissionless, que cualquier pagador puede activar pero que fija los destinos a los ATAs canónicos del creador.
- Los porcentajes de división son de la comisión comercial, no del comercio. Una comisión comercial del 0,25% con una participación de protocolo del 12% significa que el protocolo obtiene
0,25% × 12% = 0,03%del comercio — no el 12% del comercio. - Las comisiones de creador solo existen en pools graduados de LaunchLab. Los pools estándar de CPMM/CLMM tienen una división de 3 vías (LP / protocolo / fondo). LaunchLab agrega una cuarta ranura enrutada a quien lanzó el token, configurada en
Initializee inmutable. - AMM v4 se divide solo de dos formas, codificadas por pool: LP y protocolo. Sin ranura de fondo, sin ranura de creador.
- Fondo vs protocolo — ambos son destinos de tesorería de protocolo, pero tienen diferentes firmantes y diferentes usos previstos.
protocolhistóricamente financia operaciones;fundes la tesorería a más largo plazo. La división entre los dos es en sí misma ajustable.
reference/fee-comparison y ray/protocol-fees.
4. Cuentas de observación (búfer de anillo TWAP)
Tanto CPMM como CLMM mantienen una cuenta de observación por pool — un búfer de anillo de tamaño fijo de muestras(timestamp, cumulative_price) que otros contratos pueden usar para derivar un TWAP resistente a manipulación.
- Cada swap llama a
update_observation. El programa lee el precio actual, lo multiplica por los segundos transcurridos desde la observación anterior y lo suma al contador acumulativo. La nueva entrada sobrescribe la ranura más antigua (estilo búfer de anillo). - TWAP sobre una ventana =
(cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). Los consumidores eligen dos observaciones que delimitan la ventana deseada y dividen. - Raydium en sí no usa el TWAP para precios. La matemática del AMM lee las reservas de spot directamente. Las observaciones son una externalidad — Raydium paga el costo de escribirlas para que otros contratos puedan leer.
- AMM v4 no tiene cuenta de observación. Es más antiguo que el diseño de ObservationState; los integradores que quieren un TWAP de v4 tienen que calcular uno fuera de cadena desde el historial de registros.
products/cpmm/accounts y products/clmm/accounts.
5. API REST + SDK + IDL
La superficie fuera de cadena es un trío único utilizado por cada producto:- API REST —
https://api-v3.raydium.io. Una vista indexada de solo lectura de todo el estado en cadena más un motor de cotización. Un host, un esquema. - SDK de TypeScript —
@raydium-io/raydium-sdk-v2en NPM. Construye y firma transacciones para cada programa. Habla con la API para cotizaciones/metadatos, habla con un RPC de Solana para actualizaciones de estado pre-firma. - Registro de IDL — Los IDLs de Anchor para cada programa publicado viven en el repositorio
raydium-idl(un JSON por programa: CPMM, CLMM, LaunchLab). El SDK de TypeScript consume estos IDLs internamente; los clientes de Rust / Python posteriores regeneran desde los mismos archivos.
Un error común es alimentar la salida de la API REST directamente en una transacción. No lo hagas — vuelve a obtener el estado relevante del pool/posición de un RPC de Solana en el slot en el que estás firmando. El SDK lo hace automáticamente para flujos de primera parte; si omites el SDK tienes que hacerlo tú mismo.
La referencia completa está en
sdk-api/, con la superficie de IDL específicamente en sdk-api/anchor-idl.
6. Indexadores y fuentes de precios
La API REST es alimentada por el indexador propio de Raydium, que se suscribe a registros de programa de una flota de RPCs de Solana y escribe registros desnormalizados en un almacén SQL. Dos consecuencias para los integradores:- El indexador es la única cosa que “sabe sobre” el estado entre programas. Mapear un pool de CPMM a su contraparte de CLMM, calcular un número de volumen de 24h en versiones de programa, recoger una granja asociada con un mint de LP — todo eso es trabajo del indexador. Los programas en sí no lo hacen.
- El tiempo de inactividad del indexador es el tiempo de inactividad de la API. Si la API devuelve datos obsoletos o vacíos, el indexador es el sospechoso. El estado en cadena no se ve afectado; los integradores con su propio RPC y SDK pueden seguir transaccionando.
priceUsd en la mayoría de respuestas de pool; esto se calcula fuera de cadena a partir de una instantánea de la vista del indexador de las reservas del pool y un precio de referencia citado (pools USDC como el pivote común). Es lo suficientemente bueno para la interfaz de usuario; no es seguro usarlo como un oráculo en cadena. Usa el TWAP de observación para eso.
Qué no se comparte
Vale la pena enumerar explícitamente, porque los nuevos lectores a menudo asumen más compartición de la que existe:- Los programas no se llaman entre sí. Un swap de CPMM nunca hace CPI en CLMM o AMM v4. El único programa que compone múltiples AMMs es el programa de Enrutamiento de AMM — y ese es en sí mismo delgado, solo emitiendo CPIs en cada AMM en secuencia.
- Sin autoridad de actualización compartida entre programas. Cada programa en cadena tiene su propia clave de actualización de programa (un multisig de 3/4 más un bloqueo de tiempo de 24h). No están vinculadas.
- Sin estado compartido entre granjas y AMMs. Una granja no sabe si el LP que apuesta es de un pool de CPMM, un mint de NFT de posición de CLMM o un token SPL no relacionado. El programa de granja trata el mint de apuesta como opaco.
- Sin dependencia de oráculo. El precio es en reservas en cadena. No hay respaldo de Pyth/Switchboard; el AMM no verifica un oráculo antes de liquidar.
Punteros
protocol-overview/architecture— el diagrama canónico que muestra cómo se componen estas piezas.protocol-overview/versions-and-migration— cómo evolucionaron las convenciones en versiones de programa.security/admin-and-multisig— quién controla las claves detrás de los AmmConfigs.reference/fee-comparison— matriz de tasas de comisión por producto.reference/program-addresses— IDs de programa canónicos.
- Raydium SDK v2 — la fuente de verdad para semillas de PDA, diseños de cuentas y definiciones de IDL.
- Registro de IDL de Raydium — IDLs de Anchor.
- Páginas de cuentas por producto citadas en línea arriba.

