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

> كل تعليمة في AMM v4 مع معاملات التعليمة، حسابات Pool و OpenBook المتوقعة، والشروط السابقة واللاحقة لكل منها.

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

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

<Info>
  اعتبارًا من ترقية البرنامج 2026-07، تم **إزالة** اعتماد AMM v4 على OpenBook / Serum. تحتفظ تعليمات v1 القديمة `SwapBaseIn` / `SwapBaseOut` و `Deposit` و `Withdraw` **بتخطيطات الحسابات القديمة** للتوافق العكسي: لا تزال حسابات السوق مقبولة في مواضعها القديمة، لكن **لم تعد يتم التحقق منها أو استخدامها** (لا يتم إصدار CPI). يجب على التكاملات الجديدة استخدام نقاط الدخول V2 للمبادلة، التي تحذف حسابات السوق بالكامل. تم إزالة عدة تعليمات والآن تعود — انظر [إدخال السجل](/ar/reference/changelog/2026-07-22-amm-v4-openbook-removal). تستخدم قوائم الحسابات أدناه أسماء الحقول من Raydium SDK؛ IDL الأساسي يستخدم أحيانًا بادئات `serum_*`.
</Info>

## جرد التعليمات

| المجموعة       | التعليمة              | الوسم | ملاحظات                                                                               |
| -------------- | --------------------- | ----- | ------------------------------------------------------------------------------------- |
| دورة حياة Pool | `Initialize2`         | 1     | تعليمة إنشاء Pool الوحيدة (الواجهة الافتراضية هي CPMM للـ pools الجديدة).             |
| السيولة        | `Deposit`             | 3     | إضافة السيولة، استقبال LP. التخطيط لم يتغير (حسابات السوق مُتجاهلة).                  |
| السيولة        | `Withdraw`            | 4     | حرق LP، استقبال كلا الجانبين بنسبة متناسبة. التخطيط لم يتغير (حسابات السوق مُتجاهلة). |
| المبادلة       | `SwapBaseIn`          | 9     | مبادلة بمدخل دقيق. تخطيط v1 لم يتغير؛ حسابات السوق مقبولة لكن مُتجاهلة.               |
| المبادلة       | `SwapBaseOut`         | 11    | مبادلة بمخرج دقيق. نفس ما سبق.                                                        |
| المبادلة       | `SwapBaseInV2`        | 16    | **موصى به.** مبادلة بمدخل دقيق بدون حسابات السوق.                                     |
| المبادلة       | `SwapBaseOutV2`       | 17    | **موصى به.** مبادلة بمخرج دقيق بدون حسابات السوق.                                     |
| الصيانة        | `SetParams`           | 6     | المسؤول: تغيير معاملات pool. **التخطيط + قيم `param` تغيرت** (كسر التوافق).           |
| الصيانة        | `WithdrawPnl`         | 7     | مسح رسوم البروتوكول المتراكمة. **تخطيط الحسابات تغير** (كسر التوافق).                 |
| الصيانة        | `CreateConfigAccount` | 14    | المسؤول: تهيئة `AmmConfig` PDA على مستوى البرنامج.                                    |
| الصيانة        | `UpdateConfigAccount` | 15    | المسؤول: تغيير معاملات الإعدادات على مستوى البرنامج.                                  |

يكشف SDK عن منشئات للتعليمات الموجهة للمستخدم فقط. عادة ما يتم استدعاء تعليمات الصيانة بواسطة حارس Raydium.

**تم إزالتها / لم تعد قابلة للاستدعاء** (تعود الآن مع `unimplemented!`، وتم حذف منشئات العميل الخاصة بها): `Initialize` (الوسم 0، استخدم `Initialize2`)، `MonitorStep` (2)، `MigrateToOpenBook` (5)، `WithdrawSrm` (8)، `PreInitialize` (10، استخدم `Initialize2`)، `SimulateInfo` (12)، `AdminCancelOrders` (13).

## `Initialize2`

بدء تشغيل pool AMM v4 جديد مرتبط بسوق OpenBook موجود.

**المعاملات**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**الحسابات** (قابلة للكتابة `W`، موقّع `S`)

| #  | الاسم                        | W | S | ملاحظات                                     |
| -- | ---------------------------- | - | - | ------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                  |
| 2  | `system_program`             |   |   |                                             |
| 3  | `rent`                       |   |   |                                             |
| 4  | `amm`                        | W |   | حساب `AmmInfo` (مفتاح مُزرّع).              |
| 5  | `amm_authority`              |   |   | Program PDA.                                |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (مُزرّع).             |
| 7  | `lp_mint`                    | W |   |                                             |
| 8  | `coin_mint`                  |   |   |                                             |
| 9  | `pc_mint`                    |   |   |                                             |
| 10 | `pool_coin_token_account`    | W |   |                                             |
| 11 | `pool_pc_token_account`      | W |   |                                             |
| 12 | `pool_withdraw_queue`        | W |   |                                             |
| 13 | `pool_target_orders_account` | W |   |                                             |
| 14 | `pool_lp_token_account`      | W |   | ATA LP للمُنشئ.                             |
| 15 | `pool_temp_lp_token_account` | W |   | حساب مؤقت.                                  |
| 16 | `market_program`             |   |   | برنامج OpenBook.                            |
| 17 | `market`                     |   |   | سوق OpenBook.                               |
| 18 | `user_wallet`                | W | S | المُنشئ. يدفع الإيجار ويمول الإيداع الأولي. |
| 19 | `user_token_coin`            | W |   |                                             |
| 20 | `user_token_pc`              | W |   |                                             |

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

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`، حيث يتم الاحتفاظ بـ `INIT_BURN` ≈ 100 وحدة LP خارج التداول.
* لا يتم نشر أوامر OpenBook (تم إزالة شبكة دفتر الطلبات). لا يزال يتم تمرير `market_program` / `market` لكن يتم تخزينهما كحقول مرجعية فقط؛ يتم تهيئة `coin_lot_size` / `pc_lot_size` / `min_size` إلى `0`.

**الأخطاء الشائعة** — `InvalidInput` (عدم تطابق الكسور العشرية، غير مرتبة)، `NotAllowed`.

## `Deposit`

إضافة السيولة.

**المعاملات**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base على coin، 1 = base على pc
// (بعض متغيرات SDK تقبل أيضًا other_amount_min)
```

**الحسابات** (مختصرة)

| #  | الاسم                     | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**الرياضيات** — نسبة متناسبة قياسية. باستخدام احتياطيات pool *الفعلية* (الأقبية + المُدرجة)، يحسب SDK زوج coin/pc الذي ينتج عنه مبلغ LP المعطى ويتحقق منه مقابل `max_*`. يعود مع `ExceededSlippage` إذا تجاوز أي جانب الحد الأقصى.

## `Withdraw`

حرق LP، استقبال كلا الجانبين.

**المعاملات**

```
amount: u64    // LP للحرق
```

**الحسابات** — مثل `Deposit` مع عكس الاتجاه؛ `lp_mint` قابل للكتابة للحرق، ATAs المستخدم هي المستقبلات. تخطيط الحسابات لم يتغير (حسابات السوق لا تزال تُمرر بشكل موضعي، مُتجاهلة). لا توجد خطوة تسوية من OpenBook — تستخدم الرياضيات النسبة المتناسبة أرصدة الأقبية مباشرة.

## `SwapBaseIn`

مبادلة بمدخل دقيق. دائمًا مبادلة **مسار AMM** (لا تسير عبر مطابقة OpenBook).

<Note>
  **استخدم متغيرات V2 للكود الجديد.** نظرًا لأنه تم إزالة اعتماد AMM v4 على OpenBook، لا تزال نقاط الدخول V1 (`SwapBaseIn`، `SwapBaseOut`) تتوقع قائمة الحسابات الكاملة المكونة من 17 حسابًا (أو 18 مع حساب target-orders الاختياري)، لكن حسابات OpenBook/market الآن **مقبولة بشكل موضعي ومُتجاهلة** — لا يتم التحقق منها ولا يتم إصدار CPI. تمرير عدد حسابات خاطئ لا يزال يعود مع `WrongAccountsNumber`، لكن محتويات حساب السوق لم تعد يتم التحقق منها. يجب على التكاملات الجديدة استخدام [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2)، التي تأخذ قائمة حسابات أصغر بكثير وتمثل مسار التنفيذ الكنسي اليوم. يتم توثيق النماذج V1 هنا للاكتمال وللقراءة من المعاملات على السلسلة الموجودة.
</Note>

**المعاملات**

```
amount_in:            u64
minimum_amount_out:   u64
```

**الحسابات** (مختصرة)

| #  | الاسم                       | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**الرياضيات** — انظر [`products/amm-v4/math`](/ar/products/amm-v4/math).

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

* `amm.status` يسمح بالمبادلة (البت 0 من قناع حالة الحالة غير مضبوط).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` يحتفظ بـ `amount_in` على الأقل.

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

* يفقد المستخدم `amount_in` من الرمز المصدر، ويكسب `amount_out ≥ minimum_amount_out` من رمز الوجهة.
* `need_take_pnl_*` مزيد بحصة رسوم البروتوكول.
* ملاحظة: عدادات التحليلات `state_data.swap_*_in_amount` / `swap_*_out_amount` **لم تعد يتم تحديثها** — قيمها مجمدة. استخدم سجلات التداول لتحليلات الحجم.

**الأخطاء الشائعة** — `ExceededSlippage`، `InvalidInput`، `InvalidStatus`، `NotAllowed` (رمز coin/pc متطابق).

## `SwapBaseOut`

مخرج دقيق، معكوس `SwapBaseIn`. نفس الحسابات.

**المعاملات**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

نقاط دخول مبادلة متغيرة (الوسوم **16** / **17**) التي **تتخطى حسابات OpenBook بالكامل**. الرياضيات متطابقة مع مسار V1، لكن قائمة الحسابات تنكمش إلى جانب AMM والمستخدم فقط — **8 حسابات، و `amm_open_orders` لا يتم تمريره**:

| # | الاسم                       | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

احتياطيات Pool الآن هي أرصدة الأقبية (ناقص PnL المعلق)، لذا رياضيات الاقتباس مباشرة ومتطابقة مع مسار v1. استخدم V2 لتوفير الحساب وتجنب تمرير حسابات السوق (المُتجاهلة الآن). يستخدم موجه Raydium دائمًا نموذج V2 عند التوجيه عبر AMM v4.

المعاملات هي نفسها نماذج V1 (`amount_in / minimum_amount_out` لـ `SwapBaseInV2`؛ `max_amount_in / amount_out` لـ `SwapBaseOutV2`).

## `MonitorStep` والتعليمات المحذوفة الأخرى

<Warning>
  **تم إزالتها — لم تعد قابلة للاستدعاء.** اعتبارًا من ترقية 2026-07، تم إزالة `MonitorStep` (الوسم 2) من البرنامج والآن **تعود** (`unimplemented!`) إذا تم استدعاؤها. تم حذف منشئ العميل الخاص بها أيضًا. ينطبق الشيء نفسه على `MigrateToOpenBook` (5)، `WithdrawSrm` (8)، `SimulateInfo` (12)، `AdminCancelOrders` (13)، ونقاط دخول إنشاء pool القديمة `Initialize` (0) / `PreInitialize` (10) — استخدم `Initialize2` بدلاً من ذلك.
</Warning>

تاريخيًا، كانت `MonitorStep` تشغل تفاعل pool مع OpenBook: كانت تسوي الطلبات المملوءة (نقل العائدات من أقبية السوق إلى أقبية pool عبر OpenBook CPI)، وتلغي الطلبات القديمة، وتنشر طلبات جديدة لإغلاق الفجوة بين `target_orders` و `amm_open_orders`. مع إزالة اعتماد OpenBook، لا يوجد شيء لتشغيله والتعليمة اختفت. يجب على أي حارس أو تكامل لا يزال يستدعيها إزالة الاستدعاء.

## `WithdrawPnl` / `TakePnl`

مسح المسؤول لرسوم البروتوكول المتراكمة.

**المعاملات**

* `WithdrawPnl` لا تأخذ أي معاملات؛ تقرأ `need_take_pnl_*` وتنقل تلك المبالغ بالضبط.

<Warning>
  **كسر التوافق (المسؤول فقط).** انخفضت قائمة الحسابات من 17 (+1 اختياري) إلى **10** — تم إزالة `amm_open_orders` وجميع حسابات السوق الستة — **بدون تحليل التوافق**. التخطيط القديم لا يتطابق (كان #5 القديم `amm_open_orders`، الآن `pool_coin_token_account`) ويفشل مع أخطاء مثل `InvalidCoinVault`. يجب تحديث أدوات المسؤول.
</Warning>

**الحسابات** (تخطيط 10 حسابات جديد)

| #  | الاسم                     | W | S |                      |
| -- | ------------------------- | - | - | -------------------- |
| 1  | `token_program`           |   |   |                      |
| 2  | `amm`                     | W |   |                      |
| 3  | `amm_config`              |   |   |                      |
| 4  | `amm_authority`           |   |   |                      |
| 5  | `pool_coin_token_account` | W |   |                      |
| 6  | `pool_pc_token_account`   | W |   |                      |
| 7  | `pnl_coin_token_account`  | W |   | المستقبل.            |
| 8  | `pnl_pc_token_account`    | W |   |                      |
| 9  | `pnl_owner`               |   | S | توقيع متعدد للمسؤول. |
| 10 | `amm_target_orders`       | W |   |                      |

**التأثير**

* ينقل `need_take_pnl_coin` من `pool_coin_token_account` إلى `pnl_coin_token_account`.
* نفس الشيء لـ pc.
* يصفر `need_take_pnl_coin` و `need_take_pnl_pc`.
* **تغيير المنطق**: إذا كان رصيد القبو غير كافٍ لتغطية PnL المتراكم، تعود التعليمة مع `TakePnlError` مباشرة (لم تعد تتلاعب بحالة دفتر الطلبات).

لا يوجد تغيير في الاحتياطيات لأن PnL المتراكم كان مستبعدًا بالفعل من الثابت.

## `SetParams`

تغييرات معاملات المسؤول، يتم استدعاؤها بواسطة توقيع متعدد Raydium. المعاملات هي وسم `param: u8` + حمولة.

<Warning>
  **كسر التوافق (المسؤول فقط).** تم تقليل قائمة الحسابات إلى مجرد `[amm (W)، admin (S)]` (تم إزالة السلطة، open-orders، target-orders، vault، وجميع حسابات السوق). تم **إعادة ترقيم واختصار** تعداد `param`: `Status` = 0، `State` = 1، `Fees` = **2** (كان 9)، `SetOpenTime` = **3** (كان 11). تم إزالة جميع معاملات شبكة دفتر الطلبات و `AmmOwner`، `LastOrderDistance`، `UpdateOpenOrder`، وأسقطت بنية `SetParamsInstruction` `new_pubkey` و `last_order_distance`. يجب تحديث أدوات المسؤول.
</Warning>

## مصفوفة تغيير الحالة

عمود OpenBook اختفى — لا تعليمة تلمس دفتر طلبات بعد الآن.

| التعليمة                        | إمداد `lp_mint`         | الأقبية                                  | عدادات PnL |
| ------------------------------- | ----------------------- | ---------------------------------------- | ---------- |
| `Initialize2`                   | إمداد أولي مُسك للمُنشئ | `+ init_coin_amount`، `+ init_pc_amount` | 0          |
| `Deposit`                       | +                       | + كلاهما                                 | —          |
| `Withdraw`                      | −                       | − كلاهما                                 | —          |
| `SwapBaseIn` / `SwapBaseInV2`   | —                       | + في، − خارج                             | + حصة pnl  |
| `SwapBaseOut` / `SwapBaseOutV2` | —                       | + في، − خارج                             | + حصة pnl  |
| `WithdrawPnl`                   | —                       | − (pnl مُمسوح)                           | 0          |
| `SetParams`                     | —                       | —                                        | —          |

## الخطوات التالية

* [`products/amm-v4/code-demos`](/ar/products/amm-v4/code-demos) — أمثلة TypeScript لتدفقات المبادلة و LP.
* [`products/amm-v4/fees`](/ar/products/amm-v4/fees) — تفاصيل `WithdrawPnl` وتقسيم الرسوم.
* [`reference/error-codes`](/ar/reference/error-codes) — جدول مرجعي للأمام (أخطاء AMM v4 مدرجة في تلك الصفحة).

المصادر:

* [برنامج Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* وحدة Raydium SDK v2 `Liquidity`
* برنامج OpenBook — التحقق من الحسابات على جانب السوق
