> ## 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: 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)        // 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` / `TakePnl` для сбора `need_take_pnl_*` на счета владельца PnL уровня пула, настроенные в `AmmConfig` программы (другая конфигурация уровня программы — не специфичная для каждого пула конфигурация в стиле CPMM). Сбор:

1. Сначала рассчитывает все ожидающие заполнения OpenBook. *(Нет-оп, теперь что OpenBook неактивна.)*
2. Переводит `need_take_pnl_coin` / `need_take_pnl_pc` из хранилищ пула в пункт назначения PnL.
3. Обнуляет счётчики.

Операция не смещает кривую. LP не должны видеть изменение цены во время вызова `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\_\* | Глобально + per-tick + per-position |

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

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

* **Цитирование.** Получайте `AmmInfo` через SDK или `api-v3.raydium.io/pools/info/ids`. **Не** вычисляйте собственное предложение против сырых балансов хранилища — суммы в условном доверительном управлении OpenBook и исключение PnL оба отводят эффективные резервы от того, что показывает `getTokenAccountBalance`.
* **Устаревшие параметры комиссии.** В принципе `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 — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Поля числителя/знаменателя комиссий AMM v4 в цепи (проверено против учётных записей mainnet `AmmInfo`).
