> ## 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.

# AMM v4 费用

> 0.25% 交易费、其 LP/协议分配、OpenBook 成交产生的 PnL，以及管理员如何清扫累积的协议费用。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/products/amm-v4/fees)
</Info>

## 唯一发布的费率层级

与 CPMM 和 CLMM 不同，AMM v4 **没有 `AmmConfig` 账户**。费用直接存储在每个池的 `AmmInfo.fees` 结构中，在池创建时固定。以下是覆盖几乎所有活跃 AMM v4 池的默认值：

| 链上字段                                                | 默认值           | 含义                                                                        |
| --------------------------------------------------- | ------------- | ------------------------------------------------------------------------- |
| `swap_fee_numerator / swap_fee_denominator`         | `25 / 10_000` | **AMM 路径交换的总交易费：输入量的 0.25%。**                                             |
| `trade_fee_numerator / trade_fee_denominator`       | `25 / 10_000` | OpenBook 移除后的遗留字段（历史上用于限价单定价）。默认与 `swap_fee` 相同，为 0.25%。                  |
| `pnl_numerator / pnl_denominator`                   | `12 / 100`    | **协议的交易费份额：12%** — 即交易量的 `0.25% × 12% = 0.03%`。累积到 `need_take_pnl_*` 计数器。 |
| `min_separate_numerator / min_separate_denominator` | `5 / 10_000`  | 费用分割舍入逻辑使用的内部精度下限。                                                        |

注意 `pnl_numerator / pnl_denominator` 是交易费的一个分数，**而不是** 交易量的分数 — 这是常见的误读。LP 份额是补集（费用的 `88%` = 交易量的 `0.22%`），是隐含的；没有单独的"LP 份额"分子。

少数早期池使用了不同的分子创建；在引用之前始终读取 `AmmInfo.fees`。

**没有基金费** 和 **没有创建者费** 行：这些是 CPMM/CLMM 的发明，在 AMM v4 的原始费用模型中不存在。

## 分割如何计算

在每次交换时，池从输入金额中收取总交易费，然后分配：

```
gross_fee   = ceil(amount_in * swap_fee_numerator / swap_fee_denominator)        // amount_in 的 0.25%
pnl_portion = gross_fee * pnl_numerator / pnl_denominator                        // gross_fee 的 12%
lp_portion  = gross_fee − pnl_portion                                            // gross_fee 的 88%
```

* `lp_portion` 留在金库中，对下一个 `k` 有贡献。LP 通过稍后赎回 LP 代币来获得它。
* `pnl_portion` 增加 `AmmInfo.state_data.need_take_pnl_coin` 或 `need_take_pnl_pc`，取决于交换输入是哪一侧。

与 CPMM 相同的不变量保护技巧：PnL 金额物理上位于金库中，但从曲线中使用的储备中减去，因此 `TakePnl` 移出代币而不改变价格。

## OpenBook 产生的 PnL（历史）

<Note>
  **已移除。** OpenBook 集成已从程序中移除，因此本节描述的*第二个* PnL 流不再生成。`total_pnl_{coin,pc}` 计数器现在是已弃用的字段 — 它们保持冻结的历史值，永远不会更新。0.03% 协议费路径（上文）不受影响，仍然活跃。
</Note>

历史上，AMM v4 有一个*第二个*类似费用的收入流：当其在 OpenBook 上的限价单成交时，池可能是成交的接收方，并赚取或支付市场的做市商/接收方价差。这些 PnL 事件在 `MonitorStep` 期间结算到池金库中，程序将其记入 `state_data.total_pnl_{coin,pc}` 作为信息计数器。

* 当池的发布网格在曲线价格周围正确校准时，OpenBook 成交往往对池**费用为正** — AMM 实际上在 OpenBook 上做市并赚取做市商回扣。
* 当 OpenBook 暂停或事件队列填满时，池可能会持有在不利价格成交的陈旧订单，产生负 PnL。这种操作耦合是放弃混合设计的动机之一。

这个 OpenBook PnL **不同于** 0.03% 协议费。OpenBook PnL 直接增加池储备（按费用分割比例使 LP 和协议受益），而 0.03% 协议费专门标记为管理员清扫。随着 OpenBook 一侧关闭，今天唯一的费用累积是 AMM 交换上的 0.25% 及其 22/3 分割。

