> ## 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 — AmmInfo و TargetOrders و OpenOrders والخزائن وعملة LP والسلطة — بالإضافة إلى حسابات OpenBook المرتبطة بالمجمع.

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

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

<Info>
  اعتبارًا من ترقية 2026-07، تم **إزالة** اعتماد AMM v4 على OpenBook / Serum — لا توجد تعليمات تقرأ أو تكتب حالة OpenBook بعد الآن. يتم الاحتفاظ بحسابات السوق أدناه فقط كعناصر نائبة موضعية على تخطيطات التعليمات v1 القديمة (مقبولة لكن مُتجاهلة) وكحقول مرجعية على `AmmInfo`. استخدم نقاط نهاية المبادلة V2، التي تحذفها تمامًا. تجمع هذه الصفحة الحسابات في أقسام "مملوكة للمجمع" و"OpenBook (قديمة)" لقراءة المعاملات الأقدم.
</Info>

## الجرد

يسجل مجمع AMM v4 سوقًا واحدًا مرتبطًا على `AmmInfo` عند الإنشاء. الصورة الكاملة:

| الفئة           | الحساب                               | المالك        | الدور                                                                                                 |
| --------------- | ------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------- |
| المجمع          | `AmmInfo`                            | برنامج AMM v4 | حالة المجمع: الرسوم المتراكمة والحالة والمراجع إلى الخزائن (وكحقول قديمة، السوق).                     |
| المجمع          | `amm_authority`                      | برنامج AMM v4 | PDA مملوك للبرنامج يوقّع حركات الخزائن. مشترك بين جميع مجمعات AMM v4.                                 |
| المجمع          | `amm_open_orders`                    | OpenBook      | مرجع `OpenOrders` قديم. لم يعد يُقرأ أو يُكتب من قبل البرنامج؛ لا يزال يُمرر موضعيًا على تخطيطات v1.  |
| المجمع          | `amm_target_orders`                  | برنامج AMM v4 | حساب الطلبات المستهدفة القديم. لا يزال مرجعيًا بواسطة `WithdrawPnl` (كحساب #10) لكن لا يتم بناء شبكة. |
| المجمع          | `pool_coin_token_account`            | SPL Token     | خزينة جانب العملة للمجمع (ATA من `amm_authority`).                                                    |
| المجمع          | `pool_pc_token_account`              | SPL Token     | خزينة جانب pc للمجمع.                                                                                 |
| المجمع          | `lp_mint`                            | SPL Token     | عملة LP قابلة للاستبدال.                                                                              |
| المجمع          | `pool_withdraw_queue`                | برنامج AMM v4 | قائمة انتظار قديمة للسحب المؤجل؛ تُبقى بطول صفر.                                                      |
| المجمع          | `pool_temp_lp`                       | برنامج AMM v4 | حساب LP مساعد.                                                                                        |
| قديم (OpenBook) | `serum_market`                       | OpenBook      | السوق المرتبط. يُمرر على تخطيطات v1 لكن لم يعد يُتحقق منه أو يُستخدم.                                 |
| قديم            | `serum_bids`, `serum_asks`           | OpenBook      | قوائم الطلب والعرض. مُتجاهلة.                                                                         |
| قديم            | `serum_event_queue`                  | OpenBook      | الأحداث المعلقة. مُتجاهلة.                                                                            |
| قديم            | `serum_coin_vault`, `serum_pc_vault` | SPL Token     | خزائن مستوى السوق. مُتجاهلة.                                                                          |
| قديم            | `serum_vault_signer`                 | OpenBook      | PDA مستوى السوق. مُتجاهل.                                                                             |

ملاحظة: يتم الاحتفاظ بـ "serum" كبادئة في IDL وأسماء الحقول الخاصة بـ AMM v4 للتوافق العكسي. لم تعد هذه الحسابات وظيفية بعد إزالة OpenBook.

## `AmmInfo`

حساب حالة جذر المجمع. كبير (≈ 752 بايت) لأنه يحمل مراجع المجمع و OpenBook مضمنة.

```rust theme={null}
// programs/amm/src/state.rs (مختصر؛ ترتيب الحقول والأسماء تتبع IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump used to derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // internal state machine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // legacy (OpenBook lot size); now initialized to 0
    pub pc_lot_size:   u64,    // legacy; now initialized to 0
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // trade/protocol/fund fee rates
    pub state_data: StateData,

    // Pool-owned accounts:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // pool's OpenOrders on OpenBook
    pub market: Pubkey,        // OpenBook market
    pub market_program: Pubkey, // OpenBook program ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // admin (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → used by OpenBook integration
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protocol's share OF the swap fee
    pub pnl_denominator:          u64,     // 100 → so 12/100 = 12% of fee, = 0.03% of volume
    pub swap_fee_numerator:       u64,     // 25  → 0.25% gross swap fee
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,        // still updated — accrued protocol fee (coin side)
    pub need_take_pnl_pc:   u64,        // still updated — accrued protocol fee (pc side)
    pub total_pnl_pc:   u64,            // DEPRECATED — no longer updated
    pub total_pnl_coin: u64,            // DEPRECATED — no longer updated
    pub pool_open_time: u64,            // still used — pool open timestamp
    pub padding: [u64; 2],              // reserved
    pub orderbook_to_init_time: u64,    // DEPRECATED — no longer updated
    pub swap_coin_in_amount: u128,      // DEPRECATED — volume counters frozen
    pub swap_pc_out_amount:  u128,      // DEPRECATED
    pub swap_acc_pc_fee:    u64,        // DEPRECATED
    pub swap_pc_in_amount:  u128,       // DEPRECATED
    pub swap_coin_out_amount: u128,     // DEPRECATED
    pub swap_acc_coin_fee:  u64,        // DEPRECATED
}
```

<Note>
  تخطيط البنية **لم يتغير** (متوافق بايت) لذا تبقى المُفكّكات الموجودة تعمل، لكن بعد إزالة OpenBook الحقول المُشار إليها بـ `DEPRECATED` أعلاه **لم تعد تُكتب** — عدادات الحجم `swap_*` مجمدة عند آخر قيمة لها. لتحليلات الحجم، استخدم سجلات التداول بدلاً من هذه الحقول. فقط `need_take_pnl_*` و `pool_open_time` يتم صيانتهما بنشاط.
</Note>

الحقول الموجهة للمدمجين:

* **`coin_vault`**, **`pc_vault`** — خزائن SPL Token للمجمع. `coin` هو `token_0` حسب اتفاقية Serum/OpenBook (الأساس)، `pc` هو `token_1` (الاقتباس).
* **`coin_decimals`**, **`pc_decimals`** — مطابقة للعملات.
* **`open_orders`**, **`target_orders`**, **`market`** — حقول مرجعية قديمة. لا تزال موجودة على `AmmInfo` وتُمرر موضعيًا على تخطيطات التعليمات v1، لكن البرنامج لم يعد يقرأها أو يتحقق منها. نقاط نهاية المبادلة V2 تحذفها.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — رسم التداول المدمج. الافتراضي `25 / 10_000 = 0.25%`.
* **`status`** — bitmask يحد العمليات. قابل للتعيين من قبل المسؤول عبر `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — الفرق بين الرسوم المتراكمة الإجمالية وما تم مسحه. `TakePnl` يصفر هذه.

## توصيل OpenBook

<Note>
  **تم الحذف.** تم حذف اعتماد OpenBook / Serum من البرنامج (ترقية 2026-07). الحسابات الموصوفة في هذا القسم لم تعد يتم التحقق منها أو استخدامها. تبقى كحقول مرجعية على `AmmInfo` وكعناصر نائبة موضعية على تخطيطات التعليمات v1 القديمة. استخدم **نقاط نهاية المبادلة V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/ar/products/amm-v4/instructions)) التي تتخطى هذه الحسابات تمامًا.
</Note>

عند استدعاء تعليمة **v1** قديمة `SwapBaseIn` / `SwapBaseOut` أو `Deposit` أو `Withdraw`، يجب أن يطابق **عدد** الحسابات التخطيط القديم (حسابات السوق تحتل مواضعها التاريخية)، لكن **محتوياتها لم تعد يتم فحصها** — لا يتم إصدار CPI ضدها. يجب أن يستخدم الكود الجديد متغيرات المبادلة V2، التي لا تأخذ هذه الحسابات على الإطلاق.

```ts theme={null}
const market = ...;  // OpenBook market PublicKey

// Fields OpenBook exposes on its market account:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
```

`amm_open_orders` للمجمع هو حساب مملوك لـ OpenBook يحتفظ بحالة الطلب المحدود للمجمع على هذا السوق: الطلبات النشطة والأرصدة المستقرة والمحيلون وما إلى ذلك. `amm_target_orders` من جانب AMM: يحتفظ بالشبكة *المقصودة* للمجمع (السعر/الحجم لكل فتحة طلب) حتى يتمكن البرنامج من المقارنة بسهولة مع ما يتم نشره حاليًا ووضع / إلغاء الفرق.

## PDAs السلطة

يوجد بالضبط PDA `amm_authority` واحد لبرنامج AMM v4 بأكمله. بذره تافهة (`["amm authority"]`) وتُخزن نتيجته على كل `AmmInfo`. توقّع هذه السلطة جميع حركات الرموز لجميع مجمعات AMM v4.

```ts theme={null}
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
```

يوجد سلطة **محدودة النطاق بالمجمع** منفصلة مشتقة لكل مجمع لتوقيع عمليات OpenBook (`amm_authority` أعلاه يغطي كليهما في الواقع في تصميم هذا البرنامج؛ استخدمت الإصدارات المختلفة اشتقاقات مختلفة، لذا تحقق من `AmmInfo.nonce` للمجمع المحدد في الكود).

## الخزائن

خزائن SPL Token للمجمع هي حسابات رموز قياسية يكون `owner` لها `amm_authority`. ليست ATAs — عناوينها PDAs محددة مشتقة عند `Initialize` ببذور `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. يتم تخزين العناوين على `AmmInfo`؛ الاشتقاق فضول لمرة واحدة.

Token-2022 **غير مدعوم**. يحمّل البرنامج معرّف برنامج SPL Token لجميع حركات الخزائن. محاولة ربط مجمع AMM v4 بعملة Token-2022 تفشل عند `Initialize`.

## عملة LP

عملة SPL Token كلاسيكية سلطتها `amm_authority`. إجمالي العرض يتتبع ملكية LP للمجمع؛ حرق LP يعيد الرموز من كلا الخزائن بنسبة. لأن AMM v4 سابق لـ CPMM، لا توجد مرآة `lp_supply` في حالة المجمع — اقرأ عرض العملة على السلسلة مباشرة.

## bitmask الحالة

`AmmInfo.status` يحد العمليات. البتات (قد يختلف الموضع عبر إصدارات البرنامج — تأكد عبر المصدر):

| البت | العلم               | التأثير                                    |
| ---- | ------------------- | ------------------------------------------ |
| 0    | `SWAP_DISABLED`     | `Swap*` يرفض.                              |
| 1    | `DEPOSIT_DISABLED`  | `Deposit` يرفض.                            |
| 2    | `WITHDRAW_DISABLED` | `Withdraw` يرفض.                           |
| 3    | `CLMM_LIKE_MIGRATE` | علم بوابة الهجرة المستخدم من قبل العمليات. |

تعيّن مجموعة Raydium متعددة التوقيع هذه عبر `SetParams` (مع `param = Status`). (تم إزالة `AdminCancelOrders`.)

## الملاحظة / الأوراكل

**AMM v4 ليس لديه حساب ملاحظة مخصص.** البروتوكولات الأخرى التي تحتاج إلى TWAP على السلسلة عادة ما تستهلك عبور كتاب OpenBook بشكل غير مباشر أو تقرأ خارج السلسلة. إذا كنت بحاجة إلى Raydium TWAP مع دعم البرنامج، استخدم CPMM أو CLMM.

## اشتقاق حسابات المجمع من الصفر

لأن AMM v4 لم يتم تصميمه لـ PDAs حتمية لكل زوج (سابق لهذه الاتفاقية Solana)، `amm_id` الكنسي هو **مفتاح مزروع** مشتق مع:

```
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
```

ينطبق نفس نمط المفتاح المزروع على `amm_open_orders` و `amm_target_orders` و `amm_withdraw_queue` و `pool_temp_lp` و `pool_coin_token_account` و `pool_pc_token_account` و `lp_mint`. SDK والـ API يحسبان هذه مسبقًا لك؛ انظر `raydium-sdk-v2` الخاص بـ `Liquidity.getAssociatedPoolKeys`.

في الممارسة العملية، يقرأ المدمجون مجموعة الحسابات الكاملة للمجمع من `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` أو من SDK. الاشتقاق اليدوي نادرًا ما يكون مطلوبًا.

## مرجع دورة الحياة السريع

| الحدث                                  | الحسابات المُنشأة                                                                                             | الحسابات المحذوفة |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------- |
| `Initialize2`                          | `amm_info`, `amm_open_orders`, `amm_target_orders`, الخزائن, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —                 |
| `Deposit`                              | — (قد ينشئ ATA LP للمستخدم)                                                                                   | —                 |
| `Withdraw`                             | —                                                                                                             | —                 |
| `SwapBaseIn` / `SwapBaseOut` (v1 / V2) | — (قد ينشئ ATA للمستخدم)                                                                                      | —                 |
| `WithdrawPnl`                          | —                                                                                                             | —                 |

تستمر المجمعات وحساباتها إلى الأبد. حتى لو تم سحب السيولة بالكامل، `AmmInfo` يبقى.

## ما يجب قراءته أين

* **الرياضيات وحسابات الرسوم**: [`products/amm-v4/math`](/ar/products/amm-v4/math).
* **تقسيم الرسوم وكيفية مقارنتها بـ CPMM/CLMM**: [`products/amm-v4/fees`](/ar/products/amm-v4/fees).
* **قوائم حسابات التعليمات**: [`products/amm-v4/instructions`](/ar/products/amm-v4/instructions).
* **اشتقاق حساب OpenBook**: وثائق برنامج OpenBook ([`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)).

المصادر:

* [برنامج Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/ar/reference/program-addresses) لمعرفات البرامج الكنسية
* بروتوكول OpenBook / Serum لحسابات الطرف الآخر
