このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
不変式
プールはcoin_reserve × pc_reserve = k を維持します。ここで(2026-07 OpenBook 削除後):
- リザーブは現在 ボールトのみ です。過去のオープンオーダー項(プールが OpenBook リミットオーダーとしてエスクローしていたトークン)は削除されました。削除前からずっと実質的にはゼロでした。オンチェーンのボールト残高から直接
kを計算できます。 - PnL 累積(
need_take_pnl_*)が差し引かれるため、管理者がフィーを回収する際に曲線が保存されます。CPMM のprotocol_fees_*除外と同じ原理です。
calc_total_without_take_pnl_no_orderbook で計算します(古いオーダーブック対応バージョンは削除されました)。
すべての Swap* 操作は、LP のフィー分をリザーブに戻した後、k' ≥ k を強制します。
フィー規約
AMM v4 は CPMM / CLMM の1/1_000_000 規約ではなく、比率フィー(分子/分母ペア)を使用します。オンチェーンの Fees 構造体(プログラムソースの Fees::initialize を参照)のデフォルトは:
- 総スワップフィー:
swap_fee = amount_in × 25 / 10_000 = 0.25%(総入力の)。 - プロトコル分:
pnl_numerator / pnl_denominator = 12 / 100 = 12%スワップフィーの、つまり0.25% × 12% = 0.03%(ボリュームの)。この分は PnL カウンターに累積され、WithdrawPnlで回収されます。 - LP 分: スワップフィーの残り
88%、つまり0.25% × 88% = 0.22%(ボリュームの)。プール内に留まり、kを増加させます。 - ファンド分なし。 AMM v4 には CPMM/CLMM のファンドフィー分割がありません。
pnl_numerator / pnl_denominator は取引ボリュームではなく フィーの 分数であることに注意してください。これらのフィールド名の一般的な誤読です。
trade_fee_numerator / trade_fee_denominator(同じく 25 / 10_000)は、OpenBook 統合が AMM のリミットオーダーグリッドのフィー込み価格を計算する際に歴史的に使用されていました。OpenBook コードが削除されたため、このフィールドは遺物です。アクティブなスワップフィーは swap_fee_* です。
これらのデフォルトからの逸脱は稀ですが、いくつかのレガシープールに存在します。見積もりを提示する前に、常に AmmInfo.fees からフィーを読み取ってください。
直接スワップ数学(AMM パス)
最も単純なケース:ユーザーが OpenBook と相互作用せずにプールのボールトに対してスワップします。プールの内部リザーブ(オンブック配置を含む)が分母です。 SwapBaseIn(正確な入力):MonitorStep / 暗黙的決済パスは削除されました。
SwapBaseOut(正確な出力):
オーダーブック相互作用(歴史的)
削除されました。 このセクションで説明されているグリッド構築は、AMM v4 が元々曲線を OpenBook マーケットにミラーリングした方法を反映しています。OpenBook 統合(
MonitorStep クランクと build_orders グリッドロジックを含む)は プログラムから削除されました(2026-07 アップグレード)。以下の数学は、オンチェーンの target_orders / amm_open_orders アカウントがかつてサイズ設定されていた内容の歴史的文脈として保存されています。AmmInfo パラメータから計算されました:
depth— 片側あたりの価格レベル数。amount_wave— レベルあたりのサイズの基本単位。min_size、coin_lot_size、pc_lot_size— OpenBook マーケット制約。state_data.swap_acc_coin_fee、swap_acc_pc_fee— 最後のTakePnl以降の累積フィーカウンター。
build_orders で計算された target_orders によって決定され、各 MonitorStep で amm_open_orders と比較されます。相違があれば、キャンセルと新規ポストが発生します。OpenBook で新たに約定したオーダーは、OpenBook 側をリフレッシュする次の操作でプールボールトに決済されます。
インテグレーターがグリッドを計算する必要はめったにありません(Raydium キーパーがそれを維持します)が、以下を知ることは有用です:
- 重要な オンブック リクイディティを持つプールは、そのリクイディティが
kに貢献し、アイドル状態ではありません。 - 古い OpenBook マーケット(イベントキューが満杯、クランクがブロック)はグリッド更新を防ぎます。その後、AMM は次のクランクまで、見えるオーダーブックから逸脱した価格を引用できます。
決済ステップ(PnL)
0.03% プロトコル分はstate_data.need_take_pnl_coin と state_data.need_take_pnl_pc に累積されます。TakePnl はこれらの金額をボールトから管理者指定の宛先に移動し、カウンターをゼロにします。
重要な性質:不変式のリザーブは常に 累積 PnL を差し引いて 計算されるため、TakePnl は曲線を移動させません。これは CPMM 規約と一致します。
実例
プール状態:coin_reserve = 1_000_000_000_000(1,000,000 コイン側;6 デシマル)pc_reserve = 2_000_000_000_000(2,000,000 pc 側;6 デシマル)- フィー:デフォルト
swap = 25/10_000、pnl = 3/10_000。
SwapBaseIn 正確入力 1_000_000_000 コイン(1,000 コイン)。
2_200_000)はどこにも分割されません — それは単に k' を上昇させる残差です。
精度ルール
- リザーブ乗算は
u128を使用;最終除算はゼロ方向に丸めます。 swap_feeは切り上げ(プールが過少請求しないように)。SwapBaseOutのamount_inは切り上げ(ユーザーが過少支払いしないように)。- 極端なリザーブ比率を持つプールは非常に小さい入力で
ZeroTradingTokensに当たる可能性があります。CPMM と同じ規約です。
CPMM との制限事項
- AMM v4 のリザーブはボールトのみなので、ボールト残高(
need_take_pnl_*を差し引いたもの)から直接見積もることが できます — AMM がロックしていたopen_orders.free/open_orders.locked金額を追加する以前の要件はもはや適用されません。SDK / API 見積もりが最も簡単なオプションのままです。 - AMM v4 は構造化されたオンチェーン TWAP を公開していません。AMM v4 バックアップ価格を必要とする外部コンシューマーは、トレードログから自分で計算する必要があります。
- Token-2022 はサポートされていません。
次のステップ
products/amm-v4/instructions—SwapBaseIn、Depositなどがどこに組み込まれるか。products/amm-v4/fees— 完全なフィーメカニクス、TakePnlの詳細。algorithms/constant-product— 共有導出。
- Raydium AMM プログラムソース —
raydium-io/raydium-amm - Raydium SDK v2
Liquidityモジュール

