> ## 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.

# تعليمات التوجيه

> مرجع لتعليمات AMM Routing المفعّلة على الشبكة الرئيسية — ستة متغيرات تغطي مبادلات الإدخال الدقيق والإخراج الدقيق وأدوات wSOL.

<Info>
  **هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.**

  [عرض النسخة الإنجليزية →](/products/routing/instructions)
</Info>

<Info>
  هذه الصفحة هي مرجع التعليمات الموثوق به لبرنامج AMM Routing. للحصول على أمثلة برمجية، اطّلع على [`products/routing/code-demos`](/ar/products/routing/code-demos). لمعاني الأخطاء، اطّلع على [`reference/error-codes`](/ar/reference/error-codes).
</Info>

## ملخص التعليمات

| العلامة | المميز                       | الدقيق  | المتغير |
| ------- | ---------------------------- | ------- | ------- |
| 0       | `SwapBaseInWithUserAccount`  | الإدخال | قديم    |
| 1       | `SwapBaseOutWithUserAccount` | الإخراج | قديم    |
| 5       | `CreateSyncNative`           | —       | أداة    |
| 6       | `CloseTokenAccount`          | —       | أداة    |
| 8       | `SwapBaseIn`                 | الإدخال | حالي    |
| 9       | `SwapBaseOut`                | الإخراج | حالي    |

**المفتاح:**

* **الدقيق:** أي مبلغ يتم تحديده من قبل المتصل (الإدخال = إدخال دقيق `amount_in`؛ الإخراج = إخراج دقيق `amount_out`).
* **المتغير:** التعليمات القديمة تتطلب طابور `limit_prices` غير فارغ حتى لو لم يكن هناك أي قفزة CLMM في المسار. التعليمات الحالية (8 / 9) تتعامل مع طابور `limit_prices` الفارغ كـ "بدون فحوصات"، وهو المسار الموصى به للكود الجديد.

جميع متغيرات المبادلة توجّه الرموز الوسيطة عبر **ATAs التي يتحكم فيها المستخدم** — المستخدم يمتلك ATA الإدخال وكل ATA وسيط و ATA الإخراج. لعمليات التكامل الجديدة، استخدم **العلامة 8 (`SwapBaseIn`)** أو **العلامة 9 (`SwapBaseOut`)** ما لم تكن لديك سبب محدد لاستدعاء متغير قديم.

## تعليمات المبادلة الحالية (موصى بها)

هذه هي نقاط الدخول التي يجب أن يستخدمها الكود الجديد. بنية الوسيط هي نفسها متغيرات النمط القديم لكن `limit_prices` قد يكون فارغًا.

### `SwapBaseIn` (العلامة 8)

مبادلة متعددة القفزات بإدخال دقيق. يحدد المتصل `amount_in`؛ يقوم الموجّه بالتنفيذ قفزة تلو الأخرى ويتحقق من أن المبلغ النهائي يصل إلى `minimum_amount_out` أو يتجاوزه.

**الوسيطات**

```
amount_in:            u64
minimum_amount_out:   u64
limit_prices:         VecDeque<u128>  // اختياري؛ طابور فارغ يعني بدون فحص سعر CLMM لكل قفزة
```

**الحسابات**

```
[
  <user_input_ata> W S,         // موقّع؛ الرصيد >= amount_in
  <user_intermediate_ata_1> W,  // واحد لكل قفزة وسيطة
  ... <user_intermediate_ata_N> W,
  <user_output_ata> W,
  <token_program>,

  <pool_program_hop_1>,         // يحدد أي عائلة AMM هي القفزة 1
  <pool_state_hop_1> W,
  ... <other accounts required by hop 1's program>,

  <pool_program_hop_2>,
  <pool_state_hop_2> W,
  ... <hop 2 accounts>,

  ... [كرّر لكل قفزة]
]
```

