Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
OpenPositionV2 или OpenPositionWithToken22Nft и хотя бы один базовый vault mint имеет freeze authority из жёстко закодированного списка ограниченных эмитентов.
TL;DR для интеграторов
- Новые mint позиционных NFT имеют freeze authority, но не заморожены по умолчанию.
OpenPosition,OpenPositionV2иOpenPositionWithToken22Nftустанавливаютpool_stateпозиции как freeze authority mint. Mint authority всё ещё удаляется после создания единственного 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как первый дополнительный счёт. Его отсутствие возвращает CLMMAccountLack; передача неправильного пула возвращаетNotApproved. - Существующие позиции не затронуты. Обновление не изменяет ретроактивно mint authorities NFT или не замораживает существующие счёта токенов.
- Нет изменений в макете состояния CLMM или объявленном списке счётов IDL.
PoolState,PersonalPositionStateи аргументы инструкций остаются совместимы по байтам. Требование пути закрытия передаётся черезremaining_accounts.
Логика срабатывания
Программа оценивает два vault mint при открытии:frozen_position_nft_authorities::IDS и содержит одну запись. Текущие ключи mainnet-beta и devnet находятся в reference/program-addresses.
Проверка выполняется в общем обработчике открытия позиции только когда предоставлены счёта vault mint. Это означает:
Изменения authority позиционного NFT
До этого обновления вновь созданный классический SPL mint позиционного NFT не сохранял freeze authority. После обновления каждый новый mint позиционного NFT называет свой пул как freeze authority, включая позиции в обычных пулах. Это установление authority само по себе не замораживает счёт токена NFT; обычные и несовпадающие позиции остаются разморожены. Использование PDA пула вместо глобального ключа администратора или эмитента сужает authority до одного пула. Внешняя сторона не может подписать как PDA, и CLMM не предоставляет инструкцию общего назначения для замораживания или разморозки произвольных счётов позиций. Новый код использует authority только в двух местах:- Заморозка сразу после создания mint когда проверка базового эмитента совпадает.
- Разморозка во время
ClosePositionнепосредственно перед сжиганием.
Миграция ClosePosition
Шесть объявленных счётов не изменяются. Для замороженного NFT добавьте пул как первый дополнительный счёт:
PoolState, выводит семена подписи пула и выполняет:
Матрица совместимости
Нет новых вариантов пользовательских ошибок CLMM или числовых сдвигов. Нативная ошибка
AccountFrozen SPL Token отклоняет попытки передачи или изменения владельца.
Обновлённые страницы
products/clmm/overview— сводка релиза и оговорка об ограниченной передаваемости.products/clmm/ticks-and-positions— модель authority, триггер, возможности владельца и предупреждение о миграции закрытия.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— замороженные позиции не могут передаваться в lock escrow.security/oracle-and-token-risks/security/attack-vectors— границы эмитента и риска передачи.reference/token-2022-support— различие между разрешением пула и хранением позиции.reference/error-codes— расширенные причиныAccountLackиNotApproved.reference/program-addresses— ключи совпадения authority ограниченного эмитента.reference/fee-comparison/reference/glossary— исключения передаваемости.
- Ветка pre-release CLMM
feat/position-nft-freezeвecb157760776f83f97507fa78c6e32cfb30d92a9. - Коммиты
2e95310(блокировка NFT ограниченного эмитента) иecb1577(freeze authority с областью пула), сравнены с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.

