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.
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
La courbe de table de recherche
L’AMM stable remplace la formule x·y=k par une table de recherche creuse de tuples (x, y, price). Lors de l’évaluation d’un swap, le programme :- Calcule le ratio actuel du pool à partir des réserves.
- Effectue une recherche binaire sur la table pour trouver les deux entrées qui encadrent ce ratio.
- Interpole linéairement entre elles pour obtenir un prix intermédiaire.
- Applique les frais et retourne le devis.
Structure de la table et recherche binaire
ModelDataInfo contient jusqu’à 50 000 entrées DataElement, indexées par l’administrateur. Seules les valid_data_count premières entrées sont actives. Chaque entrée :
- Calculez le ratio :
target_ratio = (x_real * multiplier) / y_real. - Recherchez les entrées où
(element.x * multiplier) / element.yencadretarget_ratio. - Lorsqu’un encadrement
[min_idx, max_idx]est trouvé, interpolez.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. L’invariant clé : les entrées doivent être triées (x croissant, y décroissant, price croissant) pour que la recherche fonctionne.
Interpolation linéaire
Une fois que deux points de la table encadrent le ratio, l’interpolation calcule un prix et une paire de réserves intermédiaires :Mise à l’échelle : le multiplicateur
Les réserves et les prix du pool sont stockés à différentes échelles. Le champmultiplier sur ModelDataInfo en tient compte. Un motif courant :
- Coin a 6 décimales, PC a 18 décimales.
- Multiplicateur = 10^6 (ou similaire).
- Les entrées de la table sont stockées à une échelle réduite pour s’adapter aux limites de u64.
Évaluation du swap : SwapBaseIn et SwapBaseOut
SwapBaseIn (entrée exacte)
Étant donné un montant d’entréeamount_in :
- Obtenez le ratio actuel de
(coin_vault, pc_vault). - Trouvez les entrées de table d’encadrement et interpolez pour obtenir le ratio dans l’espace de la table.
- Convertissez l’entrée dans l’espace de la table :
dx_table = amount_in * multiplier / ratio. - Interrogez la table à la nouvelle coordonnée X pour trouver le nouveau Y.
dy_table = y_old - y_new.- Reconvertissez :
dy_real = dy_table * ratio / multiplier. - Appliquez les frais de trade :
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Retournez
dy_output.
SwapBaseOut (sortie exacte)
Symétrique : étant donné leamount_out souhaité, résolvez pour amount_in requis.
Les deux chemins règlent d’abord les commandes OpenBook remplies (via la logique interne de type MonitorStep), de sorte que les réserves effectives reflètent tous les remplissages du bloc précédent.
Application des frais
Identique à AMM v4 : consultezproducts/amm-v4/math pour la dérivation complète.
pnl_portion va à need_take_pnl_* et est balayée par l’administrateur via WithdrawPnl. lp_portion reste dans le coffre-fort, gonflant k et bénéficiant aux détenteurs de jetons LP.
MonitorStep et OpenBook
Comme AMM v4,MonitorStep est une instruction de crank qui :
- Règle les remplissages de commandes OpenBook en attente (déplace les jetons des coffres-forts vers le pool).
- Met à jour
AmmInfo.target_ordersavec une nouvelle grille d’emplacements de commandes limitées. - Affiche la nouvelle grille sur OpenBook.
MonitorStep : ~150k–180k CU (similaire à AMM v4).
Synthèse : pourquoi cela fonctionne
La conception table de recherche + interpolation est efficace et flexible :- Efficacité : La recherche binaire est O(log 50 000) ≈ 16 itérations, chacune ~ 300–500 CU. L’interpolation est quelques multiplications/divisions. Le coût total de devis est ~5k–15k CU, beaucoup moins cher que de recalculer une formule à chaque swap.
- Flexibilité : L’administrateur peut encoder n’importe quelle courbe linéaire par morceaux. Les paires de pièces stables obtiennent une haute densité autour de 1:1 ; les paires collatéralisées obtiennent des courbes personnalisées.
- Composabilité OpenBook : La même logique
MonitorStep/TargetOrdersd’AMM v4 s’applique. La découverte des prix via la table alimente la génération de la grille de commandes.
raydium-stable/program/src/state.rs, méthodes get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, etc.
Où aller ensuite
- Comptes — Référence des champs
ModelDataInfoetDataElement. - Instructions —
InitModelData,UpdateModelDatapour remplir la table. - Frais — Application des frais et
WithdrawPnl. products/amm-v4/math— Pour la logique de tarification des commandes inclusives des frais OpenBook.
raydium-stable/program/src/state.rs(implémentations d’interpolation et de recherche binaire)raydium-stable/program/src/math.rs(utilitaires de calcul)


