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 →

Dos comisiones independientes, cuatro destinos

CPMM aplica dos comisiones con tasas independientes en cada operación:
  1. Comisión de operación — cobrada a AmmConfig.trade_fee_rate y dividida entre tres destinos:
    • Parte de LP — permanece en la bóveda y aumenta k. Se reclama implícitamente al quemar tokens LP.
    • Parte del protocolo — acumulada en PoolState.protocol_fees_token*; retirada por protocol_owner mediante CollectProtocolFee.
    • Parte del fondo — acumulada en PoolState.fund_fees_token*; retirada por fund_owner mediante CollectFundFee.
  2. Comisión de creador (opcional, por grupo) — cobrada a AmmConfig.creator_fee_rate independientemente de la comisión de operación y acumulada en PoolState.creator_fees_token*. El creador puede retirarla mediante CollectCreatorFee, o cualquier pagador puede activar la ruta restringida por destino CollectCreatorFeePermissionless. Activa solo cuando el grupo fue creado con enable_creator_fee = true.
La comisión de creador no es una parte de la comisión de operación. Las dos tasas se suman cuando se cobra la comisión en la entrada de la operación, pero cada una permanece en su propio depósito — las partes del protocolo y del fondo siempre se derivan de trade_fee únicamente, nunca de creator_fee. Un grupo con creator_fee_rate = 1000 (0,10%) y trade_fee_rate = 2500 (0,25%) cobra un 0,35% combinado de la entrada en una operación con comisión de creador en entrada, de la cual el creador se queda con el 0,10% y el depósito de comisión de operación obtiene el 0,25%. Las tasas de comisión de operación (trade_fee_rate, protocol_fee_rate, fund_fee_rate) y creator_fee_rate residen en AmmConfig. La bandera enable_creator_fee por grupo y el modo creator_fee_on (de qué lado de la operación se cobra la comisión de creador) residen en PoolState. Consulta products/cpmm/accounts.

Tasas y unidades

Todas las tasas son u64 denominadas en unidades de 1 / FEE_RATE_DENOMINATOR donde FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate es una fracción del volumen de operación. 2500 ⇒ 0,25% del lado relevante (entrada o salida, dependiendo de creator_fee_on — consulta “De qué lado de la operación se cobran las comisiones” a continuación).
  • creator_fee_rate es una fracción del volumen de operación, cobrada separadamente de la comisión de operación. 1000 ⇒ 0,10% del lado relevante.
  • protocol_fee_rate y fund_fee_rate son fracciones de la comisión de operación, no del volumen. 120_000 ⇒ 12% de la comisión de operación.
Parámetros predeterminados para AmmConfig[index=0] (el grupo “estándar” de 0,25%) en mainnet, como referencia: Entonces, en una operación de $1.000 contra AmmConfig[0] con enable_creator_fee = false: $2,50 de comisión de operación 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 comisión de creador está deshabilitada. Si el mismo grupo tuviera enable_creator_fee = true y creator_fee_rate = 1000 (0,10%), el usuario paga un $1,00 adicional al depósito de creador — cobrado del mismo lado de la operación configurado por creator_fee_on — para un total de $3,50 de comisiones. El depósito de comisión de operación y sus divisiones de protocolo/fondo permanecen sin cambios. 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 actualizadas en lugar de codificarse.

La división, en código

Notas:
  • La comisión total en entrada redondea hacia arriba para que el grupo nunca subcobre.
  • Las subdivisiones de trade_fee (protocolo, fondo) redondean hacia abajo para que su suma nunca exceda trade_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 de creador se toma de entrada o salida dependiendo de PoolState.creator_fee_on (consulta la siguiente sección). La tasa es la misma de cualquier forma.

De qué lado de la operación se cobran las comisiones

CPMM tiene una configuración creator_fee_on por grupo (BothToken / OnlyToken0 / OnlyToken1) que determina si la comisión de creador se toma del lado de entrada o salida de una operación dada. La función auxiliar de tiempo de ejecución is_creator_fee_on_input(direction) colapsa eso a un booleano por operación: Cuando la comisión de creador está en el lado de entrada, tanto la comisión de operación como la comisión de creador se deducen de 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 comisión de creador está en el lado de salida, solo la comisión de operación se deduce de amount_in; la curva produce una salida sin comisión, luego la comisión de creador se deduce de esa salida. Matemática de cotización: toma trade_rate de la entrada; toma creator_rate de la salida. La comisión de operación en sí siempre se toma del lado de entrada (el patrón estándar de Uniswap-V2). Solo la comisión de creador puede estar en salida.

Cómo las comisiones “acumuladas” interactúan con la curva

