> ## 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-09-13 — CPMM: o protocolo retém uma parte da taxa do criador

> CPMM agora pode reter uma parte configurável da taxa do criador, aplicada quando a taxa é coletada em vez de quando é cobrada. AmmConfig ganha creator_fee_share_rate (esculpido do padding, mesmo tamanho), um novo PDA CreatorFeeShare o sobrescreve por criador, e CreateCreatorFeeShare / CloseCreatorFeeShare o gerenciam. Ambos os caminhos CollectCreatorFee mudam suas listas de contas — quebra para clientes existentes. UpdateAmmConfig ganha parâmetro 8. Sem novos códigos de erro, sem mudança em PoolState, matemática de swap intacta.

<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-09-13-cpmm-creator-fee-protocol-share)
</Info>

<Info>
  Esta entrada cobre uma atualização futura do programa CPMM. Foi verificada contra o branch de lançamento local (`0dde43d`, 11 de setembro de 2026) antes da implantação. Confirme o programa implantado antes de confiar nas novas instruções ou nas listas de contas alteradas.
</Info>

A taxa de criador do CPMM sempre foi inteiramente para o criador do pool. Este lançamento permite que o protocolo retenha uma parte dela — negociável por nível de taxa, ou por criador em um nível de taxa — sem alterar como a taxa é cobrada.

A escolha de design que mantém o raio de explosão pequeno: **a divisão acontece no momento da coleta, não no momento do swap.** Um swap ainda cobra `creator_fee_rate` e ainda acumula o valor inteiro em `creator_fees_token_{0,1}`. Quando `CollectCreatorFee` ou `CollectCreatorFeePermissionless` é executado, o saldo acumulado é dividido, a parte do protocolo é reclassificada como uma taxa de protocolo no mesmo pool, e apenas a parte do criador sai do cofre. Cotações, a curva, `k` e todos os caminhos voltados para LP não são afetados.

## TL;DR para integradores

* **Ambas as instruções de coleta de taxa de criador mudaram suas listas de contas. Isto é uma quebra.** `CollectCreatorFee` ganha `creator_fee_share` na posição 5. `CollectCreatorFeePermissionless` ganha `amm_config` em 5 e `creator_fee_share` em 6. Ambas as inserções ficam antes dos cofres, então tudo depois se desloca. Reconstrua essas transações; não as corrija.
* **`creator_fee_share` deve ser passado mesmo quando não existe.** É declarado com uma restrição de seed mas lido como uma conta não verificada, então o endereço deve ser o PDA canônico em `["creator_fee_share", creator, amm_config]` enquanto a conta em si é opcional. Quando está vazia, o programa volta para `AmmConfig.creator_fee_share_rate`.
* **`AmmConfig` ganha `creator_fee_share_rate`, esculpido do padding.** A conta ainda tem **236 bytes** e cada config existente continua desserializando — mas o primeiro `u64` do antigo `padding: [u64; 15]` agora é um campo ativo. Decodificadores que modelam a cauda como um array de 15 elementos leem a taxa de compartilhamento como `padding[0]`.
* **`PoolState` não foi alterado.** 637 bytes, mesmos offsets, mesmos campos. A parte do protocolo é registrada nos contadores existentes `protocol_fees_token_{0,1}` — não há novo contador e nenhuma nova instrução de coleta para isso.
* **`protocol_fees_token*` agora cresce fora dos swaps.** Qualquer monitor que reconcilie acúmulo de protocolo contra volume de negociação verá saltos em cada coleta de taxa de criador.
* **Um estimador de pagamento de criador que lê `creator_fees_token*` agora superestima.** Multiplique por `(1 − share_rate / 1_000_000)`, resolvido para esse par `(creator, amm_config)`.
* **Duas instruções de admin são adicionadas:** `CreateCreatorFeeShare` e `CloseCreatorFeeShare`. **Um novo parâmetro `UpdateAmmConfig`:** `8` → `creator_fee_share_rate`.
* **Sem novos códigos de erro.** Os novos caminhos reutilizam `InvalidOwner` (`6001`), `InvalidInput` (`6003`) e `MathOverflow` (`6011`). `6000`–`6015` não foram alterados.
* **Uma atualização de IDL é necessária** — duas novas instruções, um novo tipo de conta, duas listas de contas alteradas, um novo campo de config.

## Como a divisão funciona

Resolução, em ordem de prioridade:

1. **PDA `CreatorFeeShare`** em `["creator_fee_share", creator, amm_config]` — quando a conta existe e é de propriedade do CPMM, seu `share_rate` vence.
2. **`AmmConfig.creator_fee_share_rate`** — o padrão do nível de taxa, usado caso contrário.

Ambos são `u64` sobre `FEE_RATE_DENOMINATOR_VALUE = 1_000_000` e ambos são verificados contra esse limite. Então, por lado de token:

```rust theme={null}
// states/creator_fee_share.rs
shared_amount  = floor(creator_fee * share_rate / 1_000_000);
creator_amount = creator_fee - shared_amount;
```

```rust theme={null}
// states/pool.rs — PoolState::settle_creator_fee
self.protocol_fees_token_i = self.protocol_fees_token_i.checked_add(shared_amount_i)?;
self.creator_fees_token_i  = 0;
// creator_amount_i é retornado e transferido para o criador
```

Três propriedades que os testes do programa fixam:

* **O arredondamento favorece o criador.** A parte é arredondada para baixo, então o pó fica com o criador — a mesma direção que `Fees::protocol_fee` e `Fees::fund_fee`, que também esculpem uma parte de uma taxa já acumulada. 20% de uma taxa de 1 unidade é 0, não 1.
* **O valor é conservado.** `creator_amount + shared_amount == creator_fee` para cada taxa e cada taxa até `u64::MAX`.
* **`share_rate = 0` é exatamente o comportamento antigo.** Tanto o valor de config padrão quanto um PDA ausente dão ao criador a taxa inteira, então nada muda para nenhum pool existente até que um admin defina uma taxa.

Como `protocol_fees_token*` e `creator_fees_token*` já são ambos subtraídos em `vault_amount_without_fee`, mover valor entre eles não muda a visão da curva sobre o cofre. Nenhum LP vê uma mudança de preço em uma coleta de taxa de criador, e a verificação `k` não é alterada.

<Note>
  **A taxa é lida na coleta, não no acúmulo.** Taxas que se acumularam enquanto a taxa era `0` se liquidam em qualquer taxa que estiver em vigor quando alguém finalmente chamar `Collect*`. Não há snapshot por época ou por swap.
</Note>

## Mudanças na lista de contas

`CollectCreatorFee` — uma inserção:

| #   | Antes                                              | Depois                                          |
| --- | -------------------------------------------------- | ----------------------------------------------- |
| 1–4 | `creator`, `authority`, `pool_state`, `amm_config` | sem alteração                                   |
| 5   | `token_0_vault`                                    | **`creator_fee_share`** (novo)                  |
| 6.. | —                                                  | `token_0_vault` e tudo depois, deslocado por um |

`CollectCreatorFeePermissionless` — duas inserções:

| #   | Antes                                         | Depois                                            |
| --- | --------------------------------------------- | ------------------------------------------------- |
| 1–4 | `payer`, `creator`, `authority`, `pool_state` | sem alteração                                     |
| 5   | `token_0_vault`                               | **`amm_config`** (novo)                           |
| 6   | `token_1_vault`                               | **`creator_fee_share`** (novo)                    |
| 7.. | —                                             | `token_0_vault` e tudo depois, deslocado por dois |

<Warning>
  Nenhuma mudança falha de forma alta e útil. As contas inseridas não estão no final da lista, então um cliente antigo não "perde uma conta" — ele passa ao programa um cofre onde um config é esperado e a transação falha na desserialização. Regenere a partir do novo IDL e verifique se qualquer lançamento de SDK que você fixar carrega as novas contas antes de apontá-lo para o programa atualizado.
</Warning>

Tabelas de contas completas em [`products/cpmm/instructions`](/pt/products/cpmm/instructions#collectcreatorfee).

## `CreateCreatorFeeShare` e `CloseCreatorFeeShare`

```rust theme={null}
pub struct CreatorFeeShare {
    pub bump: u8,
    pub creator: Pubkey,
    pub amm_config: Pubkey,
    pub share_rate: u64,
    pub padding: [u64; 8],
}
// CreatorFeeShare::LEN == 145
```

`CreateCreatorFeeShare(share_rate: u64)` inicializa o PDA; `CloseCreatorFeeShare` o fecha e retorna o aluguel ao signatário. Ambos aceitam o admin do programa compartilhado **ou** um proprietário dedicado de compartilhamento de taxa de criador — um novo par de chaves codificado seguindo o mesmo padrão `cfg` devnet/mainnet que as outras autoridades delegadas do programa. Endereços em [`reference/program-addresses`](/pt/reference/program-addresses#cpmm-creator-fee-share-authority).

Pontos dignos de nota:

* **O criador do pool não é parte de nenhuma instrução** e não assina. A conta `creator` não é verificada — o PDA pode ser criado para uma chave que ainda não possui nenhum pool.
* **Uma conta cobre um par `(creator, amm_config)`**, então governa cada pool que esse criador possui nesse nível de taxa. Um criador com pools em dois níveis precisa de duas contas para ser coberto em ambos.
* **Não há caminho de atualização.** `init` falha em uma segunda criação para o mesmo par; para alterar uma taxa, feche e recrie.

## Parâmetro 8 de `UpdateAmmConfig`

```rust theme={null}
Some(8) => update_creator_fee_share_rate(amm_config, value),   // asserts value <= 1_000_000
```

Define o compartilhamento padrão do nível de taxa. Não está relacionado a `protocol_fee_rate` (parâmetro `1`), que divide a taxa de **negociação** — um ponto que vale a pena ter cuidado nas ferramentas de admin, já que os dois se parecem e ambos caem em `protocol_fees_token*`.

## Viajando junto

**Correção de ordenação de `CollectExcessLamports`.** A instrução agora faz duas passagens sobre `remaining_accounts` — cada CPI de programa de token primeiro, depois os débitos diretos de PDAs de propriedade do CPMM — em vez de despachar em ordem do chamador. Intercalar os dois abortou com `UnbalancedInstruction` do runtime ("a soma dos saldos de conta antes e depois da instrução não correspondem") sempre que um PDA era debitado antes de um CPI, porque as mudanças de lamport pendentes do chamador são apenas liberadas nas contas que um CPI realmente carrega. A interface da instrução não foi alterada; os chamadores ainda passam fontes em qualquer ordem, e agora isso é genuinamente seguro.

**Metadados de compilação verificável.** O `Cargo.toml` do workspace declara `[workspace.metadata.cli] solana = "3.1.10"`, então uma compilação verificável resolve o mesmo Solana CLI contra o qual o programa foi compilado. Sem efeito on-chain.

## O que não mudou

* **`PoolState`** — 637 bytes, mesmos campos, mesmos offsets. A parte do protocolo reutiliza o bucket de protocolo existente em vez de adicionar contadores próprios.
* **`AmmConfig::LEN`** — ainda 236 bytes.
* **Matemática de swap, cotação e a verificação `k`.** A taxa de criador é cobrada exatamente como antes.
* **`CollectProtocolFee` / `CollectFundFee`** — mesmas contas, mesmos signatários. `CollectProtocolFee` simplesmente tem mais para coletar.
* **Códigos de erro.** `6000`–`6015` sem alteração; nada acrescentado.
* **Cada outra instrução** e o ID do programa.

## Páginas atualizadas

* `products/cpmm/fees` — nova seção "Compartilhamento de protocolo da taxa do criador" cobrindo resolução de taxa, aritmética de divisão, arredondamento e consequências do integrador; `creator_fee_share_rate` adicionado à lista de taxas/unidades e tabela de parâmetros padrão; tabela de fluxo de coleta reformulada.
* `products/cpmm/instructions` — aviso de mudança quebrada no topo; tabelas de contas completas para ambos os caminhos de taxa de criador; novas seções `CreateCreatorFeeShare` e `CloseCreatorFeeShare`; parâmetro `8` de `UpdateAmmConfig`; nota de ordenação de `CollectExcessLamports`; linhas de resumo e matriz de mudança de estado.
* `products/cpmm/accounts` — nova seção de conta `CreatorFeeShare`; layout de `AmmConfig` e aviso de carve de padding; notas de contador de taxa de `PoolState`; linhas de ciclo de vida de conta.
* `products/cpmm/overview` — chamada de taxa de criador e o marcador "Taxas previsíveis".
* `products/cpmm/math` — uma nota de que a divisão é deliberadamente ausente da matemática de swap.
* `products/cpmm/code-demos` — aviso de que construtores de SDK pré-atualização emitem as listas de contas antigas; snippet de taxa acumulada anotado.
* `reference/program-addresses` — nova seção "Autoridade de compartilhamento de taxa de criador do CPMM"; `creator_fee_share` adicionado ao bloco de seed de PDA.
* `reference/fee-comparison` — `creator_fee_share_rate` chamado como uma quarta taxa de CPMM com uma base diferente.