## 收集

管理员（Raydium 多签）调用 `WithdrawPnl` 将 `need_take_pnl_*` 清扫到程序的 `AmmConfig` 上配置的池级"PnL 所有者"账户（一个不同的、程序范围的配置 — 不是每池的 CPMM 风格 AmmConfig）。清扫：

1. 从池金库将 `need_take_pnl_coin` / `need_take_pnl_pc` 转移到 PnL 目标。
2. 将计数器清零。

不再有 OpenBook 结算步骤。如果金库余额不足以覆盖累积的 PnL，指令现在直接返回 `TakePnlError`。该操作不移动曲线 — LP 在 `WithdrawPnl` 调用中不应看到任何价格变化。注意 `WithdrawPnl` 账户布局在 2026-07 升级中改变（见[指令](/zh/products/amm-v4/instructions#withdrawpnl-takepnl)）。

## LP 费用赎回

没有专门的"收集 LP 费用"指令。LP 费用在金库中累积并随时间增加 `k`；LP 通过 `Withdraw` 燃烧 LP 代币来实现它们。LP 代币的价值随着 `(coin_reserve_effective, pc_reserve_effective)` 增长而单调增长。

## 可视化：1,000 USDC 交易量的去向

在针对默认参数池的 1,000 美元 USDC 重交换中：

```
总交易费 (0.25%):   $2.50
  LP 份额   (0.22%):       $2.20   → 留在池中，提高 k
  PnL 份额  (0.03%):       $0.30   → need_take_pnl_pc，由 TakePnl 清扫
发送给用户的余额：   $997.50   (减去曲线驱动的价格影响)
```

与 CPMM `AmmConfig[0]`（0.25% 层级，无创建者费）比较：LP 获得 \$2.10，协议 \$0.30，基金 \$0.10。CPMM 通过从 AMM v4 等效层级中本应属于 LP 的部分中切割出来引入基金行。

## 比较表

|         | AMM v4                    | CPMM `index=0`                            | CLMM `index=2`    |
| ------- | ------------------------- | ----------------------------------------- | ----------------- |
| 交易费     | 0.25%                     | 0.25%                                     | 0.25%             |
| LP      | 0.22%                     | 0.21%                                     | 按排放量变化            |
| 协议      | 0.03%                     | 0.03%                                     | 按层级               |
| 基金      | N/A                       | 0.01%                                     | 按层级               |
| 创建者（可选） | N/A                       | 默认为 0                                     | N/A               |
| 费用位置    | 池金库 + need\_take\_pnl\_\* | 池金库 + protocol\_fees\_\* + fund\_fees\_\* | 全局 + 按 tick + 按头寸 |

完整矩阵在 [`reference/fee-comparison`](/zh/reference/fee-comparison)。

## 集成商注意事项

* **报价。** 通过 SDK 或 `api-v3.raydium.io/pools/info/ids` 获取 `AmmInfo`。储备现在仅限金库，因此你可以直接针对金库余额报价 — 只需记住减去 `need_take_pnl_*`（累积的 PnL 保存在金库中但从曲线中排除）。
* **陈旧的费用参数。** 原则上 `SetParams` 可以改变 `swap_fee_numerator`，但实际上 Raydium 多签从未改变任何活跃池的默认值。不过，始终从链上状态读取而不是硬编码。
* **无奖励。** AMM v4 不支持池上奖励排放。遗留生态系统农场（Farm v3 / v5 / v6）是质押层等价物 — 见 [`products/farm-staking`](/zh/products/farm-staking)。

## 接下来去哪里

* [`products/amm-v4/math`](/zh/products/amm-v4/math) — 曲线内的交易费推导。
* [`products/amm-v4/instructions`](/zh/products/amm-v4/instructions) — `WithdrawPnl` / `SetParams` 账户列表。
* [`reference/fee-comparison`](/zh/reference/fee-comparison) — 并排矩阵。

来源：

* [Raydium AMM 程序 — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* 链上 AMM v4 费用分子/分母字段（针对主网 `AmmInfo` 账户验证）。
