Skip to main content
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.
A mudança principal do CPMM é uma migração de framework: Anchor 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, SwapBaseOutput e todos os quatro caminhos Collect*Fee são byte-idênticos. Nenhum layout de conta foi alterado.
  • Uma instrução é adicionada: CollectExcessLamports. Apenas admin, sem argumentos, contas passadas como remaining_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. Veja products/cpmm/instructions.
  • Um código de erro é adicionado: 6015 LamportsCalculateError. Os códigos 60006014 permanecem inalterados.
  • CreateAmmConfig não copia mais o signatário nos campos de proprietário de taxa. Novas configurações recebem chaves protocol_fee_owner e fund_fee_owner codificadas. Contas AmmConfig existentes não são tocadas — continue lendo protocol_owner / fund_owner da conta em vez de assumir qualquer valor.
  • A MINT_WHITELIST Token-2022 de quatro endereços codificada foi removida. O registro PDA SupportMintAssociated agora é 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.
  • ClosePermissionPda aceita 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/anchor está congelado em 0.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:
Agora escreve as constantes do próprio programa:
Como 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.
Isto não é uma migração. Cada AmmConfig que já existe mantém qualquer protocol_owner e fund_owner com o qual foi criado. Uma ferramenta de coleta que começa a codificar as novas constantes falhará em configurações mais antigas, e uma que assume “a chave do admin” falhará nas novas. Leia os campos.

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 é:
  1. Mints SPL Token legados passam incondicionalmente.
  2. Um mint com um PDA SupportMintAssociated inicializado em [b"support_mint", mint] passa incondicionalmente.
  3. Caso contrário, toda extensão no mint deve ser uma de TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount.
O PDA de registro está no programa há um tempo, com seu próprio par 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:
Então a autoridade que emite uma concessão também pode revogá-la, sem rotear através do multisig. O erro em um signatário não autorizado é 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 60006014.
  • 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. CollectExcessLamports move lamports que nunca foram parte das reservas de nenhum pool.
  • spl_memo. A restrição de programa de memo de Withdraw mudou de spl_memo::id() para anchor_spl::memo::ID — o mesmo endereço sob uma exportação anchor-spl renomeada.
  • ID do programa. Inalterado.

Páginas atualizadas

  • products/cpmm/instructionsCollectExcessLamports adicionado com sua lista de contas e tabela de despacho por proprietário; CreateAmmConfig ganha seu argumento creator_fee_rate e uma nota sobre os proprietários de taxa fixa; linhas de resumo de instrução adicionadas para CollectExcessLamports, CreateSupportMintAssociated, CloseSupportMintAssociated; signatário de ClosePermissionPda corrigido; precondição de Initialize reescrita 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 de ClosePermissionPda corrigido.
  • 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 a MINT_WHITELIST removida movida para uma seção “bypasses removidos”.
  • reference/error-codes6015 documentado.
  • 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 de ClosePermissionPda corrigida.
  • 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”.