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 comisiones independientes, cuatro destinos
CPMM aplica dos comisiones con tasas separadas en cada intercambio:- Comisión de intercambio — cobrada a
AmmConfig.trade_fee_ratey dividida entre tres destinos:- Parte de LP — permanece en la bóveda y aumenta
k. Se reclama implícitamente quemando tokens LP. - Parte del protocolo — acumulada en
PoolState.protocol_fees_token*; retirada por elprotocol_ownermedianteCollectProtocolFee. - Parte del fondo — acumulada en
PoolState.fund_fees_token*; retirada por elfund_ownermedianteCollectFundFee.
- Parte de LP — permanece en la bóveda y aumenta
- Comisión del creador (opcional, por pool) — cobrada a
AmmConfig.creator_fee_rateindependientemente de la comisión de intercambio y acumulada enPoolState.creator_fees_token*. El creador puede retirarla medianteCollectCreatorFee, o cualquier pagador puede activar la ruta restringida por destinoCollectCreatorFeePermissionless. Activa solo cuando el pool se creó conenable_creator_fee = true. Desde la actualización del 2026-09-19, la comisión del creador acumulada se divide una vez más en el momento de la recopilación: una parte configurable se mueve al depósito del protocolo del pool y solo el resto llega al creador — ver Parte del protocolo de la comisión del creador.
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 0.35% combinado de la entrada en un intercambio con comisión del creador en la entrada, de los cuales el depósito del creador obtiene el 0.10% y el depósito de comisión de intercambio obtiene el 0.25%.
La parte del protocolo de la comisión del creador funciona de la otra manera y es fácil de confundir con lo anterior: se extrae del depósito del creador, no de la comisión de intercambio, y no en el intercambio — se aplica cuando CollectCreatorFee o CollectCreatorFeePermissionless liquida el saldo acumulado. Las matemáticas del intercambio no cambian por esto.
Las tasas de comisión de intercambio (trade_fee_rate, protocol_fee_rate, fund_fee_rate), la creator_fee_rate y la creator_fee_share_rate predeterminada viven en AmmConfig. La bandera enable_creator_fee por pool y el modo creator_fee_on (de qué lado del intercambio se cobra la comisión del creador) viven en PoolState. Una anulación por creador de la tasa de participación vive en su propio PDA CreatorFeeShare. 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 comisiones” abajo).creator_fee_ratees una fracción del volumen de intercambio, cobrada separadamente de la comisión de intercambio.1000⇒ 0.10% del lado relevante.protocol_fee_rateyfund_fee_rateson fracciones de la comisión de intercambio, no del volumen.120_000⇒ 12% de la comisión de intercambio.creator_fee_share_ratees una fracción de la comisión del creador acumulada, no del volumen ni de la comisión de intercambio.200_000⇒ 20% de lo que esté encreator_fees_token*en el momento en que se recopila.0(el predeterminado) deja toda la comisión del creador con el creador.
AmmConfig[index=0] (el pool estándar de 0.25%) en mainnet, como referencia:
Entonces, en un intercambio de $1,000 contra
AmmConfig[0] con enable_creator_fee = false: $2.50 de comisión de intercambio total, de los cuales $2.10 permanecen con los LPs, $0.30 van al protocolo, $0.10 al fondo. El depósito del creador es 0 porque la comisión del 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 — tomado del mismo lado del intercambio configurado por creator_fee_on — para un total de $3.50 de comisiones. El depósito de comisión de intercambio y sus divisiones de protocolo/fondo no cambian.
Confirma los valores actuales de mainnet contra GET https://api-v3.raydium.io/main/cpmm-config — las tasas son mutables por administrador y deben leerse nuevas en lugar de codificarse.
La división, en código
- La comisión total en la entrada redondea hacia arriba para que el pool nunca subcobre.
- Las subdivisiones de
trade_fee(protocolo, fondo) redondean hacia abajo para que su suma nunca excedatrade_fee; el resto es la parte de LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee no se resta aquí porque es su propio depósito).- La comisión del creador se toma de la entrada o salida dependiendo de
PoolState.creator_fee_on(ver siguiente sección). La tasa es la misma de cualquier manera.
De qué lado del intercambio se cobran las comisiones
CPMM tiene una configuracióncreator_fee_on por pool (BothToken / OnlyToken0 / OnlyToken1) que determina si la comisión del creador se toma del lado de entrada o del lado de salida de un intercambio dado. El ayudante en tiempo de ejecución is_creator_fee_on_input(direction) colapsa eso a un booleano por intercambio:
Cuando la comisión del creador está en el lado de entrada, tanto la comisión de intercambio como la comisión del creador se deducen de
amount_in antes de que se ejecute la curva. Matemáticas de cotización: toma la trade_rate + creator_rate combinada de la entrada.
Cuando la comisión del creador está en el lado de salida, solo la comisión de intercambio se deduce de amount_in; la curva produce una salida sin comisiones, luego la comisión del creador se deduce de esa salida. Matemáticas de cotización: toma trade_rate de la entrada; toma creator_rate de la salida.
La comisión de intercambio en sí siempre se toma del lado de entrada (el patrón estándar de Uniswap-V2). Solo la comisión del creador puede estar en la salida.
Cómo las comisiones “acumuladas” interactúan con la curva
Un detalle importante: las comisiones del 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 se aplica k' ≥ k. Así es como las comisiones que no son de LP llegan a sus destinos sin inflar la parte de LP del pool.
Consecuencias que debes tener en cuenta:
- Cotizar fuera de saldos brutos es incorrecto. Si construyes un cotizador fuera de
getTokenAccountBalance, consistentemente sobrestimarás el precio que el pool honrará. Siempre resta las comisiones acumuladas, o simula medianteSwapBaseInput/ la API. CollectProtocolFeeno mueve el precio. Mueve tokens fuera de la bóveda y pone a cero los contadoresprotocol_fees_token*, por lo quecurve_xycurve_yno cambian.- Las comisiones de LP no se acumulan en un contador. Son implícitas en el saldo de la bóveda. El derecho del LP a las comisiones de LP acumuladas se ejerce quemando tokens LP (es decir, mediante
Withdraw) — no hayCollectLpFee.
Interacción con comisiones de transferencia de Token-2022
Las comisiones de transferencia de Token-2022 se aplican por el mint, no por CPMM. Actúan en cada transferencia de token — intercambio, depósito, retiro, y los barridosCollect*. Las matemáticas de comisión de intercambio de CPMM se calculan contra la cantidad que realmente llegó a la bóveda, es decir, neta de la comisión de transferencia del mint de entrada (si la hay).
Entonces, en el peor caso, un usuario paga tres impuestos distintos en un intercambio de entrada exacta:
- La comisión de transferencia del mint de entrada en
amount_in(a la autoridad de comisión del mint). - La
trade_feedel pool en el resto (dividida como se indicó anteriormente). - La comisión de transferencia del mint de salida en
amount_out(a la autoridad de comisión 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 verificaciones de slippage serán sistemáticamente demasiado generosas.
Ver algorithms/token-2022-transfer-fees para la derivación detallada.
Comisión del creador
La comisión del creador es opcional y por pool. La tasa vive enAmmConfig.creator_fee_rate; la bandera de habilitación y el lado (creator_fee_on) viven en PoolState:
- Habilitada en la creación del pool.
Initializeestableceenable_creator_fee = falsepor defecto; los pools creados medianteInitializeWithPermission(utilizado por graduaciones de LaunchLab y otras rutas controladas) pueden pasarenable_creator_fee = truey elegircreator_fee_on. - La tasa se comparte con el nivel de comisión. 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 comisión del creador efectiva del pool es cero independientemente del valor de configuración (verPoolState::adjust_creator_fee_rateen el código fuente). - Independiente de la comisión de intercambio. La comisión del creador nunca reduce las partes de LP / protocolo / fondo — es su propia tasa, aplicada separadamente, acumulada en sus propios contadores.
- Retirada mediante
CollectCreatorFeeoCollectCreatorFeePermissionless. La ruta original requiere quePoolState.pool_creatorfirme. La ruta sin permisos permite que cualquier pagador active la recopilación pero fija ambos destinos a los ATAs canónicos del creador. Ambas rutas liquidan la parte del protocolo primero — ver la siguiente sección. - No se puede volver a habilitar o redirigir después de la creación. Un pool inicializado con
enable_creator_fee = falsenunca cobrará una comisión del creador; uno inicializado con uncreator_fee_onparticular no puede cambiar de lado.
Parte del protocolo de la comisión del creador
Desde la actualización del 2026-09-19, el protocolo puede retener una parte configurable de la comisión del creador. Nada sobre el intercambio cambia: la comisión del creador aún se cobra acreator_fee_rate y aún se acumula completamente en creator_fees_token{0,1}. La división ocurre una vez, en el momento de la recopilación, dentro de CollectCreatorFee y CollectCreatorFeePermissionless.
De dónde viene la tasa
Dos fuentes, en orden de prioridad:- PDA
CreatorFeeShare— semillas["creator_fee_share", creator, amm_config]. Cuando esta cuenta existe y es propiedad de CPMM, sushare_rategana. Permite que el protocolo negocie una tasa por creador en un nivel de comisión dado sin tocar el nivel en sí. AmmConfig.creator_fee_share_rate— el predeterminado para cada creador en ese nivel de comisión. Se usa siempre que el PDA no exista.
u64 sobre el mismo FEE_RATE_DENOMINATOR = 1_000_000, y ambos están limitados al denominador. Las instrucciones de recopilación siempre toman la cuenta creator_fee_share, incluso cuando nunca ha sido creada — el programa verifica si está vacía y vuelve al predeterminado. Pasar la dirección incorrecta falla la restricción de PDA, no el retroceso.
Qué hace la división
creator_fees_token_0 y creator_fees_token_1, luego:
creator_amount_{0,1}se transfiere fuera de las bóvedas a las cuentas de token del creador.shared_amount_{0,1}se agrega aprotocol_fees_token_{0,1}y permanece en la bóveda hasta que el propietario del protocolo la barre conCollectProtocolFee. No hay instrucción separada ni contador separado para esto.creator_fees_token_{0,1}se ponen a cero, exactamente como antes.
- El redondeo favorece al creador. La parte del protocolo se redondea hacia abajo, por lo que el polvo permanece con el creador — la misma dirección que
protocol_feeyfund_fee, que también extraen una parte de una comisión ya acumulada. - El valor se conserva.
creator_amount + shared_amount == creator_feepara cada tasa y cada comisión, incluyendou64::MAX. share_rate = 0es una no-operación. Tanto el valor de configuración predeterminado como la ausencia de un PDACreatorFeeSharedejan toda la comisión del creador con el creador, que es el comportamiento anterior a la actualización.
Qué significa para los integradores
- Los LPs y la cotización no se ven afectados. La cantidad compartida se mueve entre dos contadores que ambos ya están excluidos de la vista de la curva de la bóveda (
vault_amount_without_fee), por lo quecurve_xycurve_yno se mueven en una recopilación.kno se toca. - Un estimador de comisión del creador que lee
creator_fees_token*ahora sobrestima el pago. Multiplica por(1 − share_rate / 1_000_000)usando la tasa que realmente se aplica a ese par(creator, amm_config), no el predeterminado de configuración. protocol_fees_token*crece fuera de los intercambios. Un monitor que reconcilia la acumulación del protocolo contra el volumen de intercambio verá saltos en cada recopilación de comisión del creador. La acumulación del protocolo ya no es solotrade_fee × protocol_fee_rate.- La tasa puede cambiar entre acumulación y recopilación. Se lee en el momento de la recopilación, por lo que las comisiones que se acumularon bajo una tasa se liquidan a cualquier tasa que esté en vigor cuando alguien llama a
Collect*.
CreatorFeeShare es creada y cerrada por el administrador o una autoridad dedicada de comisión de participación del creador mediante CreateCreatorFeeShare / CloseCreatorFeeShare; cerrarla devuelve el par a AmmConfig.creator_fee_share_rate. Diseño de cuenta en products/cpmm/accounts, direcciones en reference/program-addresses.
Flujo operativo de recopilación
Los propietarios del protocolo y del fondo son el multisig de Raydium en mainnet; ver
security/admin-and-multisig. En la ruta original solo del creador, el firmante del creador es la cuenta registrada en PoolState. En la ruta sin permisos, el llamador paga para crear cualquier ATA del creador faltante. El programa restringe creator a pool_state.pool_creator y deriva cada destino de ese creador más el mint de bóveda correspondiente y el programa de token, por lo que el llamador no puede redirigir fondos.
Cambiar un nivel de comisión
Las tasas de comisión se pueden cambiar por el administrador medianteUpdateAmmConfig (ver products/cpmm/instructions). Los cambios entran en vigor 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 las comisiones ya acumuladas.
- Recopilar comisiones sin el firmante
protocol_owner/fund_owner.
Lectura de comisiones de un pool en ejecución
Resuelve la tasa de participación en cadena, no desde una configuración en caché.
creator_fee_share_rate es un campo AmmConfig recién agregado, por lo que léelo de la cuenta en lugar de asumir que la carga útil de configuración REST lo lleva, y verifica si existe un PDA CreatorFeeShare en ["creator_fee_share", creator, ammConfig] antes de cotizar un pago del creador. Un PDA ausente es el caso común y significa que se aplica el predeterminado de configuración.Comparación con CLMM y AMM v4
Verreference/fee-comparison para una matriz lado a lado. Resumen:
- AMM v4 usa una comisión de intercambio fija del 0.25% con una división LP/protocolo diferente y sin comisión de fondo.
- CLMM las comisiones son por nivel de espaciado de tick, acumuladas por posición (no por pool), y se reclaman mediante
DecreaseLiquidityoCollectFees.
A dónde ir a continuación
products/cpmm/math— donde la deducción de comisión de intercambio se conecta a la curva.products/cpmm/instructions— las listas de cuentas de instrucciónCollect*, incluyendo la cuentacreator_fee_shareque ambas rutas del creador ahora requieren.algorithms/token-2022-transfer-fees— cómo combinar correctamente una comisión de intercambio de pool con una comisión de transferencia de mint.

