Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Une entrée du journal des modifications de la documentation. Pour l’index de toutes les mises à jour, consultez
reference/changelog. Pour la chronologie historique du protocole, consultez introduction/history-and-milestones.CreatePool / CreateCustomizablePool restent inchangés.
TL;DR pour les intégrateurs
- Les ID de pool peuvent désormais être non-canoniques, derrière une porte de permission. Historiquement, il y avait exactement une adresse de pool CLMM par
(amm_config, token_mint_0, token_mint_1)— les seeds du PDA la fixaient. Une nouvelle instruction,CreatePermissionedPool, intègre unseed_index: u16non-nul fourni par le client dans les seeds du PDA du pool, permettant à un opérateur sur liste blanche de créer plusieurs pools pour la même paire et le même tier de frais, chacun à sa propre adresse. Puisque les adresses de pool arbitraires sont une capacité privilégiée, le payeur doit détenir un PDAPermissionaccordé par l’administrateur. Deux instructions administrateur,CreatePermissionPdaetClosePermissionPda, gèrent ces autorisations. OpenLimitOrdervalide désormais le côté output. L’instruction accepte trois comptes supplémentaires —output_token_account,output_vault,output_vault_mint— et rejette l’ordre avecNotApprovedsi le compte de token input ou output du propriétaire est gelé. Cela garantit que le remplissage éventuel peut être livré, ce qui importe pour les mints Token-2022 avec liste d’autorisation / gelés par défaut (tokens permissionnés). Les clients construits contre l’ancienne liste de comptes unilatérale doivent ajouter les trois comptes output.
Ce qui a changé dans le programme
Nouvelle instruction : CreatePermissionedPool
Même forme et paramètres que CreateCustomizablePool (elle accepte les mêmes CreateCustomizableParams, donc les frais unilatéraux et l’opt-in de frais dynamiques sont disponibles), plus :
- Un argument
seed_index: u16, qui doit être non-nul. Il est ajouté (little-endian) aux seeds du PDA du pool :["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]. - Un compte
permission: le PDA["permission", payer]. Anchor rejette l’appel s’il n’existe pas ou n’est pas possédé par le programme — sa simple existence est l’autorisation. - Un compte
pool_creatorenregistré commepool_state.owner, qui peut différer dupayerpayant les frais.
seed_index = 0 reste réservé aux pools hérités : pour ceux-ci, la composante seed s’effondre à vide, reproduisant l’adresse classique à quatre seeds, donc aucune adresse de pool existante ne change.
Consultez Instructions → CreatePermissionedPool.
Nouveau compte : Permission
Un compte de capacité dont l’existence est l’autorisation. Il stocke uniquement l’authority pour laquelle il a été créé (plus du remplissage). Seeds du PDA : ["permission", authority]. Il confère le droit d’appeler CreatePermissionedPool et rien d’autre — il ne peut pas déplacer des fonds, modifier les frais ou muter un pool. Consultez Accounts → Permission.
Nouvelles instructions administrateur : CreatePermissionPda / ClosePermissionPda
CreatePermissionPdainitialise un PDAPermissionpour unepermission_authoritydonnée.ClosePermissionPdale ferme et rembourse le loyer à l’appelant, révoquant l’autorisation. Les pools déjà créés sous cette autorisation ne sont pas affectés.
admin du programme soit une clé permission_pda_admin dédiée (une constante distincte sur mainnet par rapport à devnet). Consultez Admin keys and multisig → CLMM.
PoolState : champ seed_index
Deux octets ont été extraits d’une région de remplissage existante (padding: [u8; 6] → seed_index: [u8; 2] + padding: [u8; 4]) directement après fee_on. La taille totale du compte est inchangée, et aucune migration d’indexeur n’est requise. Pour les pools créés via CreatePool / CreateCustomizablePool, seed_index est [0, 0] ; pour les pools permissionnés, il porte l’index choisi par le créateur et est requis pour re-dériver l’adresse du pool hors-chaîne.
OpenLimitOrder : comptes du côté output et garde de compte gelé
La liste de comptes OpenLimitOrder gagne output_token_account, output_vault et output_vault_mint. Ils sont utilisés uniquement pour la validation — aucun output n’est débité à l’ouverture. Le gestionnaire exige désormais que ni le compte de token input ni le compte de token output ne soit gelé, retournant NotApproved sinon (le même code déjà retourné quand le pool a le swap ou l’ordre limite désactivé). Cela ferme une lacune où un ordre pouvait être ouvert contre un compte de token qui ne pouvait jamais recevoir le remplissage (par exemple, un compte pas encore dégelé pour un mint Token-2022 gelé par défaut).
Consultez Instructions → OpenLimitOrder.
Codes d’erreur
Aucun nouveau code d’erreur. Le code6000 NotApproved existant couvre désormais également le compte de token input/output gelé et les cas swap/limit-order-disabled sur OpenLimitOrder, et le cas « le signataire n’est ni admin ni permission_pda_admin » sur les instructions de permission. Le tableau des codes d’erreur et la numérotation sont autrement inchangés par rapport à la version du 2026-05-18. Consultez Error codes → CLMM.
Notes de migration
- Lecture des adresses de pool : ne supposez pas un pool par
(config, mint0, mint1). Une paire peut désormais avoir un pool canonique plus un ou plusieurs pools permissionnés à des adresses dérivées deseed_index. Énumérez les pools à partir de l’API / indexeur plutôt que de dériver un seul PDA, et stockezseed_indexquand vous avez besoin de re-dériver un pool permissionnée. - Placement d’ordres limites : ajoutez les trois comptes du côté output à votre transaction
OpenLimitOrder, et affichez un message clair quandNotApprovedest retourné pour un compte gelé. - Aucune rupture de taille de compte ou de disposition :
PoolStatea la même taille ; les octets de remplissage retraités contiennent désormaisseed_index.
Pages mises à jour
products/clmm/overview— note « What’s new » sur les pools multi-permissionnés et la garde d’ordre limite.products/clmm/instructions— nouvelle sectionCreatePermissionedPool,CreatePermissionPda/ClosePermissionPdadans le tableau des instructions et la note de gating administrateur, et la liste de comptes / préconditions / erreursOpenLimitOrdermise à jour.products/clmm/accounts—Permissiondans l’inventaire et sa propre section, le champPoolState.seed_index, les aides de dérivation PDA (derivePermissionedPool,derivePermission), et la référence rapide du cycle de vie.security/admin-and-multisig— nouvelle lignepermission_pda_adminet expliquant la portée de permission dans le tableau des rôles CLMM.reference/error-codes— descriptionNotApprovedélargie.
- source
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).

