> ## 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.

# Curvas de vinculación

> Las matemáticas detrás de las curvas de emisión de tokens — variantes CPMM cuadráticas, lineales y de reservas virtuales — derivaciones de costo / ingresos / precio spot, y las matemáticas del umbral de graduación utilizadas por LaunchLab.

<Info>
  **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 →](/algorithms/bonding-curves)
</Info>

## 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

* [`products/launchlab/bonding-curve`](/es/products/launchlab/bonding-curve) — la implementación en cadena de LaunchLab de estas fórmulas.
* [`products/launchlab/instructions`](/es/products/launchlab/instructions) — especificaciones a nivel de cuenta para `Buy`, `Sell`, `Graduate`.
* [`algorithms/constant-product`](/es/algorithms/constant-product) — qué hace el CPMM post-graduación con las reservas.

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).
