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

# 2026-07-30 — CLMM: разрешённые мультипулы и защита от замороженных счётов в лимитных ордерах

> Два обновления программы CLMM: CreatePermissionedPool позволяет авторизованному оператору создавать несколько пулов для одной пары через seed_index, встроенный в PDA пула, а OpenLimitOrder теперь принимает счета выходной стороны, чтобы отклонять ордеры с замороженным входным или выходным счётом токена.

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

  [Открыть английскую версию →](/reference/changelog/2026-07-30-clmm-permissioned-pools)
</Info>

Этот релиз документирует два изменения в программе CLMM. Оба являются дополнительными и обратно совместимыми: существующие пулы, позиции и открытые ордеры не затронуты, а классические пути `CreatePool` / `CreateCustomizablePool` остаются неизменными.

## TL;DR для интеграторов

* **ID пулов теперь могут быть неканоническими, за шлюзом разрешений.** Исторически существовал ровно один адрес CLMM пула на `(amm_config, token_mint_0, token_mint_1)` — PDA семена его фиксировали. Новая инструкция **`CreatePermissionedPool`** встраивает предоставленный клиентом ненулевой `seed_index: u16` в семена PDA пула, позволяя авторизованному оператору создавать **несколько пулов для одной пары и уровня комиссии**, каждый по своему адресу. Поскольку произвольные адреса пулов — это привилегированная возможность, плательщик должен иметь **`Permission`** PDA, выданный администратором. Две административные инструкции, **`CreatePermissionPda`** и **`ClosePermissionPda`**, управляют этими разрешениями.
* **`OpenLimitOrder` теперь проверяет выходную сторону.** Инструкция принимает три дополнительных счета — `output_token_account`, `output_vault`, `output_vault_mint` — и отклоняет ордер с `NotApproved`, если счет входного или выходного токена владельца заморожен. Это гарантирует, что заполнение может быть доставлено, что важно для разрешённых / замороженных по умолчанию токенов Token-2022. Клиенты, построенные на основе старого односторонного списка счетов, должны добавить три выходных счета.

## Что изменилось в программе

### Новая инструкция: `CreatePermissionedPool`

Та же форма и параметры, что и `CreateCustomizablePool` (она принимает те же `CreateCustomizableParams`, поэтому односторонняя комиссия и опция динамической комиссии доступны), плюс:

* Аргумент `seed_index: u16`, который **должен быть ненулевым**. Он добавляется (little-endian) к семенам PDA пула:
  `["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]`.
* Счет `permission`: PDA `["permission", payer]`. Anchor отклоняет вызов, если он не существует или не принадлежит программе — его простое существование является авторизацией.
* Счет `pool_creator`, записанный как `pool_state.owner`, который может отличаться от платящего `payer`.

`seed_index = 0` остаётся зарезервированным для устаревших пулов: для них компонент семени сворачивается в пусто, воспроизводя классический четырёхсемянный адрес, поэтому ни один существующий адрес пула не меняется.

См. [Instructions → CreatePermissionedPool](/ru/products/clmm/instructions).

### Новый счет: `Permission`

Счет возможности, существование которого **является** разрешением. Он хранит только `authority`, для которого был создан (плюс заполнение). Семена PDA: `["permission", authority]`. Он предоставляет право вызывать `CreatePermissionedPool` и ничего больше — он не может перемещать средства, менять комиссии или изменять какой-либо пул. См. [Accounts → Permission](/ru/products/clmm/accounts).

### Новые административные инструкции: `CreatePermissionPda` / `ClosePermissionPda`

* `CreatePermissionPda` инициализирует `Permission` PDA для данного `permission_authority`.
* `ClosePermissionPda` закрывает его и возвращает ренту вызывающему, отзывая разрешение. Пулы, уже созданные под этим разрешением, не затронуты.

