Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
CreatePool / CreateCustomizablePool permanecen sin cambios.
TL;DR para integradores
- Los IDs de pool ahora pueden ser no canónicos, detrás de una puerta de permisos. Históricamente había exactamente una dirección de pool CLMM por
(amm_config, token_mint_0, token_mint_1)— las semillas del PDA la fijaban. Una nueva instrucción,CreatePermissionedPool, integra unseed_index: u16no nulo suministrado por el cliente en las semillas del PDA del pool, para que un operador en lista blanca pueda crear varios pools para el mismo par y nivel de comisión, cada uno en su propia dirección. Dado que las direcciones de pool arbitrarias son una capacidad privilegiada, el pagador debe tener un PDA dePermissionotorgado por el administrador. Dos instrucciones de administrador,CreatePermissionPdayClosePermissionPda, gestionan esos permisos. OpenLimitOrderahora valida el lado de salida. La instrucción toma tres cuentas adicionales —output_token_account,output_vault,output_vault_mint— y rechaza la orden conNotApprovedsi la cuenta de token de entrada o salida del propietario está congelada. Esto garantiza que el llenado eventual pueda entregarse, lo que importa para mints Token-2022 con lista de permisos / congelados por defecto (tokens con permisos). Los clientes compilados contra la lista de cuentas antigua de un solo lado deben agregar las tres cuentas de salida.
Qué cambió en el programa
Nueva instrucción: CreatePermissionedPool
Tiene la misma forma y parámetros que CreateCustomizablePool (toma los mismos CreateCustomizableParams, por lo que la comisión de un solo lado y la opción de comisión dinámica están disponibles), más:
- Un argumento
seed_index: u16, que debe ser distinto de cero. Se añade (little-endian) a las semillas del PDA del pool:["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]. - Una cuenta
permission: el PDA["permission", payer]. Anchor rechaza la llamada si no existe o no es propiedad del programa — su mera existencia es la autorización. - Una cuenta
pool_creatorregistrada comopool_state.owner, que puede diferir delpayerque paga la comisión.
seed_index = 0 permanece reservado para pools heredados: para esos, el componente de semilla se colapsa a vacío, reproduciendo la dirección clásica de cuatro semillas, por lo que ninguna dirección de pool existente cambia.
Consulta Instructions → CreatePermissionedPool.
Nueva cuenta: Permission
Una cuenta de capacidad cuya existencia es el permiso. Solo almacena la authority para la que fue creada (más relleno). Semillas del PDA: ["permission", authority]. Confiere el derecho de llamar a CreatePermissionedPool y nada más — no puede mover fondos, cambiar comisiones o mutar ningún pool. Consulta Accounts → Permission.
Nuevas instrucciones de administrador: CreatePermissionPda / ClosePermissionPda
CreatePermissionPdainicializa un PDA dePermissionpara unapermission_authoritydada.ClosePermissionPdalo cierra y reembolsa la renta al llamador, revocando el permiso. Los pools ya creados bajo ese permiso no se ven afectados.
admin del programa o una clave dedicada permission_pda_admin (una constante distinta en mainnet vs devnet). Consulta Admin keys and multisig → CLMM.
PoolState: campo seed_index
Se tallaron dos bytes de una región de relleno existente (padding: [u8; 6] → seed_index: [u8; 2] + padding: [u8; 4]) directamente después de fee_on. El tamaño total de la cuenta no cambia, y no se requiere migración de indexador. Para pools creados mediante CreatePool / CreateCustomizablePool, seed_index es [0, 0]; para pools con permisos lleva el índice elegido por el creador y es necesario para re-derivar la dirección del pool fuera de cadena.
OpenLimitOrder: cuentas del lado de salida y protección de cuenta congelada
La lista de cuentas de OpenLimitOrder gana output_token_account, output_vault y output_vault_mint. Se utilizan solo para validación — no se debita salida al abrir. El manejador ahora requiere que ninguna de las cuentas de token de entrada o salida esté congelada, devolviendo NotApproved en caso contrario (el mismo código ya devuelto cuando el pool tiene swap u órdenes limitadas deshabilitadas). Esto cierra una brecha donde una orden podría abrirse contra una cuenta de token que nunca podría recibir el llenado (por ejemplo, una cuenta aún no descongelada para un mint Token-2022 congelado por defecto).
Consulta Instructions → OpenLimitOrder.
Códigos de error
Sin nuevos códigos de error. El código existente6000 NotApproved ahora cubre además la cuenta de token de entrada/salida congelada y los casos de swap/órdenes limitadas deshabilitadas en OpenLimitOrder, y el caso “el firmante no es ni admin ni permission_pda_admin” en las instrucciones de permisos. La tabla de códigos de error y la numeración son iguales a las de la versión 2026-05-18. Consulta Error codes → CLMM.
Notas de migración
- Lectura de direcciones de pool: no asumas un pool por
(config, mint0, mint1). Un par ahora puede tener un pool canónico más uno o más pools con permisos en direcciones derivadas deseed_index. Enumera pools desde la API / indexador en lugar de derivar un único PDA, y almacenaseed_indexcuando necesites re-derivar un pool con permisos. - Colocación de órdenes limitadas: agrega las tres cuentas del lado de salida a tu transacción
OpenLimitOrder, y muestra un mensaje claro cuando se devuelveNotApprovedpara una cuenta congelada. - Sin ruptura de tamaño de cuenta o diseño:
PoolStatetiene el mismo tamaño; los bytes de relleno retirados ahora contienenseed_index.
Páginas actualizadas
products/clmm/overview— nota “What’s new” sobre pools multi con permisos y la protección de órdenes limitadas.products/clmm/instructions— nueva secciónCreatePermissionedPool,CreatePermissionPda/ClosePermissionPdaen la tabla de instrucciones y nota de puerta de administrador, y la lista de cuentas / precondiciones / errores actualizada deOpenLimitOrder.products/clmm/accounts—Permissionen el inventario y su propia sección, el campoPoolState.seed_index, ayudantes de derivación de PDA (derivePermissionedPool,derivePermission), y la referencia rápida del ciclo de vida.security/admin-and-multisig— nueva filapermission_pda_adminy explicador de alcance de permisos en la tabla de roles de CLMM.reference/error-codes— descripción ampliada deNotApproved.
- Fuente de
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).

