Saltar al contenido principal

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 →

Resumen en un párrafo

CLMM — Concentrated Liquidity Market Maker — es el AMM estilo Uniswap-v3 de Raydium. En lugar de dispersar el depósito de un proveedor de liquidez en toda la curva de precios, CLMM permite a los LP depositar en un rango de precio específico. Dentro de ese rango, cada dólar de depósito es muchas veces más productivo que lo sería en un pool CPMM; fuera del rango, el depósito no genera ganancias y permanece como un saldo de un solo lado. El programa rastrea la liquidez por tick (un bucket de precio discretizado), valida el estado del pool por la raíz cuadrada del precio codificado como un número de punto fijo Q64.64 (sqrt_price_x64), y acuña un NFT para cada posición de LP en lugar de un token LP fungible.

Novedades

La versión más reciente de CLMM incluye tres adiciones además del núcleo estilo Uniswap-v3. Son opcionales en el momento de la creación del pool y compatibles hacia atrás con pools y posiciones existentes:
  • Órdenes límite. Los LP ahora pueden estacionar una orden de tick único a un precio específico y hacer que la ruta de swap la ejecute FIFO cuando el swap cruza ese tick. Las órdenes se resuelven en el ATA del propietario al precio límite; un keeper fuera de la cadena (limit_order_admin) puede recopilar órdenes ejecutadas sin que el propietario esté en línea. Consulta Instrucciones → OpenLimitOrder / SettleLimitOrder y Matemáticas → Coincidencia de orden límite durante swap.
  • Tarifa de un solo lado (CollectFeeOn). Los pools se pueden configurar para tomar tarifas de swap del lado de entrada (comportamiento heredado, modo 0), o siempre de token_0 (1), o siempre de token_1 (2). Útil cuando un lado del par es el token de contabilidad canónico (p. ej., USDC). Consulta Tarifas → Tarifa de un solo lado.
  • Tarifa dinámica. Los pools pueden optar por un recargo de tarifa que rastrée volatilidad y que suba con movimientos rápidos de tick y decay con el tiempo. Calibrado por un DynamicFeeConfig por nivel y un DynamicFeeInfo por pool. Consulta Tarifas → Tarifa dinámica y Matemáticas → Derivación de tarifa dinámica.
Una nueva instrucción, CreateCustomizablePool, expone los tres controles en el momento de la creación del pool. El clásico CreatePool continúa funcionando para pools de tarifa predeterminada sin órdenes límite ni tarifas dinámicas.

Lo que CLMM te ofrece

  • Eficiencia de capital. Un LP de stablecoin a stablecoin concentrando liquidez en una banda ±0.1% alrededor de paridad puede ganar 100×+ las tarifas por dólar de TVL comparado con un pool CPMM del mismo par.
  • Contabilidad de tarifas a nivel de posición. Las tarifas se acumulan por posición, no por mint de LP. Dos posiciones en el mismo pool ganan diferentes cantidades de tarifa según sus rangos y la ruta que ha tomado el precio.
  • Múltiples niveles de tarifa por par. Un par puede tener varios pools CLMM, cada uno vinculado a un AmmConfig diferente con su propia tasa de tarifa comercial y espaciado de tick. La UI web y los routers muestran el nivel que tiene más liquidez al precio actual.
  • Incentivizable directamente en el pool. Hasta tres flujos de token de recompensa se pueden conectar a un pool; las posiciones recopilan recompensas pro-rata según los segundos × liquidez en rango que contribuyen. Consulta products/clmm/fees.
  • Posiciones NFT. Cada posición es un token no fungible con mint igual a un PDA determinista. Transferir el NFT transfiere la posición; las carteras y UIs pueden mostrar posiciones de la misma manera que muestran coleccionables.
  • Soporte Token-2022 en ambos lados del par, con las mismas restricciones de extensión que CPMM.

Lo que CLMM no es

  • No es de configurar y olvidar. Un rango establecido cuando SOL es $160 no ganará nada si SOL se mueve a $80, a menos que lo ajustes activamente. CLMM recompensa a los LP activos; los LP pasivos deben quedarse con CPMM.
  • No tiene costo cero de apertura. Cada nuevo tick-array que cruce la posición debe inicializarse, lo que cuesta renta. Los rangos amplios son más baratos; los estrechos no lo son.
  • No es un CLOB. A diferencia de AMM v4, CLMM no tiene dependencia de OpenBook. Toda la liquidez se encuentra en el mapa de ticks.
  • No es un superconjunto de CPMM. Una posición CLMM que abarque [tick_min, tick_max] en rango máximo se comporta similarmente a CPMM, pero con diferentes costos de gas, un modelo de contabilidad de tarifas diferente, y sin token LP fungible. Si quieres un pool simple con LP fungible, usa CPMM.

Cómo CLMM se diferencia de CPMM y AMM v4

DimensiónAMM v4CPMMCLMM
CurvaProducto constanteProducto constanteConcentrada (basada en tick)
Participación de LPMint LP fungibleMint LP fungibleNFT por posición
La liquidez vive en…Todos los preciosTodos los preciosEn un rango elegido por el usuario
Niveles de tarifaFijo 0.25%Por AmmConfig (p. ej., 0.25%, 1%)Por AmmConfig × espaciado de tick
Gestión activaNo aplicableNo aplicableRequerida
Contabilidad de tarifasNivel de poolNivel de poolPor posición
Granjas de recompensaPrograma Farm separadoPrograma Farm separadoIntegrado (hasta 3 recompensas)
Token-2022No
Oráculo on-chainNoRing de observationArray de observation por pool

