> ## 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-30 — CLMM: Anchor 1.0، استرجاع الـ excess-lamports، وملاك الرسوم الثابتة

> ينتقل CLMM إلى Anchor 1.0.2 على Agave 3.1.10 ويضيف تعليمة CollectExcessLamports للمسؤولين لاسترجاع الإيجار المحرر بواسطة SIMD-0437، يتم مسح مجموعة واحدة في كل مرة مع استخدام pool PDA كموقّع. يكتب CreateAmmConfig الآن ملاك الرسوم البروتوكول والصندوق المشفرة بدلاً من الموقّع. تمت إضافة الخطأ 6052. لم تتغير أي تعليمة أو تخطيط حساب يواجه المستخدم.

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

  [عرض النسخة الإنجليزية →](/reference/changelog/2026-09-30-clmm-anchor-1-and-excess-lamports)
</Info>

يحصل CLMM الآن على نفس تحديث الإطار الذي شحنته CPMM و LaunchLab في [2026-09-09](/ar/reference/changelog/2026-09-09-cpmm-anchor-1-and-excess-lamports). ينتقل Anchor من `0.32.1` إلى `=1.0.2`، وسلسلة أدوات البناء من Agave 2.3.0 إلى 3.1.10. يأتي معهما تغييران من جانب المسؤول: تعليمة `CollectExcessLamports` جديدة، وملاك رسوم ثابتة في `CreateAmmConfig`.

كل تعليمة يستدعيها المتداول أو مزود السيولة أو مستخدم أوامر الحد أو منشئ المجموعة تحتفظ بقائمة الحسابات والمعاملات والرياضيات الخاصة بها.

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

