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

# 2026-09-09 — AMM v4: تبعيات Solana 3.0 واسترجاع الـ lamports الزائدة

> يعيد AMM v4 البناء مقابل solana-program 3.0 و spl-token 9.0 وصندوق solana-system-interface الجديد، ويضيف تعليمة WithdrawExcessLamports (الوسم 18) مخصصة للمسؤول فقط تُرجع الإيجار المُحرَّر بواسطة SIMD-0437. توقفت CreateConfigAccount عن قراءة sysvar الإيجار الزائد، بطريقة متوافقة. لا شيء ينكسر ولم يتغير تخطيط الحساب.

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

  [عرض النسخة الإنجليزية →](/reference/changelog/2026-09-09-amm-v4-solana-3-and-excess-lamports)
</Info>

يصل شيئان غير مترابطان معاً في إعادة بناء واحدة.

الأول هو صيانة روتينية: كان AMM v4 مثبتاً على `solana-program` `=2.1.0` منذ ترقية 2.1، وكان هذا التثبيت يعيق التقدم. انتقلت مساعدات نظام البرنامج إلى صندوق `solana-system-interface` الخاص بها في Solana 3.0، وبلغت `spl-token` الإصدار 9.0، و`spl-associated-token-account` بلغت 8.0. يأخذ هذا الإصدار جميع الثلاثة.

الثاني هو أموال يستحقها البروتوكول. [SIMD-0437](/ar/solana-fundamentals/rent-and-reclaimable-rent) يقلل الحد الأدنى المعفي من الإيجار بنسبة 90% في خمس خطوات، والخطوة 1 وصلت إلى mainnet في 3 سبتمبر 2026. كل حساب أنشأه AMM v4 قبل ذلك — مئات خزائن المجموعات، وسكات LP، وحسابات `AmmInfo` و`TargetOrders` — الآن ممول بشكل زائد، و lamports في حساب مملوك للبرنامج يمكن نقله فقط من قبل هذا البرنامج. ومن هنا تأتي تعليمة جديدة.

## ملخص سريع للمدمجين

