Saltar al contenido principal
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 →
LaunchLab soporta tres formas de curva seleccionables en Initialize: constant-product (la más común, forma de reserva virtual del estándar x · y = k), linear-price, y fixed-price. La fórmula del umbral de graduación es compartida entre las tres. Esta página detalla la matemática constant-product; las formas lineal y fija se resumen al final.

Parámetros almacenados en LaunchState

Los nombres de campo en la estructura Rust coinciden con los campos PoolState descriptos en accounts; las unidades arriba son conceptuales.

Curva constant-product con reservas virtuales (curve_type = 0)

La curva por defecto y más usada. Los lanzamientos estilo Pump usan esta forma. La curva simula que existe una reserva de quote virtual V_q y una reserva de base virtual V_b desde el inicio (almacenadas como virtual_quote y virtual_base en PoolState), por lo que el pool efectivo se ve como un CPMM con esas reservas. Las compras siguen la matemática x · y = k:
despejando base_out:
Precio efectivo a base vendida s:
El mismo invariante x · y = k que LaunchLab aplica pre-graduación es literalmente la curva CPMM (o AMM v4) post-graduación, por lo que la transición de graduación es mecánicamente sin fisuras: el precio marginal en base_sold = base_supply_graduation es igual al precio con el que abre el pool post-graduación usando (quote_vault, base_vault_remaining) como sus reservas.

Curva de precio fijo (curve_type = 1)

Una curva de precio plano. Cada compra/venta sucede a un precio constante, configurable en Initialize:
Útil para lanzamientos justos donde el equipo quiere un precio uniforme para todos los participantes independientemente de cuándo compren. La graduación se desencadena cuando base_supply_graduation ha sido vendida (la relación de costo lineal hace que quote_reserve_target sea fácil de derivar).

Curva de precio lineal (curve_type = 2)

El precio aumenta linealmente con base_sold:
Costo integrado:
Cuadrático en base_sold — compradores tempranos pagan casi cero, compradores tardíos pagan sustancialmente más, con el precio marginal siempre aumentando a una pendiente fija. La implementación on-chain vive en curve/linear_price.rs.

Comparación de formas de curva

Umbral de graduación

quote_reserve_target se calcula en Initialize como el quote requerido para llevar base_sold de 0 a base_supply_graduation:
Un lanzamiento se gradúa tan pronto como quote_vault.balance ≥ quote_reserve_target. Dado que las compras vienen en tamaños discretos, el balance real en graduación puede exceder ligeramente el objetivo — el excedente se convierte en liquidez adicional del lado de quote en el pool CPMM resultante.

Ejemplo detallado — un lanzamiento cuadrático

Parámetros:
  • base_supply_max = 1_000_000_000 (1 mil millones de tokens base, 6 decimales)
  • base_supply_graduation = 800_000_000 (80% vendido desencadena graduación)
  • k = 40 (escala de precio)
  • Tarifas: 1% compra, 1% venta, dividido lp:creator:protocol = 60:20:20.
Precio inicial (s = 0): 0 (puro cuadrático comienza en cero). Precio al 50% vendido (s = 500_000_000):
Precio en graduación (s = 800_000_000):
Quote requerida para alcanzar graduación (costo integrado):
Así ≈ 6.827 unidades quote nativas (en cualquier mint quote de 6 decimales configurado, p. ej. ~6,827 USDC si el quote es USDC). Tarifa aplicada encima:
Primera compra de 10 USDC:
  • Estado virtual: s = 0, quote_vault = 0.
  • Restar tarifa: quote_after_fee = 10 × 0.99 = 9.9.
  • Resolver (40 / (3e18)) × s³ = 9.9s ≈ 6.22e6 tokens base comprados.
  • Tarifa 1% (0.1 USDC) dividida: lp 0.06, creator 0.02, protocol 0.02. La parte lp se queda en quote_vault; las otras dos se enrutan a sus contadores de acumulación respectivos.
Compra al 75% vendido (aproximándose a la graduación): Los mismos 10 USDC compran mucho menos base ahora porque la curva es pronunciada. Una resolución de Newton en s₀ = 750e6 con quote_in_after_fee = 9.9 da aproximadamente ∆s ≈ 0.4e6 — una reducción de ~15× en base por USDC comparado con la primera compra.

Mecánica de tarifas durante la fase de curva

En cada Buy:
  • lp_share se deja en quote_vault. Esto es lo que hace la curva efectiva más ajustada (más reserva de quote contra el mismo suministro base).
  • protocol_share incrementa LaunchState.state_data.protocol_fees_quote.
  • creator_share incrementa LaunchState.state_data.creator_fees_quote.
En Sell la misma división se aplica pero la tarifa se toma del quote_out saliente. Ambos contadores se barren vía CollectFees (admin o creator, cada uno a su propio contador).

Precisión

  • Cantidades del lado base: u64.
  • Cantidades del lado quote: u64.
  • Cubos/productos intermedios: u128.
  • Las resoluciones de Newton para “comprar exact quote” y “vender exact quote” iteran en u128 punto fijo con un máximo de iteraciones configurable (por defecto 10). El modo de falla es NotConverged — raro fuera de casos extremos cerca de la graduación.

Transición a CPMM

Cuando Graduate se dispara:
Para la curva cuadrática, cpmm_initial_price es mecánicamente price(base_sold) (es el precio marginal de la curva en el momento de la transición). El pool CPMM abre exactamente a ese precio, por lo que un observador que cambie de la UI de curva a la UI de CPMM no ve salto.

Dónde ir después

Fuentes: