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

# Матрица поддержки Token-2022

> Какие программы Raydium поддерживают Token-2022, какой список расширений разрешен в каждой программе при создании пула, и пути обхода (статический список адресов, реестр для каждого токена, обнаружение Superstate), которые допускают иначе отклоненные токены.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/reference/token-2022-support)
</Info>

Raydium **не принимает** произвольные токены Token-2022. CPMM и CLMM работают в строгом режиме **списка разрешений**: по умолчанию проходит только небольшой набор расширений; все остальное отклоняется при создании пула. Несколько проверенных токенов допускаются через замороженные адреса; CLMM дополнительно поддерживает управляемый администратором реестр для каждого токена и обнаружение токенов Superstate во время выполнения. Эта страница — справочник по всему, что проверяется и где, с ссылками на исходный код программы.

## Поддержка на уровне программы

| Программа       | Токены Token-2022 base/quote? | Режим                                                                                                                                                                                                                                                                                                                 |
| --------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **CPMM**        | Да — с ограничением           | Строгий список разрешений расширений + статический список из 4 токенов.                                                                                                                                                                                                                                               |
| **CLMM**        | Да — с ограничением           | Строгий список разрешений расширений + статический список из 6 токенов + управляемый администратором реестр + обнаружение Superstate.                                                                                                                                                                                 |
| **AMM v4**      | Нет                           | Программа предшествует Token-2022; оба токена должны быть классическим SPL Token.                                                                                                                                                                                                                                     |
| **Stable AMM**  | Нет                           | Те же ограничения, что и AMM v4.                                                                                                                                                                                                                                                                                      |
| **Farm v6**     | Частично                      | Токен награды может быть Token-2022 (подчиняется тому же списку разрешений, если ферма обертывает LP из CPMM/CLMM); LP токены пользователей наследуют ограничения завернутого пула.                                                                                                                                   |
| **LaunchLab**   | Да, управляется программой    | Базовый токен может быть Token-2022, но только через инструкцию `initialize_with_token_2022`; программа сама создает токен с `MetadataPointer` (всегда) и опционально `TransferFeeConfig` (ставка ≤ 5%). Уже существующие токены Token-2022 с произвольными расширениями не могут использоваться в качестве базового. |
| **Burn & Earn** | Зеркалирует пул программы     | Наследует ограничения CPMM / CLMM.                                                                                                                                                                                                                                                                                    |

Проверки списка разрешений находятся в:

* **CPMM**: `is_supported_mint` в [`raydium-cp-swap/programs/cp-swap/src/utils/token.rs:178`](https://github.com/raydium-io/raydium-cp-swap), вызывается из `Initialize`.
* **CLMM**: `is_supported_mint` в [`raydium-clmm/programs/amm/src/util/token.rs:280`](https://github.com/raydium-io/raydium-clmm), вызывается из `CreatePool`.
* **LaunchLab**: `initialize_with_token_2022` в `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` (исходный код не опубликован).

На CPMM и CLMM **нет** проверки токенов во время свопа — проверка срабатывает только при создании пула. После создания пула свопы просто доверяют тому, что токены не изменились, что корректно для неизменяемых частей состояния mint Token-2022.

## Список разрешений расширений CPMM и CLMM

После проверок статического списка (описаны ниже) программа проходит по расширениям mint и отклоняет mint, если он содержит **любое** расширение, отличное от этих пяти:

| Расширение              | Причина разрешения                                                                                                                                                              |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TransferFeeConfig`     | Математика пула вычитает входящий сбор; программа Token-2022 обрабатывает исходящий сбор. См. [`algorithms/token-2022-transfer-fees`](/ru/algorithms/token-2022-transfer-fees). |
| `MetadataPointer`       | Декоративное — указывает на метаданные в сети.                                                                                                                                  |
| `TokenMetadata`         | Декоративное — встроенные метаданные.                                                                                                                                           |
| `InterestBearingConfig` | Пул видит основную сумму; множитель UI только для отображения, базовый баланс сохраняется.                                                                                      |
| `ScaledUiAmount`        | Та же структура, что и interest-bearing — масштабный коэффициент применяется только к отображению UI.                                                                           |

Что угодно не из этого списка — `TransferHook`, `NonTransferable`, `ConfidentialTransferMint`, `PermanentDelegate`, `MintCloseAuthority`, `DefaultAccountState`, `GroupPointer`, `GroupMemberPointer`, `MemberPointer`, `Pausable` и т.д. — заставляет `is_supported_mint` вернуть `false` и транзакция создания пула откатывается.

Соответствующие строки (CPMM, идентичная структура в 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)

## Пути обхода

Токен Token-2022, не входящий в список разрешений, может быть допущен через один из трех явных путей обхода. Они пробуются по порядку, перед тем как выполняется проверка расширений.

### 1. Статический список адресов токенов

Постоянный массив `MINT_WHITELIST` строк в формате base58 зашифрован в каждой программе. Если адрес mint совпадает, функция сразу же возвращает `true` и проверка расширений не выполняется.

| Программа | Разрешенные токены                                                                                                                                                                             |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CPMM      | `HVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM`, `Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g`, `FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4`, `2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo` |
| CLMM      | Те же четыре, плюс `DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg`, `AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9`                                                                              |

Эти адреса встроены в программу; обновление списка требует обновления программы через мультиподпись 3/4.

### 2. Реестр для каждого токена — только CLMM

CLMM дополнительно обращается к `SupportMintAssociated` PDA с seed `[b"support_mint", mint]`. Если этот PDA существует для токена, токен допускается независимо от набора его расширений.

PDA создается инструкцией `CreateSupportMintAssociated` ([`admin/create_support_mint_associated.rs`](https://github.com/raydium-io/raydium-clmm)). Инструкция защищена двумя подписантами:

* `crate::admin::ID` — стандартный орган администратора Raydium.
* `crate::create_support_mint_associated_owner::ID` — выделенный орган для этой цели: `RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY` (mainnet), `rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5` (devnet).

Эффект: команда CLMM может добавить конкретный токен Token-2022 в создание пула без обновления программы. CPMM не имеет эквивалента — его список разрешений строго задан в исходном коде.

### 3. Обнаружение Superstate — только CLMM

CLMM имеет третий путь специально для токенизированных активов Superstate, которые используют расширение `ScaledUiConfig`, которое версия `spl-token-2022`, связанная с программой CLMM, не может распаковать. Вместо обновления зависимости CLMM обнаруживает токены Superstate по их форме orган:

```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)

Mint проходит эту проверку, если **все четыре** условия верны:

* Его владелец программ — программа Token-2022.
* Его freeze authority равен `superstate_allowlist::ID`. Mainnet: `2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x`. Devnet: `3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu`.
* Его расширение `DefaultAccountState` установлено в `Frozen`.
* Его постоянный делегат также `superstate_allowlist::ID`.

Это эвристика, а не реестр — любой будущий токен, который выпустит Superstate с тем же органом, будет допущен автоматически.

## Что пути обхода не отменяют

Пути обхода пропускают список разрешений расширений, но программа все равно проверяет:

* Mint принадлежит либо `Token`, либо `Token-2022`. Пользовательская программа токенов отклоняется выше по течению.
* Хранилища пула создаются с правильными расширениями ATA для пулов Token-2022 (`ImmutableOwner` и т.д.).
* Все переводы используют `transfer_checked` — токены, несущие комиссии, доставляют правильное количество в хранилище.

Токен из списка разрешений или реестра PDA, который позже добавляет, например, `TransferHook`, не получает проверку во время свопа; hook просто работал бы при каждом переводе и мог бы заблокировать свопы. Поэтому добавление в список разрешений — это действие высокого доверия.

## Семантика "заблокировано"

Когда `is_supported_mint` возвращает `false`, создание пула откатывается с `ErrorCode::NotSupportMint` (CPMM) / `ErrorCode::NotSupportMint` (CLMM). См. [`reference/error-codes`](/ru/reference/error-codes) для числовых кодов.

Существующие пулы не могут ретроактивно не пройти эту проверку — проверка срабатывает только при создании. Расширения mint неизменяемы для категорий, которые Raydium отклоняет (transfer hook, non-transferable, confidential transfer не могут быть добавлены после создания), поэтому статической проверки достаточно.

## Почему каждое исключенное расширение исключено

* **TransferHook** — вызывает пользовательскую программу при каждом переводе с произвольным потреблением CU, произвольными условиями отказа и способностью повторно входить в вызывающую программу. Безопасной песочницы не существует. Некоторые DEXy поддерживают списки разрешений hook; Raydium не поддерживает.
* **NonTransferable** — `Transfer` всегда не удается. Пул не может взять под контроль.
* **ConfidentialTransfer** — суммы переводов зашифрованы; кривая не может оценить своп.
* **PermanentDelegate** — держатель делегата может очистить любой аккаунт токена, включая хранилище пула. Разрешено только через статический список разрешений для проверенных издателей (например, регулируемые stablecoin).
* **MintCloseAuthority** — mint можно закрыть; существующие пулы становятся непригодными. Запрещено по умолчанию.
* **DefaultAccountState (Frozen)** — ATA пула приземлятся в состояние `Frozen` и потребуют оттаивания для каждого аккаунта. Разрешено только через обнаружение Superstate, которое предполагает, что издатель оттаивает институциональные аккаунты при регистрации.
* **Group/Member pointers** — не активно вредны, но не проверены. Запрещены по умолчанию, чтобы сохранить поверхность узкой.

## Учет комиссии передачи

Для mint с `TransferFeeConfig`, каждый своп, депозит и вывод перемещают меньше номинальной суммы. SDK поверхностно представляет обе половины расчета:

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

Правильный UI показывает:

* `amountIn + token2022FeeIn` как "вы отправляете"
* `amountOut - token2022FeeOut` как "вы получаете"
* `feeAmount` как комиссию пула (LP + протокол), которая отделена от комиссии передачи Token-2022

Наивный UI, который показывает только `amountIn → amountOut`, занижает затраты.

### Предел `maximumFee`

Комиссии за передачу Token-2022 ограничены за передачу. Для mint с 1% ставкой и лимитом 10 000 токенов, передача 100 000 000 токенов платит только 10 000 в комиссии. SDK `computeSwapAmount` применяет предел; прямые вызывающие программу должны воспроизвести это.

### Переход на новую эпоху

Орган mint может запланировать изменение ставки комиссии, которое активируется в следующую эпоху. Во время переходного окна два конфигурации (`older`, `newer`) существуют на mint одновременно и `TransferChecked` выбирает по текущей эпохе. И CPMM `SwapV2`, и CLMM `SwapV2` передают полный аккаунт mint в `accounts`, поэтому программа читает правильную конфигурацию без дополнительного поиска.

Если вы котируете более чем на одну эпоху вперед через Trade API или SDK, выполненная комиссия может отличаться от котируемой комиссии — ограничено `maximum_fee_basis_points` старой конфигурации.

## Interest-bearing и ScaledUiAmount

Пул держит основную сумму; "UI сумма" — основная сумма, умноженная на зависимый от времени или установленный администратором масштабный коэффициент. Математика свопа работает с основной суммой:

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

SDK преобразует автоматически. Прямые читатели RPC должны рассматривать `pool.token0Vault.amount` как основную сумму.

## Определение "пула Token-2022"

Пул — это пул Token-2022, если **либо** mint имеет `programId == TokenzQdB...`. API показывает это:

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

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

Используйте `programId` для распределения и `hasTransferFee` для отображения предупреждения UI.

## Помощники 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);
  }
}
```

## Распространенные ошибки интеграции

* **Предварительная проверка только ID программы.** Mint может быть Token-2022 *и* неподдерживаемым. Проверьте список расширений по списку разрешений (и статическому списку) перед разрешением создания пула.
* **Доверие цитате SDK, когда mint вообще не принят.** API цитаты не отказывает в цитировании — создание пула — это то, что откатывается. Подтвердите семантику `is_supported_mint` офф-чейн перед открытием создания пула в вашем UI.
* **Цитирование без скидки на комиссию передачи.** Mint с комиссией передачи 1% с обеих сторон пула CPMM с 0.25% имеет эффективную комиссию около 2.25%, а не 0.25%. Используйте цитату SDK или цитату Trade API — никогда не вычисляйте комиссию вручную только с уровня комиссии пула.
* **Вызов устаревшей инструкции `Swap` для пула Token-2022.** `Swap` предшествует Token-2022. Используйте `SwapV2` всякий раз, когда любой mint — Token-2022.
* **Автоматический список новых токенов Token-2022.** Кошельки и агрегаторы должны проверять `TransferHook` и `NonTransferable` перед отображением токена пользователям; оба враждебны Raydium.

## Будущая работа

Элементы дорожной карты экосистемы Solana и протокола, которые изменили бы эту матрицу:

* Разрешенные на уровне Solana программы transfer-hook (соглашение об экосистеме развивается).
* AMM, совместимые с confidential-transfer (стадия исследования).
* Более широкий реестр CPMM для каждого токена (паритет с CLMM).
* Обновление зависимости, чтобы декодирование `ScaledUiConfig` CLMM работало без эвристики Superstate.

Эта страница будет обновлена, когда любой из них приземлится.

## Указатели

* [`algorithms/token-2022-transfer-fees`](/ru/algorithms/token-2022-transfer-fees) — математика комиссии в свопах.
* [`products/cpmm/instructions`](/ru/products/cpmm/instructions) — `SwapV2`, `Initialize`.
* [`products/clmm/instructions`](/ru/products/clmm/instructions) — `SwapV2`, `CreatePool`, `CreateSupportMintAssociated`.
* [`reference/error-codes`](/ru/reference/error-codes) — числовые коды `NotSupportMint` для каждой программы.

Источники:

* `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` — инструкция реестра для каждого токена.
* `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` — создание базового mint Token-2022 LaunchLab.
