Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →

2 つの独立したフィー、4 つの宛先

CPMM はすべてのスワップに対して 2 つの独立した料率のフィー を課します:
  1. トレードフィーAmmConfig.trade_fee_rate で徴収され、3 つの宛先に分割されます:
    • LP シェア — ヴォルト内に留まり、k を増加させます。LP トークンをバーンすることで暗黙的に請求されます。
    • プロトコルシェアPoolState.protocol_fees_token* に蓄積され、protocol_ownerCollectProtocolFee 経由で回収します。
    • ファンドシェアPoolState.fund_fees_token* に蓄積され、fund_ownerCollectFundFee 経由で回収します。
  2. クリエイターフィー(オプション、プール単位) — AmmConfig.creator_fee_rate で徴収され、トレードフィーとは 独立 して PoolState.creator_fees_token* に蓄積されます。クリエイターは CollectCreatorFee 経由で回収するか、任意のペイヤーが宛先制約付きの CollectCreatorFeePermissionless パスをトリガーできます。プールが enable_creator_fee = true で作成された場合のみアクティブです。
クリエイターフィーはトレードフィーのスライスでは ありません。2 つの料率はスワップ入力時にフィーが取られるときに加算されますが、各々は独自のバケットのままです — プロトコルとファンドシェアは常に trade_fee からのみ導出され、creator_fee からは決して導出されません。creator_fee_rate = 1000(0.10%)と trade_fee_rate = 2500(0.25%)を持つプールは、クリエイターフィーオンインプットスワップで入力の合計 0.35% を徴収し、そのうちクリエイターが 0.10% を保持し、トレードフィーバケットが 0.25% を取得します。 トレードフィー料率(trade_fee_rateprotocol_fee_ratefund_fee_rate)とクリエイターフィー料率(creator_fee_rate)はすべて AmmConfig に存在します。プール単位の enable_creator_fee フラグと creator_fee_on モード(トレードのどちら側からクリエイターフィーが取られるか)は PoolState に存在します。/ja/products/cpmm/accounts を参照してください。

料率と単位

すべての料率は u64 で、1 / FEE_RATE_DENOMINATOR の単位で表示されます。ここで FEE_RATE_DENOMINATOR = 1_000_000 です。
  • trade_fee_rateスワップボリューム の分数です。2500 ⇒ 関連する側(creator_fee_on に応じて入力または出力 — 下の「フィーが取られるトレードのどちら側か」を参照)の 0.25%。
  • creator_fee_rateスワップボリューム の分数で、トレードフィーとは 別に 取られます。1000 ⇒ 関連する側の 0.10%。
  • protocol_fee_ratefund_fee_rate はボリュームではなく トレードフィー の分数です。120_000 ⇒ トレードフィーの 12%。
メインネット上の AmmConfig[index=0](「標準」0.25% プール)のデフォルトパラメータ(参考用): したがって、AmmConfig[0] に対する $1,000 スワップで enable_creator_fee = false の場合:合計 $2.50 のトレードフィー、そのうち $2.10 は LP に留まり、$0.30 はプロトコルに、$0.10 はファンドに行きます。クリエイターフィーが無効になっているため、クリエイターバケットは 0 です。 同じプールが enable_creator_fee = truecreator_fee_rate = 1000(0.10%)を持つ場合、ユーザーは creator_fee_on で設定されたトレードの同じ側から取られた追加 $1.00 をクリエイターバケットに支払い、合計フィーは $3.50 になります。トレードフィーバケットとそのプロトコル/ファンド分割は変わりません。 現在のメインネット値を GET https://api-v3.raydium.io/main/cpmm-config で確認してください — 料率は管理者が変更可能であり、ハードコードするのではなく新しく読み込む必要があります。

コード内の分割

注:
  • 入力の合計フィーは 切り上げ されるため、プールは決して過少請求しません。
  • trade_fee のサブ分割(プロトコル、ファンド)は 切り下げ されるため、その合計は trade_fee を超えません。残りは LP シェアです。
  • lp_share = trade_fee − protocol_fee − fund_fee(creator_fee は独自のバケットであるため、ここでは差し引かれ ません)。
  • クリエイターフィーは PoolState.creator_fee_on に応じて入力または出力から取られます(次のセクションを参照)。料率はどちらの場合でも変わりません。

フィーが取られるトレードのどちら側か

CPMM には、プール単位の creator_fee_on 設定(BothToken / OnlyToken0 / OnlyToken1)があり、クリエイターフィーが特定のスワップの 入力 側から取られるか 出力 側から取られるかを決定します。ランタイムヘルパー is_creator_fee_on_input(direction) はそれをスワップごとのブール値に縮約します: クリエイターフィーが 入力 側にある場合、トレードフィーとクリエイターフィーの両方がカーブが実行される前に amount_in から差し引かれます。クォート計算:入力から合計 trade_rate + creator_rate を取ります。 クリエイターフィーが 出力 側にある場合、トレードフィーのみが amount_in から差し引かれます。カーブはフィーなしの出力を生成し、その後クリエイターフィーがその出力から差し引かれます。クォート計算:入力から trade_rate を取ります。出力から creator_rate を取ります。 トレードフィー自体は常に入力側から取られます(標準的な Uniswap-V2 パターン)。クリエイターフィーのみが出力に着地できます。

「蓄積」フィーがカーブとどのように相互作用するか

