跳转到主要内容

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.

本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
权威来源。 下表从各程序在 Raydium 公开仓库中的 error.rs 自动生成。当程序升级并新增变体时,请重新运行提取脚本(每张表底部有链接),并将新行追加到表尾,而不是重新排列——Anchor 错误代码按源码顺序分配,而非按名称,调整顺序会破坏集成方的错误处理逻辑。

Anchor 错误代码的工作原理

Anchor 从 6000 开始,依次为程序 ErrorCode 枚举的每个变体分配数字代码。交易失败时会暴露以下信息:
  • 数字错误代码(例如 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(标准 AMM)错误

程序 ID:参见 reference/program-addresses。来源:raydium-cp-swap/programs/cp-swap/src/error.rs
代码变体#[msg] 字符串典型原因推荐 UX 提示
6000NotApprovedNot approved调用方不是管理员指令的配置权限账户。“只有池管理员才能执行此操作。“
6001InvalidOwnerInput account owner is not the program address传入账户归属于错误的程序(通常是错误的 token 程序或错误程序的 PDA)。“内部错误:账户所有者不匹配,请刷新后重试。“
6002EmptySupplyInput token account emptyLP 或 token 账户余额为零,而该步骤需要正数金额。“没有可提取的内容。“
6003InvalidInputInvalidInput通用参数错误(金额越界、标志位错误)。“输入无效,请检查金额后重试。“
6004IncorrectLpMintAddress of the provided lp token mint is incorrect传入的 LP mint 账户与 pool_state.lp_mint 不匹配。“内部错误:LP mint 错误,请刷新池数据。“
6005ExceededSlippageExceeds desired slippage limit成交价格比用户设置的 minAmountOut / maxAmountIn 更差。“价格已超出你的滑点容忍范围,请提高滑点或重试。“
6006ZeroTradingTokensGiven pool token amount results in zero trading tokens存款/提款计算将某一侧四舍五入为零(头寸过小)。“金额低于该池的最低要求。“
6007NotSupportMintNot support token_2022 mint extension (语法问题来自源码)池遇到了无法安全处理的 Token-2022 扩展(例如 TransferHookDefaultAccountState=Frozen)。“该代币包含 Raydium CPMM 不支持的扩展。“
6008InvalidVaultinvaild vault (源码拼写错误)传入的 vault 账户与 pool_state 中记录的不匹配。“内部错误:vault 错误,请刷新后重试。“
6009InitLpAmountTooLessInit lp amount is too less(Because 100 amount lp will be locked) (语法问题来自源码)初始化池时,计算出的 LP 供应量低于永久锁定量。“初始流动性过小,请增加存款金额。“
6010TransferFeeCalculateNotMatchTransferFee calculate not matchToken-2022 手续费 mint 转账后的实际金额与预计算值不符。“代币转账手续费在交易中途发生变化,请重试。“
6011MathOverflowMath overflow中间的 swap / 存款 / 手续费计算发生溢出。“该金额对此池而言过大。“
6012InsufficientVaultInsufficient vault池的 vault 余额不足以覆盖所请求的输出金额。“池中流动性不足,无法满足此规模。“
6013InvalidFeeModelInvalid fee model管理员设置的 AmmConfig 参数组合被链上拒绝。N/A — 仅限管理员路径。
6014NoFeeCollectFee is zero调用 collect_protocol_fee / collect_fund_fee 时可收集手续费为零。N/A — 管理员路径;工具层应忽略此错误。
生成来源:github.com/raydium-io/raydium-cp-swap — error.rs

CLMM 错误

程序 ID:参见 reference/program-addresses。来源:raydium-clmm/programs/amm/src/error.rs
代码变体#[msg] 字符串典型原因推荐 UX 提示
6000NotApprovedNot approved调用方不是该指令的配置管理员。“只有池管理员才能执行此操作。“
6001InvalidUpdateConfigFlaginvalid update amm config flag管理员向 update_amm_config 传入了无法识别的 param 值。N/A — 仅限管理员路径。
6002AccountLackAccount lack交易中缺少必需的 remaining account(通常是 tick-array 或 oracle 扩展)。“内部错误:缺少账户,请刷新池数据。“
6003ClosePositionErrRemove liquidity, collect fees owed and reward then you can close position account尝试关闭仍有流动性、未收取手续费或未收取奖励的头寸。“请先提取所有流动性并领取手续费/奖励,再关闭头寸。“
6004InvalidTickIndexTick out of rangetick_lowertick_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)下限 tick 下溢。“下限价格过低。“
6007TickUpperOverflowThe tick must be lesser than, or equal to the maximum tick(443636)上限 tick 溢出。“上限价格过高。“
6008TickAndSpacingNotMatchtick % tick_spacing must be zero提交的 tick 不是池 tick_spacing 的整数倍。“请将价格对齐到最近的有效刻度。“
6009InvalidTickArrayInvalid tick array account传入了错误的 tick-array 槽位 PDA。“内部错误:tick array 错误,请刷新池数据。“
6010InvalidTickArrayBoundaryInvalid tick array boundarytick-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增加流动性时 amount_0_maxamount_1_max 均为零。“请至少提供一种代币。“
6016LiquidityInsufficientLiquidity insufficient头寸流动性不足以满足提取请求。“提取金额超过头寸流动性。“
6017PriceSlippageCheckPrice slippage check成交价格未通过调用方的滑点保护检查。“价格已超出你的滑点容忍范围,请提高滑点或重试。“
6018TooLittleOutputReceivedToo little output receivedSwapBaseInput:输出金额低于 other_amount_threshold“滑点超限,未达到最小输出要求。“
6019TooMuchInputPaidToo much input paidSwapBaseOutput:输入金额超过 other_amount_threshold“滑点超限,超出最大输入限制。“
6020ZeroAmountSpecifiedSwap special amount can not be zeroswap 指令中 amount 为零。“请输入大于零的金额。“
6021InvalidInputPoolVaultInput pool vault is invalidswap 的 input-vault 账户与池记录的 vault 不匹配。“内部错误:input vault 错误,请刷新池数据。“
6022TooSmallInputOrOutputAmountSwap input or output amount is too smallswap 计算结果四舍五入为零,通常因金额极小(dust)。“金额过小,无法在该池中执行 swap。“
6023NotEnoughTickArrayAccountNot enough tick array account为 swap 范围提供的 tick-array remaining accounts 数量不足。“内部错误:tick-array 不足,请刷新池数据。“
6024InvalidFirstTickArrayAccountInvalid first tick array account传入的第一个 tick-array 账户不覆盖当前 tick。“内部错误:首个 tick array 错误,请刷新池数据。“
6025InvalidRewardIndexInvalid reward indexreward_index 超出 [0, 2] 范围。N/A — 管理员路径。
6026FullRewardInfoThe init reward token reach to the max池已配置最大数量(3 个)的奖励 mint。N/A — 管理员路径。
6027RewardTokenAlreadyInUseThe init reward token already in use奖励 mint 与现有 mint 重复。N/A — 管理员路径。
6028ExceptRewardMintThe reward tokens must contain one of pool vault mint except the last reward在第 2 个槽位之前,奖励 mint 必须等于池 vault mint 之一。N/A — 管理员路径。
6029InvalidRewardInitParamInvalid reward init param奖励排放的起止时间或每秒速率参数错误。N/A — 管理员路径。
6030InvalidRewardInputAccountNumberInvalid collect reward input account number传给 CollectReward 的 remaining accounts 数量错误。“内部错误:账户数量错误,请刷新后重试。“
6031InvalidRewardPeriodInvalid reward period奖励排放周期无效(end <= start 或持续时间为零)。N/A — 管理员路径。
6032NotApproveUpdateRewardEmissionsModification of emissions is allowed within 72 hours from the end of the previous cycle管理员在距周期边界 72 小时窗口之外修改排放参数。N/A — 管理员路径。
6033UnInitializedRewardInfouninitialized reward info引用了未初始化的奖励槽位。N/A — 管理员路径。
6034NotSupportMintNot support token_2022 mint extensionCLMM 遇到了无法处理的 Token-2022 扩展。“该代币包含 Raydium CLMM 不支持的扩展。“
6035MissingTickArrayBitmapExtensionAccountMissing tickarray bitmap extension accountswap 跨越了基础 bitmap 未覆盖的 tick 范围,需要扩展 bitmap 账户。“内部错误:缺少 tick-array 扩展,请刷新池数据。“
6036InsufficientLiquidityForDirectionInsufficient liquidity for this directionswap 方向上的流动性不足。“该 swap 规模的流动性不足。“
6037MaxTokenOverflowMax token overflow输入/输出金额超过 u64 上限。“该金额对此池而言过大。“
6038CalculateOverflowCalculate overflow手续费/流动性计算溢出。“该金额对此池而言过大。“
6039TransferFeeCalculateNotMatchTransferFee calculate not matchToken-2022 转账手续费实际金额与预期不符。“代币转账手续费在交易中途发生变化,请重试。“
6040OrderAlreadyFilledOrder already fully filled, cannot modifyIncreaseLimitOrder / DecreaseLimitOrder 作用于未成交部分为零的订单。“该限价单已完全成交,请结算以领取输出代币。“
6041InvalidOrderPhaseInvalid order phase修改订单时,FIFO 批次阶段与 tick 当前批次不再匹配。“当前状态下无法对该订单执行此操作。“
6042InvalidLimitOrderAmountInvalid limit order amount开仓/增仓/减仓时,订单输入低于池的最低要求(或为零)。“订单规模低于池的最低限制。“
6043OrderPhaseSaturatedTick order phase saturatedtick 上的批次 order_phase 计数器已饱和,在现有批次结算并轮转之前,该 tick 无法新增订单。“该价格的活跃订单过多,请尝试相邻 tick 或等待订单结算。“
6044InvalidDynamicFeeConfigParamsInvalid dynamic fee config paramsCreateDynamicFeeConfig / UpdateDynamicFeeConfig 被拒绝;或 CreateCustomizablePool 启用了动态手续费但未提供有效配置。管理员路径 N/A;用户路径提示”动态手续费配置无效”。
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 providedToken-2022 感知路径调用时未传入所需的 input/output mint 账户(用于验证扩展和转账手续费)。“内部错误:缺少 mint 账户,请刷新池数据。“
6050MissingTokenProgram2022Token-2022 program is required but not provided同上,缺少的是 SPL-Token-2022 程序账户。“内部错误:缺少 Token-2022 程序,请刷新后重试。”
关于重新编号的说明。 本次发布中,CLMM ErrorCode 枚举进行了重新编号:移除/修复了五个旧变体(LOKZeroMintAmountInvalidLiquidityTransactionTooOldInvalidRewardDesiredAmount)及若干拼写错误(Liquitityenoughtemissiones),并追加了十一个新变体。由于 Anchor 按源码顺序为错误编号,6000 起的所有代码相对于预发布版本均已发生偏移。对旧版本硬编码了数字代码的客户端需要重新映射。
生成来源:github.com/raydium-io/raydium-clmm — error.rs

AMM v4、Farm v3 / v5 / v6、LaunchLab 错误

这些程序的错误已在各自的章节中说明(参见 products/amm-v4/instructionsproducts/farm-staking/instructionsproducts/launchlab/instructions)。由于这些程序混合使用 Anchor 和原生 Solana 的错误机制,其错误表位于对应的指令参考页,而非此处。以下代码范围由各章节保留:
程序代码范围(仅 Anchor)参考
AMM v4自定义 u32 代码,非 Anchor 风格products/amm-v4/instructions
Farm v3 / v5自定义 u32 代码products/farm-staking/instructions
Farm v66000+(Anchor)products/farm-staking/instructions
LaunchLab6000+(Anchor)products/launchlab/instructions

将 SDK 错误映射到程序错误

官方 TypeScript SDK 将链上错误封装为 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 的集成方及时刷新其错误处理逻辑。 来源: