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 →
Uma entrada do changelog da documentação. Para o índice de todas as atualizações, consulte reference/changelog. Para a linha do tempo histórica do protocolo, consulte introduction/history-and-milestones.
Esta versão documenta duas mudanças no programa CLMM. Ambas são aditivas e compatíveis com versões anteriores: pools, posições e ordens abertas existentes não são afetadas, e os caminhos clássicos CreatePool / CreateCustomizablePool permanecem inalterados.

TL;DR para integradores

  • IDs de pool agora podem ser não-canônicos, atrás de um portão de permissão. Historicamente havia exatamente um endereço de pool CLMM por (amm_config, token_mint_0, token_mint_1) — as sementes do PDA o fixavam. Uma nova instrução, CreatePermissionedPool, incorpora um seed_index: u16 não-zero fornecido pelo cliente nas sementes do PDA do pool, para que um operador na lista branca possa criar vários pools para o mesmo par e nível de taxa, cada um em seu próprio endereço. Como endereços de pool arbitrários são uma capacidade privilegiada, o pagador deve manter um PDA de Permission concedido pelo administrador. Duas instruções de administrador, CreatePermissionPda e ClosePermissionPda, gerenciam essas concessões.
  • OpenLimitOrder agora valida o lado de saída. A instrução recebe três contas adicionais — output_token_account, output_vault, output_vault_mint — e rejeita a ordem com NotApproved se a conta de token de entrada ou saída do proprietário estiver congelada. Isso garante que o preenchimento eventual possa ser entregue, o que importa para mints Token-2022 com lista de permissão / congelados por padrão (tokens com permissão). Clientes construídos contra a lista de contas antiga de um lado devem adicionar as três contas de saída.

O que mudou no programa

Nova instrução: CreatePermissionedPool

Mesma forma e parâmetros que CreateCustomizablePool (recebe o mesmo CreateCustomizableParams, então taxa de um lado e a opção de taxa dinâmica estão disponíveis), mais:
  • Um argumento seed_index: u16, que deve ser não-zero. Ele é anexado (little-endian) às sementes do PDA do pool: ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()].
  • Uma conta permission: o PDA ["permission", payer]. Anchor rejeita a chamada se não existir ou não for de propriedade do programa — sua mera existência é a autorização.
  • Uma conta pool_creator registrada como pool_state.owner, que pode diferir do payer que paga a taxa.
seed_index = 0 permanece reservado para pools legados: para esses, o componente de semente colapsa para vazio, reproduzindo o endereço clássico de quatro sementes, então nenhum endereço de pool existente muda. Consulte Instructions → CreatePermissionedPool.

Nova conta: Permission

Uma conta de capacidade cuja existência é a concessão. Ela armazena apenas a authority para a qual foi criada (mais preenchimento). Sementes do PDA: ["permission", authority]. Ela confere o direito de chamar CreatePermissionedPool e nada mais — não pode mover fundos, alterar taxas ou mutar qualquer pool. Consulte Accounts → Permission.

Novas instruções de administrador: CreatePermissionPda / ClosePermissionPda

  • CreatePermissionPda inicializa um PDA de Permission para uma determinada permission_authority.
  • ClosePermissionPda o fecha e reembolsa o aluguel para o chamador, revogando a concessão. Pools já criados sob essa concessão não são afetados.
Ambas aceitam a chave pública do admin do programa ou uma chave dedicada permission_pda_admin (uma constante distinta na mainnet vs devnet). Consulte Admin keys and multisig → CLMM.

PoolState: campo seed_index

Dois bytes foram extraídos de uma região de preenchimento existente (padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4]) diretamente após fee_on. O tamanho total da conta é inalterado, e nenhuma migração de indexador é necessária. Para pools criados via CreatePool / CreateCustomizablePool, seed_index é [0, 0]; para pools com permissão, ele carrega o índice escolhido pelo criador e é necessário para re-derivar o endereço do pool off-chain.

OpenLimitOrder: contas do lado de saída e proteção de conta congelada

A lista de contas de OpenLimitOrder ganha output_token_account, output_vault e output_vault_mint. Elas são usadas apenas para validação — nenhuma saída é debitada na abertura. O manipulador agora exige que nenhuma das contas de token de entrada ou saída esteja congelada, retornando NotApproved caso contrário (o mesmo código já retornado quando o pool tem swap ou ordem limitada desabilitada). Isso fecha uma lacuna onde uma ordem poderia ser aberta contra uma conta de token que nunca poderia receber o preenchimento (por exemplo, uma conta ainda não descongelada para um mint Token-2022 congelado por padrão). Consulte Instructions → OpenLimitOrder.

Códigos de erro

Nenhum novo código de erro. O 6000 NotApproved existente agora cobre adicionalmente a conta de token de entrada/saída congelada e os casos de swap/ordem limitada desabilitada em OpenLimitOrder, e o caso “signatário não é nem admin nem permission_pda_admin” nas instruções de permissão. A tabela de códigos de erro e a numeração são iguais à versão de 2026-05-18. Consulte Error codes → CLMM.

Notas de migração

  • Leitura de endereços de pool: não assuma um pool por (config, mint0, mint1). Um par agora pode ter um pool canônico mais um ou mais pools com permissão em endereços derivados de seed_index. Enumere pools da API / indexador em vez de derivar um único PDA, e armazene seed_index quando precisar re-derivar um pool com permissão.
  • Colocação de ordens limitadas: adicione as três contas do lado de saída à sua transação OpenLimitOrder, e exiba uma mensagem clara quando NotApproved for retornado para uma conta congelada.
  • Sem quebra de tamanho de conta ou layout: PoolState tem o mesmo tamanho; os bytes de preenchimento aposentados agora contêm seed_index.

Páginas atualizadas

  • products/clmm/overview — nota “What’s new” sobre pools com permissão múltipla e a proteção de ordem limitada.
  • products/clmm/instructions — nova seção CreatePermissionedPool, CreatePermissionPda / ClosePermissionPda na tabela de instruções e nota de gating de administrador, e a lista de contas / pré-condições / erros atualizada de OpenLimitOrder.
  • products/clmm/accountsPermission no inventário e sua própria seção, o campo PoolState.seed_index, auxiliares de derivação de PDA (derivePermissionedPool, derivePermission), e a referência rápida de ciclo de vida.
  • security/admin-and-multisig — nova linha permission_pda_admin e explicador de escopo de permissão na tabela de funções CLMM.
  • reference/error-codes — descrição ampliada de NotApproved.
Verificado contra:
  • Fonte 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).