> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-07-30 — CLMM: pools com permissão e proteção de conta congelada para ordens limitadas

> Duas atualizações do programa CLMM: CreatePermissionedPool permite que uma autoridade na lista branca crie múltiplos pools por par através de um seed_index incorporado no PDA do pool, e OpenLimitOrder agora recebe as contas do lado de saída para rejeitar ordens com uma conta de token de entrada ou saída congelada.

<Info>
  **Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.**

  [Ver versão em inglês →](/reference/changelog/2026-07-30-clmm-permissioned-pools)
</Info>

<Info>
  Uma entrada do changelog da documentação. Para o índice de todas as atualizações, consulte [`reference/changelog`](/pt/reference/changelog). Para a linha do tempo histórica do protocolo, consulte [`introduction/history-and-milestones`](/pt/introduction/history-and-milestones).
</Info>

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](/pt/products/clmm/instructions).

### 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](/pt/products/clmm/accounts).

### 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](/pt/security/admin-and-multisig).

### `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](/pt/products/clmm/instructions).

## 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](/pt/reference/changelog/2026-05-18-clmm-limit-orders). Consulte [Error codes → CLMM](/pt/reference/error-codes).

## 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/accounts` — `Permission` 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`).