قائمة الحسابات الدقيقة لكل قفزة تعتمد على برنامج AMM الأساسي (AMM v4 / CPMM / CLMM / Stable). يقوم الموجّه بإجراء CPI في كل منها على التوالي ويتحقق من تطابق معرف البرنامج مع أحد البرامج الأربعة المدعومة.

**الشروط المسبقة**

* المتصل يوقّع باستخدام `user_input_ata`.
* `user_input_ata.amount >= amount_in`.
* كل ATA وسيط للمستخدم موجود ويملكه المتصل.
* إذا كانت أي قفزة هي CLMM وكنت تريد فرض سعر محدود، قدّم إدخالة واحدة `limit_prices` لكل قفزة CLMM.

**الشروط اللاحقة**

* رصيد `user_input_ata` انخفض بمقدار `amount_in`.
* رصيد `user_output_ata` زاد بمقدار ≥ `minimum_amount_out`.
* كل ATA وسيط يُترك بدون تغيير صافي (المسار يستهلك ما أنتجته القفزة السابقة).

**الأخطاء الشائعة**

* `ExceededSlippage` — الإخراج النهائي \< `minimum_amount_out`.
* `InvalidInput` — مسار فارغ أو حسابات سيئة التشكيل أو `pool_program` غير مدعوم.
* `SqrtPriceX64` — سعر قفزة CLMM تحرك خارج حد `limit_prices` المُوفّر (فقط عند عدم كون `limit_prices` فارغًا).

***

### `SwapBaseOut` (العلامة 9)

مبادلة متعددة القفزات بإخراج دقيق. يحدد المتصل `amount_out`؛ يتحقق الموجّه من أن الإدخال الفعلي لا يتجاوز `maximum_amount_in`.

**الوسيطات**

```
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // اختياري؛ طابور فارغ يعني بدون فحص سعر CLMM لكل قفزة
```

**الحسابات** — نفس بنية العلامة 8.

**الشروط المسبقة**

* المتصل يوقّع باستخدام `user_input_ata`؛ الرصيد `>= maximum_amount_in` (الحالة الأسوأ).
* كل ATA وسيط و ATA الإخراج موجود.

**الشروط اللاحقة**

* `user_input_ata` انخفض بالمبلغ الفعلي المطلوب (≤ `maximum_amount_in`).
* `user_output_ata` زاد بمقدار `amount_out` بالضبط.

**الأخطاء الشائعة**

* `ExceededSlippage` — الإدخال المطلوب يتجاوز `maximum_amount_in`.
* `InvalidInput` و `SqrtPriceX64` — كما هو الحال بالنسبة للعلامة 8.

***

## تعليمات المبادلة القديمة

هذه المتغيرات الأقدم لا تزال قابلة للاستدعاء في البرنامج المباشر وموثّقة هنا للتمام. فضّل العلامة 8 / العلامة 9 للكود الجديد؛ كلا المتغيرين القديمين أدناه يتطلبان طابور `limit_prices` غير فارغ حتى عندما لا تكون هناك قفزة CLMM، مما يجعلهما محرجين في الاستخدام.

### `SwapBaseInWithUserAccount` (العلامة 0)

مبادلة متعددة القفزات بإدخال دقيق، متطابقة في الشكل مع العلامة 8 لكن مع متطلب `limit_prices` أكثر صرامة.

**الوسيطات**

```
amount_in:           u64
minimum_amount_out:  u64
limit_prices:        VecDeque<u128>  // مطلوب، غير فارغ
```

**الحسابات** — نفس شكل `SwapBaseIn` (العلامة 8). جميع الفتحات الوسيطة يجب أن تكون ATAs يملكها المتصل.

**الشروط المسبقة**

* المتصل يوقّع باستخدام `user_input_ata`.
* `user_input_ata.amount >= amount_in`.
* جميع ATAs الوسيطة للمستخدم موجودة ويملكها المتصل.
* `limit_prices` غير فارغ (إدخال واحد لكل قفزة CLMM؛ ملء بقيم نائبة إذا لم تكن هناك قفزة CLMM).

