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 (Standard AMM) 에러
Program ID: reference/program-addresses 참고. 출처:raydium-cp-swap/programs/cp-swap/src/error.rs.
| 코드 | 변형 | #[msg] 문자열 | 일반적인 원인 | 권장 UX |
|---|---|---|---|---|
| 6000 | NotApproved | Not approved | 호출자가 관리자 명령의 권한 있는 주체가 아닙니다. | ”풀 관리자만 이 작업을 수행할 수 있습니다.” |
| 6001 | InvalidOwner | Input account owner is not the program address | 전달된 계정이 잘못된 프로그램 소유입니다 (잘못된 토큰 프로그램 또는 잘못된 PDA인 경우가 많습니다). | ”내부 오류: 계정 소유자 불일치 — 새로고침 후 다시 시도하세요.” |
| 6002 | EmptySupply | Input token account empty | LP 또는 토큰 계정 잔액이 0인데 양수가 필요한 단계에서 호출되었습니다. | ”인출할 잔액이 없습니다.” |
| 6003 | InvalidInput | InvalidInput | 일반적인 잘못된 인수입니다 (범위를 벗어난 금액, 잘못된 플래그). | ”잘못된 입력입니다 — 금액을 확인하고 다시 시도하세요.” |
| 6004 | IncorrectLpMint | Address of the provided lp token mint is incorrect | 전달된 LP 민트 계정이 pool_state.lp_mint와 일치하지 않습니다. | ”내부 오류: 잘못된 LP 민트 — 풀 데이터를 새로고침하세요.” |
| 6005 | ExceededSlippage | Exceeds desired slippage limit | 실행 가격이 사용자의 minAmountOut / maxAmountIn보다 불리합니다. | ”슬리피지 허용 범위를 초과했습니다. 슬리피지를 늘리거나 다시 시도하세요.” |
| 6006 | ZeroTradingTokens | Given pool token amount results in zero trading tokens | 예치/인출 계산에서 한쪽이 0으로 반올림됩니다 (포지션이 너무 작음). | ”이 풀의 최소 금액보다 작습니다.” |
| 6007 | NotSupportMint | Not support token_2022 mint extension (소스 내 문법 오류) | 풀이 안전하게 처리할 수 없는 Token-2022 확장을 만났습니다 (예: TransferHook, DefaultAccountState=Frozen). | ”이 토큰에는 CPMM에서 지원하지 않는 확장이 있습니다.” |
| 6008 | InvalidVault | invaild vault (소스 내 오타) | 전달된 볼트 계정이 pool_state에 기록된 것과 일치하지 않습니다. | ”내부 오류: 잘못된 볼트 — 새로고침 후 다시 시도하세요.” |
| 6009 | InitLpAmountTooLess | Init lp amount is too less(Because 100 amount lp will be locked) (소스 내 문법 오류) | 풀 초기화 시 계산된 LP 공급량이 영구 잠금 금액보다 낮습니다. | ”초기 유동성이 너무 작습니다. 예치 금액을 늘리세요.” |
| 6010 | TransferFeeCalculateNotMatch | TransferFee calculate not match | Token-2022 수수료 민트의 실제 이체 후 금액이 사전 계산 값과 일치하지 않습니다. | ”토큰 전송 수수료가 트랜잭션 중 변경되었습니다. 다시 시도하세요.” |
| 6011 | MathOverflow | Math overflow | 스왑/예치/수수료 계산 중 오버플로우가 발생했습니다. | ”이 풀에서 처리하기에 금액이 너무 큽니다.” |
| 6012 | InsufficientVault | Insufficient vault | 풀 볼트 잔액이 요청된 출력을 충당하기에 부족합니다. | ”이 규모를 처리할 풀 유동성이 부족합니다.” |
| 6013 | InvalidFeeModel | Invalid fee model | 관리자가 온체인에서 거부된 AmmConfig 파라미터 조합을 설정했습니다. | 해당 없음 — 관리자 전용 경로. |
| 6014 | NoFeeCollect | Fee is zero | collect_protocol_fee / collect_fund_fee가 수집 가능한 수수료가 0인 상태에서 호출되었습니다. | 해당 없음 — 관리자 경로; 도구에서 무시해야 합니다. |
CLMM 에러
Program ID: reference/program-addresses 참고. 출처:raydium-clmm/programs/amm/src/error.rs.
| 코드 | 변형 | #[msg] 문자열 | 일반적인 원인 | 권장 UX |
|---|---|---|---|---|
| 6000 | NotApproved | Not approved | 호출자가 이 명령의 설정된 관리자가 아닙니다. | ”풀 관리자만 이 작업을 수행할 수 있습니다.” |
| 6001 | InvalidUpdateConfigFlag | invalid update amm config flag | 관리자가 update_amm_config에 알 수 없는 param 값을 전달했습니다. | 해당 없음 — 관리자 전용 경로. |
| 6002 | AccountLack | Account lack | 트랜잭션에 필요한 나머지 계정이 누락되었습니다 (보통 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 가격이 범위를 벗어났습니다. | ”스왑을 다시 시도하세요.” |
| 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 | amount_0_max와 amount_1_max 모두 0으로 유동성 증가를 호출했습니다. | ”최소 하나의 토큰을 입력하세요.” |
| 6016 | LiquidityInsufficient | Liquidity insufficient | 포지션의 유동성이 인출 요청을 충족하기에 부족합니다. | ”인출 금액이 포지션 유동성을 초과합니다.” |
| 6017 | PriceSlippageCheck | Price slippage check | 실행 가격이 호출자의 슬리피지 가드를 통과하지 못했습니다. | ”슬리피지 허용 범위를 초과했습니다. 슬리피지를 늘리거나 다시 시도하세요.” |
| 6018 | TooLittleOutputReceived | Too little output received | SwapBaseInput: 출력 금액이 other_amount_threshold 미만입니다. | ”슬리피지 초과 — 최소 출력 금액을 충족하지 못했습니다.” |
| 6019 | TooMuchInputPaid | Too much input paid | SwapBaseOutput: 입력 금액이 other_amount_threshold를 초과합니다. | ”슬리피지 초과 — 최대 입력 금액을 초과했습니다.” |
| 6020 | ZeroAmountSpecified | Swap special amount can not be zero | 스왑 명령의 amount가 0입니다. | ”0보다 큰 금액을 입력하세요.” |
| 6021 | InvalidInputPoolVault | Input pool vault is invalid | 스왑의 입력 볼트 계정이 풀에 기록된 볼트와 일치하지 않습니다. | ”내부 오류: 잘못된 입력 볼트 — 풀 데이터를 새로고침하세요.” |
| 6022 | TooSmallInputOrOutputAmount | Swap input or output amount is too small | 스왑 계산이 0으로 반올림되었습니다. 보통 매우 작은 먼지 금액입니다. | ”이 풀에서 스왑하기에 금액이 너무 작습니다.” |
| 6023 | NotEnoughTickArrayAccount | Not enough tick array account | 스왑 범위에 필요한 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개)가 설정되어 있습니다. | 해당 없음 — 관리자 경로. |
| 6027 | RewardTokenAlreadyInUse | The init reward token already in use | 리워드 민트가 기존 민트와 중복됩니다. | 해당 없음 — 관리자 경로. |
| 6028 | ExceptRewardMint | The reward tokens must contain one of pool vault mint except the last reward | 슬롯 2 이전에는 리워드 민트가 풀의 볼트 민트 중 하나와 일치해야 합니다. | 해당 없음 — 관리자 경로. |
| 6029 | InvalidRewardInitParam | Invalid reward init param | 잘못된 방출 시작/종료 시간 또는 초당 비율입니다. | 해당 없음 — 관리자 경로. |
| 6030 | InvalidRewardInputAccountNumber | Invalid collect reward input account number | CollectReward에 잘못된 수의 나머지 계정이 전달되었습니다. | ”내부 오류: 잘못된 계정 수 — 새로고침 후 다시 시도하세요.” |
| 6031 | InvalidRewardPeriod | Invalid reward period | 리워드 방출 기간이 유효하지 않습니다 (end <= start, 기간이 0). | 해당 없음 — 관리자 경로. |
| 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 확장을 만났습니다. | ”이 토큰에는 Raydium CLMM에서 지원하지 않는 확장이 있습니다.” |
| 6035 | MissingTickArrayBitmapExtensionAccount | Missing tickarray bitmap extension account | 스왑이 기본 비트맵에 포함되지 않는 틱 범위를 넘어갔습니다. 확장 비트맵 계정이 필요합니다. | ”내부 오류: tick-array 확장 누락 — 풀 데이터를 새로고침하세요.” |
| 6036 | InsufficientLiquidityForDirection | Insufficient liquidity for this direction | 스왑 방향으로 유동성이 충분하지 않습니다. | ”이 스왑 규모를 처리할 유동성이 부족합니다.” |
| 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 | 미체결 수량이 0인 주문에 IncreaseLimitOrder / DecreaseLimitOrder가 호출되었습니다. | ”이 지정가 주문은 이미 체결되었습니다 — 출력을 받으려면 정산하세요.” |
| 6041 | InvalidOrderPhase | Invalid order phase | 틱의 현재 코호트와 더 이상 일치하지 않는 FIFO 코호트 단계의 주문을 수정하려 했습니다. | ”현재 주문 상태에서는 이 작업을 수행할 수 없습니다.” |
| 6042 | InvalidLimitOrderAmount | Invalid limit order amount | 주문 열기/증가/감소 시 풀 최소값 미만(또는 0)입니다. | ”주문 규모가 풀의 최소값보다 작습니다.” |
| 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에 {0, 1, 2} 범위 밖의 collect_fee_on 값이 전달되었습니다. | ”내부 오류: 잘못된 수수료 모드.” |
| 6046 | ZeroSqrtPrice | sqrt_price_x64 must be greater than 0 | CreateCustomizablePool (또는 커스터마이징 가능한 초기 sqrt 가격을 허용하는 경로)이 sqrt_price_x64 == 0으로 호출되었습니다. | ”초기 가격은 0보다 커야 합니다.” |
| 6047 | ZeroLiquidity | liquidity must be greater than 0 | liquidity == 0이고 보상 금액도 없는 상태에서 유동성 공급 경로가 호출되었습니다. | ”유동성 금액은 0보다 커야 합니다.” |
| 6048 | MissingBaseFlag | base_flag is required when liquidity is zero | 포지션 열기(금액 기준) 경로에서 liquidity == 0이 계산되었는데 어느 쪽이 기준인지 식별할 base_flag가 제공되지 않았습니다. | ”0이 아닌 유동성을 입력하거나 기준 토큰을 지정하세요.” |
| 6049 | MissingMintAccount | Mint account is required but not provided | Token-2022 인식 경로가 확장 및 전송 수수료 검증에 필요한 입력/출력 민트 계정 없이 호출되었습니다. | ”내부 오류: 민트 계정 누락 — 풀 데이터를 새로고침하세요.” |
| 6050 | MissingTokenProgram2022 | Token-2022 program is required but not provided | SPL-Token-2022 프로그램 계정이 누락된 것을 제외하면 위와 동일합니다. | ”내부 오류: Token-2022 프로그램 누락 — 새로고침 후 다시 시도하세요.” |
번호 재지정에 대한 참고. 이번 릴리스에서 CLMM재생성 출처: github.com/raydium-io/raydium-clmm — error.rs.ErrorCodeenum이 새로 번호가 매겨졌습니다. 기존 변형 5개(LOK,ZeroMintAmount,InvalidLiquidity,TransactionTooOld,InvalidRewardDesiredAmount)와 여러 오타(Liquitity,enought,emissiones)가 제거/수정되었고, 11개의 새 변형이 추가되었습니다. Anchor는 소스 순서로 에러 번호를 부여하므로,6000이후의 모든 코드가 이전 릴리스 빌드 대비 이동했습니다. 숫자 코드를 이전 버전에 하드코딩한 클라이언트는 재매핑이 필요합니다.
AMM v4, Farm v3 / v5 / v6, LaunchLab 에러
이 프로그램들은 각 챕터에서 별도로 문서화됩니다 (products/amm-v4/instructions, products/farm-staking/instructions, products/launchlab/instructions 참고). 해당 프로그램들은 Anchor와 일반 Solana 에러 방식을 혼용하므로, 에러 표는 여기가 아닌 명령어 레퍼런스 옆에 위치합니다. 아래 코드는 해당 챕터에서 예약되어 있습니다.
| 프로그램 | 코드 범위 (Anchor만 해당) | 레퍼런스 |
|---|---|---|
| AMM v4 | Custom u32 코드, Anchor 방식 아님 | products/amm-v4/instructions |
| Farm v3 / v5 | Custom u32 코드 | products/farm-staking/instructions |
| Farm v6 | 6000+ (Anchor) | products/farm-staking/instructions |
| LaunchLab | 6000+ (Anchor) | products/launchlab/instructions |
SDK 에러를 프로그램 에러로 매핑하기
공식 TypeScript SDK는 온체인 에러를SendTransactionError로 래핑하며, Anchor 프로그램의 경우 AnchorError로 래핑합니다.
Error Number: (\d+) 패턴은 Anchor 버전에 관계없이 안정적으로 매칭할 수 있습니다.
표 재생성 방법
프로그램이 업그레이드되어 새 에러가 추가되면, 소스에서 다시 추출하세요.reference/changelog를 업데이트하세요. 그래야 SDK를 업그레이드하는 통합자들이 에러 핸들러를 갱신해야 한다는 것을 알 수 있습니다.
출처:


