> ## 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 لكل برنامج Raydium على السلسلة، مع السبب ورسالة UX الموصى بها.

<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 (AMM القياسي)

معرف البرنامج: انظر [reference/program-addresses](/ar/reference/program-addresses#on-chain-programs). المصدر: `raydium-cp-swap/programs/cp-swap/src/error.rs`.

| الرمز | المتغير                        | سلسلة `#[msg]`                                                                         | السبب الشائع                                                                                                             | رسالة UX الموصى بها                                                            |
| ----- | ------------------------------ | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| 6000  | `NotApproved`                  | Not approved                                                                           | المُستدعي ليس الجهة المُخوَّلة للتحكم في هذه التعليمة الإدارية.                                                          | "هذا الإجراء مخصص لمسؤول الـ pool فقط."                                        |
| 6001  | `InvalidOwner`                 | Input account owner is not the program address                                         | الحساب الممرَّر مملوك لبرنامج خاطئ (في الغالب برنامج token خاطئ أو PDA لبرنامج مختلف).                                   | "خطأ داخلي: عدم تطابق مالك الحساب — أعِد التحميل وحاول مجددًا."                |
| 6002  | `EmptySupply`                  | Input token account empty                                                              | رصيد حساب LP أو token يساوي صفرًا في خطوة تستلزم قيمة موجبة.                                                             | "لا يوجد شيء للسحب."                                                           |
| 6003  | `InvalidInput`                 | InvalidInput                                                                           | وسيطة خاطئة بشكل عام (مبلغ خارج النطاق، علامة خاطئة).                                                                    | "إدخال غير صالح — تحقق من المبالغ وحاول مجددًا."                               |
| 6004  | `IncorrectLpMint`              | Address of the provided lp token mint is incorrect                                     | حساب LP mint الممرَّر لا يطابق `pool_state.lp_mint`.                                                                     | "خطأ داخلي: LP mint خاطئ — أعِد تحميل بيانات الـ pool."                        |
| 6005  | `ExceededSlippage`             | Exceeds desired slippage limit                                                         | السعر المُنفَّذ أسوأ من `minAmountOut` / `maxAmountIn` الذي حدده المستخدم.                                               | "تجاوز السعر حدود تحمل الـ slippage. ارفع قيمة الـ slippage أو أعِد المحاولة." |
| 6006  | `ZeroTradingTokens`            | Given pool token amount results in zero trading tokens                                 | تقريب رياضيات الإيداع / السحب أحد الجانبين إلى صفر (الحجم صغير جدًا).                                                    | "المبلغ أدنى من الحد الأدنى لهذا الـ pool."                                    |
| 6007  | `NotSupportMint`               | Not support token\_2022 mint extension *(grammar in source)*                           | صادف الـ pool امتدادًا في Token-2022 لا يستطيع التعامل معه بأمان (مثلاً `TransferHook` أو `DefaultAccountState=Frozen`). | "هذا الـ token يحتوي على امتداد غير مدعوم في CPMM من Raydium."                 |
| 6008  | `InvalidVault`                 | invaild vault *(typo in source)*                                                       | حساب vault الممرَّر لا يطابق المُسجَّل في `pool_state`.                                                                  | "خطأ داخلي: vault خاطئ — أعِد التحميل وحاول مجددًا."                           |
| 6009  | `InitLpAmountTooLess`          | Init lp amount is too less(Because 100 amount lp will be locked) *(grammar in source)* | عند تهيئة الـ pool، كان إجمالي LP المحسوب أقل من كمية القفل الدائم.                                                      | "السيولة الأولية صغيرة جدًا. زِد مبلغ الإيداع."                                |
| 6010  | `TransferFeeCalculateNotMatch` | TransferFee calculate not match                                                        | المبلغ الفعلي بعد التحويل لـ mint بميزة رسوم Token-2022 لم يطابق التوقع المُحسَب مسبقًا.                                 | "تغيرت رسوم تحويل الـ token أثناء المعاملة. أعِد المحاولة."                    |
| 6011  | `MathOverflow`                 | Math overflow                                                                          | حدث تجاوز في عملية حسابية وسيطة للـ swap أو الإيداع أو الرسوم.                                                           | "المبلغ كبير جدًا لهذا الـ pool."                                              |
| 6012  | `InsufficientVault`            | Insufficient vault                                                                     | رصيد vault الـ pool أقل مما يلزم لتغطية الإخراج المطلوب.                                                                 | "السيولة في الـ pool غير كافية لهذا الحجم."                                    |
| 6013  | `InvalidFeeModel`              | Invalid fee model                                                                      | قام المسؤول بضبط مجموعة معاملات `AmmConfig` مرفوضة على السلسلة.                                                          | غير مطلوب — مسار إداري فقط.                                                    |
| 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

معرف البرنامج: انظر [reference/program-addresses](/ar/reference/program-addresses#on-chain-programs). المصدر: `raydium-clmm/programs/amm/src/error.rs`.

| الرمز | المتغير                                  | سلسلة `#[msg]`                                                                          | السبب الشائع                                                                                                                         | رسالة UX الموصى بها                                                                             |
| ----- | ---------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| 6000  | `NotApproved`                            | Not approved                                                                            | المُستدعي ليس المسؤول المُهيَّأ لهذه التعليمة.                                                                                       | "هذا الإجراء مخصص لمسؤول الـ pool فقط."                                                         |
| 6001  | `InvalidUpdateConfigFlag`                | invalid update amm config flag                                                          | مرَّر المسؤول قيمة `param` غير معروفة إلى `update_amm_config`.                                                                       | غير مطلوب — مسار إداري فقط.                                                                     |
| 6002  | `AccountLack`                            | Account lack                                                                            | حساب متبقٍّ مطلوب غائب عن المعاملة (عادةً tick-array أو امتداد oracle).                                                              | "خطأ داخلي: حساب مفقود — أعِد تحميل بيانات الـ pool."                                           |
| 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]`.                                                                        | "نطاق السعر خارج حدود هذا الـ pool."                                                            |
| 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)                         | تجاوز سفلي في tick الأدنى.                                                                                                           | "السعر الأدنى منخفض جدًا."                                                                      |
| 6007  | `TickUpperOverflow`                      | The tick must be lesser than, or equal to the maximum tick(443636)                      | تجاوز علوي في tick الأعلى.                                                                                                           | "السعر الأعلى مرتفع جدًا."                                                                      |
| 6008  | `TickAndSpacingNotMatch`                 | tick % tick\_spacing must be zero                                                       | الـ tick المُرسَل ليس مضاعفًا لـ `tick_spacing` الخاص بالـ pool.                                                                     | "اضبط السعر على أقرب تدرج صالح."                                                                |
| 6009  | `InvalidTickArray`                       | Invalid tick array account                                                              | PDA خاطئ لفتحة tick-array.                                                                                                           | "خطأ داخلي: tick array خاطئ — أعِد تحميل بيانات الـ pool."                                      |
| 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 الحالي للـ pool خارج النطاق أثناء الـ 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` كليهما صفرًا.                                                       | "قدِّم token واحدًا على الأقل."                                                                 |
| 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                                                             | حساب input-vault في الـ swap لا يطابق vault المسجَّل في الـ pool.                                                                    | "خطأ داخلي: input vault خاطئ — أعِد تحميل بيانات الـ pool."                                     |
| 6022  | `TooSmallInputOrOutputAmount`            | Swap input or output amount is too small                                                | تقريب رياضيات الـ swap إلى الصفر، وعادةً لكميات ضئيلة جدًا.                                                                          | "المبلغ صغير جدًا للمبادلة في هذا الـ pool."                                                    |
| 6023  | `NotEnoughTickArrayAccount`              | Not enough tick array account                                                           | حسابات tick-array المتبقية غير كافية لنطاق الـ swap.                                                                                 | "خطأ داخلي: tick-arrays غير كافية — أعِد تحميل بيانات الـ pool."                                |
| 6024  | `InvalidFirstTickArrayAccount`           | Invalid first tick array account                                                        | حساب tick-array الأول الممرَّر لا يغطي الـ tick الحالي.                                                                              | "خطأ داخلي: أول tick array خاطئ — أعِد تحميل بيانات الـ pool."                                  |
| 6025  | `InvalidRewardIndex`                     | Invalid reward index                                                                    | `reward_index` خارج النطاق `[0, 2]`.                                                                                                 | غير مطلوب — مسار إداري.                                                                         |
| 6026  | `FullRewardInfo`                         | The init reward token reach to the max                                                  | الـ pool وصل بالفعل للحد الأقصى (3) من mints المكافآت المُهيَّأة.                                                                    | غير مطلوب — مسار إداري.                                                                         |
| 6027  | `RewardTokenAlreadyInUse`                | The init reward token already in use                                                    | mint المكافأة مكرر مع واحد موجود مسبقًا.                                                                                             | غير مطلوب — مسار إداري.                                                                         |
| 6028  | `ExceptRewardMint`                       | The reward tokens must contain one of pool vault mint except the last reward            | قبل الفتحة 2، يجب أن يساوي mint المكافأة أحد vault mints الخاصة بالـ pool.                                                           | غير مطلوب — مسار إداري.                                                                         |
| 6029  | `InvalidRewardInitParam`                 | Invalid reward init param                                                               | وقت بدء/انتهاء الإصدار أو معدل الثانية خاطئ.                                                                                         | غير مطلوب — مسار إداري.                                                                         |
| 6030  | `InvalidRewardInputAccountNumber`        | Invalid collect reward input account number                                             | عدد الحسابات المتبقية الممرَّرة إلى `CollectReward` خاطئ.                                                                            | "خطأ داخلي: عدد حسابات خاطئ — أعِد التحميل وحاول مجددًا."                                       |
| 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 لا يستطيع التعامل معه.                                                                              | "هذا الـ token يحتوي على امتداد غير مدعوم في CLMM من Raydium."                                  |
| 6035  | `MissingTickArrayBitmapExtensionAccount` | Missing tickarray bitmap extension account                                              | تجاوز الـ swap نطاق tick غير مغطى بالخريطة الأساسية؛ مطلوب حساب خريطة امتداد.                                                        | "خطأ داخلي: امتداد tick-array مفقود — أعِد تحميل بيانات الـ pool."                              |
| 6036  | `InsufficientLiquidityForDirection`      | Insufficient liquidity for this direction                                               | لا توجد سيولة كافية في اتجاه الـ swap.                                                                                               | "السيولة غير كافية لهذا الحجم من الـ swap."                                                     |
| 6037  | `MaxTokenOverflow`                       | Max token overflow                                                                      | تجاوز مبلغ الإدخال/الإخراج حد u64.                                                                                                   | "المبلغ كبير جدًا لهذا الـ pool."                                                               |
| 6038  | `CalculateOverflow`                      | Calculate overflow                                                                      | تجاوز في حسابات الرسوم أو السيولة.                                                                                                   | "المبلغ كبير جدًا لهذا الـ pool."                                                               |
| 6039  | `TransferFeeCalculateNotMatch`           | TransferFee calculate not match                                                         | المبلغ الملاحَظ لرسوم تحويل Token-2022 لم يطابق المتوقع.                                                                             | "تغيرت رسوم تحويل الـ token أثناء المعاملة. أعِد المحاولة."                                     |
| 6040  | `OrderAlreadyFilled`                     | Order already fully filled, cannot modify                                               | استُدعيت `IncreaseLimitOrder` / `DecreaseLimitOrder` على أمر لا تبقى منه جزء غير مُنفَّذ.                                            | "هذا الأمر المحدود مُنفَّذ بالكامل — سوِّيه لاستلام الإخراج."                                   |
| 6041  | `InvalidOrderPhase`                      | Invalid order phase                                                                     | تعديل أمر لا تتطابق مرحلة cohort FIFO فيه مع المرحلة الحالية للـ tick.                                                               | "لا يمكن تنفيذ هذا الإجراء في الحالة الراهنة للأمر."                                            |
| 6042  | `InvalidLimitOrderAmount`                | Invalid limit order amount                                                              | حجم الأمر أدنى من الحد الأدنى للـ pool (أو يساوي صفرًا) عند الفتح أو الزيادة أو التقليص.                                             | "حجم الأمر أقل من الحد الأدنى للـ pool."                                                        |
| 6043  | `OrderPhaseSaturated`                    | Tick order phase saturated                                                              | وصل عداد `order_phase` لـ cohort في الـ tick للتشبع؛ لا يمكن فتح أوامر إضافية عند هذا الـ tick حتى تُسوَّى cohorts الحالية وتُحدَّث. | "عدد كبير جدًا من الأوامر النشطة عند هذا السعر؛ جرب tick مجاورًا أو انتظر حتى تُسوَّى الأوامر." |
| 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 price أولية مخصصة) مع `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` لتحديد الجانب الأساسي.                              | "قدِّم قيمة سيولة غير صفرية أو حدِّد أيُّ token هو الأساسي."                                    |
| 6049  | `MissingMintAccount`                     | Mint account is required but not provided                                               | استُدعي مسار Token-2022 دون حساب mint للإدخال/الإخراج اللازم للتحقق من الامتدادات ورسوم التحويل.                                     | "خطأ داخلي: حساب mint مفقود — أعِد تحميل بيانات الـ pool."                                      |
| 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` فما فوق مقارنةً بإصدارات ما قبل الإطلاق. يحتاج العملاء الذين شفّروا الرموز الرقمية يدويًا بناءً على نسخة سابقة إلى تحديث خريطة الرموز.

مصدر إعادة التوليد: [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`](/ar/products/amm-v4/instructions)، و[`products/farm-staking/instructions`](/ar/products/farm-staking/instructions)، و[`products/launchlab/instructions`](/ar/products/launchlab/instructions)). نظرًا لاستخدام هذه البرامج مزيجًا من Anchor وأسطح أخطاء Solana العادية، توجد جداول أخطائها بجوار مرجع التعليمات لا هنا. الرموز أدناه محجوزة لتلك الفصول:

| البرنامج     | نطاق الرموز (Anchor فقط)              | المرجع                                                                         |
| ------------ | ------------------------------------- | ------------------------------------------------------------------------------ |
| AMM v4       | رموز u32 مخصصة، ليست على طريقة Anchor | [`products/amm-v4/instructions`](/ar/products/amm-v4/instructions)             |
| Farm v3 / v5 | رموز u32 مخصصة                        | [`products/farm-staking/instructions`](/ar/products/farm-staking/instructions) |
| Farm v6      | 6000+ (Anchor)                        | [`products/farm-staking/instructions`](/ar/products/farm-staking/instructions) |
| LaunchLab    | 6000+ (Anchor)                        | [`products/launchlab/instructions`](/ar/products/launchlab/instructions)       |

## تعيين أخطاء SDK إلى أخطاء البرنامج

يُغلِّف TypeScript SDK الرسمي أخطاء السلسلة في `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`](/ar/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)
