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 Nachschlagetabellen-Kurve
Stable AMM ersetzt die Formel x·y=k durch eine sparsame Nachschlagetabelle von (x, y, price)-Tupeln. Beim Quotieren eines Swaps führt das Programm Folgendes durch:- Berechnet das aktuelle Verhältnis des Pools aus den Reserven.
- Binäre Suche in der Tabelle, um die zwei Einträge zu finden, die dieses Verhältnis einrahmen.
- Lineare Interpolation zwischen ihnen, um einen Zwischenpreis zu erhalten.
- Wendet Gebühren an und gibt das Angebot zurück.
Tabellen-Layout und binäre Suche
ModelDataInfo enthält bis zu 50.000 DataElement-Einträge, indiziert durch den Administrator. 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, wobei
(element.x * multiplier) / element.ydastarget_ratioeinklammmert. - Wenn eine Klammer
[min_idx, max_idx]gefunden wird, interpolieren Sie.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. Die wichtige Invariante: Einträge müssen sortiert sein (x aufsteigend, y absteigend, price aufsteigend), damit die Suche funktioniert.
Lineare Interpolation
Sobald zwei Tabellenpunkte das Verhältnis einklammmern, berechnet die Interpolation einen Zwischenpreis und ein Reservenpaar:Skalierung: der Multiplikator
Pool-Reserven und Preise werden in unterschiedlichen Maßstäben gespeichert. Das Feldmultiplier auf ModelDataInfo berücksichtigt dies. Ein übliches 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-Preisgestaltung: SwapBaseIn und SwapBaseOut
SwapBaseIn (exakte Eingabe)
Gegeben eine Eingabemengeamount_in:
- Holen Sie sich das aktuelle Verhältnis aus
(coin_vault, pc_vault). - Suchen Sie einrahmende Tabelleneinträge und interpolieren Sie, um das Tabellenraum-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 die 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 das erforderliche amount_in.
Beide Pfade settlen zuerst erfüllte OpenBook-Aufträge (über interne MonitorStep-ähnliche Logik), sodass die effektiven Reserven alle Erfüllungen aus dem vorherigen Block widerspiegeln.
Gebührenanwendung
Identisch mit AMM v4: sieheproducts/amm-v4/math für die vollständige Ableitung.
pnl_portion geht an need_take_pnl_* und wird vom Administrator über WithdrawPnl abgeräumt. Der lp_portion bleibt im Tresor und erhöht k, was LP-Token-Inhabern zugute kommt.
MonitorStep und OpenBook
Wie AMM v4 istMonitorStep eine Crank-Anweisung, die:
- Ausstehende OpenBook-Auftragserfüllungen settelt (verschiebt Token von Tresoren in den Pool).
AmmInfo.target_ordersmit einem neuen Raster von Limit-Order-Slots aktualisiert.- Das neue Raster auf OpenBook postet.
MonitorStep: ~150k–180k CU (ähnlich wie AMM v4).
Zusammenfassung: warum dies funktioniert
Das Nachschlagetabellen- + Interpolations-Design ist effizient und flexibel:- Effizienz: Binäre Suche ist O(log 50.000) ≈ 16 Iterationen, jeweils ~ 300–500 CU. Interpolation sind wenige Multiplikationen/Divisionen. Die Gesamtquotierungskosten betragen ~5k–15k CU, viel günstiger als die Neuberechnung einer Formel bei jedem Swap.
- Flexibilität: Der Administrator kann jede stückweise-lineare Kurve codieren. Stablecoin-Paare erhalten hohe Dichte um 1:1; besicherte Paare erhalten benutzerdefinierte Kurven.
- OpenBook-Komposabilität: Die gleiche
MonitorStep/TargetOrders-Logik von AMM v4 gilt. Die Preiserkennung über die Tabelle fließt in die Order-Grid-Generierung.
raydium-stable/program/src/state.rs, Methoden get_data_by_x, get_data_by_y, get_dy_by_dx_base_in usw.
Wo geht es weiter
- Accounts —
ModelDataInfoundDataElement-Feldverweis. - Instructions —
InitModelData,UpdateModelDatazum Befüllen der Tabelle. - Fees — Gebührenanwendung und
WithdrawPnl. products/amm-v4/math— für die OpenBook-gebühreninklusive Order-Preislogik.
raydium-stable/program/src/state.rs(Implementierungen der Interpolation und binären Suche)raydium-stable/program/src/math.rs(Calculator-Dienstprogramme)


