Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Заменено 2026-10-22.
CreatePermissionedPool был переименован в CreateCustomizablePoolV2 и сделан разрешённым для всех, а аккаунт Permission с CreatePermissionPda / ClosePermissionPda был удалён. Эта запись описывает программу на момент 2026-07-30. См. запись от 2026-10-22.CreatePool / CreateCustomizablePool остаются неизменными.
TL;DR для интеграторов
- ID пулов теперь могут быть неканоническими, за шлюзом разрешений. Исторически существовал ровно один адрес CLMM пула на
(amm_config, token_mint_0, token_mint_1)— PDA семена его фиксировали. Новая инструкцияCreatePermissionedPoolвстраивает предоставленный клиентом ненулевойseed_index: u16в семена PDA пула, позволяя авторизованному оператору создавать несколько пулов для одной пары и уровня комиссии, каждый по своему адресу. Поскольку произвольные адреса пулов — это привилегированная возможность, плательщик должен иметьPermissionPDA, выданный администратором. Две административные инструкции,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.
Новый аккаунт: Permission
Аккаунт возможности, существование которого является разрешением. Он хранит только authority, для которого был создан (плюс заполнение). Семена PDA: ["permission", authority]. Он предоставляет право вызывать CreatePermissionedPool и ничего больше — он не может перемещать средства, изменять комиссии или мутировать какой-либо пул. См. Accounts → Permission.
Новые административные инструкции: CreatePermissionPda / ClosePermissionPda
CreatePermissionPdaинициализируетPermissionPDA для данногоpermission_authority.ClosePermissionPdaзакрывает его и возвращает ренту вызывающему, отзывая разрешение. Пулы, уже созданные под этим разрешением, не затронуты.
admin либо выделенный ключ permission_pda_admin (отдельная константа на mainnet и devnet). См. Admin keys and multisig → CLMM.
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.
Коды ошибок
Нет новых кодов ошибок. Существующий6000 NotApproved теперь дополнительно охватывает замороженный входной/выходной счёт токена и случаи отключённого своп/лимитного ордера на OpenLimitOrder, а также случай “подписант не является ни admin, ни permission_pda_admin” на инструкциях разрешений. Таблица кодов ошибок и нумерация в остальном не изменились с релиза 2026-05-18. См. Error codes → CLMM.
Примечания по миграции
- Чтение адресов пулов: не предполагайте один пул на
(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).

