Chuyển đến nội dung chính
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →

Đường cong bảng tra cứu

Stable AMM thay thế công thức x·y=k bằng một bảng tra cứu thưa chứa các bộ dữ liệu (x, y, price). Khi định giá một swap, chương trình:
  1. Tính tỷ lệ hiện tại của pool từ các dự trữ.
  2. Tìm kiếm nhị phân bảng để tìm hai mục nằm trong khoảng tỷ lệ đó.
  3. Nội suy tuyến tính giữa chúng để lấy giá trung gian.
  4. Áp dụng phí và trả về báo giá.
Cách tiếp cận này đánh đổi tính xác định của công thức để có tính linh hoạt của quản trị viên trong định hình giá, và nó đủ hiệu quả để vừa trong ngân sách tính toán của Solana.

Bố cục bảng và tìm kiếm nhị phân

ModelDataInfo chứa tối đa 50.000 mục DataElement, được lập chỉ mục bởi quản trị viên. Chỉ valid_data_count mục đầu tiên là hoạt động. Mỗi mục:
DataElement {
  x: u64,      // Tọa độ X (số tiền phía coin, được chia tỷ lệ)
  y: u64,      // Tọa độ Y (số tiền phía pc, được chia tỷ lệ)
  price: u64,  // price = x/y, được chia tỷ lệ theo multiplier
}
Để tìm giá tại dự trữ pool hiện tại (x_real, y_real):
  1. Tính tỷ lệ: target_ratio = (x_real * multiplier) / y_real.
  2. Tìm kiếm nhị phân các mục trong đó (element.x * multiplier) / element.y nằm trong khoảng target_ratio.
  3. Khi tìm thấy khoảng [min_idx, max_idx], thực hiện nội suy.
Mã tìm kiếm nhị phân của chương trình kéo dài khoảng 150 dòng trong state.rs::ModelDataInfo::get_mininum_range_by_xy_real. Bất biến chính: các mục phải được sắp xếp (x tăng dần, y giảm dần, price tăng dần) để tìm kiếm hoạt động.

Nội suy tuyến tính

Khi hai điểm bảng nằm trong khoảng tỷ lệ, nội suy tính toán giá trung gian và cặp dự trữ:
target = (x_real * multiplier) / y_real

[x1, y1, p1] = table[min_idx]
[x2, y2, p2] = table[max_idx]

// Nội suy giá
p = p1 + (p2 - p1) * (target - ratio1) / (ratio2 - ratio1)

// Nội suy dự trữ
x = x1 + (x2 - x1) * (target - ratio1) / (ratio2 - ratio1)
y = y1 + (y2 - y1) * (target - ratio1) / (ratio2 - ratio1)
Kết quả là một đường cong tuyến tính từng phần kết nối mượt mà các điểm bảng.

Chia tỷ lệ: multiplier

Dự trữ pool và giá được lưu trữ ở các tỷ lệ khác nhau. Trường multiplier trên ModelDataInfo tính đến điều này. Một mẫu phổ biến:
  • Coin có 6 chữ số thập phân, PC có 18 chữ số thập phân.
  • Multiplier = 10^6 (hoặc tương tự).
  • Các mục bảng được lưu trữ ở tỷ lệ giảm để vừa với giới hạn u64.
Chương trình chia tỷ lệ lại khi đọc/ghi qua:
real_value = table_value * ratio / multiplier
table_value = real_value * multiplier / ratio

Định giá swap: SwapBaseInSwapBaseOut

SwapBaseIn (đầu vào chính xác)

Cho số tiền đầu vào amount_in:
  1. Lấy tỷ lệ hiện tại từ (coin_vault, pc_vault).
  2. Tìm các mục bảng nằm trong khoảng và nội suy để lấy tỷ lệ không gian bảng.
  3. Chuyển đổi đầu vào sang không gian bảng: dx_table = amount_in * multiplier / ratio.
  4. Truy vấn bảng tại tọa độ X mới để tìm Y mới.
  5. dy_table = y_old - y_new.
  6. Chuyển đổi lại: dy_real = dy_table * ratio / multiplier.
  7. Áp dụng phí giao dịch: dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator).
  8. Trả về dy_output.

SwapBaseOut (đầu ra chính xác)

Đối xứng: cho amount_out mong muốn, giải để tìm amount_in cần thiết. Cả hai đường dẫn đều đọc dự trữ hiệu quả trực tiếp từ các vault pool. Pool không giữ các lệnh mở OpenBook trong nhiều năm, vì vậy không có gì để giải quyết trước — số dư vault là toàn bộ câu chuyện. (Bản nâng cấp 2026-06-22 đã loại bỏ mã thị trường còn sót lại.)

Áp dụng phí

Giống hệt AMM v4: xem products/amm-v4/math để xem đầy đủ cách dẫn xuất.
gross_fee = amount_in * (swap_fee_numerator / swap_fee_denominator)    // ví dụ: 0,25%
lp_portion = gross_fee - (gross_fee * pnl_numerator / pnl_denominator) // ví dụ: 0,22%
pnl_portion = gross_fee * (pnl_numerator / pnl_denominator)            // ví dụ: 0,03%
pnl_portion đi đến need_take_pnl_* và được quét bởi quản trị viên qua WithdrawPnl. lp_portion ở lại trong vault, làm tăng k và mang lợi ích cho những người nắm giữ token LP.

Kế toán tài sản pool

Công thức lịch sử đã thêm các quỹ mà pool giữ làm lệnh mở trong tài khoản OpenOrders của OpenBook. Thuật ngữ đó đã bằng không trong thực tế kể từ khi pool ngừng đăng lệnh, và bản nâng cấp 2026-06-22 đã loại bỏ nó hoàn toàn khỏi công thức, chỉ còn lại tính toán chỉ vault:
Cũ: tổng tài sản = số dư vault + quỹ lệnh mở (native_coin_total / native_pc_total) − PnL chưa xử lý (need_take_pnl)
Mới: tổng tài sản = số dư vault − PnL chưa xử lý (need_take_pnl)
Đây là giá trị mà toán học đường cong coi là dự trữ hiệu quả (phần need_take_pnl tích lũy nhưng chưa được quét nằm vật lý trong vault nhưng bị loại trừ khỏi định giá). Mã báo giá và indexer trước đây đọc số dư OpenOrders phải loại bỏ thuật ngữ đó.

MonitorStep (đã xóa)

MonitorStephướng dẫn crank giải quyết các lần điền OpenBook đang chờ xử lý, tính toán lại AmmInfo.target_orders, và đăng lại lưới lệnh giới hạn được dẫn xuất từ bảng tra cứu. Pool đã ngừng đăng lệnh cho OpenBook nhiều năm trước, vì vậy crank không còn gì để làm; nó đã bị xóa trong bản nâng cấp 2026-06-22. Các nhà tích hợp không cần crank các pool Stable.

Tóm tắt: tại sao điều này hoạt động

Thiết kế bảng tra cứu + nội suy là hiệu quả và linh hoạt:
  • Hiệu quả: Tìm kiếm nhị phân là O(log 50.000) ≈ 16 lần lặp, mỗi lần ~ 300–500 CU. Nội suy là một vài phép nhân/chia. Tổng chi phí báo giá là ~5k–15k CU, rẻ hơn nhiều so với tính toán lại công thức trên mỗi swap.
  • Linh hoạt: Quản trị viên có thể mã hóa bất kỳ đường cong tuyến tính từng phần nào. Các cặp stablecoin có mật độ cao xung quanh 1:1; các cặp có tài sản thế chấp có đường cong tùy chỉnh.
  • Thanh khoản tự chứa: Tất cả quỹ nằm trong các vault pool và định giá đọc chúng trực tiếp — không crank, không sổ lệnh bên ngoài, ít tài khoản hơn trên mỗi giao dịch.
Để tìm hiểu sâu về logic nội suy, xem raydium-stable/program/src/state.rs, các phương thức get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, v.v.

Tiếp theo

  • Tài khoản — tham chiếu trường ModelDataInfoDataElement.
  • Hướng dẫn — tập hợp có thể gọi được (swap, deposit, withdraw, WithdrawPnl) và các hướng dẫn đã xóa.
  • Phí — áp dụng phí và WithdrawPnl.
  • products/amm-v4/math — để xem logic định giá lệnh bao gồm phí OpenBook.
Nguồn:
  • raydium-stable/program/src/state.rs (triển khai nội suy và tìm kiếm nhị phân)
  • raydium-stable/program/src/math.rs (tiện ích máy tính)