重要な微妙な点:プロトコル、ファンド、クリエイターフィーは、それぞれの Collect* 命令が呼び出されるまで物理的にヴォルト内に留まります。しかし、それらはカーブのヴォルト残高ビューから除外されます。 1 つのスワップ後の具体的な図:
プログラムは k' ≥ k を強制するときに curve_x(および類似の curve_y)を使用します。これは、非 LP フィーが LP シェアを膨らませることなく目的地に到達する方法です。 設計時に考慮すべき結果:
  • 生の残高からのクォートは間違っています。 getTokenAccountBalance からクォーターを構築する場合、プールが尊重する価格を一貫して過大評価します。常に蓄積フィーを差し引くか、SwapBaseInput / API 経由でシミュレートしてください。
  • CollectProtocolFee は価格を動かしません。 トークンをヴォルトから移動させ、protocol_fees_token* カウンターをゼロにするため、curve_xcurve_y は変わりません。
  • LP フィーはカウンターに蓄積されません。 それらはヴォルト残高に暗黙的です。蓄積された LP フィーに対する LP の権利は、LP トークンをバーンすることで行使されます(つまり、Withdraw 経由)— CollectLpFee はありません。

Token-2022 転送フィーとの相互作用

Token-2022 転送フィーは CPMM ではなく ミント によって適用されます。それらはすべてのトークン転送(スワップ、デポジット、ウィズドロー、Collect* スイープ)に作用します。CPMM のトレードフィー計算は、実際にヴォルトに 着地した 金額に対して計算されます。つまり、入力ミントの転送フィー(存在する場合)を差し引いたものです。 したがって、最悪の場合、ユーザーは入力額確定スワップで 3 つの異なる税を支払います:
  1. 入力ミントの転送フィー(amount_in に対して、ミントのフィー権限に)。
  2. プールの trade_fee(残りに対して、上記のように分割)。
  3. 出力ミントの転送フィー(amount_out に対して、ミントのフィー権限に)。
SDK のクォーターはすべての 3 つを考慮するため、minimum_amount_out はユーザーが実際に受け取るものを単位とします。独自のクォーターを作成している場合は、その動作をミラーリングするか、スリッページチェックが体系的に寛容になりすぎます。 詳細な導出については、/ja/algorithms/token-2022-transfer-fees を参照してください。

クリエイターフィー

クリエイターフィーはオプションでプール単位です。料率AmmConfig.creator_fee_rate に存在します。有効フラグcreator_fee_on)は PoolState に存在します:
  • プール作成時に有効化。 Initialize はデフォルトで enable_creator_fee = false を設定します。InitializeWithPermission(LaunchLab 卒業およびその他のゲートされたパスで使用)経由で作成されたプールは enable_creator_fee = true を渡し、creator_fee_on を選択できます。
  • 料率はフィーティアと共有。 料率自体は AmmConfig.creator_fee_rate で、そのコンフィグにバインドされたすべてのプール全体で同じ値です。各プールは、それを徴収するかどうか(enable_creator_fee)と、スワップのどちら側から徴収するか(creator_fee_on)を決定します。enable_creator_fee = false の場合、プールの実効クリエイターフィー料率は、コンフィグ値に関係なくゼロです(ソースの PoolState::adjust_creator_fee_rate を参照)。
  • トレードフィーから独立。 クリエイターフィーは LP / プロトコル / ファンドシェアを削減することはありません — それは独自の料率で、別に適用され、独自のカウンターに蓄積されます。
  • CollectCreatorFee または CollectCreatorFeePermissionless 経由で回収。 元のパスは PoolState.pool_creator の署名を必要とします。パーミッションレスパスは任意のペイヤーが回収をトリガーできますが、両方の宛先をクリエイターの正規 ATA に固定します。
  • 作成後に再度有効化または再ルーティングできません。 enable_creator_fee = false で初期化されたプールはクリエイターフィーを決して徴収しません。特定の creator_fee_on で初期化されたプールは側を切り替えることができません。
クリエイターフィーは Raydium の「Burn & Earn」パターンの背後にあるメカニズムです:LP トークンは LP Lock プログラムの下でロックされるため、クリエイターはリクイディティを引き出すことができませんが、蓄積されたクリエイターフィーは無期限に回収できます。

回収の運用フロー

プロトコルおよびファンド所有者はメインネット上の Raydium マルチシグです。/ja/security/admin-and-multisig を参照してください。元のクリエイターのみパスでは、クリエイター署名者は PoolState に記録されたアカウントです。パーミッションレスパスでは、呼び出し元は欠落しているクリエイター ATA を作成するために支払います。プログラムは creatorpool_state.pool_creator に制約し、各宛先をそのクリエイタープラス対応するヴォルトミントとトークンプログラムから導出するため、呼び出し元はファンドをリダイレクトできません。

フィーティアの変更

フィー料率は管理者が UpdateAmmConfig 経由で変更できます(/ja/products/cpmm/instructions を参照)。変更は、そのコンフィグにバインドされたすべてのプールの 次のスワップ で有効になります — マイグレーションはありません。プールは各スワップでコンフィグを読み込むためです。 管理者ができないこと:
  • プールを 1 つの AmmConfig から別の AmmConfig に移動する。
  • 既に蓄積されたフィーを遡及的に再価格設定する。
  • protocol_owner / fund_owner 署名者なしでフィーを回収する。

実行中のプールからフィーを読み取る

CLMM および AMM v4 との比較

/ja/reference/fee-comparison を参照して、並列マトリックスを確認してください。概要:
  • AMM v4 は固定 0.25% のトレードフィーを使用し、異なる LP/プロトコル分割とファンドフィーなし。
  • CLMM フィーはティック間隔ティアごと、ポジションごと(プールごとではなく)で蓄積され、DecreaseLiquidity または CollectFees 経由で請求されます。

次に進むべき場所

ソース: