> ## 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-08-17 — CLMM: блокировка позиционных NFT с ограничением эмитента

> CLMM условно блокирует новый счёт позиционного NFT только когда путь открытия V2 находит базовый mint, чей орган блокировки совпадает со списком ограниченных эмитентов.

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

  [Открыть английскую версию →](/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze)
</Info>

Этот релиз добавляет условный путь неперевод­имости для выбранных пулов с KYC-ограниченными эмитентами. Он не блокирует каждую новую позицию, не замораживает активы пула и не препятствует владельцам позиций управлять ликвидностью. PDA пула CLMM становится органом блокировки для каждого нового mint позиционного NFT, но счёт токена NFT остаётся разблокированным по умолчанию. Программа блокирует его только когда позиция использует `OpenPositionV2` или `OpenPositionWithToken22Nft` и хотя бы один базовый vault mint имеет орган блокировки из жёстко закодированного списка ограниченных эмитентов.

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

* **Новые mint позиционных NFT имеют орган блокировки, но не заморожены по умолчанию.** `OpenPosition`, `OpenPositionV2` и `OpenPositionWithToken22Nft` устанавливают `pool_state` позиции как орган блокировки mint. Орган выпуска по-прежнему удаляется после выпуска единственного NFT.
* **Блокировка требует пути V2 и совпадения эмитента.** `OpenPositionV2` и `OpenPositionWithToken22Nft` проверяют `vault_0_mint.freeze_authority` и `vault_1_mint.freeze_authority`. Новый счёт NFT блокируется только если хотя бы один совпадает со списком программы. Без совпадения он остаётся разблокированным и переводимым.
* **Блокировка означает привязку к владельцу.** SPL Token отклоняет передачу NFT и изменение владельца счёта с собственной ошибкой `AccountFrozen`. Увеличение/уменьшение ликвидности и сбор комиссий/вознаграждений продолжают работать, когда владелец NFT подписывает.
* **Закрытие остаётся доступным.** `ClosePosition` обнаруживает заморозку счёта NFT, использует PDA пула для разморозки, затем сжигает NFT и закрывает позицию атомарно.
* **Закрытие замороженной позиции требует одного дополнительного счёта.** Клиент должен добавить `personal_position.pool_id` как первый дополнительный счёт. Его отсутствие возвращает CLMM `AccountLack`; передача неправильного пула возвращает `NotApproved`.
* **Существующие позиции не затронуты.** Обновление не изменяет ретроактивно органы выпуска NFT или не замораживает существующие счета токенов.
* **Нет изменений макета состояния CLMM или объявленного списка счетов IDL.** `PoolState`, `PersonalPositionState` и аргументы инструкций остаются совместимыми по байтам. Требование пути закрытия передаётся через `remaining_accounts`.

## Логика срабатывания

Программа оценивает два vault mint при открытии:

```rust theme={null}
must_freeze = restricted_ids.contains(vault_0_mint.freeze_authority)
           || restricted_ids.contains(vault_1_mint.freeze_authority)
```

Отсутствующий орган блокировки не совпадает. Одного совпадающей стороны достаточно. Начальный список содержит тот же орган эмитента, используемый для обнаружения активов Superstate в CLMM. Текущие ключи mainnet-beta и devnet находятся в [`reference/program-addresses`](/ru/reference/program-addresses#clmm-restricted-issuer-freeze-authorities).

Проверка выполняется в общем обработчике открытия позиции только когда предоставлены счета vault mint. Это означает:

| Путь открытия                | Программа позиционного NFT | Поведение блокировки ограниченного эмитента                                                               |
| ---------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------- |
| `OpenPosition` V1            | SPL Token                  | Не блокирует. V1 не может обслуживать активы эмитента Token-2022, на которые нацелен поставляемый список. |
| `OpenPositionV2`             | SPL Token                  | Проверяет оба vault mint и блокирует при совпадении.                                                      |
| `OpenPositionWithToken22Nft` | Token-2022                 | Проверяет оба vault mint и блокирует при совпадении.                                                      |

## Изменения органа позиционного NFT

До этого обновления вновь созданный классический mint позиционного NFT SPL Token не сохранял орган блокировки. После обновления каждый новый mint позиционного NFT назначает свой пул органом блокировки, включая позиции в обычных пулах. Это назначение органа само по себе не блокирует счёт токена NFT; обычные и несовпадающие позиции остаются разблокированными.

Использование PDA пула вместо глобального администратора или ключа эмитента сужает орган до одного пула. Внешняя сторона не может подписать как PDA, и CLMM не предоставляет инструкцию общего назначения для блокировки или разморозки произвольных счетов позиций. Новый код использует орган только в двух местах:

1. Блокировка сразу после выпуска, когда проверка базового эмитента совпадает.
2. Разморозка во время `ClosePosition` непосредственно перед сжиганием.

## Миграция `ClosePosition`

Шесть объявленных счетов не изменяются. Для замороженного NFT добавьте пул как первый дополнительный счёт:

```text theme={null}
declared: nft_owner, position_nft_mint, position_nft_account,
          personal_position, system_program, token_program
remaining[0]: personal_position.pool_id   // read-only, non-signer
```

Обработчик проверяет ключ перед загрузкой `PoolState`, выводит семена подписи пула и выполняет:

```text theme={null}
разморозить счёт NFT → сжечь NFT → закрыть счёт токена NFT / состояние позиции
```

Все шаги выполняются в одной инструкции Solana и поэтому фиксируются или откатываются вместе. Передача пула при каждом закрытии безопасна: обработчик игнорирует дополнительные счета, когда счёт NFT не заморожен.

<Warning>
  **Условный разрыв клиента.** Старый клиент может успешно открыть позицию после обновления, потому что макеты счетов открытия V2 не изменились. Если эта позиция заморожена, тот же клиент может позже не закрыть её, потому что его построитель `ClosePosition` опускает дополнительный счёт пула. Обновите построитель закрытия перед тем, как позволить пользователям открывать позиции в затронутых пулах.
</Warning>

## Матрица совместимости

| Сценарий                                     | Передача NFT  | Управление ликвидностью | Построитель закрытия Legacy | Обновленный построитель закрытия    |
| -------------------------------------------- | ------------- | ----------------------- | --------------------------- | ----------------------------------- |
| Существующая позиция                         | без изменений | да                      | да                          | да                                  |
| Новая позиция, обычный пул                   | да            | да                      | да                          | да                                  |
| Новая позиция V2, пул ограниченного эмитента | нет           | да                      | ошибка `AccountLack`        | да; атомарная разморозка и сжигание |

Не вводятся новые варианты пользовательских ошибок CLMM или числовые сдвиги. Собственная ошибка `AccountFrozen` SPL Token отклоняет попытки передачи или изменения владельца.

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

* `products/clmm/overview` — сводка релиза и оговорка об ограниченной переводимости.
* `products/clmm/ticks-and-positions` — модель органа, триггер, возможности владельца и предупреждение о миграции закрытия.
* `products/clmm/accounts` — mint позиционного NFT и поведение жизненного цикла.
* `products/clmm/instructions` — постусловия открытия и путь дополнительного счета замороженного `ClosePosition`.
* `products/clmm/code-demos` — прямой пример закрытия Anchor и предупреждение о закреплённом SDK.
* `user-flows/add-remove-liquidity` — поведение ограниченной позиции для конечного пользователя.
* `user-flows/burn-and-earn` — замороженные позиции не могут передаваться в блокировку условного депозита.
* `security/oracle-and-token-risks` / `security/attack-vectors` — границы риска эмитента и передачи.
* `reference/token-2022-support` — различие между разрешением пула и хранением позиции.
* `reference/error-codes` — расширенные причины `AccountLack` и `NotApproved`.
* `reference/program-addresses` — ключи совпадения органа ограниченного эмитента.
* `reference/fee-comparison` / `reference/glossary` — исключения переводимости.

**Проверено 2026-08-13 против**:

* Ветка CLMM перед релизом `feat/position-nft-freeze` в `ecb157760776f83f97507fa78c6e32cfb30d92a9`.
* Коммиты `2e95310` (блокировка NFT ограниченного эмитента) и `ecb1577` (орган блокировки в области пула), сравненные с `master` в `51fdba2`.
* Источники программы в `instructions/{open_position,open_position_v2,open_position_with_token22_nft,close_position}.rs` и `util/token.rs`.
* `position-nft-freeze.test.ts`, охватывающий обычную переводимость, отклонение замороженной передачи/изменения владельца и потоки разморозки V2 плюс Token-2022 перед закрытием.

<Warning>
  Эта проверка охватывает ветку источника перед релизом, а не развёртывание mainnet-beta или опубликованный релиз SDK. Подтвердите развёрнутую программу, список ограниченных органов в продакшене и построитель закрытия SDK перед включением потока.
</Warning>