Modelo mental

Piensa en un pool CLMM como tres estructuras de datos superpuestas:
  1. Una curva continua en espacio sqrt_price. El precio del pool se representa como sqrt_price_x64, un punto fijo Q64.64. Los swaps caminan a lo largo de esta curva; dentro de un límite de tick, las matemáticas son matemáticas estándar de AMM de liquidez concentrada (consulta algorithms/clmm-math).
  2. Un mapa de ticks discreto. Los precios se cuantizan en ticks — potencias enteras de 1.0001. Cada tick tiene un sqrt_price conocido. Las posiciones hacen referencia a sus extremos como índices de tick enteros. Los índices de tick se agrupan en arrays de tick de tamaño fijo para almacenamiento.
  3. Contabilidad de tarifas y recompensas por posición. Cada posición almacena el fee_growth_inside global en el momento de su última actualización. Cuando el LP toca la posición (abrir, cerrar, ajustar, recopilar), el programa resta el valor almacenado del actual global para calcular lo que se debe. Este es el patrón Uniswap-v3 feeGrowthInside0X128 / feeGrowthInside1X128.
Cada acción del usuario se descompone en transiciones de estado en estas tres estructuras:
  • Abrir posición: elige rango de tick, deposita tokens, acuña NFT, inserta liquidez en el mapa de ticks dentro del rango, inicializa cualquier tick-array previamente vacío.
  • Aumentar / disminuir liquidez: ajusta la cantidad almacenada en la cuenta de posición asociada al NFT y en el mapa de ticks; recopila tarifas acumuladas al mismo tiempo.
  • Swap: camina desde el sqrt_price_x64 actual en la dirección del comercio, consumiendo liquidez activa hasta que se agota la entrada o se alcanza el siguiente tick inicializado; cruza el tick y recoge o suelta liquidez en el nuevo lado.
  • Recopilar tarifas / recompensas: calcula fee_growth_inside_now − fee_growth_inside_last × position_liquidity para cada lado y cada flujo de recompensa; transfiere afuera.
El pool es de otra manera indiferente a qué posiciones estén abiertas. Dos LP en el mismo rango ven la misma ruta de crecimiento de tarifas, escalada por sus cantidades individuales de liquidity.

Cuándo elegir CLMM

Elige CLMM cuando:
  • Estés proporcionando liquidez a un par estable o que revierta a la media (USDC/USDT, jitoSOL/SOL, wBTC/BTC) y quieras concentrarte cerca de la paridad.
  • Seas un creador de mercado dispuesto a monitorear el precio y rebalancear.
  • Necesites específicamente emisiones de incentivos por pool sin configurar una granja separada.
  • Necesites contabilidad por posición para tu propio producto LP (vault, producto estructurado, etc.).
Prefiere CPMM cuando:
  • Estés lanzando un token nuevo con descubrimiento de precio desconocido.
  • Quieras un único token LP fungible que puedas hacer stake, bloquear o componer.
  • Quieras una experiencia de LP pasiva.
Prefiere AMM v4 cuando:
  • Necesites específicamente la profundidad AMM híbrida-CLOB que AMM v4 coloca en OpenBook.
  • Estés migrando integraciones existentes de AMM v4 y no estés abriendo nuevas posiciones.

Las posiciones son NFT

Una posición CLMM se representa en la cadena mediante dos cuentas:
  • Un mint NFT de posición con suministro 1.
  • Una cuenta de estado de posición personal vinculada al mint NFT, que contiene los ticks, liquidez y valores de crecimiento de tarifa observados por última vez de la posición.
Transferir el NFT transfiere la posición — la autoridad de la cuenta de posición personal es el propietario del NFT. Este es el patrón que Uniswap v3 pionero, implementado en el modelo de cuentas de Solana. Un tratamiento detallado se encuentra en products/clmm/ticks-and-positions.
Las versiones anteriores de CLMM también creaban una cuenta ProtocolPositionState por (pool, tick_lower, tick_upper) para agregar liquidez para ese rango. Las versiones más nuevas ya no la crean ni la usan — el campo aún aparece en las listas de cuentas OpenPosition / IncreaseLiquidity / DecreaseLiquidity como un UncheckedAccount para compatibilidad ABI, pero el programa no la lee ni escribe. La contabilidad de rango agregada vive en los extremos del tick (liquidity_gross, liquidity_net) directamente.

A dónde ir después

  • Cuentas — el pool, config, tick-array, y diseños de cuenta de posición.
  • Ticks y posiciones — el mapa de ticks, espaciado de tick, dimensionamiento de tick-array, posiciones basadas en NFT.
  • Matemáticassqrt_price_x64, paso de swap, derivación de fee_growth_inside.
  • InstruccionesOpenPosition, IncreaseLiquidity, Swap, CollectRewards, la familia de orden límite, y CreateCustomizablePool.
  • Tarifas y recompensas — el modelo de tarifa por posición, modos de tarifa de un solo lado, tarifa dinámica, y los tres espacios de recompensa.
  • Demos de código — aperturas / ajuste / swap / recopilación / orden límite / recorridos de pool personalizable en TypeScript.
Fuentes: