Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
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 →
Dos cuotas independientes, cuatro destinos
CPMM cobra dos cuotas con tasas independientes en cada intercambio:- Cuota de intercambio — cobrada en
AmmConfig.trade_fee_ratey dividida entre tres destinos:- Participación de LP — permanece en la bóveda y crece
k. Se reclama implícitamente al quemar tokens de LP. - Participación del protocolo — acumulada en
PoolState.protocol_fees_token*; retirada por elprotocol_ownervíaCollectProtocolFee. - Participación del fondo — acumulada en
PoolState.fund_fees_token*; retirada por elfund_ownervíaCollectFundFee.
- Participación de LP — permanece en la bóveda y crece
- Cuota de creador (opcional, por pool) — cobrada en
AmmConfig.creator_fee_rateindependientemente de la cuota de intercambio, acumulada enPoolState.creator_fees_token*, retirada porpool_state.pool_creatorvíaCollectCreatorFee. Activa solo cuando el pool se creó conenable_creator_fee = true.
trade_fee únicamente, nunca de creator_fee. Un pool con creator_fee_rate = 1000 (0.10%) y trade_fee_rate = 2500 (0.25%) cobra un total combinado del 0.35% de la entrada en un intercambio con cuota de creador en entrada, de la cual el creador retiene el 0.10% y el depósito de cuota de intercambio obtiene el 0.25%.
Las tasas de cuota de intercambio (trade_fee_rate, protocol_fee_rate, fund_fee_rate) y creator_fee_rate se encuentran en AmmConfig. La bandera enable_creator_fee por pool y el modo creator_fee_on (de qué lado del intercambio se cobra la cuota de creador) se encuentran en PoolState. Ver products/cpmm/accounts.
Tasas y unidades
Todas las tasas sonu64 denominadas en unidades de 1 / FEE_RATE_DENOMINATOR donde FEE_RATE_DENOMINATOR = 1_000_000.
trade_fee_ratees una fracción del volumen de intercambio.2500⇒ 0.25% del lado relevante (entrada o salida, dependiendo decreator_fee_on— ver “De qué lado del intercambio se cobran las cuotas” más abajo).creator_fee_ratees una fracción del volumen de intercambio, cobrada separadamente de la cuota de intercambio.1000⇒ 0.10% del lado relevante.protocol_fee_rateyfund_fee_rateson fracciones de la cuota de intercambio, no del volumen.120_000⇒ 12% de la cuota de intercambio.
AmmConfig[index=0] (el pool estándar del 0.25%) en mainnet, como referencia:
| Campo | Valor | Porcentaje efectivo |
|---|---|---|
trade_fee_rate | 2500 | 0.25% del volumen (depósito de cuota de intercambio) |
protocol_fee_rate | 120000 | 12% de la cuota de intercambio ≈ 0.030% del volumen |
fund_fee_rate | 40000 | 4% de la cuota de intercambio ≈ 0.010% del volumen |
creator_fee_rate | 0 (predeterminado) | 0% (depósito separado) |
| → Participación efectiva de LP | 0.210% del volumen |
AmmConfig[0] con enable_creator_fee = false: $2.50 de cuota de intercambio total, de los cuales $2.10 permanecen con los LP, $0.30 van al protocolo, $0.10 al fondo. El depósito de creador es 0 porque la cuota de creador está deshabilitada.
Si el mismo pool tuviera enable_creator_fee = true y creator_fee_rate = 1000 (0.10%), el usuario paga un $1.00 adicional al depósito del creador — cobrado del mismo lado del intercambio configurado por creator_fee_on — para un total de $3.50 en cuotas. El depósito de cuota de intercambio y sus divisiones de protocolo/fondo no cambian.
Confirma los valores mainnet actuales contra GET https://api-v3.raydium.io/main/cpmm-config — las tasas son mutables por administrador y deben leerse frescos en lugar de codificarse.
La división, en código
- La cuota total en entrada redondea hacia arriba para que el pool nunca cobre de menos.
- Las subdivisiones de
trade_fee(protocolo, fondo) redondean hacia abajo para que su suma nunca excedatrade_fee; el resto es la participación de LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee no se resta aquí porque es su propio depósito).- La cuota de creador se cobra de entrada o salida dependiendo de
PoolState.creator_fee_on(ver siguiente sección). La tasa permanece sin cambios de cualquier manera.
De qué lado del intercambio se cobran las cuotas
CPMM tiene una configuracióncreator_fee_on por pool (BothToken / OnlyToken0 / OnlyToken1) que determina si la cuota de creador se cobra del lado de entrada o salida de un intercambio dado. La función de ayuda en tiempo de ejecución is_creator_fee_on_input(direction) reduce eso a un booleano por intercambio:
creator_fee_on | Intercambio 0 → 1 | Intercambio 1 → 0 |
|---|---|---|
BothToken (0) | lado de entrada | lado de entrada |
OnlyToken0 (1) | lado de entrada | lado de salida |
OnlyToken1 (2) | lado de salida | lado de entrada |
amount_in antes de que se ejecute la curva. Matemática de cotización: toma el trade_rate + creator_rate combinado de la entrada.
Cuando la cuota de creador está en el lado de salida, solo la cuota de intercambio se deduce de amount_in; la curva produce una salida sin cuota, luego se deduce la cuota de creador de esa salida. Matemática de cotización: toma trade_rate de la entrada; toma creator_rate de la salida.
La cuota de intercambio en sí siempre se cobra en el lado de entrada (el patrón estándar de Uniswap-V2). Solo la cuota de creador puede aterrizarse en la salida.
Cómo las cuotas “acumuladas” interactúan con la curva
Un detalle importante: las cuotas de protocolo, fondo y creador permanecen físicamente en la bóveda hasta que se llama a su respectiva instrucciónCollect*. Pero se excluyen de la vista de la curva del saldo de la bóveda.
Una imagen concreta después de un intercambio:
curve_x (y el análogo curve_y) cuando aplica k' ≥ k. Así es como las cuotas que no son de LP alcanzan sus destinos sin inflar la participación de LP del pool.
Consecuencias que deberías tener en cuenta:
- Cotizar a partir de saldos brutos es incorrecto. Si construyes un cotizador a partir de
getTokenAccountBalance, consistentemente sobreestimarás el precio que el pool honrará. Siempre resta cuotas acumuladas, o simula víaSwapBaseInput/ la API. CollectProtocolFeeno mueve el precio. Saca tokens de la bóveda y pone a cero los contadoresprotocol_fees_token*, por lo quecurve_xycurve_ypermanecen sin cambios.- Las cuotas de LP no se acumulan en un contador. Son implícitas en el saldo de la bóveda. El derecho de LP a las cuotas de LP acumuladas se ejerce quemando tokens de LP (es decir, vía
Withdraw) — no hayCollectLpFee.
Interacción con cuotas de transferencia de Token-2022
Las cuotas de transferencia de Token-2022 se aplican por mint, no por CPMM. Actúan en cada transferencia de token — intercambio, depósito, retiro, y los barridos deCollect*. La matemática de cuota de intercambio de CPMM se calcula contra la cantidad que realmente aterrizó en la bóveda, es decir, neta de la cuota de transferencia del mint de entrada (si la hay).
Entonces en el peor caso un usuario paga tres impuestos distintos en un intercambio exacto de entrada:
- La cuota de transferencia del mint de entrada en
amount_in(a la autoridad de cuota del mint). - La
trade_feedel pool en el resto (dividida como se indicó anteriormente). - La cuota de transferencia del mint de salida en
amount_out(a la autoridad de cuota del mint).
minimum_amount_out se denomina en lo que el usuario realmente recibe. Si estás escribiendo tu propio cotizador, refleja ese comportamiento, o tus comprobaciones de deslizamiento serán sistemáticamente demasiado generosas.
Ver algorithms/token-2022-transfer-fees para la derivación detallada.
Cuota de creador
La cuota de creador es opcional y por pool. La tasa se encuentra enAmmConfig.creator_fee_rate; la bandera de habilitación y el lado (creator_fee_on) se encuentran en PoolState:
- Habilitada en la creación del pool.
Initializeestableceenable_creator_fee = falsepor defecto; los pools creados víaInitializeWithPermission(usado por graduaciones de LaunchLab y otras rutas protegidas) pueden pasarenable_creator_fee = truey elegircreator_fee_on. - La tasa se comparte con el nivel de cuota. La tasa en sí es
AmmConfig.creator_fee_rate, el mismo valor en todos los pools vinculados a esa configuración. Cada pool luego decide si cobrarla (enable_creator_fee) y de qué lado del intercambio cobrarla (creator_fee_on). Cuandoenable_creator_fee = false, la tasa de cuota de creador efectiva del pool es cero independientemente del valor de config (verPoolState::adjust_creator_fee_rateen el código fuente). - Independiente de la cuota de intercambio. La cuota de creador nunca reduce las participaciones de LP / protocolo / fondo — es su propia tasa, aplicada separadamente, acumulada en sus propios contadores.
- Barrida vía
CollectCreatorFee, firmada porPoolState.pool_creator. - No se puede volver a habilitar o redirigir después de la creación. Un pool inicializado con
enable_creator_fee = falsenunca cobrará una cuota de creador; uno inicializado con uncreator_fee_onparticular no puede cambiar de lado.
CollectCreatorFee indefinidamente.
Flujo operacional de recolección
| Firmante | Instrucción | Contadores fuente puesta a cero | Cadencia típica |
|---|---|---|---|
amm_config.protocol_owner | CollectProtocolFee | protocol_fees_token{0,1} | Semanal o programática |
amm_config.fund_owner | CollectFundFee | fund_fees_token{0,1} | Semanal o programática |
pool_state.pool_creator | CollectCreatorFee | creator_fees_token{0,1} | Cualquier momento |
security/admin-and-multisig. El firmante del creador es la cuenta que ejecutó Initialize.
Cambiar un nivel de cuota
Las tasas de cuota se pueden cambiar por el administrador víaUpdateAmmConfig (ver products/cpmm/instructions). Los cambios toman efecto en el siguiente intercambio para cada pool vinculado a ese AmmConfig — no hay migración, porque los pools cargan la configuración en cada intercambio.
Lo que el administrador no puede hacer:
- Mover un pool de un
AmmConfiga otro. - Repreciar retroactivamente cuotas ya acumuladas.
- Recopilar cuotas sin la firma del
protocol_owner/fund_owner.
Leyendo cuotas de un pool en ejecución
Comparación con CLMM y AMM v4
Verreference/fee-comparison para una matriz lado a lado. Resumen:
- AMM v4 usa una cuota de intercambio fija del 0.25% con una división de LP/protocolo diferente y sin cuota de fondo.
- CLMM las cuotas son por nivel de espaciamiento de tick, acumuladas por posición (no por pool), y reclamadas vía
DecreaseLiquidityoCollectFees.
A dónde ir a continuación
products/cpmm/math— donde la deducción de cuota de intercambio se conecta a la curva.products/cpmm/instructions— las listas de cuentas de la instrucciónCollect*.algorithms/token-2022-transfer-fees— cómo combinar correctamente una cuota de intercambio de pool con una cuota de transferencia de mint.


