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 →
Esta entrada cubre una próxima actualización del programa CLMM. Fue verificada contra la rama
chore/upgrade-anchor de raydium-clmm (head a72f9e1) antes del despliegue. Confirma el programa desplegado antes de depender de la nueva instrucción o del comportamiento cambiado de CreateAmmConfig.0.32.1 a =1.0.2, y la cadena de herramientas de compilación pasa de Agave 2.3.0 a 3.1.10. Dos cambios del lado administrativo van junto con esto: una nueva instrucción CollectExcessLamports y propietarios de comisiones fijos en CreateAmmConfig.
Cada instrucción que llama un trader, un LP, un usuario de órdenes limitadas o un creador de pool mantiene su lista de cuentas, argumentos y matemáticas.
TL;DR para integradores
- Ninguna instrucción visible para el usuario cambió.
CreatePool,CreateCustomizablePool,CreatePermissionedPool, cada rutaOpenPosition*/IncreaseLiquidity*/DecreaseLiquidity*,ClosePosition,Swap/SwapV2/SwapRouterBaseIn, las cinco instrucciones de órdenes limitadas y las instrucciones de recompensas son idénticas en bytes en el cable. Ningún diseño de cuenta cambió. - Una instrucción se añade:
CollectExcessLamports. Es solo para administrador y no toma argumentos. Barre un pool por llamada: elPoolStatedel pool siempre se barre, y el PDA del pool firma por sus bóvedas, que pasas enremaining_accounts. Cualquier otra cuenta propiedad de CLMM enremaining_accountstambién se barre. Verproducts/clmm/instructions. - Un código de error se añade:
6052LamportsCalculateError. Los códigos6000–6051no cambian. CreateAmmConfigya no copia el firmante enowner/fund_owner. Las nuevas configuraciones obtienen clavesprotocol_fee_owneryfund_fee_ownercodificadas. En mainnet estas son las mismas dos claves ya almacenadas en las 21 configuraciones existentes. Las cuentasAmmConfigexistentes no se tocan, así que sigue leyendo los campos de la cuenta.- Actualiza tu IDL. Añade una instrucción y una variante de error, para 39 instrucciones y 53 errores.
- Ahora puedes poner CPMM y CLMM en un crate. Ambos repositorios fijan
anchor-lang/anchor-spl=1.0.2en sus ramaschore/upgrade-anchor, así que un único programa puede hacer CPI en ambos. Versdk-api/rust-cpi. - El paquete del cliente TypeScript se renombra. El conjunto de pruebas se mueve de
@coral-xyz/anchor0.32.1a@anchor-lang/core1.0.2.
CollectExcessLamports
El paso 1 de SIMD-0437 se activó en mainnet el 3 de septiembre de 2026. Cada cuenta CLMM creada antes de un paso ahora está sobre-financiada, y solo el programa CLMM puede mover lamports fuera de una cuenta que posee. Eso cubre bóvedas de pool, bóvedas de recompensas, PoolState, AmmConfig, ObservationState, TickArrayBitmapExtension y el resto.
La instrucción toma cuatro cuentas fijas, luego cualquier número de cuentas fuente en remaining_accounts:
El pool es la autoridad firmante, no un PDA de programa global. CPMM firma con una autoridad global
vault_and_lp_mint_auth_seed. Las bóvedas de tokens de CLMM son propiedad de su PoolState, así que una única llamada solo puede firmar por el pool pasado en la ranura 2. Cada cuenta de programa de tokens debe tener ese pool como su autoridad: token_vault_0, token_vault_1, o una de las bóvedas de recompensas del pool. Una cuenta de tokens de otro pool, o una cuenta de tokens de un usuario, falla la verificación de propietario del programa de tokens y revierte toda la instrucción. El programa no la salta. Los mints de NFT de posición tampoco son barribles, porque su autoridad de mint se revoca cuando se abre la posición. Barre pool por pool.
La instrucción hace dos pasadas, y ese orden es fijo:
- CPIs del programa de tokens primero. Para cada fuente propiedad de SPL Token o Token-2022, una cuenta no nativa obtiene
WithdrawExcessLamports(discriminante38). Una bóveda wSOL nativa obtiene la rondaSyncNative→UnwrapLamports(discriminante45), que termina con una verificación de que el saldo envuelto es igual a su valor pre-sincronización. Si no es así, la llamada falla conLamportsCalculateError. Una bóveda del lado SOL mantiene su liquidez completa, y ninguna cotización de swap cambia en un barrido. - Débitos directos segundo. La pasada 2 debita
pool_stateprimero, luego cada fuente propiedad del programa CLMM, hastarent.minimum_balance(data_len).
UnbalancedInstruction, así que los llamadores pueden pasar fuentes en cualquier orden.
Las direcciones de billetera se enumeran en reference/program-addresses.
CreateAmmConfig escribe propietarios de comisiones fijos
Antes de esta versión, create_amm_config establecía ambos campos de propietario de comisiones desde el firmante que llamaba:
CreateAmmConfig sigue siendo controlado por crate::admin::ID. Antes de esta versión, cada nuevo nivel de comisión comenzaba con el administrador en ambos campos y tenía que rotarse con el parámetro UpdateAmmConfig 3 / 4. Ahora comienza con las billeteras operacionales. En mainnet las constantes son las mismas claves ya almacenadas como owner / fund_owner en las 21 configuraciones existentes. El programa ahora escribe un valor que las operaciones solían establecer manualmente.
Los firmantes de recopilación no cambian. CollectProtocolFee acepta amm_config.owner o crate::admin::ID, y CollectFundFee acepta amm_config.fund_owner o crate::admin::ID, tanto antes como después de esta versión.
En devnet, ambas constantes se resuelven a la misma clave. Ver reference/program-addresses.
Cambios de cadena de herramientas y dependencias
Los cambios de Anchor 1.0 en los sitios de llamada CPI son los mismos que los integradores de CPMM ya manejaron.
CpiContext::new toma el Pubkey del programa en lugar de su AccountInfo, y Context tiene un parámetro de vida útil en lugar de cuatro. En el crate del cliente, RequestBuilder::instructions() ahora devuelve Vec<Instruction> sin un Result, y system_program se movió a solana-system-interface. Ver sdk-api/rust-cpi.
Detalles del sistema de compilación sin efecto en cadena:
- Admin de localnet. La característica
localnetya no compila una clave de prueba fija respaldada por una fixture comprometida. En su lugar lee el administrador de la variable de entornoCLMM_LOCALNET_ADMINen tiempo de compilación, queyarn test:local-adminestablece desde tu billetera local. La excepción.gitignorede la fixture se ha ido. - Perfil de lanzamiento. El bloque duplicado
[profile.release]enprograms/amm/Cargo.tomlfue eliminado. Cargo ignora[profile]fuera de la raíz del espacio de trabajo, así que el bloque raíz era ya el que estaba en efecto, y elpanic = "abort"a nivel de programa nunca se aplicó. - Anchor.toml.
seeds = falsese convierte enresolution = truemásskip-lint = false, y la URL obsoleta de[registry]se elimina. - Lints.
programs/amm/Cargo.tomlañade una lista de permitidos[lints.rust] unexpected_cfgspara los cfgs de características que emiten las macros de Anchor y Solana. - README. En esta rama el README aún te dice que ejecutes
rustup default 1.86.0yavm install 0.32.1desdecoral-xyz/anchor. SigueAnchor.tomlysolana-fundamentals/toolchainen su lugar.
Lo que no cambió
- Cada diseño de cuenta.
PoolState,AmmConfig,TickArrayState,TickArrayBitmapExtension,PersonalPositionState,ObservationState,LimitOrderState,DynamicFeeConfig,PermissionySupportMintAssociatedmantienen los mismos tamaños y desplazamientos. - Códigos de error
6000–6051. - Matemáticas de swap, liquidez, comisión, comisión dinámica y órdenes limitadas.
CollectExcessLamportsmueve lamports que nunca fueron parte de las reservas de ningún pool. - Congelación de NFT de posición del 2026-08-17, incluyendo la regla de pool-como-autoridad-de-congelación y la ruta de descongelación de
ClosePosition. spl_memo. La restricción del programa de memo deDecreaseLiquidityV2se movió despl_memo::id()aanchor_spl::memo::ID. Ambos nombran la misma dirección;anchor-splsimplemente renombró la exportación.- ID del programa.
Páginas actualizadas
products/clmm/instructions: banner de actualización; secciónCollectExcessLamportscon su lista de cuentas, tabla de despacho de dos pasadas y alcance por pool; filas de inventario, control de administrador y matriz de cambio de estado; nota de propietario de comisión enCollectProtocolFee/CollectFundFee.products/clmm/accounts: comentarios de propietario deAmmConfigy una nota sobre lo que escribeCreateAmmConfig.products/clmm/code-demos: banner de versión y esqueleto de CPI de Rust movido a Anchor 1.0.products/cpmm/code-demos: la nota “no puede compartir un crate con CLMM” eliminada.reference/error-codes:6052documentado.reference/program-addresses: nueva sección “Billeteras de propietario de comisión de CLMM”; CLMM añadido a “Billeteras de recopilación de lamports excedentes”.sdk-api/rust-cpi,sdk-api/anchor-idl,solana-fundamentals/toolchain: pines de Anchor 1.0 pararaydium-clmm, y la advertencia de división de crate retirada.solana-fundamentals/rent-and-reclaimable-rent: CLMM añadido a “Lo que los programas de Raydium barren en su propio lado”.security/admin-and-multisig: rol de recopilador de lamports excedentes de CLMM.protocol-overview/versions-and-migration: viñeta de historial de actualización de CLMM.

