> ## 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.

# Matriz de suporte Token-2022

> Quais programas da Raydium suportam Token-2022, a lista de permissões de extensões explícitas que cada programa aplica na criação de pool, e os caminhos de bypass (lista branca de mints estática, registro por mint, detecção Superstate) que admitem mints de outra forma rejeitados.

<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/token-2022-support)
</Info>

A Raydium **não** aceita mints Token-2022 arbitrárias. CPMM e CLMM executam um modo de **lista de permissões rigorosa**: apenas um pequeno conjunto de extensões passa por padrão; tudo mais é rejeitado na criação do pool. Algumas mints confiáveis são admitidas por endereço codificado; CLMM ainda suporta um registro por mint gerenciado por admin e uma detecção de token Superstate em tempo de execução. Esta página é a referência única para o que é aplicado e onde, com citações de arquivo e linha no código-fonte do programa.

## Suporte no nível do programa

| Programa        | Mints Token-2022 base/quote?  | Modo                                                                                                                                                                                                                                                                                              |
| --------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **CPMM**        | Sim — restrito                | Lista de permissões de extensões rigorosa + lista branca estática de 4 mints.                                                                                                                                                                                                                     |
| **CLMM**        | Sim — restrito                | Lista de permissões de extensões rigorosa + lista branca estática de 6 mints + registro por mint do admin + detecção Superstate.                                                                                                                                                                  |
| **AMM v4**      | Não                           | O programa é anterior ao Token-2022; ambas as mints devem ser SPL Token clássico.                                                                                                                                                                                                                 |
| **Stable AMM**  | Não                           | As mesmas restrições que AMM v4.                                                                                                                                                                                                                                                                  |
| **Farm v6**     | Sim, parcial                  | A mint de recompensa pode ser Token-2022 (sujeita à mesma lista de permissões quando um farm envolve um LP CPMM/CLMM); as mints LP de stake do usuário herdam do pool envolvido.                                                                                                                  |
| **LaunchLab**   | Sim, gerenciado pelo programa | A mint base pode ser Token-2022, mas apenas via instrução dedicada `initialize_with_token_2022`; o programa cria a mint com `MetadataPointer` (sempre) e opcionalmente `TransferFeeConfig` (taxa ≤ 5%). Mints Token-2022 pré-existentes com extensões arbitrárias não podem ser usadas como base. |
| **Burn & Earn** | Espelha programa de pool      | Herda restrições de CPMM / CLMM.                                                                                                                                                                                                                                                                  |

As verificações de lista de permissões vivem em:

* **CPMM**: `is_supported_mint` em [`raydium-cp-swap/programs/cp-swap/src/utils/token.rs:178`](https://github.com/raydium-io/raydium-cp-swap), chamado de `Initialize`.
* **CLMM**: `is_supported_mint` em [`raydium-clmm/programs/amm/src/util/token.rs:280`](https://github.com/raydium-io/raydium-clmm), chamado de `CreatePool`.
* **LaunchLab**: `initialize_with_token_2022` em `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` (código-fonte não disponível publicamente).

**Não há** verificação de mint no momento do swap em CPMM ou CLMM — a restrição funciona apenas na criação do pool. Uma vez que um pool existe, os swaps simplesmente confiam que as mints não mudaram, o que é correto para as partes imutáveis do estado de mint Token-2022.

## Lista de permissões de extensões CPMM e CLMM

Após a lista branca estática fazer o bypass (coberta abaixo), o programa itera as extensões da mint e rejeita a mint se ela carregar **qualquer** extensão diferente destas cinco:

| Extensão                | Razão pela qual é permitida                                                                                                                                                         |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TransferFeeConfig`     | A matemática do pool subtrai a taxa de entrada; o programa Token-2022 trata a taxa de saída. Veja [`algorithms/token-2022-transfer-fees`](/pt/algorithms/token-2022-transfer-fees). |
| `MetadataPointer`       | Decorativa — aponta para metadados on-chain.                                                                                                                                        |
| `TokenMetadata`         | Decorativa — metadados inline.                                                                                                                                                      |
| `InterestBearingConfig` | O pool vê o valor principal; o multiplicador da UI é apenas decorador e o saldo subjacente é preservado.                                                                            |
| `ScaledUiAmount`        | Mesma forma que interesse acumulado — fator de escala se aplica apenas à exibição da UI.                                                                                            |

Qualquer coisa não nesta lista — `TransferHook`, `NonTransferable`, `ConfidentialTransferMint`, `PermanentDelegate`, `MintCloseAuthority`, `DefaultAccountState`, `GroupPointer`, `GroupMemberPointer`, `MemberPointer`, `Pausable`, etc. — causa `is_supported_mint` retornar `false` e a criação do pool reverter.

As linhas relevantes (CPMM, forma idêntica em CLMM):

```rust theme={null}
for e in extensions {
    if e != ExtensionType::TransferFeeConfig
        && e != ExtensionType::MetadataPointer
        && e != ExtensionType::TokenMetadata
        && e != ExtensionType::InterestBearingConfig
        && e != ExtensionType::ScaledUiAmount
    {
        return Ok(false);
    }
}
Ok(true)
```

— [`cp-swap/src/utils/token.rs:190–200`](https://github.com/raydium-io/raydium-cp-swap)

## Caminhos de bypass

Uma mint Token-2022 que não se encaixa na lista de permissões ainda pode ser admitida através de um dos três bypasses explícitos. Eles são tentados em ordem, antes da iteração de extensões ser executada.

### 1. Lista branca estática de mints

Um array constante `MINT_WHITELIST` de strings base58 é codificado em cada programa. Se o endereço da mint corresponder, a função retorna `true` imediatamente e nenhuma verificação de extensão é executada.

| Programa | Mints na lista branca                                                                                                                                                                          |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CPMM     | `HVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM`, `Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g`, `FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4`, `2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo` |
| CLMM     | As mesmas quatro, mais `DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg`, `AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9`                                                                          |

Esses endereços são incorporados no programa; atualizar a lista requer uma atualização de programa através do multisig de upgrade 3/4.

### 2. Registro por mint — apenas CLMM

CLMM adicionalmente consulta um PDA `SupportMintAssociated` no seed `[b"support_mint", mint]`. Se esse PDA existir para a mint, ela é admitida independentemente de seu conjunto de extensões.

O PDA é criado por `CreateSupportMintAssociated` ([`admin/create_support_mint_associated.rs`](https://github.com/raydium-io/raydium-clmm)). A instrução é restrita a dois signatários:

* `crate::admin::ID` — a autoridade de admin padrão da Raydium.
* `crate::create_support_mint_associated_owner::ID` — uma autoridade dedicada para este fim: `RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY` (mainnet), `rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5` (devnet).

Efeito: o time CLMM pode optar por uma mint Token-2022 específica na criação do pool sem uma atualização de programa. CPMM não tem equivalente — sua lista de permissões é estritamente codificada na fonte.

### 3. Detecção Superstate — apenas CLMM

CLMM tem um terceiro caminho especificamente para ativos tokenizados da Superstate, que usam a extensão `ScaledUiConfig` que a versão de `spl-token-2022` vinculada ao programa CLMM não consegue desempacotar. Em vez de atualizar a dependência, CLMM detecta tokens Superstate pela forma de sua autoridade:

```rust theme={null}
superstate_allowlist::ID == freeze_authority
    && *mint_account_info.owner == spl_token_2022::ID
    && default_account_state_freeze
    && maybe_permanent_delegate
```

— [`raydium-clmm/programs/amm/src/util/token.rs:485`](https://github.com/raydium-io/raydium-clmm)

Uma mint passa neste branch se **todos os quatro** forem verdadeiros:

* Seu programa proprietário é o programa Token-2022.
* Sua autoridade de freeze é igual a `superstate_allowlist::ID`. Mainnet: `2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x`. Devnet: `3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu`.
* Sua extensão `DefaultAccountState` está definida como `Frozen`.
* Seu delegado permanente também é `superstate_allowlist::ID`.

Isto é uma heurística, não um registro — qualquer mint futura que a Superstate emitir com a mesma forma de autoridade será admitida automaticamente.

## O que os bypasses não dispensam

Os bypasses saltam a lista de permissões de extensões, mas o programa ainda aplica:

* A mint é proprietária de `Token` ou `Token-2022`. Um programa de token customizado é rejeitado antes.
* Os vaults do pool são criados com as extensões ATA corretas para pools Token-2022 (`ImmutableOwner`, etc.).
* Todas as transferências passam por `transfer_checked` — mints com taxa desembarcam o valor certo no vault.

Uma mint na lista branca ou registrada em PDA que, por exemplo, adicione um `TransferHook` depois não ganha uma verificação no momento do swap; o hook simplesmente seria executado em cada transferência e poderia impedir swaps. A lista branca é portanto uma ação de alta confiança.

## Semântica de "bloqueado"

Quando `is_supported_mint` retorna `false`, a criação do pool reverte com `ErrorCode::NotSupportMint` (CPMM) / `ErrorCode::NotSupportMint` (CLMM). Veja [`reference/error-codes`](/pt/reference/error-codes) para os códigos numéricos.

Pools existentes não podem falhar esta verificação retroativamente — a restrição funciona apenas na criação. Extensões de mint são imutáveis para as categorias que Raydium rejeita (transfer hook, não-transferável, confidential transfer não podem ser adicionados pós-criação), portanto a verificação estática é suficiente.

## Por que cada extensão excluída é excluída

* **TransferHook** — invoca um programa customizado em cada transferência, com consumo de CU arbitrário, condições de falha arbitrárias, e a capacidade de reentrar o programa chamador. Nenhuma sandbox segura existe. Alguns DEXes mantêm listas de permissões de hooks; Raydium não.
* **NonTransferable** — `Transfer` sempre falha. Um pool não pode tomar custódia.
* **ConfidentialTransfer** — valores de transferência são criptografados; a curva não consegue precificar o swap.
* **PermanentDelegate** — um titular do delegado pode varrer qualquer conta de token, incluindo o vault do pool. Permitido apenas via lista branca estática para emissores confiáveis (por exemplo, stablecoins reguladas).
* **MintCloseAuthority** — a mint pode ser fechada; pools existentes ficam inutilizáveis. Desalojado por padrão.
* **DefaultAccountState (Frozen)** — ATAs do pool aterrissariam em estado `Frozen` e exigiriam descongelamento por conta. Permitido apenas via detecção Superstate, que assume que o emissor descongela contas institucionais na inscrição.
* **Group/Member pointers** — não ativamente prejudiciais, mas não revisados. Desalojados por padrão para manter a superfície estreita.

## Contabilidade de taxa de transferência

Para mints carregando `TransferFeeConfig`, cada swap, depósito e saque movem menos que o valor nominal. O SDK exibe ambas as metades do cálculo:

```ts theme={null}
const { amountIn, amountOut, feeAmount, token2022FeeIn, token2022FeeOut } =
  await raydium.cpmm.computeSwapAmount({ ... });
```

Uma UI correta mostra:

* `amountIn + token2022FeeIn` como "você envia"
* `amountOut - token2022FeeOut` como "você recebe"
* `feeAmount` como a taxa do pool (LP + protocolo), que é separada da taxa de transferência Token-2022

Uma UI ingênua que mostra apenas `amountIn → amountOut` subestima custos.

### Cap `maximumFee`

Taxas de transferência Token-2022 são capitalizadas por transferência. Para uma mint de 1% com um cap de 10.000 tokens, uma transferência de 100.000.000 tokens paga apenas 10.000 em taxa. O `computeSwapAmount` do SDK aplica o cap; chamadores diretos de programa devem replicá-lo.

### Transição de época

Uma autoridade de mint pode agendar uma mudança de taxa que se ativa na próxima época. Durante a janela de transição, duas configs (`older`, `newer`) vivem na mint de uma vez e `TransferChecked` seleciona pela época atual. CPMM `SwapV2` e CLMM `SwapV2` ambas passam a conta de mint completa em `accounts`, portanto o programa lê a config correta sem um lookup extra.

Se você cotar mais de uma época antecipadamente via Trade API ou SDK, a taxa executada pode diferir da taxa cotada — limitada pelos `maximum_fee_basis_points` da config mais antiga.

## Interest-bearing e ScaledUiAmount

O pool detém o valor principal; o "valor da UI" é o principal multiplicado por um fator de escala dependente do tempo ou definido por admin. A matemática do swap opera no principal:

```
principal_in = ui_amount_in / ui_multiplier(now)
```

O SDK converte automaticamente. Leitores de RPC direto devem tratar `pool.token0Vault.amount` como principal.

## Definição de "pool Token-2022"

Um pool é um pool Token-2022 se **qualquer** mint tem `programId == TokenzQdB...`. A API exibe isto:

```
GET /pools/info/ids?ids=<POOL_ID>
```

```json theme={null}
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
```

Use `programId` para dispatch e `hasTransferFee` para exibir um aviso de UI.

## Helpers de SDK

```ts theme={null}
import { Raydium, TOKEN_2022_PROGRAM_ID } from "@raydium-io/raydium-sdk-v2";
import { ExtensionType, getExtensionTypes, unpackMint } from "@solana/spl-token";

const raydium = await Raydium.load({ owner, connection });

const acct = await connection.getAccountInfo(mintPubkey);
if (!acct) throw new Error("mint not found");
const mint = unpackMint(mintPubkey, acct, acct.owner);

if (acct.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  const extensions = getExtensionTypes(mint.tlvData);
  const accepted = new Set([
    ExtensionType.TransferFeeConfig,
    ExtensionType.MetadataPointer,
    ExtensionType.TokenMetadata,
    ExtensionType.InterestBearingConfig,
    ExtensionType.ScaledUiAmount,
  ]);
  const rejecting = extensions.filter(e => !accepted.has(e));
  if (rejecting.length) {
    console.warn("Pool creation will revert unless this mint is whitelisted:", rejecting);
  }
}
```

## Erros comuns de integração

* **Fazer pré-flighting apenas do ID do programa.** Uma mint pode ser Token-2022 *e* não suportada. Caminhe pela lista de extensões contra a lista de permissões (e a lista branca estática) antes de permitir criação de pool.
* **Confiar na cotação do SDK quando a mint não é aceita de forma alguma.** A API de cotação não se recusa a cotar — a criação do pool é o que reverte. Confirme a semântica `is_supported_mint` offline antes de expor a criação de pool em sua UI.
* **Cotar sem o corte de taxa de transferência.** Uma mint com taxa de transferência de 1% em ambos os lados de um pool CPMM de 0,25% tem uma taxa efetiva em torno de 2,25%, não 0,25%. Use a cotação do SDK ou cotação da Trade API — nunca compute taxa manualmente apenas a partir do tier de taxa do pool.
* **Chamar a instrução `Swap` legada em um pool Token-2022.** `Swap` é anterior ao Token-2022. Use `SwapV2` sempre que qualquer mint for Token-2022.
* **Auto-listar novas mints Token-2022.** Wallets e agregadores devem verificar `TransferHook` e `NonTransferable` antes de exibir uma mint aos usuários; ambas são hostis à Raydium.

## Trabalho futuro

Itens do roteiro do ecossistema Solana e protocolo que mudariam esta matriz:

* Programas de transfer-hook em lista de permissões no nível Solana (convenção do ecossistema evoluindo).
* AMMs compatíveis com confidential-transfer (fase de pesquisa).
* Registro por mint CPMM mais amplo (paridade com CLMM).
* Atualização de dependência para que a decodificação `ScaledUiConfig` do CLMM funcione sem a heurística Superstate.

Esta página será atualizada quando qualquer uma delas se materializar.

## Ponteiros

* [`algorithms/token-2022-transfer-fees`](/pt/algorithms/token-2022-transfer-fees) — matemática de taxa em swaps.
* [`products/cpmm/instructions`](/pt/products/cpmm/instructions) — `SwapV2`, `Initialize`.
* [`products/clmm/instructions`](/pt/products/clmm/instructions) — `SwapV2`, `CreatePool`, `CreateSupportMintAssociated`.
* [`reference/error-codes`](/pt/reference/error-codes) — códigos numéricos `NotSupportMint` por programa.

Fontes:

* `raydium-cp-swap/programs/cp-swap/src/utils/token.rs` — `MINT_WHITELIST`, `is_supported_mint`.
* `raydium-clmm/programs/amm/src/util/token.rs` — `MINT_WHITELIST`, `superstate_allowlist`, `is_superstate_token`, `is_supported_mint`.
* `raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs` — instrução de registro por mint.
* `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` — criação de mint base Token-2022 do LaunchLab.
