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 →
El invariante
El pool mantienecoin_reserve × pc_reserve = k, donde:
- Las reservas incluyen cantidades comprometidas en OpenBook. Las órdenes limitadas del AMM siguen siendo parte de su liquidez — no se “pierden” en el libro de órdenes, solo se custodian allí. Calcular
kúnicamente con los saldos de bóveda en cadena subestima las reservas. - El acúmulo de PnL (
need_take_pnl_*) se resta para que la curva se conserve cuando el administrador retira las comisiones. El mismo principio que la exclusión deprotocol_fees_*de CPMM.
Swap* garantiza que k' ≥ k después de volver a añadir la cuota de comisión del proveedor de liquidez a las reservas.
Convención de comisiones
AMM v4 utiliza comisiones de razón (pares numerador/denominador) en lugar de la convención1/1_000_000 de CPMM / CLMM. La estructura Fees en cadena (ver Fees::initialize en el código fuente del programa) tiene estos valores predeterminados:
- Comisión total del swap:
swap_fee = amount_in × 25 / 10_000 = 0.25%de la entrada bruta. - Cuota del protocolo:
pnl_numerator / pnl_denominator = 12 / 100 = 12%de la comisión de swap, lo que resulta en0.25% × 12% = 0.03%del volumen. Esta cuota se acumula en los contadores de PnL y se retira medianteWithdrawPnl. - Cuota del LP: el
88%restante de la comisión de swap, lo que resulta en0.25% × 88% = 0.22%del volumen. Se queda en el pool e inflak. - Sin cuota de fondo. AMM v4 no tiene la división de comisiones de fondo de CPMM/CLMM.
pnl_numerator / pnl_denominator es una fracción de la comisión, no del volumen de trading — una confusión común con estos nombres de campos.
trade_fee_numerator / trade_fee_denominator (también 25 / 10_000) es un campo separado utilizado por la integración con OpenBook al calcular precios inclusive de comisiones para la cuadrícula de órdenes limitadas del AMM; es igual a swap_fee por defecto pero se lee desde una ruta de código diferente.
Las desviaciones de estos valores predeterminados son raras pero existen en algunos pools heredados; siempre lee las comisiones desde AmmInfo.fees antes de hacer una cotización.
Matemática directa del swap (ruta AMM)
El caso más simple: el usuario realiza un swap contra las bóvedas del pool sin interactuar con OpenBook. Las reservas internas del pool (incluidas las asignaciones en el libro) son el denominador. SwapBaseIn (entrada exacta):coin_vault_balance + coin_posted_on_openbook + ... (la bóveda del AMM más los tokens que tenía bloqueados en órdenes de OpenBook). Desde la desactivación de OpenBook, el saldo en el libro es cero, así que las reservas efectivas son iguales a los saldos brutos de la bóveda. La ruta MonitorStep / liquidación implícita que solía refrescar el lado de OpenBook ya no es necesaria en la práctica.
SwapBaseOut (salida exacta):
Interacción con el libro de órdenes (histórico)
Ya no está activo. La construcción de la cuadrícula descrita en esta sección refleja cómo AMM v4 originalmente reflejaba la curva en un mercado de OpenBook. La integración con OpenBook ha sido desactivada; los pools ya no publican ni mantienen órdenes en OpenBook. La matemática a continuación se preserva para contexto — explica para qué se dimensionaban las cuentas
target_orders / amm_open_orders en cadena y por qué el programa aún valida los parámetros relacionados con MonitorStep aunque el keeper ya no los ejecute.AmmInfo:
depth— número de niveles de precio por lado.amount_wave— unidad base de tamaño por nivel.min_size,coin_lot_size,pc_lot_size— restricciones del mercado OpenBook.state_data.swap_acc_coin_fee,swap_acc_pc_fee— contadores de comisiones acumuladas desde el últimoTakePnl.
target_orders calculado en build_orders y comparado con amm_open_orders en cada MonitorStep. Cualquier divergencia resulta en cancelaciones + nuevas publicaciones. Las órdenes recién completadas en OpenBook se liquidan en las bóvedas del pool en la siguiente operación que refresca el lado de OpenBook.
Los integradores raramente necesitan calcular la cuadrícula — el keeper de Raydium la mantiene — pero es útil saber que:
- Un pool con liquidez significativa en el libro tiene esa liquidez contribuyendo a
k, no sentada sin hacer nada. - Un mercado OpenBook obsoleto (cola de eventos llena, cranks bloqueados) impide actualizaciones de la cuadrícula; el AMM entonces puede cotizar precios que divergen del libro de órdenes visible hasta el siguiente crank.
Paso de liquidación (PnL)
La cuota del protocolo del 0.03% se acumula enstate_data.need_take_pnl_coin y state_data.need_take_pnl_pc. TakePnl mueve estos montos fuera de las bóvedas al destino especificado por el administrador, luego pone a cero los contadores.
Propiedad crucial: las reservas en el invariante siempre se calculan menos PnL acumulado, así que TakePnl no mueve la curva. Esto coincide con la convención de CPMM.
Ejemplo trabajado
Estado del pool:coin_reserve = 1_000_000_000_000(1.000.000 lado coin; 6 decimales)pc_reserve = 2_000_000_000_000(2.000.000 lado pc; 6 decimales)- Comisiones:
swap = 25/10_000predeterminado,pnl = 3/10_000.
SwapBaseIn entrada exacta 1_000_000_000 coin (1.000 coin).
2_200_000) no se desglosa en ningún lugar — es simplemente el residual que eleva k'.
Reglas de precisión
- Las multiplicaciones de reservas utilizan
u128; las divisiones finales redondean hacia cero. swap_feeredondea hacia arriba (así el pool no cobra menos).amount_inparaSwapBaseOutredondea hacia arriba (así el usuario no paga menos).- Los pools con ratios de reserva extremos pueden golpear
ZeroTradingTokensen entradas muy pequeñas; la misma convención que CPMM.
Limitaciones vs CPMM
- Las reservas de AMM v4 incluyen la porción en custodia de OpenBook, así que un integrador no puede cotizar correctamente desde solo
getTokenAccountBalance. Siempre obtén el estado completo (bóvedas +open_orders.free+open_orders.locked), o utiliza el quote del SDK / API. - AMM v4 no expone un TWAP estructurado en cadena. Los consumidores externos que quieran un precio respaldado por AMM v4 deben calcularlo por sí mismos a partir de logs de transacciones.
- Token-2022 no es soportado.
A dónde ir ahora
products/amm-v4/instructions— donde se conectanSwapBaseIn,Deposit, etc.products/amm-v4/fees— mecánica completa de comisiones, detalles deTakePnl.algorithms/constant-product— la derivación compartida.
- Código fuente del programa Raydium AMM —
raydium-io/raydium-amm - Módulo
Liquidityde Raydium SDK v2