* **لم تتغير أي تعليمة تواجه المستخدم.** `CreatePool`، `CreateCustomizablePool`، `CreatePermissionedPool`، كل مسارات `OpenPosition*` / `IncreaseLiquidity*` / `DecreaseLiquidity*`، `ClosePosition`، `Swap` / `SwapV2` / `SwapRouterBaseIn`، التعليمات الخمس لأوامر الحد وتعليمات المكافآت متطابقة بالكامل على السلك. لم يتغير أي تخطيط حساب.
* **تمت إضافة تعليمة واحدة: `CollectExcessLamports`.** وهي مقتصرة على المسؤولين ولا تأخذ أي معاملات. تمسح **مجموعة واحدة في كل استدعاء**: يتم دائماً مسح `PoolState` الخاص بالمجموعة، و pool PDA يوقّع على خزائنها، التي تمررها في `remaining_accounts`. يتم مسح أي حساب آخر مملوك لـ CLMM في `remaining_accounts` أيضاً. انظر [`products/clmm/instructions`](/ar/products/clmm/instructions#collectexcesslamports).
* **تمت إضافة رمز خطأ واحد: `6052` `LamportsCalculateError`.** الرموز `6000`–`6051` لم تتغير.
* **لا يعود `CreateAmmConfig` ينسخ الموقّع إلى `owner` / `fund_owner`.** تحصل الإعدادات الجديدة على مفاتيح `protocol_fee_owner` و `fund_fee_owner` مشفرة بشكل ثابت. على mainnet هذان هما نفس المفتاحين المخزنين بالفعل على جميع الإعدادات الـ 21 الموجودة. **حسابات `AmmConfig` الموجودة لم تتغير**، لذا استمر في قراءة الحقول من الحساب.
* **حدّث IDL الخاص بك.** يضيف تعليمة واحدة ومتغير خطأ واحد، لـ 39 تعليمة و 53 خطأ.
* **يمكنك الآن وضع CPMM و CLMM في صندوق واحد.** كلا المستودعين يثبتان `anchor-lang` / `anchor-spl` `=1.0.2` على فروعهما `chore/upgrade-anchor`، لذا يمكن لبرنامج واحد أن يقوم بـ CPI إلى كليهما. انظر [`sdk-api/rust-cpi`](/ar/sdk-api/rust-cpi#cargo-dependencies).
* **تمت إعادة تسمية حزمة عميل TypeScript.** تنتقل مجموعة الاختبار من `@coral-xyz/anchor` `0.32.1` إلى `@anchor-lang/core` `1.0.2`.

## `CollectExcessLamports`

تفعيل المرحلة 1 من [SIMD-0437](/ar/solana-fundamentals/rent-and-reclaimable-rent) على mainnet في 3 سبتمبر 2026. كل حساب CLMM تم إنشاؤه قبل مرحلة ما يتم تمويله بشكل زائد الآن، وفقط برنامج CLMM يمكنه نقل lamports خارج حساب يمتلكه. يغطي هذا خزائن المجموعة، خزائن المكافآت، `PoolState`، `AmmConfig`، `ObservationState`، `TickArrayBitmapExtension` والباقي.

تأخذ التعليمة أربعة حسابات ثابتة، ثم أي عدد من حسابات المصدر في `remaining_accounts`:

| # | الحساب                           | الدور                                                                                                                                         |
| - | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | `collect_lamports_wallet` (W, S) | الموقّع والوجهة. يجب أن يكون مسؤول البرنامج المشترك أو محفظة جمع lamports المخصصة لـ CLMM، وإلا فإن الاستدعاء يفشل مع `NotApproved` (`6000`). |
| 2 | `pool_state` (W)                 | يوقّع على CPIs لبرنامج الرموز من خلال بذور PDA الخاصة به، ويتم مسحه دائماً بنفسه.                                                             |
| 3 | `token_program`                  | SPL Token.                                                                                                                                    |
| 4 | `token_program_2022`             | Token-2022. كلاهما مطلوب؛ يختار البرنامج واحداً لكل حساب مصدر.                                                                                |

**المجموعة هي سلطة التوقيع، وليس PDA على مستوى البرنامج.** يوقّع CPMM بسلطة `vault_and_lp_mint_auth_seed` عامة واحدة. خزائن رموز CLMM مملوكة لـ `PoolState` الخاص بها، لذا يمكن لاستدعاء واحد فقط أن يوقّع على المجموعة الممررة في الفتحة 2. يجب أن يكون لكل حساب برنامج رموز تلك المجموعة كسلطة له: `token_vault_0`، `token_vault_1`، أو أحد خزائن المكافآت الخاصة بالمجموعة. حساب رموز من مجموعة أخرى، أو حساب رموز المستخدم، يفشل في فحص مالك برنامج الرموز ويعكس التعليمة بأكملها. البرنامج لا يتخطاه. لا يمكن أيضاً مسح نعناعات NFT للموضع، لأن سلطة النعناع يتم إلغاؤها عند فتح الموضع. امسح المجموعة تلو الأخرى.

تقوم التعليمة بمسارين، وهذا الترتيب ثابت:

1. **CPIs لبرنامج الرموز أولاً.** لكل مصدر مملوك لـ SPL Token أو Token-2022، يحصل الحساب غير الأصلي على `WithdrawExcessLamports` (discriminant `38`). يحصل خزان wSOL الأصلي على جولة `SyncNative` → `UnwrapLamports` (discriminant `45`)، والتي تنتهي بفحص أن الرصيد المغلف يساوي قيمته قبل المزامنة. إذا لم يكن كذلك، يفشل الاستدعاء مع `LamportsCalculateError`. **يحتفظ خزان جانب SOL برصيده الكامل**، ولا يتغير أي اقتباس مبادلة عبر المسح.
2. **الخصومات المباشرة ثانياً.** يخصم المسار 2 `pool_state` أولاً، ثم كل مصدر مملوك ببرنامج CLMM، وصولاً إلى `rent.minimum_balance(data_len)`.

يتم تخطي المصادر المملوكة لأي برنامج آخر بصمت. هذا ترتيب المسارين هو الذي اعتمده CPMM في [2026-09-19](/ar/reference/changelog/2026-09-19-cpmm-creator-fee-protocol-share). CLMM لديه منذ إصداره الأول. إذا تم خصم PDA قبل CPI، فإن وقت التشغيل يتوقف مع `UnbalancedInstruction`، لذا يمكن للمستدعين تمرير المصادر بأي ترتيب.

<Warning>
  **لا يتحقق المسار المملوك للبرنامج من أي مجموعة أو مستخدم ينتمي إليه الحساب.** أي حساب مملوك ببرنامج CLMM مؤهل، بما في ذلك البعض الذي دفع المستخدم إيجاره: `PersonalPositionState`، `LimitOrderState`، و `TickArrayState`. فقط الفائض فوق الحد الأدنى المعفي من الإيجار ينتقل. يحتفظ الحساب ببيانات ويبقى معفياً من الإيجار. عند إغلاق الموضع أو الأمر لاحقاً، يسترد البرنامج أي رصيد يحتفظ به الحساب في تلك النقطة. بعد المسح، هذا الرصيد هو الحد الأدنى الحالي للإيجار.
</Warning>

تم إدراج عناوين المحفظة في [`reference/program-addresses`](/ar/reference/program-addresses#excess-lamports-collection-wallets).

## `CreateAmmConfig` يكتب ملاك رسوم ثابتة

قبل هذا الإصدار، كان `create_amm_config` يعيّن كلا حقلي مالك الرسوم من الموقّع الذي يستدعي:

```rust theme={null}
amm_config.owner      = ctx.accounts.owner.key();
amm_config.fund_owner = ctx.accounts.owner.key();
```

يكتب الآن ثوابت البرنامج الخاصة به:

```rust theme={null}
amm_config.owner      = crate::protocol_fee_owner::ID;
amm_config.fund_owner = crate::fund_fee_owner::ID;
```

لا يزال `CreateAmmConfig` مقيداً بـ `crate::admin::ID`. قبل هذا الإصدار، كانت كل فئة رسوم جديدة تبدأ بالمسؤول في كلا الحقلين وكان يجب تدويرها باستخدام معامل `UpdateAmmConfig` `3` / `4`. الآن تبدأ بمحافظ التشغيل. على mainnet الثوابت هي نفس المفاتيح المخزنة بالفعل كـ `owner` / `fund_owner` على جميع الإعدادات الـ 21 الموجودة. يكتب البرنامج الآن قيمة كانت العمليات تعيينها يدوياً.

لا تتغير موقّعو الجمع. يقبل `CollectProtocolFee` `amm_config.owner` **أو** `crate::admin::ID`، و `CollectFundFee` يقبل `amm_config.fund_owner` **أو** `crate::admin::ID`، قبل وبعد هذا الإصدار.

على devnet، يتم حل كلا الثابتين إلى نفس المفتاح. انظر [`reference/program-addresses`](/ar/reference/program-addresses#clmm-fee-owner-wallets).

<Warning>
  **هذا ليس ترحيلاً.** يحتفظ كل `AmmConfig` موجود بـ `owner` و `fund_owner` الذي يمتلكه بالفعل. اقرأ الحقول بدلاً من ترميز أي من الثوابت أو مفتاح المسؤول.
</Warning>

## تغييرات سلسلة الأدوات والتبعيات

| العنصر                                                                             | قبل                                        | بعد                                                                                                    |
| ---------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| `anchor-lang` / `anchor-spl` (البرنامج)                                            | `=0.32.1`                                  | `=1.0.2`                                                                                               |
| `Anchor.toml` toolchain                                                            | `[tool-chain]`، `solana-version = "2.3.0"` | `[toolchain]`، `solana_version = "3.1.10"`                                                             |
| Workspace `Cargo.toml`                                                             | —                                          | `[workspace.metadata.cli] solana = "3.1.10"`                                                           |
| `anchor-client` / `anchor-lang` (عميل crate)                                       | `0.32.1`                                   | `1.0.2`                                                                                                |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status` (عميل crate) | `2.3.0`                                    | `3`                                                                                                    |
| `spl-token` / `spl-token-2022` (عميل crate)                                        | `7.0.0` / `7.0.0`                          | `9.0` / `11.0`                                                                                         |
| `spl-associated-token-account` / `spl-memo` / `spl-token-client` (عميل crate)      | `6.0.0` / `6.0.0` / `0.14.0`               | `8.0` / `7.0` / `0.19`                                                                                 |
| `mpl-token-metadata` (عميل crate)                                                  | `5.1.0`                                    | `=5.1.2-alpha.2`                                                                                       |
| cratesعميل جديد                                                                    | —                                          | `solana-system-interface` `3.2`، `solana-commitment-config` `3`، `solana-compute-budget-interface` `3` |
| صورة Docker                                                                        | `solanafoundation/anchor:v0.32.1`          | `solanafoundation/anchor:v1.0.2`                                                                       |
| `@coral-xyz/anchor`                                                                | `0.32.1`                                   | استبدل بـ `@anchor-lang/core` `1.0.2`                                                                  |
| `typescript`                                                                       | `^4.3.5`                                   | `^5.6.3`                                                                                               |

تغييرات Anchor 1.0 في مواقع استدعاء CPI هي نفس التغييرات التي تعامل معها مدمجو CPMM بالفعل. يأخذ `CpiContext::new` `Pubkey` للبرنامج بدلاً من `AccountInfo` الخاص به، و `Context` له معامل lifetime واحد بدلاً من أربعة. في عميل crate، يعيد `RequestBuilder::instructions()` الآن `Vec<Instruction>` بدون `Result`، و `system_program` انتقل إلى `solana-system-interface`. انظر [`sdk-api/rust-cpi`](/ar/sdk-api/rust-cpi#cargo-dependencies).

تفاصيل نظام البناء بدون تأثير على السلسلة:

* **مسؤول Localnet.** لا تقوم ميزة `localnet` بعد الآن بتجميع مفتاح اختبار ثابت مدعوم بـ fixture ملتزم. بدلاً من ذلك، تقرأ المسؤول من متغير البيئة `CLMM_LOCALNET_ADMIN` في وقت البناء، والذي يعيّنه `yarn test:local-admin` من محفظتك المحلية. استثناء `.gitignore` الخاص بـ fixture قد اختفى.
* **ملف تعريف الإصدار.** تم حذف كتلة `[profile.release]` المكررة في `programs/amm/Cargo.toml`. يتجاهل Cargo `[profile]` خارج جذر workspace، لذا كانت كتلة الجذر هي الكتلة المعمول بها بالفعل، و `panic = "abort"` على مستوى البرنامج لم يتم تطبيقه أبداً.
* **Anchor.toml.** يصبح `seeds = false` `resolution = true` بالإضافة إلى `skip-lint = false`، وتتم إزالة عنوان URL `[registry]` القديم.
* **Lints.** يضيف `programs/amm/Cargo.toml` قائمة السماح `[lints.rust] unexpected_cfgs` لـ feature cfgs التي تصدرها ماكروهات Anchor و Solana.
* **README.** على هذا الفرع، لا يزال README يخبرك بتشغيل `rustup default 1.86.0` و `avm install 0.32.1` من `coral-xyz/anchor`. اتبع `Anchor.toml` و [`solana-fundamentals/toolchain`](/ar/solana-fundamentals/toolchain) بدلاً من ذلك.

## ما لم يتغير

* **كل تخطيط حساب.** `PoolState`، `AmmConfig`، `TickArrayState`، `TickArrayBitmapExtension`، `PersonalPositionState`، `ObservationState`، `LimitOrderState`، `DynamicFeeConfig`، `Permission` و `SupportMintAssociated` تحتفظ بنفس الأحجام والإزاحات.
* **رموز الخطأ `6000`–`6051`.**
* **رياضيات المبادلة والسيولة والرسوم والرسوم الديناميكية وأوامر الحد.** `CollectExcessLamports` ينقل lamports التي لم تكن أبداً جزءاً من احتياطيات أي مجموعة.
* **تجميد NFT للموضع** من [2026-08-17](/ar/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze)، بما في ذلك قاعدة pool-as-freeze-authority ومسار `ClosePosition` thaw.
* **`spl_memo`.** انتقل قيد برنامج memo الخاص بـ `DecreaseLiquidityV2` من `spl_memo::id()` إلى `anchor_spl::memo::ID`. كلاهما يسمي نفس العنوان؛ `anchor-spl` فقط أعاد تسمية التصدير.
* **معرف البرنامج.**

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

* `products/clmm/instructions`: لافتة الترقية؛ قسم `CollectExcessLamports` مع قائمة الحسابات الخاصة به، جدول الإرسال ثنائي المسار وتحديد النطاق لكل مجموعة؛ صفوف الجرد والبوابة الإدارية ومصفوفة تغيير الحالة؛ ملاحظة مالك الرسوم على `CollectProtocolFee` / `CollectFundFee`.
* `products/clmm/accounts`: تعليقات مالك `AmmConfig` وملاحظة حول ما يكتبه `CreateAmmConfig`.
* `products/clmm/code-demos`: لافتة الإصدار وهيكل Rust CPI الهيكلي انتقل إلى Anchor 1.0.
* `products/cpmm/code-demos`: تمت إزالة ملاحظة "لا يمكن مشاركة crate مع CLMM".
* `reference/error-codes`: تم توثيق `6052`.
* `reference/program-addresses`: قسم "محافظ مالك رسوم CLMM" جديد؛ تمت إضافة CLMM إلى "محافظ جمع excess-lamports".
* `sdk-api/rust-cpi`، `sdk-api/anchor-idl`، `solana-fundamentals/toolchain`: دبابيس Anchor 1.0 لـ `raydium-clmm`، وتقاعد تحذير تقسيم crate.
* `solana-fundamentals/rent-and-reclaimable-rent`: تمت إضافة CLMM إلى "ما تمسحه برامج Raydium على جانبها الخاص".
* `security/admin-and-multisig`: دور جامع excess-lamports لـ CLMM.
* `protocol-overview/versions-and-migration`: نقطة نقاش سجل ترقية CLMM.
