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 CPMM. Foi verificada contra o branch de lançamento local 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 de Agave 2.3.0 para 3.1.10. Acompanhando estão quatro mudanças comportamentais, três das quais importam apenas para ferramentas administrativas e uma — a remoção da lista branca de mint — que muda quais mints Token-2022 podem ser usados para um novo pool.
Tudo que um trader, um LP ou um criador de pool chama mantém sua lista de contas, argumentos e matemática.
TL;DR para integradores
- Nenhuma instrução voltada para o usuário foi alterada.
Initialize,InitializeWithPermission,Deposit,Withdraw,SwapBaseInput,SwapBaseOutpute todos os quatro caminhosCollect*Feesão byte-idênticos. Nenhum layout de conta foi alterado. - Uma instrução é adicionada:
CollectExcessLamports. Apenas admin, sem argumentos, contas passadas comoremaining_accounts. Retorna lamports acima do mínimo isento de aluguel de vaults controlados por CPMM, mints LP e PDAs, e não toca em mais nada. Vejaproducts/cpmm/instructions. - Um código de erro é adicionado:
6015LamportsCalculateError. Os códigos6000–6014permanecem inalterados. CreateAmmConfignão copia mais o signatário nos campos de proprietário de taxa. Novas configurações recebem chavesprotocol_fee_ownerefund_fee_ownercodificadas. ContasAmmConfigexistentes não são tocadas — continue lendoprotocol_owner/fund_ownerda conta em vez de assumir qualquer valor.- A
MINT_WHITELISTToken-2022 de quatro endereços codificada foi removida. O registro PDASupportMintAssociatedagora é o único bypass do CPMM da lista de permissões de extensão. Pools existentes não são afetados; a verificação é executada apenas na criação do pool. ClosePermissionPdaaceita a autoridade criadora de PDA de permissão dedicada, não apenas o admin compartilhado.- Uma atualização de IDL é necessária. Uma nova instrução, uma nova variante de erro.
- O pacote cliente TypeScript foi renomeado.
@coral-xyz/anchorestá congelado em0.32.1; o cliente Anchor 1.x publica como@anchor-lang/core.
CollectExcessLamports
A etapa 1 do SIMD-0437 foi lançada na mainnet em 3 de setembro de 2026, reduzindo o mínimo isento de aluguel em 9% com mais quatro etapas por vir. Cada vault de pool CPMM, mint LP, PoolState, AmmConfig, ObservationState, Permission e conta SupportMintAssociated criada antes de uma etapa agora está superfundida, e lamports em uma conta de propriedade do programa só podem ser movidos por esse programa.
A instrução leva quatro contas fixas — a carteira signatário/destino, o PDA de autoridade vault_and_lp_mint_auth_seed, e ambos os programas de token — depois qualquer número de contas de origem em remaining_accounts. Ela despacha no proprietário de cada conta de origem: um CPI para WithdrawExcessLamports do programa de token (discriminante 38) para uma conta de token ou mint, um débito direto para um PDA de propriedade do CPMM, e silenciosamente pula qualquer outra coisa.
SOL envolvido é o caso que vale a pena entender. O saldo de lamport de uma conta de token nativa é seu saldo de token, então ambos os programas de token rejeitam WithdrawExcessLamports em um. CPMM em vez disso faz CPI para SyncNative (dobrando o excesso doado no amount envolvido), mede quanto o amount cresceu, UnwrapLamports (discriminante 45) para exatamente esse delta, e então requer que o saldo envolvido seja igual ao seu valor pré-sincronização — LamportsCalculateError se não for. Um vault de pool do lado SOL mantém sua liquidez completa através de uma varredura, e nenhum LP vê uma mudança de preço através de uma.
O signatário pode ser tanto o admin do programa compartilhado quanto uma carteira de coleta de lamports dedicada; os endereços estão em reference/program-addresses.
CreateAmmConfig escreve proprietários de taxa fixa
Antes desta versão, create_amm_config definia ambos os campos de proprietário de taxa a partir do signatário chamador:
CreateAmmConfig é controlado por crate::admin::ID, o efeito prático é que um nível de taxa recém-criado é varrido por carteiras operacionais dedicadas desde o início em vez de pelo multisig admin, e o admin não pode coletar de uma configuração que acabou de criar sem primeiro rotacionar o campo através do parâmetro UpdateAmmConfig 3 ou 4.
As duas constantes seguem o mesmo padrão cfg devnet/mainnet que o resto dos endereços do programa, e na devnet ambas resolvem para a mesma chave. Veja reference/program-addresses.
A lista branca de mint Token-2022 é removida
is_supported_mint costumava fazer short-circuit em uma MINT_WHITELIST codificada de quatro endereços antes de iterar as extensões do mint. Esse array — e o HashSet construído a partir dele em cada chamada — é deletado. O que permanece é:
- Mints SPL Token legados passam incondicionalmente.
- Um mint com um PDA
SupportMintAssociatedinicializado em[b"support_mint", mint]passa incondicionalmente. - Caso contrário, toda extensão no mint deve ser uma de
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount.
CreateSupportMintAssociated / CloseSupportMintAssociated e sua própria autoridade dedicada ao lado do admin compartilhado, e é consultado tanto de Initialize quanto de InitializeWithPermission. Remover o array estático significa que integrar um mint agora é puramente uma ação on-chain em vez de uma atualização de programa — que é o ponto.
Pools existentes não são afetados, porque a verificação de mint é executada apenas na criação do pool. O que muda é que criar um novo pool CPMM para um dos quatro mints anteriormente na lista branca requer que esse mint tenha um PDA de registro — os que importam já têm na mainnet. O quadro completo, incluindo o que o registro faz e não dispensa, está em reference/token-2022-support.
Ampliação de signatário de ClosePermissionPda
CreatePermissionPda já aceitava tanto o admin compartilhado quanto uma autoridade criadora de PDA de permissão dedicada, enquanto ClosePermissionPda estava fixado ao admin com uma restrição address =. O caminho de fechamento agora leva o mesmo par:
InvalidOwner (6001) de qualquer forma — a restrição address = antiga já carregava esse erro personalizado — então apenas o conjunto de signatários aceitos foi ampliado.
Mudanças de cadeia de ferramentas e dependências
Anchor 1.0 muda duas coisas em cada site de chamada CPI, o que importa se você integrar CPMM a partir do seu próprio programa:
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 lado do cliente RequestBuilder::instructions() retorna Vec<Instruction> em vez de Result<...>, CommitmentConfig vem de anchor_client em vez de solana_sdk, e spl-associated-token-account 8.0 moveu seus auxiliares de endereço sob ::address e seu ID de programa para ::program::ID. Veja sdk-api/rust-cpi.
Dois detalhes do sistema de compilação, nenhum com efeito on-chain: o crate do programa declara um recurso localnet que compila a carteira local como admin a partir de uma variável de ambiente CPSWAP_LOCALNET_ADMIN (então os testes controlados por admin podem realmente assinar — yarn test:local-admin conecta), e o bloco [profile.release] duplicado em programs/cp-swap/Cargo.toml foi deletado. Cargo ignora [profile] fora da raiz do workspace, então o bloco raiz já era o em efeito — incluindo o fato de que o panic = "abort" do bloco de nível de programa nunca foi aplicado.
O que não mudou
- Cada layout de conta.
PoolState,AmmConfig,ObservationState,Permission,SupportMintAssociated— mesmos tamanhos, mesmos offsets. - Códigos de erro
6000–6014. - A própria lista de permissões de extensão. Ainda as mesmas cinco extensões.
- Taxas de taxa, acúmulo de taxa e a curva.
CollectExcessLamportsmove lamports que nunca foram parte das reservas de nenhum pool. spl_memo. A restrição de programa de memo deWithdrawmudou despl_memo::id()paraanchor_spl::memo::ID— o mesmo endereço sob uma exportaçãoanchor-splrenomeada.- ID do programa. Inalterado.
Páginas atualizadas
products/cpmm/instructions—CollectExcessLamportsadicionado com sua lista de contas e tabela de despacho por proprietário;CreateAmmConfigganha seu argumentocreator_fee_ratee uma nota sobre os proprietários de taxa fixa; linhas de resumo de instrução adicionadas paraCollectExcessLamports,CreateSupportMintAssociated,CloseSupportMintAssociated; signatário deClosePermissionPdacorrigido; precondição deInitializereescrita para o bypass somente de registro; linha de matriz de mudança de estado adicionada.products/cpmm/accounts— seção Token-2022 reescrita em torno do PDA de registro, com a remoção da lista branca chamada; signatário deClosePermissionPdacorrigido.products/cpmm/overview— sentença de lista branca reescrita.products/cpmm/code-demos— esqueleto Rust CPI atualizado para Anchor 1.0.reference/token-2022-support— seção de caminho de bypass reescrita em torno do PDA de registro, com aMINT_WHITELISTremovida movida para uma seção “bypasses removidos”.reference/error-codes—6015documentado.reference/program-addresses— novas seções “Autoridade de registro de suporte de mint CPMM”, “Carteiras de proprietário de taxa CPMM” e “Carteiras de coleta de lamports excedentes”; nota deClosePermissionPdacorrigida.sdk-api/rust-cpi,solana-fundamentals/toolchain,integration-guides/cpi-integration— pinos Anchor 1.0 e notas de migração CPI.solana-fundamentals/rent-and-reclaimable-rent— nova seção “O que os programas Raydium varrem do seu próprio lado”.

