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.
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
sqrtを使う理由
Uniswap-v3ファミリーのCLMMは価格をその平方根として表現し、固定小数点のQ64.64に格納します:
- 線形流動性の数学。 価格範囲内のトークン0またはトークン1の量は、
priceの関数ではなくsqrt_priceの線形関数であることがわかります。sqrt_priceを格納すると、スワップステップは平方根を計算することなく、これらの線形公式を評価できます。 - オーバーフロー制御。
sqrt_price · Lは合理的なパラメータすべてでu256に収まります。price · Lははるかに早くオーバーフローする可能性があります。 - ティック数学は均一です。 ティックは
1.0001^iとして定義されているため、sqrt(price) = 1.00005^iもまた1.00005の正確なべき乗ラダーです。各ティック交差はsqrt_price_x64空間の小さな乗算に変わります。
price = (sqrt_price_x64 / 2^64)^2です。
ティックラティス
価格はグリッド上に離散化されます:tick_iはi32です。アクティブな範囲は[MIN_TICK, MAX_TICK] = [−443636, 443636]であり、おおよそ[2^−128, 2^128]の価格範囲を与えます。各プールのtick_spacingはそのフィーティアによって設定されます:狭いペア(例:ステーブルコイン0.01%ティアはスペーシング1を使用)の場合はより小さいスペーシング、不安定なペア(0.25%ティアは60、1%ティアは120)の場合はより大きいスペーシング。
ポジションはtick_lowerとtick_upperをtick_spacingに揃える必要があります。プールのアクティブなティック(流動性がそこで開始または終了するティック)は、スワップステップが気にする唯一のティックです。
流動性から金額へ
流動性Lと価格範囲[sqrt_lo, sqrt_hi](すべてのsqrt_price値)を持つポジションの場合:
| プール状態 | トークン0の金額 | トークン1の金額 |
|---|---|---|
範囲より上の価格 (sqrt_p ≥ sqrt_hi) | 0 | L · (sqrt_hi − sqrt_lo) |
| 範囲内の価格 | L · (sqrt_hi − sqrt_p) / (sqrt_p · sqrt_hi) | L · (sqrt_p − sqrt_lo) |
範囲より下の価格 (sqrt_p ≤ sqrt_lo) | L · (sqrt_hi − sqrt_lo) / (sqrt_lo · sqrt_hi) | 0 |
(x_v, y_v)を持つCPMMとして動作し、プールの現在の(sqrt_p, L)がL = sqrt(x_v · y_v)と一致するように選択されます。sqrt_pから範囲境界まで統合すると、上記の金額が得られます。
逆公式(与えられたamount0またはamount1でポジションをミントする場合に使用):
シングルティックスワップステップ
単一のティック範囲内で、プールはCPMMのように動作します。現在のsqrt_pとターゲットsqrt_targetが与えられた場合:
正確な入力ステップ
Δin_remainingが与えられた場合:
0→1スワップはsqrt_pを低下させます(トークン0を売ると価格は下がります)。1→0スワップはそれを上げます。公式はsqrt_pとsqrt_targetを入れ替えると対称です。
正確な出力ステップ
同じ構造ですが、Δinについて解きます。
マルチティックスワップループ
スワップは入力が枯渇するか価格制限に達するまでティックを反復処理します:single_stepはプールの現在のLを使用します。Lは初期化されたティックを越えるときにのみ変更されます。ティック間の流動性は定数であり、これがステップの数学を閉形式にする理由です。
ティックのliquidity_netは、そのティックで開始するポジション流動性の符号付き合計からそこで終了するものを引いたものです。上向きに越えるとliquidity_netを追加します;下向きに越えるとそれを減算します。
プールが保留中注文をティックで開いている場合、ティック交差ステップは、これらの注文の一部を埋めるためにスワップ入力の一部を機会的に消費します(コホート全体でFIFO)。マッチングアルゴリズムと、上記の基本ステップの公式に適用される可能性のある動的フィーサーチャージはproducts/clmm/mathに記載されています。これらは閉形式のシングルステップ公式を変更しません。
フィー成長アキュムレータ
CLMMは単位アクティブ流動性あたりのフィーを、サイドごと、グローバルおよびティックごとに追跡します:single_stepで:
fee_growth_globalは、そのサイドのトークンがステップで入力として支払われないため、このステップで移動しません。)
ティックを越えるときに、プログラムはfee_growth_outsideを反転させます:
tick_currentに相対的です。tick_currentがティックより上の場合、外部は「以下」を意味します。tick_currentが以下の場合、外部は「上」を意味します。反転は解釈を入れ替えます。
ポジションのfee_growth_inside
ポジション[tick_lower, tick_upper]と現在のtick_currentが与えられた場合:
s)は:
IncreaseLiquidity、DecreaseLiquidity、CollectFees)との各インタラクション時に実行されます。
作例 — 1つのティックを越える
プール(簡略化):sqrt_p_x64 = 2^64 · 1.0 = 2^64(価格 = 1.0)L = 1_000_000tick_current = 0- 下の次の初期化ティック:
tick = −60、sqrt_price = 1.0001^(−30) ≈ 0.99700、liquidity_net = −400_000(このティックはポジションを終了するため、下向き交差は400kを削除) - フィーレート:0.25%
Δin = 10_000 トークン0、方向 = 0→1。
ステップ1 — sqrt_target = 0.99700 · 2^64まで:
L = 600_000を使用:
次の初期化ティック(tick = −120と言う)はsqrt = 0.99402にあります。amount_in_to_targetを再計算します:
Δin_remaining未満です。再度越えます。Δin_remainingがゼロに達するまで続けます。
Δoutの完全なシーケンスは、最終的なスワップ出力に累積されます。
初期化とオーバーフロー保護
MIN_SQRT_PRICE_X64とMAX_SQRT_PRICE_X64はtick = ±443636に対応します。sqrt_pをこの範囲外に押し出すスワップは元に戻ります。- ユーザーの
sqrt_price_limitパラメータは同じ間隔内にある必要があります。プログラムはチェックします。 L · Δsqrtの積はu256で計算され、オーバーフローを避けるためにu128にシフト バックされます。
Uniswap v3との違い
- オラクル。 Raydium の
ObservationStateは(block_timestamp, tick_cumulative, seconds_per_liquidity_cumulative)リングバッファを格納します。Uniswapのものとはワイヤ形式が少し異なりますが、TWAP数学は同じです。 - Token-2022。 Raydium CLMMはToken-2022ミントをサポートしています。トランスファーフィーバリアントでは、追加の事前/事後スワップ金額の調整が必要です。
algorithms/token-2022-transfer-feesを参照してください。 - ティックビットマップ。 Raydiumは初期化ティックビットマップを
[u64; 16]にプールごとパックして、高速なfind_next_initialized_tickを実現します。Uniswapはワードごとのオンチェーンマッピングを使用しています。トレードオフはレント対検索コストです。 - リワードスロット。 Raydiumは3つのプールごとのリワードストリームをサポートしており、別々の
reward_growth_global_x64カウンターがあります。構造はフィー成長アキュムレータと同じです。
ポインタ
products/clmm/math— オンチェーン実装と実際のCLMM構造体フィールドを使用した作例。products/clmm/ticks-and-positions— ティックラティス、liquidity_net/gross、アクティブ範囲のセマンティクス。products/clmm/fees— フィー成長アキュムレータの実際の動作。
- Uniswap v3ホワイトペーパー(sqrt価格数学の正規導出)。
- Raydium CLMMプログラムソース。


