> ## 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>
  AMM v4 يتطلب عددًا كبيرًا من الحسابات مقارنة بـ CPMM أو CLMM لأن كل عملية تؤثر على حالة OpenBook. تجمع هذه الصفحة الحسابات في قسمي "مملوكة للمجمع" و "مملوكة لـ OpenBook" حتى يتمكن المدمج من الرؤية السريعة للفرق بينهما.
</Info>

## الجرد

يرتبط مجمع AMM v4 بسوق OpenBook واحد بالضبط عند الإنشاء. الصورة الحية الكاملة هي:

| الفئة            | الحساب                               | المالك        | الدور                                                                |
| ---------------- | ------------------------------------ | ------------- | -------------------------------------------------------------------- |
| المجمع           | `AmmInfo`                            | برنامج AMM v4 | حالة المجمع: الرسوم المستحقة والحالة والمراجع للمخازن وسوق OpenBook. |
| المجمع           | `amm_authority`                      | برنامج AMM v4 | PDA مملوك للبرنامج يوقع حركات المخزن. مشترك في جميع مجمعات AMM v4.   |
| المجمع           | `amm_open_orders`                    | OpenBook      | حساب `OpenOrders` لمجمع AMM على OpenBook لهذا السوق.                 |
| المجمع           | `amm_target_orders`                  | برنامج AMM v4 | شبكة جانب المجمع لأوامر الحد المستهدفة للنشر على OpenBook.           |
| المجمع           | `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 مساعد يُستخدم أثناء `Initialize`.                            |
| السوق (OpenBook) | `serum_market`                       | OpenBook      | السوق نفسه (دعك البداية/الاقتباس والموقع الموثوق وما إلى ذلك).       |
| السوق            | `serum_bids`, `serum_asks`           | OpenBook      | قائمات الطلب والعرض.                                                 |
| السوق            | `serum_event_queue`                  | OpenBook      | الأحداث المعلقة (الملءات والإلغاءات).                                |
| السوق            | `serum_coin_vault`, `serum_pc_vault` | SPL Token     | مخازن مستوى السوق في OpenBook.                                       |
| السوق            | `serum_vault_signer`                 | OpenBook      | PDA على مستوى السوق يوقع حركات `serum_*_vault`.                      |

ملاحظة: يتم الاحتفاظ بـ "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,    // mirrors OpenBook market
    pub pc_lot_size:   u64,
    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,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
```

حقول موجهة للمدمج:

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

## توصيل OpenBook

<Note>
  **لم تعد نشطة.** لا تشارك مجمعات AMM v4 السيولة مع OpenBook — تم إلغاء شبكة أوامر الحد. تبقى حسابات OpenBook الموضحة في هذا القسم على `AmmInfo` لكل مجمع وتظل مثبتة بواسطة نقاط نهاية V1 swap (وبواسطة `Initialize` و `Deposit` و `Withdraw`) من أجل التوافق العكسي، لكن حالة على الكتاب التي تشير إليها فارغة في الممارسة. استخدم **نقاط نهاية V2 swap** ([`SwapBaseInV2` / `SwapBaseOutV2`](/ar/products/amm-v4/instructions)) التي تتخطى هذه الحسابات تماماً وتمثل مسار التنفيذ الكنسي اليوم.
</Note>

عند استدعاء أي تعليمات **V1** قراءة أو كتابة على مجمع AMM v4، يجب عليك تمرير حسابات OpenBook. يعيد البرنامج اشتقاقها والتحقق منها، لذا فإن تمرير مجموعة غير متطابقة ينعكس. (متغيرات V2 swap لا تتطلب هذه الحسابات على الإطلاق.)

```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 للسلطة

هناك `amm_authority` PDA واحد بالضبط للبرنامج 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 للمجمع هي حسابات رموز قياسية الملكية `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 mint تفشل في `Initialize`.

## دعك LP

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

## قناع الحالة

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

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

تعيّن Raydium multisig هذه عبر `AdminCancelOrders` و `AdminSetParams` وغيرها.

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

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

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

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

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

ينطبق نفس نمط seeded-key على `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`                    | — (قد تنشئ user LP ATA)                                                                                            | —                 |
| `Withdraw`                   | —                                                                                                                  | —                 |
| `SwapBaseIn` / `SwapBaseOut` | — (قد تنشئ user ATA)                                                                                               | —                 |
| `TakePnl`                    | —                                                                                                                  | —                 |
| `MonitorStep` (crank)        | —                                                                                                                  | —                 |

المجمعات وحساباتها تستمر إلى الأبد. حتى لو تم السحب الكامل للسيولة، تبقى `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 لحسابات الطرف الثالث
