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 →
Die Invariante
Ein Constant-Product Market Maker (CPMM) verwaltet zwei Reservenx und y und erzwingt:
k das Produkt der Reserven vor dem Trade ist. Für einen gebührenfreien Markt gilt x · y = k exakt. Mit Gebühren wächst k streng (der LP-Anteil der Gebühr bleibt in den Reserven).
Die Invariante ist bewusst geometrisch gestaltet: Sie garantiert, dass unabhängig davon, wie klein eine Reserve wird, die andere unbegrenzt wächst — das heißt, der Pool kann auf keiner Seite auf Null geleert werden.
Preisbildung
Spotpreis
Der Grenzpreis vony, ausgedrückt in x, ist zu jedem Zeitpunkt die Tangente der Kurve:
x · y = k ergibt dy/dx = −y/x; den Betrag ignorierend, |dy/dx| = y/x).
Dies ist der Preis, den der Pool für einen infinitesimal kleinen Trade anbietet. Bei jedem endlichen Trade ist der realisierte Preis aufgrund von Slippage entlang der Kurve schlechter.
Exact-Input Swap (geben Δx, erhalten Δy)
Mit Gebühren, sei f die Gebührenrate (z.B. f = 0.0025 für 25 bps). Wenden Sie die Gebühr auf den Input an und verwenden Sie die Invariante, um den Output zu berechnen:
Δx geht in die Reserven ein. Der LP-Anteil der Gebühr bleibt in x'; der Protokoll-Anteil wird durch einen separaten Buchungsschritt aus der Kurve ausgeschlossen (siehe Fee accounting variants unten).
Exact-Output Swap (erhalten Δy, bezahlen das minimal erforderliche Δx)
Δx wird aufgerundet, um sicherzustellen, dass der Pool nicht unterberechnet.
Slippage und Preisauswirkung
Preisauswirkung misst, wie sehr sich der Spotpreis des Pools aufgrund des Trades bewegt:Δx / x ergibt eine Näherung erster Ordnung:
p_before und effective ist Slippage. On-Chain-slippage in UIs wird normalerweise als (effective − p_before) / p_before ausgedrückt; das SDK’s computeAmountOut gibt sowohl amountOut als auch priceImpact aus diesem Grund zurück.
Invarianten-Überprüfung im Code
Nach einem Swap überprüfen Protokolle erneut:Gebührenverarbeitungsvarianten
Die Invarianten-Überprüfung setzt voraus, dass die LP-Gebühr in den Reserven bleibt. Verschiedene Raydium-Produkte handhaben die Protokoll-/Fonds-/Creator-Komponenten unterschiedlich:CPMM-Konvention
Gebühren sindu64 Basispunkt-ähnliche Sätze mit einem Nenner von 1_000_000. Die Handelsgebühr wird in trade_fee_rate (Gesamt) unterteilt und dann über protocol_fee_rate, fund_fee_rate, creator_fee_rate aufgeschlüsselt. Bei jedem Swap:
protocol_fees_*, fund_fees_*, creator_fees_*) aufsummiert, die aus den bei der Invarianten-Überprüfung verwendeten Reserven ausgeschlossen sind. So können Gebühren eingezogen werden, ohne die Kurve zu verschieben. Siehe products/cpmm/fees.
AMM v4-Konvention
Gebühren sindnumerator / denominator Verhältnisse mit einem Nenner von 10_000. Die Aufteilung ist bei der Pool-Erstellung fest und wird auf AmmInfo.fees gespeichert:
pnl_share wird in state_data.need_take_pnl_* aufsummiert und aus Reserven ausgeschlossen; lp_share bleibt im Vault. Siehe products/amm-v4/fees.
Beide Konventionen bewahren die Invariante auf gleiche Weise — der Unterschied ist kosmetisch (Nenner + Anzahl der Unterkategorien).
Rundungsregeln
- Gebührenberechnung rundet auf. Stellt sicher, dass der Pool die Gebühr nicht unterberechnet.
- Ausgabemenge rundet ab. Stellt sicher, dass die Invariante streng erfüllt bleibt (
k' > kauch vor Gebühr). - Exact-Output Input-Menge rundet auf. Stellt sicher, dass der Benutzer nicht unterhalb bezahlt.
u128 für die Zwischenprodukte x · Δx, um Overflow bei großen Reserven zu vermeiden. Endergebnisse werden auf u64 mit Saturation-Überprüfung zurückgecastet.
Edge Cases
Leerer Pool
Vor dem erstenDeposit ist x = y = 0. Swap-Anweisungen lehnen Pre-Deposit ab.
Null-Output
WennΔx klein genug ist, dass das abgerundete Δy 0 ist, wird die Anweisung mit ZeroTradingTokens zurückgewiesen. Dies verhindert Werteextraktion ohne Bezahlung; bedeutet auch, dass Staubswaps auf stark unausgeglichenen Pools fehlschlagen.
Staub LP
Der ersteDeposit hat spezielle Behandlung: Er berechnet das initiale LP-Angebot als sqrt(x · y) und verbrennt einen kleinen „init burn” Betrag (normalerweise 100 LP-Einheiten), um den „First-Depositor Inflation Attack” zu verhindern (bei dem ein Angreifer an den Vault spendet und den LP-Token-Wert aufbläst). Nachfolgende Deposits verwenden Pro-Rata-Mathematik.
Beziehung zu Arbitrage
Der Preis eines CPMM-Pools ändert sich nur durch:- Trades durch den Pool selbst (Benutzer gehen die Kurve).
- Spenden (Tokens an den Vault ohne Swap senden).
Durchgerechnete Beispiele
Beispiel 1 — kleiner Trade, vernachlässigbarer Slippage
Pool:x = 1_000_000, y = 2_000_000, k = 2·10^12. Gebühr f = 0.0025.
Trade Δx = 1_000:
1000 / 1993.01 ≈ 0.5018. Spot vorher: 0.5. Auswirkung: ~0,36%.
Beispiel 2 — mittlerer Trade, sichtbarer Slippage
Gleicher Pool,Δx = 100_000 (10% von x):
100_000 / 181_405 ≈ 0.5513. Auswirkung: ~10,3% — ungefähr die Hälfte der 2 · 10% = 20% Faustregel (die Regel ist eine Worst-Case-Obergrenze für eine gebührenfreie Constant-Product-Kurve; die Handelsgebühr plus die Umkehrung in der Formel bringt es hinunter).
Hinweise
products/cpmm/math— CPMMs spezifische Rundungs- + Gebührendenominator-Wahlen.products/amm-v4/math— wie die OpenBook-integrierten Reserven von AMM v4 dieses Modell erweitern.algorithms/slippage-and-price-impact— dedizierte Seite zu Slippage-Toleranzauslegung für UIs.
- Uniswap v2 Whitepaper — die kanonische Aussage von
x · y = k. - Raydium CPMM Programm-Quellcode.
- Raydium AMM v4 Programm-Quellcode.