Un detalle importante: las comisiones de protocolo, fondo y creador permanecen físicamente en la bóveda hasta que se llama a su respectiva instrucción Collect*. Pero se excluyen de la vista de la curva del saldo de la bóveda. Una imagen concreta después de una operación:
El programa usa curve_x (y el análogo curve_y) al aplicar k' ≥ k. Así es como las comisiones que no son de LP llegan a sus destinos sin inflar la parte de LP del grupo. Consecuencias que debes considerar en tu diseño:
  • Cotizar fuera de saldos brutos es incorrecto. Si construyes un cotizador fuera de getTokenAccountBalance, consistentemente sobrestimarás el precio que el grupo honrará. Siempre resta comisiones acumuladas, o simula mediante SwapBaseInput / la API.
  • CollectProtocolFee no mueve el precio. Mueve tokens fuera de la bóveda y pone a cero los contadores protocol_fees_token*, por lo que curve_x y curve_y permanecen sin cambios.
  • 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 hay CollectLpFee.

Interacción con comisiones de transferencia de Token-2022

Las comisiones de transferencia de Token-2022 se aplican por la acuñación, no por CPMM. Actúan en cada transferencia de token — operación, depósito, retiro y los barridos Collect*. La matemática de comisión de operación de CPMM se calcula contra la cantidad que realmente llegó a la bóveda, es decir, neta de la comisión de transferencia de la acuñación de entrada (si la hay). Entonces, en el peor caso, un usuario paga tres impuestos distintos en una operación de entrada exacta:
  1. La comisión de transferencia de la acuñación de entrada en amount_in (a la autoridad de comisión de la acuñación).
  2. La trade_fee del grupo en el resto (dividida como se indicó anteriormente).
  3. La comisión de transferencia de la acuñación de salida en amount_out (a la autoridad de comisión de la acuñación).
El cotizador del SDK cuenta los tres, por lo que 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 deslizamiento serán sistemáticamente demasiado generosas. Consulta algorithms/token-2022-transfer-fees para la derivación detallada.

Comisión de creador

La comisión de creador es opcional y por grupo. La tasa reside en AmmConfig.creator_fee_rate; la bandera de habilitación y el lado (creator_fee_on) residen en PoolState:
  • Habilitada en la creación del grupo. Initialize establece enable_creator_fee = false por defecto; los grupos creados mediante InitializeWithPermission (utilizado por graduaciones de LaunchLab y otras rutas controladas) pueden pasar enable_creator_fee = true y elegir creator_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 grupos vinculados a esa configuración. Cada grupo entonces decide si cobrarla (enable_creator_fee) y de qué lado de la operación cobrarla (creator_fee_on). Cuando enable_creator_fee = false, la tasa de comisión de creador efectiva del grupo es cero independientemente del valor de configuración (consulta PoolState::adjust_creator_fee_rate en el código fuente).
  • Independiente de la comisión de operación. La comisión de creador nunca reduce las partes de LP / protocolo / fondo — es su propia tasa, aplicada separadamente, acumulada en sus propios contadores.
  • Retirada mediante CollectCreatorFee o CollectCreatorFeePermissionless. La ruta original requiere que PoolState.pool_creator firme. La ruta sin permisos permite que cualquier pagador active la recopilación pero fija ambos destinos a las ATA canónicas del creador.
  • No se puede reactivar o redirigir después de la creación. Un grupo inicializado con enable_creator_fee = false nunca cobrará una comisión de creador; uno inicializado con un creator_fee_on particular no puede cambiar de lado.
Las comisiones de creador son el mecanismo detrás del patrón “Burn & Earn” de Raydium: los tokens LP se bloquean bajo el programa LP Lock para que el creador no pueda retirar liquidez, pero las comisiones de creador acumuladas aún se pueden recopilar indefinidamente.

Flujo operativo de recopilación

Los propietarios del protocolo y del fondo son el multisig de Raydium en mainnet; consulta security/admin-and-multisig. En la ruta original solo para creador, el firmante del creador es la cuenta registrada en PoolState. En la ruta sin permisos, el llamador paga para crear cualquier ATA de creador faltante. El programa restringe creator a pool_state.pool_creator y deriva cada destino de ese creador más la acuñación 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 mediante UpdateAmmConfig (consulta products/cpmm/instructions). Los cambios entran en vigor en la siguiente operación para cada grupo vinculado a ese AmmConfig — no hay migración, porque los grupos cargan la configuración en cada operación. Lo que el administrador no puede hacer:
  • Mover un grupo de un AmmConfig a otro.
  • Repreciar retroactivamente las comisiones ya acumuladas.
  • Recopilar comisiones sin el firmante protocol_owner / fund_owner.

Lectura de comisiones de un grupo en ejecución

Comparación con CLMM y AMM v4

Consulta reference/fee-comparison para una matriz lado a lado. Resumen:
  • AMM v4 utiliza una comisión de operación 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 grupo), y se reclaman mediante DecreaseLiquidity o CollectFees.

Dónde ir a continuación

Fuentes: