메인 콘텐츠로 건너뛰기

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는 프로그램의 ErrorCode enum 각 변형에 6000부터 시작하는 숫자 코드를 부여합니다. 트랜잭션이 실패하면 다음 정보가 노출됩니다.
  • 숫자 에러 코드 (예: 0x1771 = 6001) — 트랜잭션 로그에 표시됩니다.
  • 에러 이름 (예: InvalidOwner) — IDL에서 확인할 수 있습니다.
  • #[msg(...)] 문자열 — Anchor가 log_messages에 출력합니다.
통합 시에는 메시지 문자열이 아닌 숫자 코드를 기준으로 매칭하세요. 문자열은 버전 변경 없이 수정될 수 있습니다.
// 예시: CPMM 슬리피지 에러를 감지해 사용자 친화적 메시지를 표시합니다.
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] 문자열일반적인 원인권장 UX
6000NotApprovedNot approved호출자가 관리자 명령의 권한 있는 주체가 아닙니다.”풀 관리자만 이 작업을 수행할 수 있습니다.”
6001InvalidOwnerInput account owner is not the program address전달된 계정이 잘못된 프로그램 소유입니다 (잘못된 토큰 프로그램 또는 잘못된 PDA인 경우가 많습니다).”내부 오류: 계정 소유자 불일치 — 새로고침 후 다시 시도하세요.”
6002EmptySupplyInput token account emptyLP 또는 토큰 계정 잔액이 0인데 양수가 필요한 단계에서 호출되었습니다.”인출할 잔액이 없습니다.”
6003InvalidInputInvalidInput일반적인 잘못된 인수입니다 (범위를 벗어난 금액, 잘못된 플래그).”잘못된 입력입니다 — 금액을 확인하고 다시 시도하세요.”
6004IncorrectLpMintAddress of the provided lp token mint is incorrect전달된 LP 민트 계정이 pool_state.lp_mint와 일치하지 않습니다.”내부 오류: 잘못된 LP 민트 — 풀 데이터를 새로고침하세요.”
6005ExceededSlippageExceeds desired slippage limit실행 가격이 사용자의 minAmountOut / maxAmountIn보다 불리합니다.”슬리피지 허용 범위를 초과했습니다. 슬리피지를 늘리거나 다시 시도하세요.”
6006ZeroTradingTokensGiven pool token amount results in zero trading tokens예치/인출 계산에서 한쪽이 0으로 반올림됩니다 (포지션이 너무 작음).”이 풀의 최소 금액보다 작습니다.”
6007NotSupportMintNot support token_2022 mint extension (소스 내 문법 오류)풀이 안전하게 처리할 수 없는 Token-2022 확장을 만났습니다 (예: TransferHook, DefaultAccountState=Frozen).”이 토큰에는 CPMM에서 지원하지 않는 확장이 있습니다.”
6008InvalidVaultinvaild vault (소스 내 오타)전달된 볼트 계정이 pool_state에 기록된 것과 일치하지 않습니다.”내부 오류: 잘못된 볼트 — 새로고침 후 다시 시도하세요.”
6009InitLpAmountTooLessInit lp amount is too less(Because 100 amount lp will be locked) (소스 내 문법 오류)풀 초기화 시 계산된 LP 공급량이 영구 잠금 금액보다 낮습니다.”초기 유동성이 너무 작습니다. 예치 금액을 늘리세요.”
6010TransferFeeCalculateNotMatchTransferFee calculate not matchToken-2022 수수료 민트의 실제 이체 후 금액이 사전 계산 값과 일치하지 않습니다.”토큰 전송 수수료가 트랜잭션 중 변경되었습니다. 다시 시도하세요.”
6011MathOverflowMath overflow스왑/예치/수수료 계산 중 오버플로우가 발생했습니다.”이 풀에서 처리하기에 금액이 너무 큽니다.”
6012InsufficientVaultInsufficient vault풀 볼트 잔액이 요청된 출력을 충당하기에 부족합니다.”이 규모를 처리할 풀 유동성이 부족합니다.”
6013InvalidFeeModelInvalid fee model관리자가 온체인에서 거부된 AmmConfig 파라미터 조합을 설정했습니다.해당 없음 — 관리자 전용 경로.
6014NoFeeCollectFee is zerocollect_protocol_fee / collect_fund_fee가 수집 가능한 수수료가 0인 상태에서 호출되었습니다.해당 없음 — 관리자 경로; 도구에서 무시해야 합니다.
재생성 출처: github.com/raydium-io/raydium-cp-swap — error.rs.

CLMM 에러

Program ID: reference/program-addresses 참고. 출처: raydium-clmm/programs/amm/src/error.rs.
코드변형#[msg] 문자열일반적인 원인권장 UX
6000NotApprovedNot approved호출자가 이 명령의 설정된 관리자가 아닙니다.”풀 관리자만 이 작업을 수행할 수 있습니다.”
6001InvalidUpdateConfigFlaginvalid update amm config flag관리자가 update_amm_config에 알 수 없는 param 값을 전달했습니다.해당 없음 — 관리자 전용 경로.
6002AccountLackAccount lack트랜잭션에 필요한 나머지 계정이 누락되었습니다 (보통 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 accounttick-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 가격이 범위를 벗어났습니다.”스왑을 다시 시도하세요.”
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 liquidityamount_0_maxamount_1_max 모두 0으로 유동성 증가를 호출했습니다.”최소 하나의 토큰을 입력하세요.”
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 zero스왑 명령의 amount가 0입니다.”0보다 큰 금액을 입력하세요.”
6021InvalidInputPoolVaultInput pool vault is invalid스왑의 입력 볼트 계정이 풀에 기록된 볼트와 일치하지 않습니다.”내부 오류: 잘못된 입력 볼트 — 풀 데이터를 새로고침하세요.”
6022TooSmallInputOrOutputAmountSwap input or output amount is too small스왑 계산이 0으로 반올림되었습니다. 보통 매우 작은 먼지 금액입니다.”이 풀에서 스왑하기에 금액이 너무 작습니다.”
6023NotEnoughTickArrayAccountNot enough tick array account스왑 범위에 필요한 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개)가 설정되어 있습니다.해당 없음 — 관리자 경로.
6027RewardTokenAlreadyInUseThe init reward token already in use리워드 민트가 기존 민트와 중복됩니다.해당 없음 — 관리자 경로.
6028ExceptRewardMintThe reward tokens must contain one of pool vault mint except the last reward슬롯 2 이전에는 리워드 민트가 풀의 볼트 민트 중 하나와 일치해야 합니다.해당 없음 — 관리자 경로.
6029InvalidRewardInitParamInvalid reward init param잘못된 방출 시작/종료 시간 또는 초당 비율입니다.해당 없음 — 관리자 경로.
6030InvalidRewardInputAccountNumberInvalid collect reward input account numberCollectReward에 잘못된 수의 나머지 계정이 전달되었습니다.”내부 오류: 잘못된 계정 수 — 새로고침 후 다시 시도하세요.”
6031InvalidRewardPeriodInvalid reward period리워드 방출 기간이 유효하지 않습니다 (end <= start, 기간이 0).해당 없음 — 관리자 경로.
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 확장을 만났습니다.”이 토큰에는 Raydium CLMM에서 지원하지 않는 확장이 있습니다.”
6035MissingTickArrayBitmapExtensionAccountMissing tickarray bitmap extension account스왑이 기본 비트맵에 포함되지 않는 틱 범위를 넘어갔습니다. 확장 비트맵 계정이 필요합니다.”내부 오류: tick-array 확장 누락 — 풀 데이터를 새로고침하세요.”
6036InsufficientLiquidityForDirectionInsufficient liquidity for this direction스왑 방향으로 유동성이 충분하지 않습니다.”이 스왑 규모를 처리할 유동성이 부족합니다.”
6037MaxTokenOverflowMax token overflow입력/출력 금액이 u64를 초과했습니다.”이 풀에서 처리하기에 금액이 너무 큽니다.”
6038CalculateOverflowCalculate overflow수수료/유동성 계산 중 오버플로우가 발생했습니다.”이 풀에서 처리하기에 금액이 너무 큽니다.”
6039TransferFeeCalculateNotMatchTransferFee calculate not matchToken-2022 전송 수수료의 실제 금액이 예상 값과 일치하지 않습니다.”토큰 전송 수수료가 트랜잭션 중 변경되었습니다. 다시 시도하세요.”
6040OrderAlreadyFilledOrder already fully filled, cannot modify미체결 수량이 0인 주문에 IncreaseLimitOrder / DecreaseLimitOrder가 호출되었습니다.”이 지정가 주문은 이미 체결되었습니다 — 출력을 받으려면 정산하세요.”
6041InvalidOrderPhaseInvalid order phase틱의 현재 코호트와 더 이상 일치하지 않는 FIFO 코호트 단계의 주문을 수정하려 했습니다.”현재 주문 상태에서는 이 작업을 수행할 수 없습니다.”
6042InvalidLimitOrderAmountInvalid limit order amount주문 열기/증가/감소 시 풀 최소값 미만(또는 0)입니다.”주문 규모가 풀의 최소값보다 작습니다.”
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{0, 1, 2} 범위 밖의 collect_fee_on 값이 전달되었습니다.”내부 오류: 잘못된 수수료 모드.”
6046ZeroSqrtPricesqrt_price_x64 must be greater than 0CreateCustomizablePool (또는 커스터마이징 가능한 초기 sqrt 가격을 허용하는 경로)이 sqrt_price_x64 == 0으로 호출되었습니다.”초기 가격은 0보다 커야 합니다.”
6047ZeroLiquidityliquidity must be greater than 0liquidity == 0이고 보상 금액도 없는 상태에서 유동성 공급 경로가 호출되었습니다.”유동성 금액은 0보다 커야 합니다.”
6048MissingBaseFlagbase_flag is required when liquidity is zero포지션 열기(금액 기준) 경로에서 liquidity == 0이 계산되었는데 어느 쪽이 기준인지 식별할 base_flag가 제공되지 않았습니다.”0이 아닌 유동성을 입력하거나 기준 토큰을 지정하세요.”
6049MissingMintAccountMint account is required but not providedToken-2022 인식 경로가 확장 및 전송 수수료 검증에 필요한 입력/출력 민트 계정 없이 호출되었습니다.”내부 오류: 민트 계정 누락 — 풀 데이터를 새로고침하세요.”
6050MissingTokenProgram2022Token-2022 program is required but not providedSPL-Token-2022 프로그램 계정이 누락된 것을 제외하면 위와 동일합니다.”내부 오류: Token-2022 프로그램 누락 — 새로고침 후 다시 시도하세요.”
번호 재지정에 대한 참고. 이번 릴리스에서 CLMM ErrorCode enum이 새로 번호가 매겨졌습니다. 기존 변형 5개(LOK, ZeroMintAmount, InvalidLiquidity, TransactionTooOld, InvalidRewardDesiredAmount)와 여러 오타(Liquitity, enought, emissiones)가 제거/수정되었고, 11개의 새 변형이 추가되었습니다. Anchor는 소스 순서로 에러 번호를 부여하므로, 6000 이후의 모든 코드가 이전 릴리스 빌드 대비 이동했습니다. 숫자 코드를 이전 버전에 하드코딩한 클라이언트는 재매핑이 필요합니다.
재생성 출처: 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 v4Custom u32 코드, Anchor 방식 아님products/amm-v4/instructions
Farm v3 / v5Custom 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 — err.logs에서 "custom program error: 0x..." 줄을 확인하세요.
  }
}
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를 업그레이드하는 통합자들이 에러 핸들러를 갱신해야 한다는 것을 알 수 있습니다. 출처: