本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
查詢表曲線
穩定 AMM 用稀疏查詢表取代公式 x·y=k,表中包含 (x, y, price) 元組。進行交換報價時,程式會:- 從儲備計算池的目前比率。
- 二分搜尋表格找出括住該比率的兩個項目。
- 線性插值計算中間價格。
- 應用費用並返回報價。
表格佈局與二分搜尋
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 遞減、price 遞增),搜尋才能運作。
線性插值
一旦兩個表格點括住比率,插值計算中間價格和儲備對:縮放:乘數
池儲備和價格以不同的尺度儲存。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 未平倉訂單,因此沒有需要先結算的內容——金庫餘額就是全部。(2026-06-22 升級移除了遺留的市場程式碼。)
費用應用
與 AMM v4 相同:完整推導見products/amm-v4/math。
pnl_portion 進入 need_take_pnl_* 並由管理員透過 WithdrawPnl 清掃。lp_portion 留在金庫中,增加 k 並使 LP 代幣持有者受益。
池資產帳戶
公式歷來加上池在其 OpenBook OpenOrders 帳戶中持有的未平倉訂單資金。自池停止發佈訂單以來,該項實際上一直為零,2026-06-22 升級完全從公式中移除了它,只留下金庫計算:need_take_pnl 部分實際上位於金庫中,但被排除在定價之外)。之前讀取 OpenOrders 餘額的報價程式碼和索引器必須移除該項。
MonitorStep(已移除)
MonitorStep 是曲柄指令,用於結算待處理的 OpenBook 成交、重新計算 AmmInfo.target_orders 並重新發佈從查詢表衍生的限價訂單網格。池多年前停止向 OpenBook 發佈訂單,因此曲柄沒有任何工作要做;它在 2026-06-22 升級中被移除。整合者無需為穩定池進行曲柄操作。
總結:為什麼這有效
查詢表 + 插值設計既高效又靈活:- 效率: 二分搜尋為 O(log 50,000) ≈ 16 次迭代,每次約 300–500 CU。插值是幾個乘法/除法。總報價成本約 5k–15k CU,遠便宜於每次交換重新計算公式。
- 靈活性: 管理員可以編碼任何分段線性曲線。穩定幣對在 1:1 附近獲得高密度;抵押對獲得自訂曲線。
- 自包含流動性: 所有資金都在池金庫中,定價直接讀取它們——無需曲柄、無外部訂單簿、每筆交易帳戶更少。
raydium-stable/program/src/state.rs,方法 get_data_by_x、get_data_by_y、get_dy_by_dx_base_in 等。
後續步驟
- 帳戶 —
ModelDataInfo和DataElement欄位參考。 - 指令 — 可呼叫集合(交換、存入、提取、
WithdrawPnl)和已移除的指令。 - 費用 — 費用應用和
WithdrawPnl。 products/amm-v4/math— OpenBook 費用包含訂單定價邏輯。
raydium-stable/program/src/state.rs(插值和二分搜尋實現)raydium-stable/program/src/math.rs(計算器工具)