Обе принимают либо публичный ключ программы `admin`, **либо** выделенный ключ `permission_pda_admin` (отдельная константа на mainnet и devnet). См. [Admin keys and multisig → CLMM](/ru/security/admin-and-multisig).

### `PoolState`: поле `seed_index`

Два байта были выделены из существующей области заполнения (`padding: [u8; 6]` → `seed_index: [u8; 2]` + `padding: [u8; 4]`) сразу после `fee_on`. **Общий размер счета не изменился, и миграция индексатора не требуется.** Для пулов, созданных через `CreatePool` / `CreateCustomizablePool`, `seed_index` равен `[0, 0]`; для разрешённых пулов он содержит выбранный создателем индекс и требуется для повторного получения адреса пула в автономном режиме.

### `OpenLimitOrder`: счета выходной стороны и защита от замороженных счётов

Список счетов `OpenLimitOrder` получает `output_token_account`, `output_vault` и `output_vault_mint`. Они используются только для проверки — выход не дебетуется при открытии. Обработчик теперь требует, чтобы **ни** входной, **ни** выходной счет токена не был заморожен, в противном случае возвращает `NotApproved` (тот же код уже возвращался, когда пул имел отключённый своп или лимитный ордер). Это закрывает пробел, где ордер мог быть открыт против счета токена, который никогда не мог получить заполнение (например, ещё не разморозившийся счет для замороженного по умолчанию токена Token-2022).

См. [Instructions → OpenLimitOrder](/ru/products/clmm/instructions).

## Коды ошибок

Нет новых кодов ошибок. Существующий `6000 NotApproved` теперь дополнительно охватывает замороженный входной/выходной счет токена и случаи отключённого своп/лимитного ордера на `OpenLimitOrder`, а также случай "подписант не является ни `admin`, ни `permission_pda_admin`" на инструкциях разрешений. Таблица кодов ошибок и нумерация в остальном не изменились с [релиза 2026-05-18](/ru/reference/changelog/2026-05-18-clmm-limit-orders). См. [Error codes → CLMM](/ru/reference/error-codes).

## Заметки по миграции

* **Чтение адресов пулов**: не предполагайте один пул на `(config, mint0, mint1)`. Пара теперь может иметь канонический пул плюс один или несколько разрешённых пулов по адресам, полученным из `seed_index`. Перечисляйте пулы из API / индексатора вместо получения одного PDA и сохраняйте `seed_index`, когда вам нужно повторно получить адрес разрешённого пула.
* **Размещение лимитных ордеров**: добавьте три счета выходной стороны в вашу транзакцию `OpenLimitOrder` и выведите чёткое сообщение, когда `NotApproved` возвращается для замороженного счета.
* **Без разрыва размера счета или макета**: `PoolState` имеет тот же размер; вышедшие в отставку байты заполнения теперь содержат `seed_index`.

## Обновлённые страницы

* `products/clmm/overview` — заметка "What's new" о разрешённых мультипулах и защите лимитного ордера.
* `products/clmm/instructions` — новый раздел `CreatePermissionedPool`, `CreatePermissionPda` / `ClosePermissionPda` в таблице инструкций и примечании об административном шлюзе, а также обновлённый список счетов `OpenLimitOrder` / предусловия / ошибки.
* `products/clmm/accounts` — `Permission` в инвентаре и его собственный раздел, поле `PoolState.seed_index`, помощники для получения PDA (`derivePermissionedPool`, `derivePermission`) и краткая справка по жизненному циклу.
* `security/admin-and-multisig` — новая строка `permission_pda_admin` и пояснение области разрешений в таблице ролей CLMM.
* `reference/error-codes` — расширенное описание `NotApproved`.

**Проверено против**:

* исходного кода `raydium-clmm` (`create_permissioned_pool.rs`, `admin/create_permission_pda.rs`, `admin/close_permission_pda.rs`, `states/permission.rs`, `states/pool.rs`, `limit_order/open_limit_order.rs`, `lib.rs`).
