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.
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 →
Bất biến
CPMM duy trì bất biến sản phẩm hằng số cổ điển trên hai kho lưu trữ của nó: trong đóx là số dư kho0 sau bất kỳ phí chuyển Token-2022 nào khi nhận, tương tự cho y. Mỗi swap phải để lại k' ≥ k sau khi tính đến phí giao dịch được ghi có cho LP (các khoá protocol, quỹ và người sáng tạo không được tính vào k — chúng nằm trong kho nhưng bị loại khỏi dạng xem đường cong, xem Phí trên đường cong dưới đây). k do đó tăng đơn điệu theo thời gian khi LP tích lũy phí.
Cổ phiếu LP được định giá theo dự trữ của pool, không phải theo k:
Đốt ΔLP token LP sẽ trả lại chính xác ΔLP × x / lpSupply của token0 và ΔLP × y / lpSupply của token1. Cả đường cong và k không di chuyển khi gửi hoặc rút tiền — chỉ swap thay đổi giá.
Mô hình phí trên đường dẫn swap
CPMM áp dụng hai phí được định giá độc lập trên mỗi swap:- Phí giao dịch được lấy ở phía đầu vào, được tính với
AmmConfig.trade_fee_rate. Sau đó nó được chia thành phần chia sẻ LP, protocol và quỹ (phần chia sẻ LP vẫn ở trong kho và tăngk; phần chia sẻ protocol và quỹ được trích xuất khỏi hạch toán kho). - Phí người sáng tạo (chỉ hoạt động khi
enable_creator_fee == true) được tính vớiAmmConfig.creator_fee_rate. Nó được lấy ở phía đầu vào hoặc đầu ra tùy thuộc vàoPoolState.creator_fee_onvà hướng swap (xemproducts/cpmm/fees). Nó là một khoá riêng — không bao giờ là một phần của phí giao dịch.
FEE_RATE_DENOMINATOR = 1_000_000trade_fee_rate— từAmmConfig, ví dụ:2500= 0,25% của phía thể tích liên quancreator_fee_rate— từAmmConfig, ví dụ:1000= 0,10% của phía thể tích liên quanprotocol_fee_rate,fund_fee_rate— tính theo đơn vị1/FEE_RATE_DENOMINATORcủa phí giao dịch, không phải của thể tích
protocol_fee + fund_fee + creator_fee được giữ trong các kho nhưng được theo dõi riêng trên trạng thái pool (protocol_fees_token*, fund_fees_token*, creator_fees_token*). Khi kiểm tra bất biến sản phẩm hằng số là k' ≥ k, nó sử dụng số dư kho trừ cả ba phí tích lũy nhưng chưa được thu thập — vì vậy LP chỉ nhận được lp_fee.
Xem products/cpmm/fees để biết các hướng dẫn thu thập và các ví dụ toán học đã hoàn thành.
SwapBaseInput (input-exact)
“Người dùng cung cấp cho chúng tôi chính xácamount_in của mint đầu vào và nhận ít nhất minimum_amount_out của mint đầu ra.”
Bỏ qua Token-2022 một lúc:
Δx_net = amount_in_after_trade_fee.
Chương trình sau đó cập nhật hạch toán kho sao cho phần trade_fee được nợ cho protocol/quỹ/người sáng tạo nằm trong các khoá “tích lũy” (không được bao gồm trong x tiếp theo của đường cong), trong khi phần chia sẻ LP sẽ tham gia x cho swap tiếp theo.
Token-2022 ở phía đầu vào
Nếu mint đầu vào có tiện ích phí chuyển, mint sẽ trừ phí của nó khi chuyển từ người dùng → kho. Vì vậy, kho thực tế nhận đượcamount_in − transfer_fee_in(amount_in). Do đó, chương trình CPMM tính toán:
amount_in_after_trade_fee. Điều này quan trọng vì giá đường cong được tính từ số tiền ròng đã hạ cánh trong kho, không phải từ số tiền hàng loạt của người dùng.
Token-2022 ở phía đầu ra
Nếu mint đầu ra có phí chuyển, pool sẽ gửiamount_out từ kho của nó đến người dùng. Mint sau đó sẽ lấy phí của nó trên đường đi, vì vậy người dùng nhận được amount_out − transfer_fee_out(amount_out). Chương trình tính toán amount_out từ đường cong như thường lệ, nhưng trách nhiệm của tích hợp là chuyển đổi số “gửi từ kho” của pool thành số “nhận được của người dùng” khi hiển thị báo giá.
Kiểm tra slippage
Sau khi tính toánamount_out:
minimum_amount_out vì vậy hằng số slippage được tính bằng những gì người dùng sẽ thực sự nhận được, không phải những gì kho gửi đi.
SwapBaseOutput (output-exact)
“Người dùng sẽ nhận được chính xácamount_out của mint đầu ra và sẵn sàng trả tối đa maximum_amount_in của mint đầu vào.”
Đảo ngược đường cong cho Δx_net:
Giới hạn trên rất quan trọng — nó đảm bảo k' ≥ k sau khi cắt ngắn số nguyên. Sau đó:
gross_needed.
Kiểm tra slippage
Ví dụ hoàn thành
Trạng thái pool, bỏ qua Token-2022:x = 1_000_000_000_000(1.000.000,000000 của token0, 6 chữ số thập phân)y = 2_000_000_000_000(2.000.000,000000 của token1, 6 chữ số thập phân)AmmConfig:trade_fee_rate = 2500,protocol_fee_rate = 120_000,fund_fee_rate = 40_000,creator_fee_rate = 0
SwapBaseInput với amount_in = 1_000_000_000 (1.000,000000 của token0). Phí người sáng tạo bị vô hiệu hóa (enable_creator_fee = false).
enable_creator_fee = true với creator_fee_rate = 1000 (0,10%) ở phía đầu vào, chương trình sẽ tính total_input_fee = ceil(1_000_000_000 * 3500 / 1_000_000) = 3_500_000, sau đó chia thành creator_fee = 1_000_000 và trade_fee = 2_500_000. Số học protocol/quỹ/LP trên trade_fee không thay đổi từ ví dụ trên — phí người sáng tạo là khoá của riêng nó, được tích lũy thành creator_fees_token0 và loại trừ khỏi curve_x cùng với các khoá protocol và quỹ.
Nếu mint đầu vào có phí chuyển Token-2022 là 1%, kho nhận được 990_000_000 token thay vì 1_000_000_000, và mỗi tính toán tiếp theo sử dụng số tiền ròng đó.
Quy tắc cập nhật quan sát
Trên mỗi swap, chương trình đánh giá xem có nên đẩy một quan sát mới vào vòng lặp đệm hay không:- Giá tích lũy, không phải giá tại chỗ. Một quan sát duy nhất không phải là giá. Để lấy TWAP từ thời gian
t0đếnt1, đọc các quan sát gần nhất với mỗi đầu và tính(cumulative(t1) − cumulative(t0)) / (t1 − t0). - Các mẫu bị giới hạn tốc độ. Các swap liên tiếp trong cùng một slot có thể chia sẻ một quan sát. Đọc một quan sát ngay sau một swap do đó có thể trông cũ bởi một slot — điều này là bình thường.
products/clmm/accounts.
Phí trên đường cong
Đây là phần tinh tế và đáng được nhấn mạnh. Số học đường cong hoạt động chống lại các số dư kho ròng — tức là, số dư SPL thô trừ đi phí tích lũy protocol, quỹ và người sáng tạo (cả ba là các khoá độc lập — xemproducts/cpmm/fees). Một bức tranh cụ thể:
- Không báo giá từ số dư thô. Trừ đi các trường phí tích lũy trước, hoặc gọi
SwapBaseInputnhư một mô phỏng và lấy kết quả trả về của nó. CollectProtocolFeedi chuyển token ra khỏi kho. Sau khi thu thập,raw_vault_balancegiảm nhưngcurve_balancekhông thay đổi; giá của pool không di chuyển. Điều này là cố ý.
Độ chính xác và tràn
- Tất cả số học đường cong sử dụng trung gian
u128để ngăn chặn tràn trênx * y. - Phép chia làm tròn về phía không, ngoại trừ
Δx_netcủaSwapBaseOutput, làm tròn lên, và tính toán phí, làm tròn lên trêntrade_feevà xuống trên các phân chia con. Các hướng làm tròn này được chọn sao cho bất biến không bao giờ giảm do cắt ngắn số nguyên. - Các pool có tỷ lệ kho cực kỳ (hàng tỷ : 1) có thể hit precision floors trên các giao dịch nhỏ; chương trình trả về
ZeroTradingTokenstrong trường hợp đó. Xemreference/error-codes.
Tiếp theo là gì
products/cpmm/fees— ngữ nghĩa tầng phí và thu thập đầy đủ.products/cpmm/instructions— các hướng dẫn gọi toán học này.algorithms/constant-product— suy dẫn và các trường hợp cạnh củax · y = kđược chia sẻ giữa AMM v4 và CPMM.
raydium-io/raydium-cp-swap— swap math trongstates/curve.rs- Báo cáo kiểm toán Raydium được liên kết trong
security/audits


