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 →
La curva de tabla de búsqueda
El AMM estable reemplaza la fórmula x·y=k con una tabla de búsqueda dispersa de tuplas (x, y, precio). Cuando se cotiza un intercambio, el programa:- Calcula la relación actual del pool a partir de las reservas.
- Busca binariamente en la tabla para encontrar las dos entradas que enmarcan esa relación.
- Interpola linealmente entre ellas para obtener un precio intermedio.
- Aplica comisiones y devuelve la cotización.
Diseño de tabla y búsqueda binaria
ModelDataInfo contiene hasta 50,000 entradas DataElement, indexadas por el administrador. Solo las primeras valid_data_count están activas. Cada entrada:
- Calcula la relación:
target_ratio = (x_real * multiplier) / y_real. - Busca binariamente entradas donde
(element.x * multiplier) / element.yenmarquetarget_ratio. - Cuando se encuentra un intervalo
[min_idx, max_idx], interpola.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. El invariante clave: las entradas deben estar ordenadas (x ascendente, y descendente, precio ascendente) para que la búsqueda funcione.
Interpolación lineal
Una vez que dos puntos de tabla enmarcan la relación, la interpolación calcula un precio intermedio y un par de reservas:Escalado: el multiplicador
Las reservas del pool y los precios se almacenan en escalas diferentes. El campomultiplier en ModelDataInfo tiene esto en cuenta. Un patrón común:
- La moneda tiene 6 decimales, PC tiene 18 decimales.
- Multiplicador = 10^6 (o similar).
- Las entradas de la tabla se almacenan en una escala reducida para caber en los límites de u64.
Precios de intercambio: SwapBaseIn y SwapBaseOut
SwapBaseIn (entrada exacta)
Dada la cantidad de entradaamount_in:
- Obtén la relación actual de
(coin_vault, pc_vault). - Encuentra entradas de tabla que enmarquen e interpola para obtener la relación en espacio de tabla.
- Convierte la entrada al espacio de tabla:
dx_table = amount_in * multiplier / ratio. - Consulta la tabla en la nueva coordenada X para encontrar la Y nueva.
dy_table = y_old - y_new.- Convierte de vuelta:
dy_real = dy_table * ratio / multiplier. - Aplica comisión de intercambio:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Devuelve
dy_output.
SwapBaseOut (salida exacta)
Simétrico: dada laamount_out deseada, resuelve la amount_in requerida.
Ambas rutas cierran órdenes completadas de OpenBook primero (mediante lógica interna similar a MonitorStep), por lo que las reservas efectivas reflejan cualquier llenado del bloque anterior.
Aplicación de comisiones
Idéntica a AMM v4: consultaproducts/amm-v4/math para la derivación completa.
pnl_portion va a need_take_pnl_* y es retirada por el administrador mediante WithdrawPnl. La lp_portion permanece en el bóveda, inflando k y beneficiando a los tenedores de tokens LP.
MonitorStep y OpenBook
Como en AMM v4,MonitorStep es una instrucción crank que:
- Cierra llenados de órdenes de OpenBook pendientes (mueve tokens de bóvedas al pool).
- Actualiza
AmmInfo.target_orderscon una nueva cuadrícula de ranuras de órdenes limitadas. - Publica la nueva cuadrícula en OpenBook.
MonitorStep: ~150k–180k CU (similar a AMM v4).
Resumen: por qué funciona
El diseño de tabla de búsqueda + interpolación es eficiente y flexible:- Eficiencia: La búsqueda binaria es O(log 50,000) ≈ 16 iteraciones, cada una ~ 300–500 CU. La interpolación es algunos multiplicaciones/divisiones. El costo total de cotización es ~5k–15k CU, mucho más barato que recomputar una fórmula en cada intercambio.
- Flexibilidad: El administrador puede codificar cualquier curva lineal por partes. Los pares de monedas estables obtienen alta densidad alrededor de 1:1; los pares colateralizados obtienen curvas personalizadas.
- Composabilidad de OpenBook: La misma lógica
MonitorStep/TargetOrdersde AMM v4 se aplica. El descubrimiento de precios a través de la tabla alimenta la generación de cuadrícula de órdenes.
raydium-stable/program/src/state.rs, métodos get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, etc.
Dónde ir a continuación
- Cuentas — referencia de campos
ModelDataInfoyDataElement. - Instrucciones —
InitModelData,UpdateModelDatapara rellenar la tabla. - Comisiones — aplicación de comisiones y
WithdrawPnl. products/amm-v4/math— para la lógica de precios de órdenes inclusiva de comisiones de OpenBook.
raydium-stable/program/src/state.rs(implementaciones de interpolación y búsqueda binaria)raydium-stable/program/src/math.rs(utilidades de calculadora)


