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.
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
ルックアップテーブルカーブ
Stable AMM は x·y=k という公式を、(x, y, price) タプルのスパースルックアップテーブルで置き換えます。スワップの価格見積もり時、プログラムは以下を実行します:- リザーブから現在のプールの比率を計算します。
- 二分探索でテーブルを検索し、その比率をブラケットする 2 つのエントリを見つけます。
- 線形補間して中間価格を取得します。
- フィーを適用し、見積もりを返します。
テーブルレイアウトと二分探索
ModelDataInfo には最大 50,000 個の DataElement エントリが保持され、管理者によってインデックスされます。最初の valid_data_count 個のみが有効です。各エントリ:
- 比率を計算します:
target_ratio = (x_real * multiplier) / y_real。 (element.x * multiplier) / element.yがtarget_ratioをブラケットするエントリを二分探索します。- ブラケット
[min_idx, max_idx]が見つかったら、補間します。
state.rs::ModelDataInfo::get_mininum_range_by_xy_real に約 150 行にわたります。重要な不変量:エントリは並べ替えられている必要があります(x昇順、y降順、価格昇順)。検索が動作するためです。
線形補間
2 つのテーブルポイントが比率をブラケットすると、補間は中間価格とリザーブペアを計算します:スケーリング:乗数
プールリザーブと価格は異なるスケールで保存されます。ModelDataInfo の multiplier フィールドはこれを考慮します。一般的なパターン:
- コインは 6 小数点、PC は 18 小数点。
- 乗数 = 10^6(またはそれに類するもの)。
- テーブルエントリは u64 の境界に収まるように、縮小スケールで保存されます。
スワップ価格見積もり:SwapBaseIn と SwapBaseOut
SwapBaseIn(確定入力)
入力額amount_in が与えられた場合:
(coin_vault, pc_vault)から現在の比率を取得します。- ブラケットするテーブルエントリを見つけて補間し、テーブル空間の比率を取得します。
- 入力をテーブル空間に変換:
dx_table = amount_in * multiplier / ratio。 - 新しい X 座標でテーブルをクエリして、新しい Y を見つけます。
dy_table = y_old - y_new。- 戻す:
dy_real = dy_table * ratio / multiplier。 - 取引手数料を適用:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator)。 dy_outputを返します。
SwapBaseOut(確定出力)
対称:望ましいamount_out が与えられたら、必要な amount_in を解きます。
両方のパスは、最初に入力された OpenBook 注文を決済します(内部 MonitorStep のようなロジック経由)。そのため、実効リザーブは前のブロックからの埋め込みを反映します。
フィー適用
AMM v4 と同一です:完全な導出についてはproducts/amm-v4/math を参照してください。
pnl_portion は need_take_pnl_* に移動し、管理者によって WithdrawPnl を経由して回収されます。lp_portion はヴォルトに残り、k を膨張させて、LP トークンホルダーに利益をもたらします。
MonitorStep と OpenBook
AMM v4 と同様に、MonitorStep はクランク命令で:
- 保留中の OpenBook 注文埋め込みを決済(ヴォルトからトークンをプールに移動)。
AmmInfo.target_ordersを制限注文スロットの新しいグリッドで更新。- 新しいグリッドを OpenBook にポストします。
MonitorStep のコンピュートコスト:約 150k–180k CU(AMM v4 と同様)。
まとめ:これが動作する理由
ルックアップテーブル + 補間設計は効率的かつ柔軟です:- 効率性:二分探索は O(log 50,000) ≈ 16 反復、各~300–500 CU です。補間は数回の乗算/除算です。見積もりコスト合計は~5k–15k CU で、スワップごとに公式を再計算するよりはるかに安価です。
- 柔軟性:管理者は任意の区分線形カーブをエンコードできます。ステーブルコインペアは 1:1 の周辺で高密度を得ます。担保ペアはカスタムカーブを得ます。
- OpenBook 合成可能性:AMM v4 からの同じ
MonitorStep/TargetOrdersロジックが適用されます。テーブルを経由した価格発見は、注文グリッド生成に流し込みます。
raydium-stable/program/src/state.rs、メソッド get_data_by_x、get_data_by_y、get_dy_by_dx_base_in などを参照してください。
次に進むべき場所
- アカウント —
ModelDataInfoとDataElementフィールドリファレンス。 - 命令 — テーブルの入力に
InitModelData、UpdateModelData。 - フィー — フィー適用と
WithdrawPnl。 products/amm-v4/math— OpenBook フィー込みの注文価格設定ロジック用。
raydium-stable/program/src/state.rs(補間と二分探索実装)raydium-stable/program/src/math.rs(計算機ユーティリティ)


