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 →

Qué es una curva de vinculación

Una curva de vinculación es una función de precio determinista p(s) que relaciona el precio de un token con la cantidad actualmente en circulación (s por “oferta vendida”). Los compradores adquieren enviando garantía al contrato; el contrato emite nuevas unidades de token al precio marginal dictado por la curva. Los vendedores devuelven unidades de token y reciben el reembolso integrado. Dos propiedades clave en comparación con un pool CPMM:
  • Sin contraparte necesaria. El contrato emisor es el creador de mercado; la liquidez existe por decreto.
  • Precio monótono. El precio sube con cada compra neta y baja con cada venta neta.
Las curvas de vinculación son el mecanismo de lanzamiento estándar cuando la entidad emisora no desea pre-financiar un pool AMM con garantía.

Fórmulas de precios genéricas

Para cualquier función de precio continua p(s): Precio spot en la oferta s:
p(s) = the curve formula
Costo para comprar oferta de s_0 a s_1 (con s_1 > s_0):
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
donde P(s) = ∫ p(s) ds es la antiderivada de la curva. Geométricamente, cost es el área bajo p entre s_0 y s_1. Ingresos por venta de oferta de vuelta de s_1 a s_0:
proceeds(s_1, s_0) = cost(s_0, s_1)
(Simetría: comprar y vender en el mismo intervalo intercambian la misma garantía — módulo comisiones.) Precio promedio para la compra:
avg = cost(s_0, s_1) / (s_1 − s_0)

Familias de curvas comunes

Lineal

p(s) = a + b · s
P(s)            = a·s + (b/2)·s²
cost(s_0, s_1)  = a·(s_1 − s_0) + (b/2)·(s_1² − s_0²)
El precio sube proporcionalmente con la oferta. Se usa para lanzamientos “estables” donde el emisor quiere un margen predecible y moderado a lo largo de la vida útil.

Cuadrática

p(s) = k · s²                      // or  k · (s / S_max)² for a normalized form
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
El precio sube cuadráticamente. Los compradores tempranos obtienen un precio casi cero (región inicial plana); los compradores tardíos pagan una prima más pronunciada. Este es el tipo de curva que LaunchLab utiliza por defecto (curve_type = 0).

CPMM de reservas virtuales (estilo Pump)

La curva es un CPMM estándar con una reserva de cotización inicial ficticia V_q:
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // invariant
Precio spot:
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (derivable via implicit differentiation)
Costo para pasar de s_0 a s_1:
cost(s_0, s_1) = V_q · S_max / (S_max − s_1) − V_q · S_max / (S_max − s_0)
              = V_q · (s_1 − s_0) · S_max / ((S_max − s_0) · (S_max − s_1))
Esta variante tiene la propiedad elegante de que en la graduación (donde s = S_graduate), el precio marginal equivale al precio de apertura del pool CPMM descendente semillado con reservas (S_max − S_graduate, V_q + cost(0, S_graduate)). La transición es sin interrupciones. LaunchLab expone esto como curve_type = 1.

Implementación discreta

En cadena, tanto s como cost son enteros (unidades de denominación más pequeña). La integral continua cost(s_0, s_1) se calcula directamente a partir de la forma cerrada siempre que exista una (lineal, cuadrática). Para curvas sin inversa de forma cerrada (cuadrática, dado cost, encuentra s_1), se usa iteración de Newton:
# Solve quadratic: (k/3)·s_1³ = (k/3)·s_0³ + cost
# Initialize with s_guess ≈ cbrt(3·cost/k + s_0³)
for i in 0..MAX_ITER:
    f    = (k/3)·s_guess³ − (k/3)·s_0³ − cost
    f'   = k·s_guess²
    step = f / f'
    s_guess -= step
    if |step| < precision_floor: break
LaunchLab limita las iteraciones a ~10 y revierte con NotConverged si el residual sigue siendo superior a la tolerancia. En la práctica, esto solo se activa cerca de los extremos del dominio; los swaps de producción convergen en 2–3 iteraciones.

Integración de comisiones

Las comisiones se aplican encima del costo de la curva, no dentro de ella. En compra:
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
En venta:
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
La porción de LP de la comisión se retiene en quote_vault e efectivamente hace la curva más rígida para compradores posteriores — la reserva crece sin emitir más oferta. Las porciones de protocolo y creador se rastrean en contadores separados para barrido posterior.

Umbral de graduación

Una curva “se gradúa” cuando ha recibido suficiente garantía para semillar un pool AMM externo a un precio que coincida con el precio actual de la curva. Para una curva cuadrática con parámetros (k, S_max, S_graduate):
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
Una vez que quote_vault ≥ quote_to_graduate, la instrucción Graduate crea un pool CPMM con:
cpmm_base_reserve  = S_max − S_graduate        // unsold curve supply
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
Para la curva de reservas virtuales, por construcción:
cpmm_initial_price == p(S_graduate)           // exact equality
Para la cuadrática, la igualdad es aproximada; la “holgura” se absorbe en el redondeo de S_graduate (típicamente 0.8 · S_max) y el exceso de garantía de la compra final que cruza el umbral.

Impermanencia vs un pool CPMM

Un lanzamiento de curva de vinculación pura tiene sin impermanencia en el sentido de Uniswap: no hay “otro lado” del mercado contra el cual reequilibrar. La curva emite oferta bajo demanda, y el único “LP” es el contrato mismo. Post-graduación, el pool CPMM resultante se comporta como cualquier otro pool CPMM — si el LP no fue quemado, está sujeto a la dinámica usual de pérdida impermanente. Esta es la razón por la cual la política de quema post-graduación es dominante en lanzamientos públicos: mantiene el pool permanente y elimina cualquier shock de precio impulsado por retiros de LP.

Ejemplo trabajado

Curva: cuadrática, k = 40, S_max = 1e9, S_graduate = 0.8 · S_max = 8e8. Comisión de compra 1%.

Precio en s = 5e8

p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
10 unidades de cotización por unidad base.

Costo de la primera compra de 1e6 base

cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (smallest quote units)
Con comisión del 1%:
quote_in = 1.333e19 · 1.01 ≈ 1.347e19

Umbral de graduación

cost(0, 8e8) = (40/3) · (8e8)³
             = (40/3) · 5.12e26
             ≈ 6.827e27
quote_to_graduate ≈ 6.827e27 · 1.01 ≈ 6.895e27

Precio en graduación

p(8e8) = 40 · 0.64 = 25.6

Reservas CPMM post-graduación

cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (less fee-counter deductions)
cpmm_price ≈ 3.41e19 per base — which matches p(8e8) after units are accounted for
(Unidades: los decimales deben ser rastreados cuidadosamente; el ejemplo es ilustrativo.)

Referencias

Fuentes:
  • Código fuente del programa LaunchLab de Raydium (implementaciones de curva cuadrática + reservas virtuales).
  • White paper de Bancor (curvas de vinculación lineales, histórico).
  • Publicaciones post-mortem públicas de Pump.fun (variante de reservas virtuales).