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 →
Trang này tập hợp các chứng minh đằng sau CLMM. Để xem cách triển khai on-chain, hãy xem
products/clmm/math (tài liệu này tham chiếu trang hiện tại) và products/clmm/ticks-and-positions (tài liệu này giải thích lưới tick).Tại sao dùng sqrt-price, không dùng price
Các CLMM họ Uniswap-v3 biểu diễn giá dưới dạng căn bậc hai của nó, được lưu trữ trongQ64.64 số điểm cố định:
- Toán học liquidity tuyến tính. Lượng token0 hoặc token1 trong một khoảng giá hóa ra là hàm tuyến tính của
sqrt_price, không phải củaprice. Lưu trữsqrt_pricecho phép bước swap tính toán các công thức tuyến tính mà không cần tính căn bậc hai. - Kiểm soát tràn số.
sqrt_price · Lvừa trongu256cho tất cả các tham số hợp lý;price · Lcó thể tràn sớm hơn. - Toán học tick đều đặn. Vì tick được định nghĩa là
1.0001^i, nênsqrt(price) = 1.00005^icũng là lũy thừa chính xác của thang 1.00005. Mỗi lần vượt qua tick được dịch thành phép nhân nhỏ trong không giansqrt_price_x64.
price = (sqrt_price_x64 / 2^64)^2.
Lưới tick
Các giá được rời rạc hóa trên một lưới:tick_i là một i32. Khoảng hoạt động là [MIN_TICK, MAX_TICK] = [−443636, 443636], cung cấp khoảng giá khoảng [2^−128, 2^128]. tick_spacing của mỗi pool được xác định bởi mức phí của nó: khoảng cách nhỏ hơn cho các cặp chặt chẽ (ví dụ: mức stablecoin 0.01% sử dụng spacing 1), khoảng cách lớn hơn cho các cặp biến động (mức 0.25% sử dụng 60, mức 1% sử dụng 120).
Các vị thế phải có tick_lower và tick_upper căn chỉnh theo tick_spacing. Các tick hoạt động của một pool (những tick có liquidity bắt đầu hoặc kết thúc tại đó) là những tick duy nhất mà bước swap quan tâm.
Quy đổi từ liquidity sang amount
Đối với một vị thế có liquidityL và khoảng giá [sqrt_lo, sqrt_hi] (tất cả các giá trị sqrt_price):
| Trạng thái pool | Lượng token0 | Lượng token1 |
|---|---|---|
Giá cao hơn khoảng (sqrt_p ≥ sqrt_hi) | 0 | L · (sqrt_hi − sqrt_lo) |
| Giá trong khoảng | L · (sqrt_hi − sqrt_p) / (sqrt_p · sqrt_hi) | L · (sqrt_p − sqrt_lo) |
Giá dưới khoảng (sqrt_p ≤ sqrt_lo) | L · (sqrt_hi − sqrt_lo) / (sqrt_lo · sqrt_hi) | 0 |
(x_v, y_v) được chọn sao cho (sqrt_p, L) hiện tại của pool nhất quán với L = sqrt(x_v · y_v). Tích phân từ sqrt_p đến ranh giới của khoảng cho các số tiền ở trên.
Công thức nghịch đảo (được sử dụng khi tạo vị thế cho một amount0 hoặc amount1 nhất định):
Bước swap đơn tick
Trong một khoảng tick duy nhất, pool hành động như một CPMM. Chosqrt_p hiện tại và sqrt_target:
Bước nhập chính xác
ChoΔin_remaining:
0→1 hạ thấp sqrt_p (giá giảm khi chúng ta bán token0 vào). Swap 1→0 nâng cao nó. Các công thức đối xứng với sqrt_p và sqrt_target được hoán đổi.
Bước xuất chính xác
Cấu trúc giống nhau, giải để tìmΔin thay thế.
Vòng lặp swap đa tick
Một swap lặp qua các tick cho đến khi input hết hoặc giới hạn giá bị chạm tới:single_step sử dụng L hiện tại của pool. L chỉ thay đổi khi vượt qua một tick đã được khởi tạo. Liquidity giữa các tick là hằng số, đó là những gì làm cho toán học bước đóng.
liquidity_net tại một tick là tổng có dấu của liquidities vị thế bắt đầu tại tick đó trừ đi những cái kết thúc tại đó. Vượt lên trên thêm liquidity_net; vượt xuống dưới trừ đi nó.
Khi pool có các lệnh giới hạn mở tại một tick, bước vượt qua tick cũng có cơ hội tiêu thụ một phần input swap để điền các lệnh đó (FIFO trên các nhóm). Thuật toán khớp và mức phí động có thể áp dụng trên cơ sở bước cơ sở được ghi chép trong products/clmm/math; chúng không thay đổi công thức bước đóng đơn ở trên.
Bộ tích lũy tăng phí
CLMM theo dõi phí trên một đơn vị liquidity hoạt động, trên mỗi bên, toàn cầu và trên mỗi tick:single_step:
fee_growth_global của phía còn lại không di chuyển trên bước này, vì không có token nào ở phía đó được thanh toán làm input.)
Khi vượt qua một tick, chương trình lật fee_growth_outside:
tick_current. Khi tick_current ở trên tick, ngoài có nghĩa là “dưới”. Khi tick_current ở dưới, ngoài có nghĩa là “trên”. Lần lật này hoán đổi cách giải thích.
fee_growth_inside cho một vị thế
Cho một vị thế [tick_lower, tick_upper] và tick_current hiện tại:
s là:
IncreaseLiquidity, DecreaseLiquidity, CollectFees).
Ví dụ có chi tiết — vượt qua một tick
Pool (đơn giản hóa):sqrt_p_x64 = 2^64 · 1.0 = 2^64(giá = 1.0)L = 1_000_000tick_current = 0- Tick đã khởi tạo tiếp theo bên dưới:
tick = −60,sqrt_price = 1.0001^(−30) ≈ 0.99700,liquidity_net = −400_000(tick này kết thúc một vị thế, vì vậy một lần vượt xuống dưới loại bỏ 400k) - Mức phí: 0.25%
Δin = 10_000 token0, hướng = 0→1.
Bước 1 — đến sqrt_target = 0.99700 · 2^64:
L = 600_000 mới:
Tick đã khởi tạo tiếp theo (nói tick = −120) ở sqrt = 0.99402. Tính toán lại amount_in_to_target:
Δin_remaining. Vượt qua lần nữa. Tiếp tục cho đến khi Δin_remaining đạt không.
Trình tự đầy đủ của Δout tích lũy thành output swap cuối cùng.
Khởi tạo và bảo vệ tràn số
MIN_SQRT_PRICE_X64vàMAX_SQRT_PRICE_X64tương ứng vớitick = ±443636. Bất kỳ swap nào sẽ đẩysqrt_pra ngoài khoảng này sẽ hoàn lại.- Tham số
sqrt_price_limitcủa người dùng phải nằm trong cùng một khoảng; chương trình kiểm tra. - Các tích của
L · Δsqrtđược tính toán trongu256rồi dịch trở lạiu128để tránh tràn.
Khác biệt so với Uniswap v3
- Oracle.
ObservationStatecủa Raydium lưu trữ vòng đệm(block_timestamp, tick_cumulative, seconds_per_liquidity_cumulative); định dạng dây khác một chút so với Uniswap nhưng cùng toán học TWAP. - Token-2022. Raydium CLMM hỗ trợ các mint Token-2022; biến thể phí chuyển yêu cầu các điều chỉnh số tiền trước/sau swap bổ sung. Xem
algorithms/token-2022-transfer-fees. - Tick bitmap. Raydium đóng gói bitmap tick đã khởi tạo thành
[u64; 16]cho mỗi pool đểfind_next_initialized_ticknhanh; Uniswap sử dụng ánh xạ on-chain cho mỗi từ. Việc đánh đổi là tiền thuê so với chi phí tra cứu. - Các slot phần thưởng. Raydium hỗ trợ 3 luồng phần thưởng mỗi pool với các bộ đếm
reward_growth_global_x64riêng; cấu trúc giống như bộ tích lũy tăng phí.
Các con trỏ
products/clmm/math— cách triển khai on-chain và ví dụ có chi tiết với các trường struct CLMM thực tế.products/clmm/ticks-and-positions— lưới tick, ngữ nghĩaliquidity_net/grossvà khoảng hoạt động.products/clmm/fees— bộ tích lũy tăng phí đang hoạt động.
- Whitepaper Uniswap v3 (chứng minh chính tắc của toán học sqrt-price).
- Mã nguồn chương trình Raydium CLMM.