* **لم يتغير شيء يستدعيه المتداول أو LP.** `Initialize2`، `Deposit`، `Withdraw`، `SwapBaseIn`، `SwapBaseOut`، `SwapBaseInV2`، `SwapBaseOutV2`، `WithdrawPnl` و`SetParams` تحتفظ بقوائم حساباتها وتخطيطات الحجج والرياضيات. لم يتغير تخطيط الحساب. لم ينتقل رمز خطأ موجود.
* **تُضاف تعليمة واحدة: `WithdrawExcessLamports`، الوسم `18`.** مخصصة للمسؤول فقط، بدون حجج، قائمة حسابات متغيرة الطول. تُرجع lamports فوق الحد الأدنى المعفي من الإيجار من الحسابات المتحكم بها بواسطة AMM v4 ولا تلمس أي شيء آخر. انظر [`products/amm-v4/instructions`](/ar/products/amm-v4/instructions#withdrawexcesslamports).
* **يُضاف رمز خطأ واحد: `60` `LamportsCalculateError`.** `AmmError` ليس مرقماً بطريقة Anchor — يبدأ من `0` — لذا هذا هو `custom program error: 0x3c`. الأكواد `0`–`59` لم تتغير.
* **توقفت `CreateConfigAccount` (الوسم 14) عن قراءة sysvar الإيجار** وهي الآن موثقة كتعليمة بـ 4 حسابات. **لا شيء في هذا الإصدار ينكسر**، وهذا يشمل: كان الحساب الأخير في القائمة والمعالج يقرأ بشكل موضعي بدون فحص الطول، لذا أدوات المسؤول التي لا تزال تمررها تستمر في العمل.
* **يلزم تحديث IDL** إذا كنت تُنشئ عملاء من واحد. تعليمة جديدة واحدة، متغير خطأ جديد واحد، قائمة حسابات متغيرة واحدة.

## `WithdrawExcessLamports`

تأخذ التعليمة محفظة جمع lamports كالموقّع الوحيد والوجهة، PDA سلطة AMM v4، برنامج SPL Token، ثم أي عدد من الحسابات المصدر. تُرسل على مالك كل حساب مصدر:

| مالك حساب المصدر                 | المعالجة                                                                                                                              |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| SPL Token، 165 بايت، غير أصلي    | CPI برنامج token الخاص به `WithdrawExcessLamports` (المميز `38`)، موقّع بواسطة PDA السلطة                                             |
| SPL Token، 165 بايت، أصلي (wSOL) | `SyncNative`، قياس كم نما `amount` المُغلّف، `UnwrapLamports` (المميز `45`) لهذا الفرق بالضبط، ثم التأكد من عدم تغيير الرصيد المُغلّف |
| SPL Token، أحجام أخرى (سك LP)    | CPI `WithdrawExcessLamports`                                                                                                          |
| برنامج AMM v4 نفسه               | خصم الحساب مباشرة إلى `rent.minimum_balance(data_len)`                                                                                |
| أي شيء آخر                       | تُخطى بصمت                                                                                                                            |

فرع wSOL هو الفرع المثير للاهتمام. رصيد lamport لحساب wrapped-SOL *هو* رصيد token الخاص به، لذا يرفض برنامج token `WithdrawExcessLamports` عليه تماماً. الرحلة ذهاباً وإياباً عبر `SyncNative` و`UnwrapLamports` بحجم الفرق تستخرج فقط الفائض المُتبرّع به وتترك الرصيد المُغلّف بالضبط حيث بدأ — وهذا مؤكد بعد ذلك، مع `LamportsCalculateError` إذا اختلفت الحسابات. **لذا فإن خزانة مجموعة SOL تحتفظ بسيولتها الكاملة من خلال مسح**، ولا يرى أي LP تغييراً في السعر عبر واحد.

الموقّع هو مفتاح مخصص لكل مجموعة، مشفّر بشكل ثابت تحت نفس وحدة `config_feature` مثل عناوين مالك AMM الموجودة وعناوين رسوم إنشاء المجموعة. بخلاف CPMM و LaunchLab، يقبل AMM v4 **فقط** تلك المحفظة — لا توجد نسخة احتياطية للمسؤول. العناوين موجودة في [`reference/program-addresses`](/ar/reference/program-addresses#excess-lamports-collection-wallets).

## توقفت `CreateConfigAccount` عن قراءة sysvar الإيجار

Solana 3.0 هو ما يجعل `Rent::get()` الطريقة الطبيعية لقراءة معاملات الإيجار، لذا استبدل الإصدار جميع استدعاءات `Rent::from_account_info(...)` الأربعة في البرنامج. في ثلاثة منها — المساعدات التي تنشئ حسابات token المجموعة وسك LP وحسابات PDA أثناء `Initialize2` — لا يزال حساب sysvar يُمرّر ولا يزال يُعاد توجيهه إلى CPIs برنامج token، لذا لا شيء عن قائمة الحساب تلك يتغير. في `CreateConfigAccount` لم يكن لـ sysvar أي غرض آخر وكان الحساب الأخير في القائمة، لذا خرج من القائمة الموثقة:

|   | قبل (5 حسابات)   | بعد (4 حسابات)   |
| - | ---------------- | ---------------- |
| 1 | `admin` (W, S)   | `admin` (W, S)   |
| 2 | `amm_config` (W) | `amm_config` (W) |
| 3 | `pnl_owner`      | `pnl_owner`      |
| 4 | `system_program` | `system_program` |
| 5 | `rent`           | —                |

**إرسال قائمة الخمسة حسابات القديمة لا يزال يعمل.** الحساب المحذوف كان الأخير، و`process_create_config` يقرأ حساباته الأربعة بشكل موضعي عبر `next_account_info` بدون أي شيء يفحص العدد الإجمالي، لذا لا يُنظر أبداً إلى حساب rent زائد. يجب تحديث أدوات المسؤول للوضوح، وليس الاستعجالية. لا يُنشئ أي بناء موجه للمستخدم هذه التعليمة على الإطلاق.

`Initialize2` هي الحالة التي لا يجب الإفراط في القراءة: توقفت أيضاً عن استدعاء `Rent::from_account_info`، لكن حساب الإيجار الخاص بها **يبقى** في الموضع 3 ولا يزال يُستخدم بشكل حقيقي — يُعيد البرنامج توجيهه إلى CPIs `spl_token::initialize_account` و`initialize_mint` التي تنشئ خزائن المجموعة وسك LP. حذفه من قائمة الحساب تلك سيكسر إنشاء المجموعة.

## تغييرات التبعيات

| الصندوق                        | قبل      | بعد                      |
| ------------------------------ | -------- | ------------------------ |
| `solana-program`               | `=2.1.0` | `=3.0.0`                 |
| `solana-system-interface`      | —        | `=3.0.0`، ميزة `bincode` |
| `spl-token`                    | `=7.0.0` | `9.0.0`                  |
| `spl-associated-token-account` | `6.0.0`  | `8.0.0`                  |

أجزاء برنامج النظام التي يستخدمها البرنامج — `system_instruction::create_account`، `transfer`، `allocate`، `assign`، ومعرّف البرنامج نفسه — تأتي الآن من `solana-system-interface` بدلاً من `solana_program::system_program` و`solana_program::system_instruction`. معرّف البرنامج متطابق بالبايت، لذا هذا نقل وقت الترجمة بدون عواقب على السلسلة، بما في ذلك فحوصات `InvalidSysProgramAddress` التي تقارن ضده.

تم حذف وحدتان ميتتان أيضاً: `srm_token` و`msrm_token`، إعلانات سك Serum/MSRM المتبقية من [إزالة OpenBook](/ar/reference/changelog/2026-07-22-amm-v4-openbook-removal). لم يُرجع إليها أي شيء.

## ما لم يتغير

* **كل تخطيط حساب.** `AmmInfo`، `StateData`، `TargetOrders`، `AmmConfig` — نفس الأحجام، نفس إزاحات الحقول. لا تغيير في indexer أو decoder.
* **أكواد الخطأ `0`–`59`.** يُضاف `LamportsCalculateError` في `60`، لذا لا شيء ينزاح.
* **PDA سلطة AMM.** لا تزال PDA واحدة للبرنامج كله، البذرة `["amm authority"]`، nonce `254`.
* **الرسوم والمحاسبة PnL والمنحنى.** لم تُلمس. `WithdrawExcessLamports` تنقل lamports التي لم تكن أبداً جزءاً من احتياطيات أي مجموعة.
* **Token-2022.** لا تزال غير مدعومة. التعليمة الجديدة تتحدث فقط إلى برنامج SPL Token الموروث.
* **معرّف البرنامج.** لم يتغير — انظر [`reference/program-addresses`](/ar/reference/program-addresses).

## الصفحات المحدثة

* `products/amm-v4/instructions` — تُضاف `WithdrawExcessLamports` مع قائمة حساباتها وجدول الإرسال لكل مالك؛ قسم جديد `CreateConfigAccount` / `UpdateConfigAccount` يغطي إزالة rent-sysvar؛ صفوف جدول الجرد ومصفوفة تغيير الحالة مضافة.
* `products/amm-v4/overview` — لافتة الإصدار.
* `reference/error-codes` — قسم جديد "AMM v4: `AmmError` ليس مرقماً بطريقة Anchor" يوثق الكود `60` والترقيم القائم على `0`.
* `reference/program-addresses` — قسم جديد "محافظ جمع الـ lamports الزائدة".
* `solana-fundamentals/rent-and-reclaimable-rent` — قسم جديد "ما تمسحه برامج Raydium على جانبها الخاص"؛ ملاحظة wrapped-SOL صُححت لتقول أن كلا برنامجي token يعرضان `UnwrapLamports`.
* `solana-fundamentals/toolchain` — Agave 3.1.10، `release.anza.xyz`، Rust 1.91.0.
