> ## 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 и протоколом, генерация PnL из заполнений OpenBook и способ, которым администратор собирает накопленные комиссии протокола.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/products/amm-v4/fees)
</Info>

## Единственный опубликованный уровень

В отличие от CPMM и CLMM, AMM v4 **не имеет аккаунта `AmmConfig`**. Комиссии хранятся непосредственно в структуре `AmmInfo.fees` каждого пула и фиксируются при создании пула. Значения по умолчанию, которые охватывают практически все активные пулы AMM v4:

| Поле в блокчейне                                    | По умолчанию  | Значение                                                                                                                                         |
| --------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `swap_fee_numerator / swap_fee_denominator`         | `25 / 10_000` | **Валовая торговая комиссия на AMM-path свопах: 0,25% от объёма входа.**                                                                         |
| `trade_fee_numerator / trade_fee_denominator`       | `25 / 10_000` | Остаток после удаления OpenBook (исторически использовалось для ценообразования лимитных ордеров). По умолчанию такая же `0,25%` как `swap_fee`. |
| `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)        // 0.25% of amount_in
pnl_portion = gross_fee * pnl_numerator / pnl_denominator                        // 12% of gross_fee
lp_portion  = gross_fee − pnl_portion                                            // 88% of gross_fee
```

* `lp_portion` остаётся в хранилище и способствует следующему `k`. LP получают её, позже сжигая LP-токены.
* `pnl_portion` увеличивает `AmmInfo.state_data.need_take_pnl_coin` или `need_take_pnl_pc` в зависимости от того, какая сторона является входом своп.

Тот же трюк сохранения инварианта, что и в CPMM: сумма PnL физически находится в хранилище, но вычитается из резервов, используемых в кривой, поэтому `TakePnl` перемещает токены без изменения цены.

## PnL из OpenBook (историческое)

<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. Эта операционная связь была одной из мотиваций для отхода от гибридного дизайна.

Этот PnL OpenBook **не был** тем же, что протокольная комиссия 0,03%. PnL OpenBook напрямую увеличивал резервы пула (принося пользу LP + протоколу пропорционально разделению комиссии), в то время как протокольная комиссия 0,03% была помечена специально для сбора администратором. Без стороны OpenBook единственное накопление комиссии сегодня — это 0,25% на AMM свопах и его разделение 22/3.

## Сбор

Администратор (мультиподпись Raydium) вызывает `WithdrawPnl` для сбора `need_take_pnl_*` в аккаунты «владельца PnL» на уровне пула, настроенные в `AmmConfig` программы (другой, ограниченный программой конфиг — не CPMM-подобный AmmConfig для каждого пула). Сбор:

1. Передаёт `need_take_pnl_coin` / `need_take_pnl_pc` из хранилищ пула в пункт назначения PnL.
2. Обнуляет счётчики.

Больше нет шага урегулирования OpenBook. Если баланса хранилища недостаточно для покрытия накопленного PnL, инструкция теперь возвращает `TakePnlError` напрямую. Операция не перемещает кривую — LP не должны видеть никакого изменения цены при вызове `WithdrawPnl`. Обратите внимание, что макет аккаунта `WithdrawPnl` изменился в обновлении 2026-07 (см. [инструкции](/ru/products/amm-v4/instructions#withdrawpnl-takepnl)).

## Погашение комиссии LP

Нет выделенной инструкции «собрать комиссии LP». Комиссии LP накапливаются в хранилищах и увеличивают `k` со временем; LP реализуют их, сжигая LP-токены через `Withdraw`. Стоимость LP-токена растёт монотонно по мере роста `(coin_reserve_effective, pc_reserve_effective)`.

## Визуализация: куда идёт 1000 USDC объёма

На своп с преобладанием USDC в размере \$1000 против пула с параметрами по умолчанию:

```
Валовая торговая комиссия (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 вводит строку фонда, вырезая её из того, что была бы доля LP в эквивалентном уровне AMM v4.

## Таблица сравнения

|                         | 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\_\* | Глобальное + по-тику + по-позиции |

Полная матрица в [`reference/fee-comparison`](/ru/reference/fee-comparison).

## Примечания для интеграторов

* **Котировки.** Получите `AmmInfo` через SDK или `api-v3.raydium.io/pools/info/ids`. Резервы теперь только из хранилища, поэтому вы можете котировать непосредственно по балансам хранилища — просто помните вычесть `need_take_pnl_*` (накопленный PnL находится в хранилище, но исключён из кривой).
* **Устаревшие параметры комиссии.** В принципе `SetParams` может изменить `swap_fee_numerator`, но на практике мультиподпись Raydium не изменила значения по умолчанию ни для одного активного пула. Тем не менее, всегда читайте из состояния в блокчейне, а не жёстко кодируйте.
* **Нет вознаграждений.** AMM v4 не поддерживает эмиссии вознаграждений на уровне пула. Экосистемные фермы наследия (Farm v3 / v5 / v6) — это эквивалент уровня стейкинга — см. [`products/farm-staking`](/ru/products/farm-staking).

## Что дальше

* [`products/amm-v4/math`](/ru/products/amm-v4/math) — вывод торговой комиссии внутри кривой.
* [`products/amm-v4/instructions`](/ru/products/amm-v4/instructions) — списки аккаунтов `WithdrawPnl` / `SetParams`.
* [`reference/fee-comparison`](/ru/reference/fee-comparison) — матрица рядом.

Источники:

* [Raydium AMM program — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Поля числителя/знаменателя комиссии AMM v4 в блокчейне (проверено против аккаунтов `AmmInfo` в mainnet).
