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

# Коды ошибок

> Перечисления ошибок Anchor для всех on-chain программ Raydium с описанием причин и рекомендуемыми сообщениями для пользователя.

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

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

<Info>
  **Источник истины.** Таблицы ниже перегенерированы из файла `error.rs` каждой программы в публичных репозиториях Raydium. При обновлении программы и добавлении нового варианта — перезапустите извлечение (ссылка внизу каждой таблицы) и добавьте строку в конец таблицы, не переставляя существующие — коды ошибок Anchor назначаются по **порядку в исходном коде**, а не по имени, поэтому перестановка нарушит обработку ошибок у интеграторов.
</Info>

## Как работают коды ошибок Anchor

Anchor присваивает каждому варианту перечисления `ErrorCode` программы числовой код, начиная с `6000`. В случае неудачной транзакции возникают:

* **Числовой код ошибки** (например, `0x1771` = 6001) в логах транзакции.
* **Имя ошибки** (например, `InvalidOwner`) из IDL.
* **Строка `#[msg(...)]`**, которую Anchor записывает в `log_messages`.

Интеграторам следует сопоставлять ошибки по **числовому коду**, а не по строке сообщения (строка может быть изменена без обновления версии).

```ts theme={null}
// Example: detect the CPMM slippage error and surface a clean UX message.
const CPMM_EXCEEDED_SLIPPAGE = 6005;

try {
  await sdk.cpmm.swap({ ... });
} catch (err: any) {
  const code = err?.error?.errorCode?.number ?? err?.code;
  if (code === CPMM_EXCEEDED_SLIPPAGE) {
    showToast("Price moved past your slippage tolerance. Increase slippage or retry.");
    return;
  }
  throw err;
}
```

## Ошибки CPMM (Standard AMM)

