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:- Tính tỷ lệ hiện tại của pool từ các dự trữ.
- Tìm kiếm nhị phân bảng để tìm hai mục nằm trong khoảng tỷ lệ đó.
- Nội suy tuyến tính giữa chúng để lấy giá trung gian.
- Áp dụng phí và trả về báo giá.
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:
- Tính tỷ lệ:
target_ratio = (x_real * multiplier) / y_real. - Tìm kiếm nhị phân các mục trong đó
(element.x * multiplier) / element.ynằm trong khoảngtarget_ratio. - Khi tìm thấy khoảng
[min_idx, max_idx], thực hiện nội suy.
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ữ:Chia tỷ lệ: multiplier
Dự trữ pool và giá được lưu trữ ở các tỷ lệ khác nhau. Trườngmultiplier 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.
Định giá swap: SwapBaseIn và SwapBaseOut
SwapBaseIn (đầu vào chính xác)
Cho số tiền đầu vàoamount_in:
- Lấy tỷ lệ hiện tại từ
(coin_vault, pc_vault). - 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.
- Chuyển đổi đầu vào sang không gian bảng:
dx_table = amount_in * multiplier / ratio. - Truy vấn bảng tại tọa độ X mới để tìm Y mới.
dy_table = y_old - y_new.- Chuyển đổi lại:
dy_real = dy_table * ratio / multiplier. - Áp dụng phí giao dịch:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Trả về
dy_output.
SwapBaseOut (đầu ra chính xác)
Đối xứng: choamount_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: xemproducts/amm-v4/math để xem đầy đủ cách dẫn xuất.
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: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)
MonitorStep là hướ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.
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
ModelDataInfovàDataElement. - 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.
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)

