Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
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).

