Перейти к основному содержанию

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.

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

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

Anchor присваивает каждому варианту перечисления ErrorCode программы числовой код, начиная с 6000. В случае неудачной транзакции возникают:
  • Числовой код ошибки (например, 0x1771 = 6001) в логах транзакции.
  • Имя ошибки (например, InvalidOwner) из IDL.
  • Строка #[msg(...)], которую Anchor записывает в log_messages.
Интеграторам следует сопоставлять ошибки по числовому коду, а не по строке сообщения (строка может быть изменена без обновления версии).
// 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. Источник: raydium-cp-swap/programs/cp-swap/src/error.rs.
КодВариантСтрока #[msg]Типичная причинаРекомендуемое сообщение
6000NotApprovedNot approvedВызывающий не является настроенным authority для административной инструкции.”Только администратор пула может выполнить это действие.”
6001InvalidOwnerInput account owner is not the program addressПереданный аккаунт принадлежит не той программе (чаще всего неверная token-программа или PDA чужой программы).”Внутренняя ошибка: несоответствие владельца аккаунта — обновите данные и повторите попытку.”
6002EmptySupplyInput token account emptyБаланс LP- или токен-аккаунта равен нулю на шаге, требующем положительного значения.”Нечего выводить.”
6003InvalidInputInvalidInputОбщая ошибка аргумента (значение вне допустимого диапазона, неверный флаг).”Некорректный ввод — проверьте суммы и повторите попытку.”
6004IncorrectLpMintAddress of the provided lp token mint is incorrectПереданный аккаунт LP mint не совпадает с pool_state.lp_mint.”Внутренняя ошибка: неверный LP mint — обновите данные пула.”
6005ExceededSlippageExceeds desired slippage limitИсполненная цена хуже указанного пользователем minAmountOut / maxAmountIn.”Цена вышла за пределы допустимого slippage. Увеличьте slippage или повторите попытку.”
6006ZeroTradingTokensGiven pool token amount results in zero trading tokensПри вычислениях депозита/вывода одна из сторон округлилась до нуля (слишком маленькая позиция).”Сумма ниже минимальной для этого пула.”
6007NotSupportMintNot support token_2022 mint extension (грамматика в источнике)Пул столкнулся с расширением Token-2022, которое не может обработать безопасно (например, TransferHook, DefaultAccountState=Frozen).”Этот токен имеет расширение, которое CPMM Raydium не поддерживает.”
6008InvalidVaultinvaild vault (опечатка в источнике)Переданный vault-аккаунт не совпадает с записанным в pool_state.”Внутренняя ошибка: неверный vault — обновите данные и повторите попытку.”
6009InitLpAmountTooLessInit lp amount is too less(Because 100 amount lp will be locked) (грамматика в источнике)При инициализации пула вычисленное предложение LP ниже суммы постоянной блокировки.”Начальная ликвидность слишком мала. Увеличьте депозит.”
6010TransferFeeCalculateNotMatchTransferFee calculate not matchФактическая сумма после перевода для mint с комиссией Token-2022 не совпала с предварительно рассчитанным значением.”Комиссия за перевод токена изменилась в ходе транзакции. Повторите попытку.”
6011MathOverflowMath overflowПереполнение при промежуточном вычислении swap / депозита / комиссии.”Сумма слишком велика для этого пула.”
6012InsufficientVaultInsufficient vaultБаланс vault пула недостаточен для покрытия запрошенного вывода.”В пуле недостаточно ликвидности для данного объёма.”
6013InvalidFeeModelInvalid fee modelАдминистратор задал комбинацию параметров AmmConfig, которую on-chain программа отклоняет.Н/Д — путь только для администратора.
6014NoFeeCollectFee is zerocollect_protocol_fee / collect_fund_fee вызван при нулевых накопленных комиссиях.Н/Д — путь администратора; инструментарий должен игнорировать.
Источник для перегенерации: github.com/raydium-io/raydium-cp-swap — error.rs.

Ошибки CLMM

Program ID: см. reference/program-addresses. Источник: raydium-clmm/programs/amm/src/error.rs.
КодВариантСтрока #[msg]Типичная причинаРекомендуемое сообщение
6000NotApprovedNot approvedВызывающий не является настроенным администратором для этой инструкции.”Только администратор пула может выполнить это действие.”
6001InvalidUpdateConfigFlaginvalid update amm config flagАдминистратор передал нераспознанное значение param в update_amm_config.Н/Д — путь только для администратора.
6002AccountLackAccount lackВ транзакции отсутствует необходимый remaining-аккаунт (как правило, tick-array или расширение oracle).”Внутренняя ошибка: отсутствует аккаунт — обновите данные пула.”
6003ClosePositionErrRemove liquidity, collect fees owed and reward then you can close position accountПопытка закрыть позицию, в которой ещё есть ликвидность, не собранные комиссии или вознаграждения.”Выведите всю ликвидность и заберите комиссии/вознаграждения перед закрытием позиции.”
6004InvalidTickIndexTick out of rangetick_lower или tick_upper выходит за пределы [-443636, 443636].”Ценовой диапазон выходит за границы этого пула.”
6005TickInvalidOrderThe lower tick must be below the upper ticktick_lower >= tick_upper.”Нижняя цена должна быть меньше верхней.”
6006TickLowerOverflowThe tick must be greater, or equal to the minimum tick(-443636)Нижний тик вышел за нижнюю границу.”Нижняя цена слишком мала.”
6007TickUpperOverflowThe tick must be lesser than, or equal to the maximum tick(443636)Верхний тик вышел за верхнюю границу.”Верхняя цена слишком велика.”
6008TickAndSpacingNotMatchtick % tick_spacing must be zeroУказанный тик не кратен tick_spacing пула.”Выровняйте цену по ближайшему допустимому шагу.”
6009InvalidTickArrayInvalid tick array accountДля слота tick-array передан неверный PDA.”Внутренняя ошибка: неверный tick array — обновите данные пула.”
6010InvalidTickArrayBoundaryInvalid tick array boundaryОшибка на единицу при индексации tick-array.”Внутренняя ошибка: граница tick-array.”
6011SqrtPriceLimitOverflowSquare root price limit overflowПереданный вызывающим sqrt_price_limit вне допустимого диапазона.”Ценовой лимит вне допустимого диапазона.”
6012SqrtPriceX64sqrt_price_x64 out of rangeТекущая sqrt-цена пула вышла за допустимые пределы в ходе swap.”Повторите swap.”
6013LiquiditySubValueErrLiquidity sub delta L must be smaller than beforeНарушение внутреннего инварианта при уменьшении ликвидности.”Внутренняя ошибка: учёт ликвидности.”
6014LiquidityAddValueErrLiquidity add delta L must be greater, or equal to beforeНарушение внутреннего инварианта при увеличении ликвидности.”Внутренняя ошибка: учёт ликвидности.”
6015ForbidBothZeroForSupplyLiquidityBoth token amount must not be zero while supply liquidityВызов increase-liquidity с amount_0_max и amount_1_max, равными нулю одновременно.”Укажите ненулевое количество хотя бы одного токена.”
6016LiquidityInsufficientLiquidity insufficientВ позиции недостаточно ликвидности для выполнения вывода.”Сумма вывода превышает ликвидность позиции.”
6017PriceSlippageCheckPrice slippage checkЦена исполнения не прошла проверку slippage вызывающего.”Цена вышла за пределы допустимого slippage. Увеличьте slippage или повторите попытку.”
6018TooLittleOutputReceivedToo little output receivedSwapBaseInput: полученная сумма ниже other_amount_threshold.”Slippage превышен — минимальный вывод не достигнут.”
6019TooMuchInputPaidToo much input paidSwapBaseOutput: уплаченная сумма выше other_amount_threshold.”Slippage превышен — максимальный ввод превышен.”
6020ZeroAmountSpecifiedSwap special amount can not be zeroНулевое значение amount в инструкции swap.”Укажите сумму больше нуля.”
6021InvalidInputPoolVaultInput pool vault is invalidВходной vault swap-а не совпадает с vault, записанным в пуле.”Внутренняя ошибка: неверный входной vault — обновите данные пула.”
6022TooSmallInputOrOutputAmountSwap input or output amount is too smallМатематика swap округлила до нуля — как правило, слишком маленькая «пыль».”Сумма слишком мала для swap в этом пуле.”
6023NotEnoughTickArrayAccountNot enough tick array accountДля диапазона swap передано недостаточно remaining-аккаунтов tick-array.”Внутренняя ошибка: недостаточно tick-array — обновите данные пула.”
6024InvalidFirstTickArrayAccountInvalid first tick array accountПервый переданный tick-array аккаунт не охватывает текущий тик.”Внутренняя ошибка: неверный первый tick array — обновите данные пула.”
6025InvalidRewardIndexInvalid reward indexreward_index вне диапазона [0, 2].Н/Д — путь администратора.
6026FullRewardInfoThe init reward token reach to the maxВ пуле уже настроено максимальное количество (3) reward mint-ов.Н/Д — путь администратора.
6027RewardTokenAlreadyInUseThe init reward token already in useReward mint дублирует уже существующий.Н/Д — путь администратора.
6028ExceptRewardMintThe reward tokens must contain one of pool vault mint except the last rewardДо слота 2 reward mint должен совпадать с одним из vault mint пула.Н/Д — путь администратора.
6029InvalidRewardInitParamInvalid reward init paramНекорректное время начала/окончания или ставка эмиссии в секунду.Н/Д — путь администратора.
6030InvalidRewardInputAccountNumberInvalid collect reward input account numberВ CollectReward передано неверное количество remaining-аккаунтов.”Внутренняя ошибка: неверное количество аккаунтов — обновите данные и повторите попытку.”
6031InvalidRewardPeriodInvalid reward periodНекорректный период эмиссии вознаграждения (end <= start, нулевая длительность).Н/Д — путь администратора.
6032NotApproveUpdateRewardEmissionsModification of emissions is allowed within 72 hours from the end of the previous cycleАдминистратор попытался изменить эмиссию вне 72-часового окна вокруг границ цикла.Н/Д — путь администратора.
6033UnInitializedRewardInfouninitialized reward infoОбращение к неинициализированному слоту вознаграждения.Н/Д — путь администратора.
6034NotSupportMintNot support token_2022 mint extensionCLMM столкнулся с расширением Token-2022, которое не может обработать.”Этот токен имеет расширение, которое CLMM Raydium не поддерживает.”
6035MissingTickArrayBitmapExtensionAccountMissing tickarray bitmap extension accountSwap пересёк диапазон тиков, не охваченный базовой битмапой; необходим аккаунт расширенной битмапы.”Внутренняя ошибка: отсутствует расширение tick-array — обновите данные пула.”
6036InsufficientLiquidityForDirectionInsufficient liquidity for this directionВ направлении swap недостаточно ликвидности.”Недостаточно ликвидности для данного swap.”
6037MaxTokenOverflowMax token overflowСумма ввода/вывода превысила u64.”Сумма слишком велика для этого пула.”
6038CalculateOverflowCalculate overflowПереполнение при вычислении комиссии или ликвидности.”Сумма слишком велика для этого пула.”
6039TransferFeeCalculateNotMatchTransferFee calculate not matchФактическая сумма при переводе токена Token-2022 с комиссией не совпала с ожидаемой.”Комиссия за перевод токена изменилась в ходе транзакции. Повторите попытку.”
6040OrderAlreadyFilledOrder already fully filled, cannot modifyIncreaseLimitOrder / DecreaseLimitOrder вызван для ордера, у которого незаполненная часть равна нулю.”Этот лимитный ордер уже исполнен — проведите расчёт, чтобы получить средства.”
6041InvalidOrderPhaseInvalid order phaseИзменение ордера, чья фаза FIFO-когорты больше не совпадает с текущей когортой тика.”Это действие недоступно в текущем состоянии ордера.”
6042InvalidLimitOrderAmountInvalid limit order amountРазмер ордера ниже минимального для пула (или нулевой) при открытии / увеличении / уменьшении.”Размер ордера ниже минимального для пула.”
6043OrderPhaseSaturatedTick order phase saturatedСчётчик order_phase когорты на тике насыщен; новые ордера по этой цене недоступны до расчёта и ротации существующих когорт.”Слишком много активных ордеров по этой цене; попробуйте соседний тик или дождитесь расчёта ордеров.”
6044InvalidDynamicFeeConfigParamsInvalid dynamic fee config paramsCreateDynamicFeeConfig / UpdateDynamicFeeConfig отклонён; или CreateCustomizablePool включил динамическую комиссию без корректной конфигурации.Н/Д на пути администратора; «Некорректная конфигурация динамической комиссии» на пользовательском пути.
6045InvalidFeeOnInvalid fee on which token (must be 0, 1, or 2)CreateCustomizablePool передал значение collect_fee_on вне множества {0, 1, 2}.”Внутренняя ошибка: недопустимый режим комиссии.”
6046ZeroSqrtPricesqrt_price_x64 must be greater than 0CreateCustomizablePool (или другой путь, принимающий пользовательскую начальную sqrt-цену) вызван с sqrt_price_x64 == 0.”Начальная цена должна быть больше нуля.”
6047ZeroLiquidityliquidity must be greater than 0Путь предоставления ликвидности вызван с liquidity == 0 без компенсирующей суммы.”Количество ликвидности должно быть больше нуля.”
6048MissingBaseFlagbase_flag is required when liquidity is zeroПуть открытия позиции по сумме вычислил liquidity == 0, а вызывающий не указал base_flag для определения базовой стороны.”Укажите ненулевую ликвидность или задайте, какой токен является базовым.”
6049MissingMintAccountMint account is required but not providedПуть с поддержкой Token-2022 вызван без аккаунта mint входного/выходного токена, необходимого для проверки расширений и комиссий за перевод.”Внутренняя ошибка: отсутствует аккаунт mint — обновите данные пула.”
6050MissingTokenProgram2022Token-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.

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

Эти программы документированы в соответствующих разделах (см. products/amm-v4/instructions, products/farm-staking/instructions, products/launchlab/instructions). Поскольку эти программы используют сочетание Anchor и стандартных механизмов ошибок Solana, их таблицы ошибок находятся рядом со справочником инструкций, а не здесь. Коды ниже зарезервированы соответствующими разделами:
ПрограммаДиапазон кодов (только Anchor)Справочник
AMM v4Пользовательские коды u32, не в стиле Anchorproducts/amm-v4/instructions
Farm v3 / v5Пользовательские коды u32products/farm-staking/instructions
Farm v66000+ (Anchor)products/farm-staking/instructions
LaunchLab6000+ (Anchor)products/launchlab/instructions

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

Официальный TypeScript SDK оборачивает on-chain ошибки в SendTransactionError, а для Anchor-программ — в AnchorError:
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 и безопасен для сопоставления.

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

При обновлении программы и добавлении новой ошибки выполните повторное извлечение из источника:
# 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 при добавлении нового варианта, чтобы интеграторы, обновляющие SDK, знали о необходимости обновить обработчики ошибок. Источники: