Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
Esta entrada cobre uma atualização futura do programa CLMM. Foi verificada contra o branch
chore/upgrade-anchor do raydium-clmm (head a72f9e1) antes da implantação. Confirme o programa implantado antes de depender da nova instrução ou do comportamento alterado de CreateAmmConfig.0.32.1 para =1.0.2, e a cadeia de ferramentas de compilação vai de Agave 2.3.0 para 3.1.10. Duas mudanças do lado admin acompanham: uma nova instrução CollectExcessLamports e proprietários de taxa fixos em CreateAmmConfig.
Toda instrução que um trader, um LP, um usuário de limite de ordem ou um criador de pool chama mantém sua lista de contas, argumentos e matemática.
TL;DR para integradores
- Nenhuma instrução voltada ao usuário foi alterada.
CreatePool,CreateCustomizablePool,CreatePermissionedPool, todos os caminhosOpenPosition*/IncreaseLiquidity*/DecreaseLiquidity*,ClosePosition,Swap/SwapV2/SwapRouterBaseIn, as cinco instruções de limite de ordem e as instruções de recompensa são idênticas em bytes na rede. Nenhum layout de conta foi alterado. - Uma instrução é adicionada:
CollectExcessLamports. É apenas para admin e não leva argumentos. Varre um pool por chamada: o próprioPoolStatedo pool é sempre varrido, e o pool PDA assina seus vaults, que você passa emremaining_accounts. Qualquer outra conta de propriedade do CLMM emremaining_accountstambém é varrida. Vejaproducts/clmm/instructions. - Um código de erro é adicionado:
6052LamportsCalculateError. Os códigos6000–6051permanecem inalterados. CreateAmmConfignão copia mais o signatário emowner/fund_owner. Novas configs recebem chavesprotocol_fee_ownerefund_fee_ownercodificadas. Na mainnet, estas são as mesmas duas chaves já armazenadas em todas as 21 configs existentes. As contasAmmConfigexistentes não são tocadas, então continue lendo os campos da conta.- Atualize seu IDL. Ele adiciona uma instrução e uma variante de erro, para 39 instruções e 53 erros.
- Você agora pode colocar CPMM e CLMM em um crate. Ambos os repos fixam
anchor-lang/anchor-spl=1.0.2em seus brancheschore/upgrade-anchor, então um único programa pode fazer CPI em ambos. Vejasdk-api/rust-cpi. - O pacote do cliente TypeScript foi renomeado. A suite de testes migra de
@coral-xyz/anchor0.32.1para@anchor-lang/core1.0.2.
CollectExcessLamports
A etapa 1 de SIMD-0437 foi ativada na mainnet em 3 de setembro de 2026. Toda conta CLMM criada antes de uma etapa agora está super-financiada, e apenas o programa CLMM pode mover lamports para fora de uma conta que possui. Isso cobre vaults de pool, vaults de recompensa, PoolState, AmmConfig, ObservationState, TickArrayBitmapExtension e o resto.
A instrução leva quatro contas fixas, depois qualquer número de contas de origem em remaining_accounts:
O pool é a autoridade de assinatura, não um PDA em nível de programa. CPMM assina com uma autoridade global
vault_and_lp_mint_auth_seed. Os vaults de token CLMM são de propriedade de seu PoolState, então uma única chamada pode apenas assinar para o pool passado no slot 2. Cada conta de programa de token deve ter esse pool como sua autoridade: token_vault_0, token_vault_1 ou um dos vaults de recompensa do pool. Uma conta de token de outro pool ou uma conta de token do usuário falha na verificação de proprietário do programa de token e reverte toda a instrução. O programa não a ignora. Os mints de NFT de posição também não são varríveis, porque sua autoridade de mint é revogada quando a posição é aberta. Varra pool por pool.
A instrução faz duas passagens, e essa ordem é fixa:
- CPIs do programa de token primeiro. Para cada origem de propriedade do SPL Token ou Token-2022, uma conta não-nativa recebe
WithdrawExcessLamports(discriminante38). Um vault wSOL nativo recebe a rodadaSyncNative→UnwrapLamports(discriminante45), que termina com uma verificação de que o saldo envolvido é igual ao seu valor pré-sincronização. Se não for, a chamada falha comLamportsCalculateError. Um vault do lado SOL mantém sua liquidez total, e nenhuma cotação de swap muda em uma varredura. - Débitos diretos em segundo. A passagem 2 debita
pool_stateprimeiro, depois cada origem de propriedade do programa CLMM, atérent.minimum_balance(data_len).
UnbalancedInstruction, então os chamadores podem passar origens em qualquer ordem.
Os endereços da carteira estão listados em reference/program-addresses.
CreateAmmConfig escreve proprietários de taxa fixos
Antes desta versão, create_amm_config definia ambos os campos de proprietário de taxa a partir do signatário chamador:
CreateAmmConfig ainda é controlado por crate::admin::ID. Antes desta versão, cada novo nível de taxa começava com o admin em ambos os campos e tinha que ser rotacionado com o parâmetro UpdateAmmConfig 3 / 4. Agora começa com as carteiras operacionais. Na mainnet, as constantes são as mesmas chaves já armazenadas como owner / fund_owner em todas as 21 configs existentes. O programa agora escreve um valor que as operações costumavam definir manualmente.
Os signatários de coleta não mudam. CollectProtocolFee aceita amm_config.owner ou crate::admin::ID, e CollectFundFee aceita amm_config.fund_owner ou crate::admin::ID, antes e depois desta versão.
Na devnet, ambas as constantes resolvem para a mesma chave. Veja reference/program-addresses.
Mudanças de cadeia de ferramentas e dependências
As mudanças do Anchor 1.0 nos locais de chamada CPI são as mesmas que os integradores de CPMM já trataram.
CpiContext::new leva a Pubkey do programa em vez de sua AccountInfo, e Context tem um parâmetro de lifetime em vez de quatro. No crate do cliente, RequestBuilder::instructions() agora retorna Vec<Instruction> sem um Result, e system_program se moveu para solana-system-interface. Veja sdk-api/rust-cpi.
Detalhes do sistema de compilação sem efeito on-chain:
- Admin localnet. O recurso
localnetnão compila mais uma chave de teste fixa apoiada por um fixture comprometido. Em vez disso, lê o admin da variável de ambienteCLMM_LOCALNET_ADMINno tempo de compilação, queyarn test:local-admindefine a partir de sua carteira local. A exceção.gitignoredo fixture desapareceu. - Perfil de lançamento. O bloco duplicado
[profile.release]emprograms/amm/Cargo.tomlfoi deletado. Cargo ignora[profile]fora da raiz do workspace, então o bloco raiz já era o em efeito, e opanic = "abort"em nível de programa nunca foi aplicado. - Anchor.toml.
seeds = falsese tornaresolution = truemaisskip-lint = false, e a URL[registry]obsoleta é removida. - Lints.
programs/amm/Cargo.tomladiciona uma lista de permissões[lints.rust] unexpected_cfgspara os cfgs de recurso que as macros Anchor e Solana emitem. - README. Neste branch, o README ainda diz para você executar
rustup default 1.86.0eavm install 0.32.1decoral-xyz/anchor. SigaAnchor.tomlesolana-fundamentals/toolchainem vez disso.
O que não mudou
- Cada layout de conta.
PoolState,AmmConfig,TickArrayState,TickArrayBitmapExtension,PersonalPositionState,ObservationState,LimitOrderState,DynamicFeeConfig,PermissioneSupportMintAssociatedmantêm os mesmos tamanhos e deslocamentos. - Códigos de erro
6000–6051. - Swap, liquidez, taxa, taxa dinâmica e matemática de limite de ordem.
CollectExcessLamportsmove lamports que nunca fizeram parte das reservas de nenhum pool. - Congelamento de NFT de posição de 2026-08-17, incluindo a regra de pool-como-autoridade-de-congelamento e o caminho de descongelamento de
ClosePosition. spl_memo. A restrição do programa de memo deDecreaseLiquidityV2se moveu despl_memo::id()paraanchor_spl::memo::ID. Ambos nomeiam o mesmo endereço;anchor-splapenas renomeou a exportação.- ID do programa.
Páginas atualizadas
products/clmm/instructions: banner de atualização; seçãoCollectExcessLamportscom sua lista de contas, tabela de despacho de duas passagens e escopo por pool; linhas de inventário, controle de admin e matriz de mudança de estado; nota de proprietário de taxa emCollectProtocolFee/CollectFundFee.products/clmm/accounts: comentários de proprietário deAmmConfige uma nota sobre o queCreateAmmConfigescreve.products/clmm/code-demos: banner de versão e esqueleto Rust CPI movido para Anchor 1.0.products/cpmm/code-demos: a nota “não pode compartilhar um crate com CLMM” removida.reference/error-codes:6052documentado.reference/program-addresses: nova seção “Carteiras de proprietário de taxa CLMM”; CLMM adicionado a “Carteiras de coleta de excess-lamports”.sdk-api/rust-cpi,sdk-api/anchor-idl,solana-fundamentals/toolchain: pins Anchor 1.0 pararaydium-clmm, e o aviso de divisão de crate aposentado.solana-fundamentals/rent-and-reclaimable-rent: CLMM adicionado a “O que os programas Raydium varrem do seu próprio lado”.security/admin-and-multisig: função de coletor de excess-lamports CLMM.protocol-overview/versions-and-migration: marcador de histórico de atualização CLMM.

