このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
2 つの独立したフィー、4 つの宛先
CPMM はすべてのスワップに対して 2 つの独立した料率のフィー を課します:- トレードフィー —
AmmConfig.trade_fee_rateで徴収され、3 つの宛先に分割されます:- LP シェア — ヴォルト内に留まり、
kを増加させます。LP トークンをバーンすることで暗黙的に請求されます。 - プロトコルシェア —
PoolState.protocol_fees_token*に蓄積され、protocol_ownerがCollectProtocolFee経由で回収します。 - ファンドシェア —
PoolState.fund_fees_token*に蓄積され、fund_ownerがCollectFundFee経由で回収します。
- LP シェア — ヴォルト内に留まり、
- クリエイターフィー(オプション、プール単位) —
AmmConfig.creator_fee_rateで徴収され、トレードフィーとは 独立 してPoolState.creator_fees_token*に蓄積されます。クリエイターはCollectCreatorFee経由で回収するか、任意のペイヤーが宛先制約付きのCollectCreatorFeePermissionlessパスをトリガーできます。プールがenable_creator_fee = trueで作成された場合のみアクティブです。
trade_fee からのみ導出され、creator_fee からは決して導出されません。creator_fee_rate = 1000(0.10%)と trade_fee_rate = 2500(0.25%)を持つプールは、クリエイターフィーオンインプットスワップで入力の合計 0.35% を徴収し、そのうちクリエイターが 0.10% を保持し、トレードフィーバケットが 0.25% を取得します。
トレードフィー料率(trade_fee_rate、protocol_fee_rate、fund_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_rateとfund_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 = true で creator_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_xとcurve_yは変わりません。- LP フィーはカウンターに蓄積されません。 それらはヴォルト残高に暗黙的です。蓄積された LP フィーに対する LP の権利は、LP トークンをバーンすることで行使されます(つまり、
Withdraw経由)—CollectLpFeeはありません。
Token-2022 転送フィーとの相互作用
Token-2022 転送フィーは CPMM ではなく ミント によって適用されます。それらはすべてのトークン転送(スワップ、デポジット、ウィズドロー、Collect* スイープ)に作用します。CPMM のトレードフィー計算は、実際にヴォルトに 着地した 金額に対して計算されます。つまり、入力ミントの転送フィー(存在する場合)を差し引いたものです。
したがって、最悪の場合、ユーザーは入力額確定スワップで 3 つの異なる税を支払います:
- 入力ミントの転送フィー(
amount_inに対して、ミントのフィー権限に)。 - プールの
trade_fee(残りに対して、上記のように分割)。 - 出力ミントの転送フィー(
amount_outに対して、ミントのフィー権限に)。
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 マルチシグです。
/ja/security/admin-and-multisig を参照してください。元のクリエイターのみパスでは、クリエイター署名者は PoolState に記録されたアカウントです。パーミッションレスパスでは、呼び出し元は欠落しているクリエイター ATA を作成するために支払います。プログラムは creator を pool_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経由で請求されます。
次に進むべき場所
/ja/products/cpmm/math— トレードフィー控除がカーブにどのようにプラグインされるか。/ja/products/cpmm/instructions—Collect*命令アカウントリスト。/ja/algorithms/token-2022-transfer-fees— プールトレードフィーとミント転送フィーを正しく組み合わせる方法。

