Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
LaunchLab unterstützt drei Kurvenformen, die bei der Initialisierung (Initialize) gewählt werden: constant-product (die häufigste Form, eine virtuelle Reservevariante der Standard-Kurve x · y = k), linear-price und fixed-price. Die Formel für den Graduierungsschwellwert ist bei allen drei gleich. Diese Seite behandelt die Mathematik der constant-product-Kurve im Detail; die lineare und feste Form werden am Ende zusammengefasst.

Parameter auf LaunchState

Feldnamen in der Rust-Struktur entsprechen den PoolState-Feldern, die unter accounts beschrieben sind; Einheiten oben sind konzeptionell.

Constant-product-Kurve mit virtuellen Reserven (curve_type = 0)

Die Standard- und am häufigsten verwendete Kurve. Pump-ähnliche Launches verwenden alle diese Form. Die Kurve simuliert eine virtuelle Quote-Reserve V_q und eine virtuelle Base-Reserve V_b von Anfang an (gespeichert als virtual_quote und virtual_base auf PoolState), sodass der effektive Pool wie ein CPMM mit diesen Reserven aussieht. Käufe folgen der Mathematik von x · y = k:
gelöst für base_out:
Effektiver Preis bei Base-verkauft s:
Die gleiche x · y = k Invariante, die LaunchLab vor der Graduierung anwendet, ist dann wörtlich die CPMM- (oder AMM v4-) Kurve nach der Graduierung, sodass die Graduierungsübergabe mechanisch nahtlos ist: Der Grenzpreis bei base_sold = base_supply_graduation entspricht dem Preis, bei dem der Post-Graduierungs-Pool mit (quote_vault, base_vault_remaining) als seinen Reserven eröffnet wird.

Fixed-price-Kurve (curve_type = 1)

Eine Kurve mit konstanter Preis. Jeder Kauf/Verkauf findet zu einem konstanten Preis statt, der bei der Initialisierung (Initialize) konfigurierbar ist:
Nützlich für faire Launches, bei denen das Team einen einheitlichen Preis für alle Teilnehmer unabhängig vom Zeitpunkt des Kaufs wünscht. Die Graduierung wird ausgelöst, wenn base_supply_graduation verkauft wurde (die lineare Kostenbeziehung macht quote_reserve_target einfach herzuleiten).

Linear-price-Kurve (curve_type = 2)

Der Preis steigt linear mit base_sold:
Integrierte Kosten:
Quadratisch in base_sold — frühe Käufer zahlen nahe null, späte Käufer zahlen erheblich mehr, wobei der Grenzpreis immer mit einer festen Steigung ansteigt. Die On-Chain-Implementierung befindet sich in curve/linear_price.rs.

Vergleich der Kurvenformen

Graduierungsschwellwert

quote_reserve_target wird bei Initialize als die Quote berechnet, die erforderlich ist, um base_sold von 0 auf base_supply_graduation zu treiben:
Ein Launch wird graduiert, sobald quote_vault.balance ≥ quote_reserve_target. Da Käufe in diskreten Größen erfolgen, kann der tatsächliche Saldo bei Graduierung den Schwellwert leicht überschreiten — der Überschuss wird zu zusätzlicher Liquidität auf der Quote-Seite im daraus resultierenden CPMM-Pool.

Ausgearbeitetes Beispiel — ein quadratischer Launch

Parameter:
  • base_supply_max = 1_000_000_000 (1 Milliarde Base-Tokens, 6 Dezimalstellen)
  • base_supply_graduation = 800_000_000 (80% verkauft löst Graduierung aus)
  • k = 40 (Preisskala)
  • Gebühren: 1% Kauf, 1% Verkauf, Aufteilung lp:creator:protocol = 60:20:20.
Anfangspreis (s = 0): 0 (reine quadratische Kurve beginnt bei null). Preis bei 50% verkauft (s = 500_000_000):
Preis bei Graduierung (s = 800_000_000):
Quote erforderlich, um die Graduierung zu erreichen (integrierte Kosten):
So etwa 6,827 Quote-native Einheiten (in welchem auch immer 6-dezimalen Quote-Mint konfiguriert ist, z. B. ~6.827 USDC, wenn die Quote USDC ist). Gebühr hinzugefügt:
Erster Kauf von 10 USDC:
  • Virtueller Zustand: s = 0, quote_vault = 0.
  • Gebühr abziehen: quote_after_fee = 10 × 0,99 = 9,9.
  • Löse (40 / (3e18)) × s³ = 9,9s ≈ 6,22e6 Base-Tokens gekauft.
  • 1% Gebühr (0,1 USDC) Aufteilung: lp 0,06, creator 0,02, protocol 0,02. Der lp-Anteil bleibt in quote_vault; die anderen beiden leiten zu ihren jeweiligen Akkumulatoren weiter.
Kauf bei 75% verkauft (annähernd Graduierung): Das gleiche 10 USDC kauft jetzt viel weniger Base, weil die Kurve steil ist. Ein Newton-Lösen bei s₀ = 750e6 mit quote_in_after_fee = 9,9 ergibt ungefähr ∆s ≈ 0,4e6 — eine ~15-fache Verringerung von Base pro USDC im Vergleich zum ersten Kauf.

Gebühren-Mechanik während der Kurvenphase

Bei jedem Buy:
  • lp_share bleibt in quote_vault. Dies ist das, was die effektive Kurve enger macht (mehr Quote-Reserve gegen das gleiche Base-Angebot).
  • protocol_share erhöht LaunchState.state_data.protocol_fees_quote.
  • creator_share erhöht LaunchState.state_data.creator_fees_quote.
Bei Sell gilt die gleiche Aufteilung, aber die Gebühr wird aus dem ausgehenden quote_out abgezogen. Beide Zähler werden über CollectFees (Admin oder Creator, jeder zu ihrem eigenen Zähler) geleert.

Präzision

  • Base-seitige Beträge: u64.
  • Quote-seitige Beträge: u64.
  • Zwischensummen / Produkte: u128.
  • Newton-Lösungen für „exakte Quote kaufen” und „exakte Quote verkaufen” iterieren in u128 mit Festpunkt und einer konfigurierbaren maximalen Iterationszahl (Standard 10). Fehlermodus ist NotConverged — selten außerhalb von nahe-Graduierungs-Grenzfällen.

Übergabe zu CPMM

Wenn Graduate ausgelöst wird:
Für die quadratische Kurve ist cpmm_initial_price mechanisch price(base_sold) (es ist der Grenzpreis der Kurve zum Zeitpunkt der Übergabe). Der CPMM-Pool eröffnet genau zu diesem Preis, sodass ein Beobachter, der von der Kurven-UI zur CPMM-UI wechselt, keinen Sprung sieht.

Nächste Schritte

Quellen: