Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Die Nachschlagetabellen-Kurve
Stable AMM ersetzt die Formel x·y=k durch eine spärliche Nachschlagetabelle von (x, y, price) Tupeln. Bei der Preisbestimmung eines Swaps führt das Programm folgende Schritte durch:- Berechnet das aktuelle Verhältnis des Pools aus den Reserven.
- Durchsucht die Tabelle binär, um die beiden Einträge zu finden, die dieses Verhältnis einrahmen.
- Interpoliert linear zwischen ihnen, um einen Zwischenpreis zu erhalten.
- Wendet Gebühren an und gibt das Angebot zurück.
Tabellenlayout und binäre Suche
DieModelDataInfo enthält bis zu 50.000 DataElement Einträge, indiziert durch den Admin. Nur die ersten valid_data_count sind aktiv. Jeder Eintrag:
- Berechnen Sie das Verhältnis:
target_ratio = (x_real * multiplier) / y_real. - Binäre Suche nach Einträgen, bei denen
(element.x * multiplier) / element.ydastarget_ratioeinrahmt. - Wenn eine Klammer
[min_idx, max_idx]gefunden wird, interpolieren Sie.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. Die Schlüsselinvariante: Einträge müssen sortiert sein (x aufsteigend, y absteigend, price aufsteigend), damit die Suche funktioniert.
Lineare Interpolation
Sobald zwei Tabellenpunkte das Verhältnis einrahmen, berechnet die Interpolation einen Zwischenpreis und ein Reservepaar:Skalierung: der Multiplikator
Pool-Reserven und Preise werden in unterschiedlichen Maßstäben gespeichert. Das Feldmultiplier auf ModelDataInfo berücksichtigt dies. Ein häufiges Muster:
- Coin hat 6 Dezimalstellen, PC hat 18 Dezimalstellen.
- Multiplikator = 10^6 (oder ähnlich).
- Tabelleneinträge werden in reduziertem Maßstab gespeichert, um u64-Grenzen einzuhalten.
Swap-Preisbestimmung: SwapBaseIn und SwapBaseOut
SwapBaseIn (exakte Eingabe)
Gegeben eine Eingabemengeamount_in:
- Holen Sie sich das aktuelle Verhältnis von
(coin_vault, pc_vault). - Finden Sie einrahmende Tabelleneinträge und interpolieren Sie, um das Tabellen-Verhältnis zu erhalten.
- Konvertieren Sie die Eingabe in Tabellenraum:
dx_table = amount_in * multiplier / ratio. - Fragen Sie die Tabelle bei der neuen X-Koordinate ab, um das neue Y zu finden.
dy_table = y_old - y_new.- Konvertieren Sie zurück:
dy_real = dy_table * ratio / multiplier. - Wenden Sie die Handelsgebühr an:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Geben Sie
dy_outputzurück.
SwapBaseOut (exakte Ausgabe)
Symmetrisch: Gegeben die gewünschteamount_out, lösen Sie die erforderliche amount_in auf.
Beide Pfade lesen effektive Reserven direkt aus den Pool-Vaults. Der Pool hat seit Jahren keine OpenBook-offenen Aufträge gehalten, daher gibt es nichts zu begleichen — die Vault-Guthaben sind die ganze Geschichte. (Das Upgrade vom 2026-06-22 entfernte den verbleibenden Market-Code.)
Gebührenanwendung
Identisch mit AMM v4: sieheproducts/amm-v4/math für die vollständige Herleitung.
pnl_portion geht zu need_take_pnl_* und wird vom Admin über WithdrawPnl eingezogen. Der lp_portion bleibt im Vault und erhöht k, was LP-Token-Inhabern zugute kommt.
Pool-Vermögensabrechnung
Die Formel addierte historisch die Mittel, die der Pool als offene Aufträge in seinem OpenBook OpenOrders-Konto hielt. Dieser Term war praktisch seit dem Zeitpunkt, an dem der Pool aufhörte, Aufträge zu posten, null, und das Upgrade vom 2026-06-22 entfernte ihn vollständig aus der Formel, sodass nur noch die Vault-Berechnung übrig bleibt:need_take_pnl Teil sitzt physisch im Vault, wird aber von der Preisbestimmung ausgeschlossen). Quoting-Code und Indexer, die zuvor OpenOrders-Guthaben lasen, müssen diesen Term streichen.
MonitorStep (entfernt)
MonitorStep war die Crank-Anweisung, die ausstehende OpenBook-Fills beglich, AmmInfo.target_orders neu berechnete und das aus der Nachschlagetabelle abgeleitete Limit-Order-Gitter neu postete. Der Pool postete seit Jahren keine Aufträge mehr zu OpenBook, daher hatte der Crank nichts mehr zu tun; er wurde im Upgrade vom 2026-06-22 entfernt. Integratoren müssen Stable-Pools nicht cranken.
Zusammenfassung: warum das funktioniert
Das Design mit Nachschlagetabelle + Interpolation ist effizient und flexibel:- Effizienz: Binäre Suche ist O(log 50.000) ≈ 16 Iterationen, jeweils ~ 300–500 CU. Interpolation ist ein paar Multiplikationen/Divisionen. Die gesamten Quoting-Kosten betragen ~5k–15k CU, viel günstiger als die Neuberechnung einer Formel bei jedem Swap.
- Flexibilität: Der Admin kann jede stückweise lineare Kurve kodieren. Stablecoin-Paare erhalten hohe Dichte um 1:1; besicherte Paare erhalten benutzerdefinierte Kurven.
- Eigenständige Liquidität: Alle Mittel leben in den Pool-Vaults und die Preisbestimmung liest sie direkt — kein Crank, kein externes Orderbuch, weniger Konten pro Transaktion.
raydium-stable/program/src/state.rs, Methoden get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, usw.
Nächste Schritte
- Konten —
ModelDataInfoundDataElementFeldverweis. - Anweisungen — der aufrufbare Satz (Swap, Einzahlung, Auszahlung,
WithdrawPnl) und die entfernten Anweisungen. - Gebühren — Gebührenanwendung und
WithdrawPnl. products/amm-v4/math— für die OpenBook-gebühreninklusive Order-Preislogik.
raydium-stable/program/src/state.rs(Interpolations- und binäre Suchimplementierungen)raydium-stable/program/src/math.rs(Rechner-Dienstprogramme)

