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. Bei einem 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, um sie auszugleichen – das heißt, der Pool kann auf keiner Seite jemals auf Null geleert werden.
Preisbildung
Spotpreis
Der Grenzpreis vony ausgedrückt in x zu jedem Zeitpunkt ist 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 ungünstiger.
Exact-Input-Swap (geben Sie Δx, erhalten Sie Δy)
Mit Gebühren sei f der Gebührensatz (z. B. f = 0.0025 für 25 Basispunkte). Wenden Sie die Gebühr auf den Input an und verwenden Sie dann die Invariante, um den Output zu berechnen:
Δx fließt 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 Gebührenabrechnung-Varianten unten).
Exact-Output-Swap (erhalten Sie Δy, zahlen Sie das minimale Δ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 verschiebt:Δx / x ergibt eine Entwicklung erster Ordnung:
p_before und effective ist Slippage. On-Chain-Slippage-UI 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ührenabrechnung-Varianten
Die Invarianten-Überprüfung setzt voraus, dass die LP-Gebühr in den Reserven bleibt. Verschiedene Raydium-Produkte handhaben die Protokoll-, Fonds- und Creator-Komponenten unterschiedlich:CPMM-Konvention
Gebühren sindu64-Basispunkt-ähnliche Sätze mit einem 1_000_000-Nenner. Die Trade-Gebühr wird in trade_fee_rate (Gesamt) aufgeteilt und dann über protocol_fee_rate, fund_fee_rate, creator_fee_rate unterteilt. Bei jedem Swap:
protocol_fees_*, fund_fees_*, creator_fees_*) an, die ausgeschlossen sind aus den Reserven, die in der Invariante verwendet werden. So können Gebühren abgerufen werden, ohne die Kurve zu verschieben. Siehe products/cpmm/fees.
AMM v4-Konvention
Gebühren sindnumerator / denominator-Verhältnisse mit einem 10_000-Nenner. Die Aufteilung ist bei der Pool-Erstellung festgelegt und auf AmmInfo.fees gespeichert:
pnl_share sammelt sich in state_data.need_take_pnl_* an und wird aus den Reserven ausgeschlossen; lp_share bleibt im Vault. Siehe products/amm-v4/fees.
Beide Konventionen bewahren die Invariante auf die gleiche Weise – der Unterschied ist kosmetisch (Nenner + Anzahl der Unterkategorien).
Rundungsregeln
- Gebührenberechnung rundet auf. Stellt sicher, dass der Pool nie unterberechnet.
- Ausgabemenge rundet ab. Stellt sicher, dass die Invariante streng gilt (
k' > kauch bevor die Gebühr hinzugefügt wird). - Exact-Output-Eingabemenge rundet auf. Stellt sicher, dass der Benutzer nicht unterberechnet.
u128 für die Zwischenprodukte x · Δx, um Überläufe bei großen Reserven zu vermeiden. Endergebnisse werden mit einer Sättigungsprüfung auf u64 zurückgecastet.
Grenzfälle
Leerer Pool
Vor dem erstenDeposit gilt x = y = 0. Swap-Anweisungen lehnen Pre-Deposit ab.
Null-Ausgabe
WennΔx klein genug ist, dass das abgerundete Δy 0 ist, wird die Anweisung mit ZeroTradingTokens zurückgewiesen. Dies verhindert die Wertextraktion ohne Zahlung; bedeutet auch, dass Staub-Swaps auf stark unausgeglichenen Pools fehlschlagen.
Staub-LP
Der ersteDeposit hat spezielle Behandlung: Er berechnet die anfängliche LP-Versorgung als sqrt(x · y) und verbrennt einen kleinen „Init-Burn”-Betrag (normalerweise 100 LP-Einheiten), um den „First-Depositor-Inflations-Angriff” zu verhindern (bei dem ein Angreifer an den Vault spendet und den LP-Token-Wert aufbläht). 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 entlang).
- Spenden (Senden von Tokens an den Vault ohne Swap).
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. Slippage vs Spot: ~0,35%. Preisauswirkung – die Bewegung des Pool-Spotpreises gemäß der obigen Definition – ist ~0,20%.
Beispiel 2 – mittlerer Trade, sichtbarer Slippage
Gleicher Pool,Δx = 100_000 (10% von x):
100_000 / 181_405 ≈ 0.5513. Slippage vs Spot: ~10,3%. Preisauswirkung: ~17,3% – nahe an der 2 · 10% = 20%-Faustregel, die die Trade-Gebühr und die Kurven-Inversion leicht darunter ziehen. Die beiden Zahlen werden oft verwechselt: Slippage ist das, was der Swapper relativ zum Spot zahlt, Preisauswirkung ist, wie weit sich das eigene Angebot des Pools bewegt.
Verweise
products/cpmm/math– CPMMs spezifische Rundungs- + Gebühren-Nenner-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-Toleranz-Dimensionierung für UIs.
- Uniswap v2 Whitepaper – die kanonische Aussage von
x · y = k. - Raydium CPMM Programmquelle.
- Raydium AMM v4 Programmquelle.