**الشروط اللاحقة**

* رصيد `user_input_ata` انخفض بمقدار `amount_in`.
* رصيد `user_output_ata` زاد بمقدار ≥ `minimum_amount_out`.

**الأخطاء الشائعة**

* `ExceededSlippage`.
* `InvalidInput` — `limit_prices` الفارغ مرفوض في هذا المتغير القديم.
* `SqrtPriceX64`.

***

### `SwapBaseOutWithUserAccount` (العلامة 1)

مبادلة بإخراج دقيق، نظير قديم لـ `SwapBaseOut` (العلامة 9).

**الوسيطات**

```
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // مطلوب، غير فارغ
```

**الحسابات** — نفس شكل العلامة 0 / العلامة 9.

**الشروط المسبقة**

* المتصل يوقّع باستخدام `user_input_ata`.
* `user_input_ata.amount >= maximum_amount_in`.
* جميع ATAs الوسيطة للمستخدم موجودة ويملكها المتصل.
* `limit_prices` غير فارغ.

**الشروط اللاحقة**

* `user_input_ata` انخفض بالمبلغ الفعلي المطلوب (≤ `maximum_amount_in`).
* `user_output_ata` زاد بمقدار `amount_out` بالضبط.

**الأخطاء الشائعة**

* `ExceededSlippage`.
* `InvalidInput`.
* `SqrtPriceX64`.

***

## تعليمات الأدوات

### `CreateSyncNative` (العلامة 5)

إنشاء (إذا كان مفقودًا) ومزامنة ATA wSOL في خطوة واحدة. مفيد عند تغليف SOL بشكل مضمّن جنبًا إلى جنب مع المبادلة.

**الوسيطات**

```
amount: u64    // SOL للتغليف (لامبورتات)
```

**الحسابات**

```
[
  <user_wsol_ata> W,            // ATA لـ wSOL؛ يُنشأ إذا كان مفقودًا
  <user_native_account> W S,    // موقّع؛ يتم خصم SOL من هنا
  <wsol_mint>,
  <system_program>,
  <token_program>,
  <associated_token_program>,
]
```

**التأثير**

* ينشئ `user_wsol_ata` إذا لم يكن موجودًا بعد.
* ينقل `amount` لامبورتات من رصيد SOL الأصلي للموقّع إلى ATA.
* يستدعي `SyncNative` على ATA بحيث يعكس رصيد الرمز المميز اللامبورتات الجديدة.

**الأخطاء الشائعة**

* `InvalidOwner` — مالك `user_wsol_ata` ليس الموقّع.

***

### `CloseTokenAccount` (العلامة 6)

إغلاق حساب رمز مميز وإرجاع إيجاره إلى محفظة الوجهة. يترافق مع `CreateSyncNative`: بعد مبادلة ساق wSOL، استدعِ `CloseTokenAccount` لاسترجاع الإيجار الذي كان يدعم ATA wSOL.

**الوسيطات** — لا توجد.

**الحسابات**

```
[
  <token_account_to_close> W,
  <destination_for_rent> W,
  <owner> S,
  <token_program>,
]
```

**التأثير**

* يغلق `token_account_to_close`.
* ينقل رصيد لامبورتات معفي الإيجار (\~0.00203928 SOL على الشبكة الرئيسية لحساب SPL Token عادي) إلى `destination_for_rent`.
* يجب أن يكون رصيد حساب الرمز صفرًا.

**الأخطاء الشائعة**

* `InvalidOwner` — المتصل ليس مالك ATA.
* رصيد حساب الرمز غير صفري.

***

## ما يلي

* [`products/routing/code-demos`](/ar/products/routing/code-demos) — بناء كل من هذه التعليمات في TypeScript.
* [`products/routing/accounts`](/ar/products/routing/accounts) — مفاتيح التوزيع حسب كل AMM وتخطيط الحسابات لكل قفزة.
* [`reference/error-codes`](/ar/reference/error-codes) — قائمة `RouteError` الكاملة.