Program ID: см. [reference/program-addresses](/ru/reference/program-addresses#on-chain-programs). Источник: `raydium-cp-swap/programs/cp-swap/src/error.rs`.

| Код  | Вариант                        | Строка `#[msg]`                                                                             | Типичная причина                                                                                                                         | Рекомендуемое сообщение                                                                       |
| ---- | ------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| 6000 | `NotApproved`                  | Not approved                                                                                | Вызывающий не является настроенным authority для административной инструкции.                                                            | "Только администратор пула может выполнить это действие."                                     |
| 6001 | `InvalidOwner`                 | Input account owner is not the program address                                              | Переданный аккаунт принадлежит не той программе (чаще всего неверная token-программа или PDA чужой программы).                           | "Внутренняя ошибка: несоответствие владельца аккаунта — обновите данные и повторите попытку." |
| 6002 | `EmptySupply`                  | Input token account empty                                                                   | Баланс LP- или токен-аккаунта равен нулю на шаге, требующем положительного значения.                                                     | "Нечего выводить."                                                                            |
| 6003 | `InvalidInput`                 | InvalidInput                                                                                | Общая ошибка аргумента (значение вне допустимого диапазона, неверный флаг).                                                              | "Некорректный ввод — проверьте суммы и повторите попытку."                                    |
| 6004 | `IncorrectLpMint`              | Address of the provided lp token mint is incorrect                                          | Переданный аккаунт LP mint не совпадает с `pool_state.lp_mint`.                                                                          | "Внутренняя ошибка: неверный LP mint — обновите данные пула."                                 |
| 6005 | `ExceededSlippage`             | Exceeds desired slippage limit                                                              | Исполненная цена хуже указанного пользователем `minAmountOut` / `maxAmountIn`.                                                           | "Цена вышла за пределы допустимого slippage. Увеличьте slippage или повторите попытку."       |
| 6006 | `ZeroTradingTokens`            | Given pool token amount results in zero trading tokens                                      | При вычислениях депозита/вывода одна из сторон округлилась до нуля (слишком маленькая позиция).                                          | "Сумма ниже минимальной для этого пула."                                                      |
| 6007 | `NotSupportMint`               | Not support token\_2022 mint extension *(грамматика в источнике)*                           | Пул столкнулся с расширением Token-2022, которое не может обработать безопасно (например, `TransferHook`, `DefaultAccountState=Frozen`). | "Этот токен имеет расширение, которое CPMM Raydium не поддерживает."                          |
| 6008 | `InvalidVault`                 | invaild vault *(опечатка в источнике)*                                                      | Переданный vault-аккаунт не совпадает с записанным в `pool_state`.                                                                       | "Внутренняя ошибка: неверный vault — обновите данные и повторите попытку."                    |
| 6009 | `InitLpAmountTooLess`          | Init lp amount is too less(Because 100 amount lp will be locked) *(грамматика в источнике)* | При инициализации пула вычисленное предложение LP ниже суммы постоянной блокировки.                                                      | "Начальная ликвидность слишком мала. Увеличьте депозит."                                      |
| 6010 | `TransferFeeCalculateNotMatch` | TransferFee calculate not match                                                             | Фактическая сумма после перевода для mint с комиссией Token-2022 не совпала с предварительно рассчитанным значением.                     | "Комиссия за перевод токена изменилась в ходе транзакции. Повторите попытку."                 |
| 6011 | `MathOverflow`                 | Math overflow                                                                               | Переполнение при промежуточном вычислении swap / депозита / комиссии.                                                                    | "Сумма слишком велика для этого пула."                                                        |
| 6012 | `InsufficientVault`            | Insufficient vault                                                                          | Баланс vault пула недостаточен для покрытия запрошенного вывода.                                                                         | "В пуле недостаточно ликвидности для данного объёма."                                         |
| 6013 | `InvalidFeeModel`              | Invalid fee model                                                                           | Администратор задал комбинацию параметров `AmmConfig`, которую on-chain программа отклоняет.                                             | Н/Д — путь только для администратора.                                                         |
| 6014 | `NoFeeCollect`                 | Fee is zero                                                                                 | `collect_protocol_fee` / `collect_fund_fee` вызван при нулевых накопленных комиссиях.                                                    | Н/Д — путь администратора; инструментарий должен игнорировать.                                |

Источник для перегенерации: [github.com/raydium-io/raydium-cp-swap — error.rs](https://github.com/raydium-io/raydium-cp-swap/blob/master/programs/cp-swap/src/error.rs).

## Ошибки CLMM

Program ID: см. [reference/program-addresses](/ru/reference/program-addresses#on-chain-programs). Источник: `raydium-clmm/programs/amm/src/error.rs`.

| Код  | Вариант                                  | Строка `#[msg]`                                                                         | Типичная причина                                                                                                                                      | Рекомендуемое сообщение                                                                                 |
| ---- | ---------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| 6000 | `NotApproved`                            | Not approved                                                                            | Вызывающий не является настроенным администратором для этой инструкции.                                                                               | "Только администратор пула может выполнить это действие."                                               |
| 6001 | `InvalidUpdateConfigFlag`                | invalid update amm config flag                                                          | Администратор передал нераспознанное значение `param` в `update_amm_config`.                                                                          | Н/Д — путь только для администратора.                                                                   |
| 6002 | `AccountLack`                            | Account lack                                                                            | В транзакции отсутствует необходимый remaining-аккаунт (как правило, tick-array или расширение oracle).                                               | "Внутренняя ошибка: отсутствует аккаунт — обновите данные пула."                                        |
| 6003 | `ClosePositionErr`                       | Remove liquidity, collect fees owed and reward then you can close position account      | Попытка закрыть позицию, в которой ещё есть ликвидность, не собранные комиссии или вознаграждения.                                                    | "Выведите всю ликвидность и заберите комиссии/вознаграждения перед закрытием позиции."                  |
| 6004 | `InvalidTickIndex`                       | Tick out of range                                                                       | `tick_lower` или `tick_upper` выходит за пределы `[-443636, 443636]`.                                                                                 | "Ценовой диапазон выходит за границы этого пула."                                                       |
| 6005 | `TickInvalidOrder`                       | The lower tick must be below the upper tick                                             | `tick_lower >= tick_upper`.                                                                                                                           | "Нижняя цена должна быть меньше верхней."                                                               |
| 6006 | `TickLowerOverflow`                      | The tick must be greater, or equal to the minimum tick(-443636)                         | Нижний тик вышел за нижнюю границу.                                                                                                                   | "Нижняя цена слишком мала."                                                                             |
| 6007 | `TickUpperOverflow`                      | The tick must be lesser than, or equal to the maximum tick(443636)                      | Верхний тик вышел за верхнюю границу.                                                                                                                 | "Верхняя цена слишком велика."                                                                          |
| 6008 | `TickAndSpacingNotMatch`                 | tick % tick\_spacing must be zero                                                       | Указанный тик не кратен `tick_spacing` пула.                                                                                                          | "Выровняйте цену по ближайшему допустимому шагу."                                                       |
| 6009 | `InvalidTickArray`                       | Invalid tick array account                                                              | Для слота tick-array передан неверный PDA.                                                                                                            | "Внутренняя ошибка: неверный tick array — обновите данные пула."                                        |
| 6010 | `InvalidTickArrayBoundary`               | Invalid tick array boundary                                                             | Ошибка на единицу при индексации tick-array.                                                                                                          | "Внутренняя ошибка: граница tick-array."                                                                |
| 6011 | `SqrtPriceLimitOverflow`                 | Square root price limit overflow                                                        | Переданный вызывающим `sqrt_price_limit` вне допустимого диапазона.                                                                                   | "Ценовой лимит вне допустимого диапазона."                                                              |
| 6012 | `SqrtPriceX64`                           | sqrt\_price\_x64 out of range                                                           | Текущая sqrt-цена пула вышла за допустимые пределы в ходе swap.                                                                                       | "Повторите swap."                                                                                       |
| 6013 | `LiquiditySubValueErr`                   | Liquidity sub delta L must be smaller than before                                       | Нарушение внутреннего инварианта при уменьшении ликвидности.                                                                                          | "Внутренняя ошибка: учёт ликвидности."                                                                  |
| 6014 | `LiquidityAddValueErr`                   | Liquidity add delta L must be greater, or equal to before                               | Нарушение внутреннего инварианта при увеличении ликвидности.                                                                                          | "Внутренняя ошибка: учёт ликвидности."                                                                  |
| 6015 | `ForbidBothZeroForSupplyLiquidity`       | Both token amount must not be zero while supply liquidity                               | Вызов increase-liquidity с `amount_0_max` и `amount_1_max`, равными нулю одновременно.                                                                | "Укажите ненулевое количество хотя бы одного токена."                                                   |
| 6016 | `LiquidityInsufficient`                  | Liquidity insufficient                                                                  | В позиции недостаточно ликвидности для выполнения вывода.                                                                                             | "Сумма вывода превышает ликвидность позиции."                                                           |
| 6017 | `PriceSlippageCheck`                     | Price slippage check                                                                    | Цена исполнения не прошла проверку slippage вызывающего.                                                                                              | "Цена вышла за пределы допустимого slippage. Увеличьте slippage или повторите попытку."                 |
| 6018 | `TooLittleOutputReceived`                | Too little output received                                                              | `SwapBaseInput`: полученная сумма ниже `other_amount_threshold`.                                                                                      | "Slippage превышен — минимальный вывод не достигнут."                                                   |
| 6019 | `TooMuchInputPaid`                       | Too much input paid                                                                     | `SwapBaseOutput`: уплаченная сумма выше `other_amount_threshold`.                                                                                     | "Slippage превышен — максимальный ввод превышен."                                                       |
| 6020 | `ZeroAmountSpecified`                    | Swap special amount can not be zero                                                     | Нулевое значение `amount` в инструкции swap.                                                                                                          | "Укажите сумму больше нуля."                                                                            |
| 6021 | `InvalidInputPoolVault`                  | Input pool vault is invalid                                                             | Входной vault swap-а не совпадает с vault, записанным в пуле.                                                                                         | "Внутренняя ошибка: неверный входной vault — обновите данные пула."                                     |
| 6022 | `TooSmallInputOrOutputAmount`            | Swap input or output amount is too small                                                | Математика swap округлила до нуля — как правило, слишком маленькая «пыль».                                                                            | "Сумма слишком мала для swap в этом пуле."                                                              |
| 6023 | `NotEnoughTickArrayAccount`              | Not enough tick array account                                                           | Для диапазона swap передано недостаточно remaining-аккаунтов tick-array.                                                                              | "Внутренняя ошибка: недостаточно tick-array — обновите данные пула."                                    |
| 6024 | `InvalidFirstTickArrayAccount`           | Invalid first tick array account                                                        | Первый переданный tick-array аккаунт не охватывает текущий тик.                                                                                       | "Внутренняя ошибка: неверный первый tick array — обновите данные пула."                                 |
| 6025 | `InvalidRewardIndex`                     | Invalid reward index                                                                    | `reward_index` вне диапазона `[0, 2]`.                                                                                                                | Н/Д — путь администратора.                                                                              |
| 6026 | `FullRewardInfo`                         | The init reward token reach to the max                                                  | В пуле уже настроено максимальное количество (3) reward mint-ов.                                                                                      | Н/Д — путь администратора.                                                                              |
| 6027 | `RewardTokenAlreadyInUse`                | The init reward token already in use                                                    | Reward mint дублирует уже существующий.                                                                                                               | Н/Д — путь администратора.                                                                              |
| 6028 | `ExceptRewardMint`                       | The reward tokens must contain one of pool vault mint except the last reward            | До слота 2 reward mint должен совпадать с одним из vault mint пула.                                                                                   | Н/Д — путь администратора.                                                                              |
| 6029 | `InvalidRewardInitParam`                 | Invalid reward init param                                                               | Некорректное время начала/окончания или ставка эмиссии в секунду.                                                                                     | Н/Д — путь администратора.                                                                              |
| 6030 | `InvalidRewardInputAccountNumber`        | Invalid collect reward input account number                                             | В `CollectReward` передано неверное количество remaining-аккаунтов.                                                                                   | "Внутренняя ошибка: неверное количество аккаунтов — обновите данные и повторите попытку."               |
| 6031 | `InvalidRewardPeriod`                    | Invalid reward period                                                                   | Некорректный период эмиссии вознаграждения (`end <= start`, нулевая длительность).                                                                    | Н/Д — путь администратора.                                                                              |
| 6032 | `NotApproveUpdateRewardEmissions`        | Modification of emissions is allowed within 72 hours from the end of the previous cycle | Администратор попытался изменить эмиссию вне 72-часового окна вокруг границ цикла.                                                                    | Н/Д — путь администратора.                                                                              |
| 6033 | `UnInitializedRewardInfo`                | uninitialized reward info                                                               | Обращение к неинициализированному слоту вознаграждения.                                                                                               | Н/Д — путь администратора.                                                                              |
| 6034 | `NotSupportMint`                         | Not support token\_2022 mint extension                                                  | CLMM столкнулся с расширением Token-2022, которое не может обработать.                                                                                | "Этот токен имеет расширение, которое CLMM Raydium не поддерживает."                                    |
| 6035 | `MissingTickArrayBitmapExtensionAccount` | Missing tickarray bitmap extension account                                              | Swap пересёк диапазон тиков, не охваченный базовой битмапой; необходим аккаунт расширенной битмапы.                                                   | "Внутренняя ошибка: отсутствует расширение tick-array — обновите данные пула."                          |
| 6036 | `InsufficientLiquidityForDirection`      | Insufficient liquidity for this direction                                               | В направлении swap недостаточно ликвидности.                                                                                                          | "Недостаточно ликвидности для данного swap."                                                            |
| 6037 | `MaxTokenOverflow`                       | Max token overflow                                                                      | Сумма ввода/вывода превысила u64.                                                                                                                     | "Сумма слишком велика для этого пула."                                                                  |
| 6038 | `CalculateOverflow`                      | Calculate overflow                                                                      | Переполнение при вычислении комиссии или ликвидности.                                                                                                 | "Сумма слишком велика для этого пула."                                                                  |
| 6039 | `TransferFeeCalculateNotMatch`           | TransferFee calculate not match                                                         | Фактическая сумма при переводе токена Token-2022 с комиссией не совпала с ожидаемой.                                                                  | "Комиссия за перевод токена изменилась в ходе транзакции. Повторите попытку."                           |
| 6040 | `OrderAlreadyFilled`                     | Order already fully filled, cannot modify                                               | `IncreaseLimitOrder` / `DecreaseLimitOrder` вызван для ордера, у которого незаполненная часть равна нулю.                                             | "Этот лимитный ордер уже исполнен — проведите расчёт, чтобы получить средства."                         |
| 6041 | `InvalidOrderPhase`                      | Invalid order phase                                                                     | Изменение ордера, чья фаза FIFO-когорты больше не совпадает с текущей когортой тика.                                                                  | "Это действие недоступно в текущем состоянии ордера."                                                   |
| 6042 | `InvalidLimitOrderAmount`                | Invalid limit order amount                                                              | Размер ордера ниже минимального для пула (или нулевой) при открытии / увеличении / уменьшении.                                                        | "Размер ордера ниже минимального для пула."                                                             |
| 6043 | `OrderPhaseSaturated`                    | Tick order phase saturated                                                              | Счётчик `order_phase` когорты на тике насыщен; новые ордера по этой цене недоступны до расчёта и ротации существующих когорт.                         | "Слишком много активных ордеров по этой цене; попробуйте соседний тик или дождитесь расчёта ордеров."   |
| 6044 | `InvalidDynamicFeeConfigParams`          | Invalid dynamic fee config params                                                       | `CreateDynamicFeeConfig` / `UpdateDynamicFeeConfig` отклонён; или `CreateCustomizablePool` включил динамическую комиссию без корректной конфигурации. | Н/Д на пути администратора; «Некорректная конфигурация динамической комиссии» на пользовательском пути. |
| 6045 | `InvalidFeeOn`                           | Invalid fee on which token (must be 0, 1, or 2)                                         | `CreateCustomizablePool` передал значение `collect_fee_on` вне множества `{0, 1, 2}`.                                                                 | "Внутренняя ошибка: недопустимый режим комиссии."                                                       |
| 6046 | `ZeroSqrtPrice`                          | sqrt\_price\_x64 must be greater than 0                                                 | `CreateCustomizablePool` (или другой путь, принимающий пользовательскую начальную sqrt-цену) вызван с `sqrt_price_x64 == 0`.                          | "Начальная цена должна быть больше нуля."                                                               |
| 6047 | `ZeroLiquidity`                          | liquidity must be greater than 0                                                        | Путь предоставления ликвидности вызван с `liquidity == 0` без компенсирующей суммы.                                                                   | "Количество ликвидности должно быть больше нуля."                                                       |
| 6048 | `MissingBaseFlag`                        | base\_flag is required when liquidity is zero                                           | Путь открытия позиции по сумме вычислил `liquidity == 0`, а вызывающий не указал `base_flag` для определения базовой стороны.                         | "Укажите ненулевую ликвидность или задайте, какой токен является базовым."                              |
| 6049 | `MissingMintAccount`                     | Mint account is required but not provided                                               | Путь с поддержкой Token-2022 вызван без аккаунта mint входного/выходного токена, необходимого для проверки расширений и комиссий за перевод.          | "Внутренняя ошибка: отсутствует аккаунт mint — обновите данные пула."                                   |
| 6050 | `MissingTokenProgram2022`                | Token-2022 program is required but not provided                                         | То же, что выше, но для аккаунта программы SPL-Token-2022.                                                                                            | "Внутренняя ошибка: отсутствует программа Token-2022 — обновите данные и повторите попытку."            |

> **Замечание о перенумерации.** Перечисление `ErrorCode` CLMM было перенумеровано в этом релизе: пять устаревших вариантов (`LOK`, `ZeroMintAmount`, `InvalidLiquidity`, `TransactionTooOld`, `InvalidRewardDesiredAmount`) и несколько опечаток (`Liquitity`, `enought`, `emissiones`) удалены/исправлены, а одиннадцать новых вариантов добавлены в конец. Поскольку Anchor нумерует ошибки по порядку в исходном коде, все коды начиная с `6000` сместились относительно pre-release сборок. Клиентам, использовавшим жёстко закодированные числовые коды для более ранней версии, необходимо обновить маппинг.

Источник для перегенерации: [github.com/raydium-io/raydium-clmm — error.rs](https://github.com/raydium-io/raydium-clmm/blob/master/programs/amm/src/error.rs).

## Ошибки AMM v4, Farm v3 / v5 / v6, LaunchLab

Эти программы документированы в соответствующих разделах (см. [`products/amm-v4/instructions`](/ru/products/amm-v4/instructions), [`products/farm-staking/instructions`](/ru/products/farm-staking/instructions), [`products/launchlab/instructions`](/ru/products/launchlab/instructions)). Поскольку эти программы используют сочетание Anchor и стандартных механизмов ошибок Solana, их таблицы ошибок находятся рядом со справочником инструкций, а не здесь. Коды ниже зарезервированы соответствующими разделами:

| Программа    | Диапазон кодов (только Anchor)               | Справочник                                                                     |
| ------------ | -------------------------------------------- | ------------------------------------------------------------------------------ |
| AMM v4       | Пользовательские коды u32, не в стиле Anchor | [`products/amm-v4/instructions`](/ru/products/amm-v4/instructions)             |
| Farm v3 / v5 | Пользовательские коды u32                    | [`products/farm-staking/instructions`](/ru/products/farm-staking/instructions) |
| Farm v6      | 6000+ (Anchor)                               | [`products/farm-staking/instructions`](/ru/products/farm-staking/instructions) |
| LaunchLab    | 6000+ (Anchor)                               | [`products/launchlab/instructions`](/ru/products/launchlab/instructions)       |

## Сопоставление ошибок SDK с ошибками программ

Официальный TypeScript SDK оборачивает on-chain ошибки в `SendTransactionError`, а для Anchor-программ — в `AnchorError`:

```ts theme={null}
import { AnchorError } from "@coral-xyz/anchor";

try {
  await sdk.cpmm.swap({ ... });
} catch (err) {
  if (err instanceof AnchorError) {
    console.log(err.error.errorCode.number, err.error.errorCode.code, err.error.errorMessage);
    // 6005 ExceededSlippage "Exceeds desired slippage limit"
  } else {
    // Raw SendTransactionError — inspect err.logs for the "custom program error: 0x..." line.
  }
}
```

Если вы не используете Anchor на стороне клиента, анализируйте логи транзакции:

```
Program <ProgramID> invoke [1]
Program log: AnchorError caused by account: pool_state. Error Code: ExceededSlippage. Error Number: 6005. Error Message: Exceeds desired slippage limit.
```

Шаблон `Error Number: (\d+)` стабилен во всех версиях Anchor и безопасен для сопоставления.

## Перегенерация таблиц

При обновлении программы и добавлении новой ошибки выполните повторное извлечение из источника:

```bash theme={null}
# Clone and grep the error enum in order.
git clone --depth=1 https://github.com/raydium-io/raydium-cp-swap
awk '/#\[msg\(/{ gsub(/^[ \t]*#\[msg\("|"\)\][ \t]*/,""); m=$0; getline; gsub(/,/,""); gsub(/^[ \t]+/,""); print "6000+++\t" $0 "\t" m }' \
  raydium-cp-swap/programs/cp-swap/src/error.rs
# Replace 6000+++ with monotonically-increasing 6000,6001,... Append new rows to the table above.
```

Всегда обновляйте [`reference/changelog`](/ru/reference/changelog) при добавлении нового варианта, чтобы интеграторы, обновляющие SDK, знали о необходимости обновить обработчики ошибок.

Источники:

* [raydium-cp-swap error.rs (mainnet CPMM)](https://github.com/raydium-io/raydium-cp-swap/blob/master/programs/cp-swap/src/error.rs)
* [raydium-clmm error.rs (mainnet CLMM)](https://github.com/raydium-io/raydium-clmm/blob/master/programs/amm/src/error.rs)
