Zum Hauptinhalt springen

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.

Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →

Was eine Bonding Curve ist

Eine Bonding Curve ist eine deterministische Preisfunktion p(s), die den Preis eines Tokens zur momentan im Umlauf befindlichen Menge (s für „Supply Sold”) in Beziehung setzt. Käufer erwerben durch Überweisung von Collateral zum Vertrag; der Vertrag gibt neue Token-Einheiten zum Grenzpreis der Kurve aus. Verkäufer geben Token-Einheiten zurück und erhalten die integrierte Rückerstattung. Zwei Schlüsseleigenschaften im Vergleich zu einem CPMM-Pool:
  • Keine Gegenpartei erforderlich. Der ausgebende Vertrag ist der Market Maker; Liquidität existiert per Dekret.
  • Monotoner Preis. Der Preis steigt bei jedem Netto-Kauf und sinkt bei jedem Netto-Verkauf.
Bonding Curves sind der Standard-Startmechanismus, wenn die ausgebende Entität einen AMM-Pool nicht mit Collateral vorfinanzieren möchte.

Generische Preisformeln

Für jede kontinuierliche Preisfunktion p(s): Spotpreis bei Supply s:
p(s) = die Kurvenformel
Kosten zum Kauf von Supply von s_0 zu s_1 (mit s_1 > s_0):
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
wobei P(s) = ∫ p(s) ds die Stammfunktion der Kurve ist. Geometrisch ist cost die Fläche unter p zwischen s_0 und s_1. Einnahmen aus dem Verkauf von Supply zurück von s_1 zu s_0:
proceeds(s_1, s_0) = cost(s_0, s_1)
(Symmetrie: Kauf und Verkauf über dasselbe Intervall tauschen dasselbe Collateral aus — modulo Gebühren.) Durchschnittspreis für den Kauf:
avg = cost(s_0, s_1) / (s_1 − s_0)

Häufige Kurvenfamilien

Linear

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²)
Der Preis steigt proportional zur Supply. Wird für „stabile” Launches verwendet, bei denen der Emittent einen vorhersehbaren, moderaten Aufschlag über die Lebensdauer hinweg wünscht.

Quadratisch

p(s) = k · s²                      // oder  k · (s / S_max)² für eine normalisierte Form
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
Der Preis steigt quadratisch. Frühe Käufer erhalten einen nahezu Null-Preis (flache Startregion); späte Käufer zahlen einen steileren Aufschlag. Dies ist der Standard-Kurventyp von LaunchLab (curve_type = 0).

Virtual-Reserves CPMM (Pump-Stil)

Die Kurve ist ein Standard-CPMM mit einer vorgetäuschten initialen Quote-Reserve V_q:
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // Invariante
Spotpreis:
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (ableitbar durch implizite Differentiation)
Kosten zur Bewegung von s_0 zu 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))
Diese Variante hat die elegante Eigenschaft, dass bei der Graduierung (wo s = S_graduate) der Grenzpreis gleich dem Eröffnungspreis des nachgelagerten CPMM-Pools ist, der mit Reserves (S_max − S_graduate, V_q + cost(0, S_graduate)) gefüllt wird. Die Übergabe ist nahtlos. LaunchLab stellt dies als curve_type = 1 bereit.

Diskrete Implementierung

On-Chain sind sowohl s als auch cost ganzzahlig (Einheiten der kleinsten Denomination). Das kontinuierliche Integral cost(s_0, s_1) wird direkt aus der geschlossenen Form berechnet, wenn eine existiert (linear, quadratisch). Für Kurven ohne geschlossene Inverse (quadratisch, gegeben cost, finde s_1), wird Newton-Iteration verwendet:
# Löse quadratisch: (k/3)·s_1³ = (k/3)·s_0³ + cost
# Initialisiere mit 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 begrenzt Iterationen auf etwa 10 und bricht mit NotConverged ab, falls der Residuum noch über der Toleranz liegt. In der Praxis wird dies nur an extremen Punkte der Domäne ausgelöst; typische Swaps konvergieren in 2–3 Iterationen.

Gebührenintegration

Gebühren werden auf den Kurvenwert aufgelegt, nicht in ihn integriert. Beim Kauf:
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
Beim Verkauf:
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
Der LP-Anteil der Gebühr wird in quote_vault eingezogen und macht die Kurve für spätere Käufer effektiv steifer — die Reserve wächst, ohne mehr Supply auszugeben. Die Protokoll- und Creator-Anteile werden in separaten Zählern nachverfolgt zur späteren Erfassung.

Graduierungsschwellwert

Eine Kurve „graduiert”, wenn sie genug Collateral erhalten hat, um einen externen AMM-Pool mit einem Preis zu finanzieren, der dem aktuellen Kurvenprice entspricht. Für eine quadratische Kurve mit Parametern (k, S_max, S_graduate):
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
Sobald quote_vault ≥ quote_to_graduate gilt, erstellt die Graduate-Anweisung einen CPMM-Pool mit:
cpmm_base_reserve  = S_max − S_graduate        // unverkaufte Kurven-Supply
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
Für die Virtual-Reserves-Kurve ist per Konstruktion:
cpmm_initial_price == p(S_graduate)           // exakte Gleichheit
Für die quadratische Kurve ist die Gleichheit näherungsweise; die „Restmenge” wird durch das Runden von S_graduate (typischerweise 0.8 · S_max) und das Überschuss-Collateral des letzten schwellwert-überschreitenden Kaufs absorbiert.

Unbestständigkeit vs ein CPMM-Pool

Ein reiner Bonding-Curve-Launch hat keine Unbestständigkeit im Uniswap-Sinne: es gibt keine „andere Seite” des Marktes zum Rebalancieren. Die Kurve gibt Supply nach Bedarf aus, und der einzige „LP” ist der Vertrag selbst. Nach der Graduierung verhält sich der resultierende CPMM-Pool wie jeder andere CPMM-Pool — falls der LP nicht gebrannt wurde, unterliegen sie den üblichen Impermanent-Loss-Dynamiken. Deshalb ist die Burn-Policy nach der Graduierung dominierend in öffentlichen Launches: sie halten den Pool permanent und entfernen etwaige LP-Auszahlungsgesteuerte Preisschocks.

Bearbeitetes Beispiel

Kurve: quadratisch, k = 40, S_max = 1e9, S_graduate = 0.8 · S_max = 8e8. Kaufgebühr 1%.

Preis bei s = 5e8

p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
10 Quote-Einheiten pro Base-Einheit.

Kosten des ersten Kaufs von 1e6 Base

cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (kleinste Quote-Einheiten)
Mit 1% Gebühr:
quote_in = 1.333e19 · 1.01 ≈ 1.347e19

Graduierungsschwellwert

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

Preis bei Graduierung

p(8e8) = 40 · 0.64 = 25.6

Post-Graduierungs-CPMM-Reserves

cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (minus Gebührenzähler-Abzüge)
cpmm_price ≈ 3.41e19 pro Base — was p(8e8) entspricht, wenn Einheiten berücksichtigt werden
(Einheiten: Dezimalstellen müssen sorgfältig nachverfolgt werden; das Beispiel ist illustrativ.)

Verweise

Quellen:
  • Raydium LaunchLab-Programmquelle (quadratische + Virtual-Reserves-Kurven-Implementierungen).
  • Bancor White Paper (lineare Bonding Curves, historisch).
  • Pump.fun öffentliche Post-Mortems (Virtual-Reserves-Variante).