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 →
Por qué precio-raíz, no precio
Los CLMMs de la familia Uniswap-v3 representan el precio como su raíz cuadrada, almacenada en punto fijoQ64.64:
- Matemática de liquidez lineal. La cantidad de token0 o token1 en un rango de precio resulta ser una función lineal de
sqrt_price, no deprice. Almacenarsqrt_pricepermite que el paso de swap evalúe esas fórmulas lineales sin calcular una raíz cuadrada. - Control de desbordamiento.
sqrt_price · Lcabe enu256para todos los parámetros razonables;price · Lpuede desbordar mucho antes. - Matemática de ticks uniforme. Como los ticks se definen como
1.0001^i,sqrt(price) = 1.00005^itambién es una potencia exacta de la escala 1.00005. Cada cruce de tick se traduce en una pequeña multiplicación en el espaciosqrt_price_x64.
price = (sqrt_price_x64 / 2^64)^2.
Malla de ticks
Los precios se discretizan en una cuadrícula:tick_i es un i32. El rango activo es [MIN_TICK, MAX_TICK] = [−443636, 443636], lo que proporciona un rango de precio aproximadamente [2^−128, 2^128]. El tick_spacing de cada pool se establece según su nivel de comisión: espaciados más pequeños para pares ajustados (por ejemplo, el nivel de stablecoin 0.01% usa espaciado 1), espaciados más grandes para pares volátiles (el nivel 0.25% usa 60, el nivel 1% usa 120).
Las posiciones deben tener tick_lower y tick_upper alineados a tick_spacing. Los ticks activos de un pool (aquellos con liquidez que comienzan o terminan allí) son los únicos ticks que el paso de swap considera.
Liquidez-a-cantidad
Para una posición con liquidezL y rango de precio [sqrt_lo, sqrt_hi] (todos valores sqrt_price):
| Estado del pool | Cantidad de token0 | Cantidad de token1 |
|---|---|---|
Precio por encima del rango (sqrt_p ≥ sqrt_hi) | 0 | L · (sqrt_hi − sqrt_lo) |
| Precio dentro del rango | L · (sqrt_hi − sqrt_p) / (sqrt_p · sqrt_hi) | L · (sqrt_p − sqrt_lo) |
Precio por debajo del rango (sqrt_p ≤ sqrt_lo) | L · (sqrt_hi − sqrt_lo) / (sqrt_lo · sqrt_hi) | 0 |
(x_v, y_v) elegidas de modo que el (sqrt_p, L) actual del pool sea consistente con L = sqrt(x_v · y_v). Integrando desde sqrt_p hasta el límite del rango se obtienen las cantidades anteriores.
Fórmulas inversas (usadas al crear una posición para una amount0 o amount1 dada):
Paso de swap de un solo tick
Dentro de un rango de tick único el pool se comporta como un CPMM. Dado elsqrt_p actual y el sqrt_target:
Paso de entrada exacta
DadoΔin_remaining:
0→1 reduce sqrt_p (el precio baja a medida que vendemos token0). Un swap 1→0 lo aumenta. Las fórmulas son simétricas con sqrt_p y sqrt_target intercambiados.
Paso de salida exacta
Misma estructura, resolviendo paraΔin en su lugar.
Bucle de swap multi-tick
Un swap itera sobre ticks hasta que la entrada se agota o se alcanza el límite de precio:single_step utiliza la L actual del pool. L cambia solo al cruzar un tick inicializado. La liquidez entre ticks es constante, que es lo que hace que la matemática del paso sea de forma cerrada.
liquidity_net en un tick es la suma con signo de las liquideces de posición que comienzan en ese tick menos las que terminan allí. Cruzar hacia arriba suma liquidity_net; cruzar hacia abajo lo resta.
Cuando el pool tiene órdenes de límite abiertas en un tick, el paso de cruce de tick también consume oportunamente parte de la entrada del swap para llenar esas órdenes (FIFO entre cohortes). El algoritmo de coincidencia y el recargo de comisión dinámica que puede aplicarse además del paso base se documentan en products/clmm/math; no cambian las fórmulas de forma cerrada de un solo paso anteriores.
Acumuladores de crecimiento de comisiones
CLMM rastrea comisiones por unidad de liquidez activa, por lado, globalmente y por tick:single_step:
fee_growth_global del otro lado no se mueve en este paso, ya que ningún token en ese lado se pagó como entrada.)
Al cruzar un tick, el programa invierte fee_growth_outside:
tick_current. Cuando tick_current está por encima del tick, fuera significa “debajo”. Cuando tick_current está por debajo, fuera significa “arriba”. La inversión cambia la interpretación.
fee_growth_inside para una posición
Dada una posición [tick_lower, tick_upper] y el tick_current actual:
s son:
IncreaseLiquidity, DecreaseLiquidity, CollectFees).
Ejemplo trabajado — cruzar un tick
Pool (simplificado):sqrt_p_x64 = 2^64 · 1.0 = 2^64(precio = 1.0)L = 1_000_000tick_current = 0- Siguiente tick inicializado abajo:
tick = −60,sqrt_price = 1.0001^(−30) ≈ 0.99700,liquidity_net = −400_000(este tick termina una posición, por lo que un cruce hacia abajo elimina 400k) - Tasa de comisión: 0.25%
Δin = 10_000 token0, dirección = 0→1.
Paso 1 — hasta sqrt_target = 0.99700 · 2^64:
L = 600_000:
El siguiente tick inicializado (digamos tick = −120) está en sqrt = 0.99402. Recomputa amount_in_to_target:
Δin_remaining. Cruza de nuevo. Continúa hasta que Δin_remaining llegue a cero.
La secuencia completa de Δout se acumula en la salida de swap final.
Inicialización y guardas contra desbordamiento
MIN_SQRT_PRICE_X64yMAX_SQRT_PRICE_X64corresponden atick = ±443636. Cualquier swap que empujesqrt_pfuera de este rango revierte.- El parámetro
sqrt_price_limitdel usuario debe estar en el mismo intervalo; el programa lo verifica. - Los productos de
L · Δsqrtse calculan enu256y luego se desplazan de nuevo au128para evitar desbordamiento.
Diferencias vs Uniswap v3
- Oráculo. El
ObservationStatede Raydium almacena un búfer de anillo(block_timestamp, tick_cumulative, seconds_per_liquidity_cumulative); formato de transferencia ligeramente diferente de Uniswap pero la misma matemática TWAP. - Token-2022. Raydium CLMM soporta acuñaciones de Token-2022; la variante de comisión de transferencia requiere ajustes adicionales de cantidad pre/post-swap. Ver
algorithms/token-2022-transfer-fees. - Mapa de bits de tick. Raydium empaqueta el mapa de bits de tick inicializado en
[u64; 16]por pool parafind_next_initialized_tickrápido; Uniswap usa una asignación por palabra en cadena. La compensación es alquiler vs costo de búsqueda. - Espacios de recompensas. Raydium soporta 3 flujos de recompensas por pool con contadores
reward_growth_global_x64separados; la misma estructura que el acumulador de crecimiento de comisiones.
Enlaces
products/clmm/math— la implementación en cadena y ejemplo trabajado con campos de struct CLMM reales.products/clmm/ticks-and-positions— malla de ticks, semánticaliquidity_net/grossy rango activo.products/clmm/fees— el acumulador de crecimiento de comisiones en acción.
- Documento técnico de Uniswap v3 (derivación canónica de matemática de precio-raíz).
- Código fuente del programa Raydium CLMM.


