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

# حسابات LaunchLab

> PoolState (جذر كل إطلاق)، والخزائن الأساسية والاقتباسية، وسلطة PDA، والرسم البياني الصغير لحسابات كل إطلاق. تعيش GlobalConfig على مستوى البروتوكول و PlatformConfig على مستوى المنصة في صفحات منفصلة.

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

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

<Info>
  توثق هذه الصفحة رسم البياني للحسابات **لكل إطلاق**: `PoolState` (حساب الحالة الجذري لإطلاق واحد)، وخزائنه الاثنتان، وسلطة PDA، والمراجع اللاحقة للتخرج التي يكتسبها عند استقرار الإطلاق.

  للحصول على الإعدادات على مستوى البروتوكول التي تحد من كل إطلاق، انظر [`products/launchlab/global-config`](/ar/products/launchlab/global-config). للحصول على الطبقة الإضافية لكل منصة، انظر [`products/launchlab/platform-config`](/ar/products/launchlab/platform-config). لحسابات الاستحقاق (`VestingSchedule` على `PoolState`، `VestingRecord` لكل مستفيد)، انظر [`products/launchlab/vesting`](/ar/products/launchlab/vesting).
</Info>

## جرد الحسابات

| الحساب | المالك | الغرض |
| - | - | - |
| [`GlobalConfig`](/ar/products/launchlab/global-config) | برنامج LaunchLab | قواعد على مستوى البروتوكول: الرسوم، حدود العرض، محافظ الهجرة. واحد لكل `(curve_type, index)`. |
| [`PlatformConfig`](/ar/products/launchlab/platform-config) | برنامج LaunchLab | طبقة إضافية لكل منصة: العلامات التجارية، رسوم المنصة، تقسيم NFT عند التخرج، مفتاح معاملات الإطلاق ومدير القواعد. ثابت 944 بايت. |
| `PoolState` | برنامج LaunchLab | حالة جذر لكل إطلاق: النعات، الخزائن، معاملات المنحنى، عدادات المبيعات، عدادات الرسوم، جدول الاستحقاق، حالة التخرج. |
| `authority` | برنامج LaunchLab | PDA واحد عند البذرة `[b"vault_auth_seed"]` يمتلك الخزائن عبر جميع الإطلاقات ويوقع CPI بعد التخرج. |
| `base_vault` | SPL Token / Token-2022 | خزانة لكل إطلاق تحتفظ بالرموز الأساسية غير المباعة. |
| `quote_vault` | SPL Token / Token-2022 | خزانة لكل إطلاق تحتفظ برموز الاقتباس المتراكمة. تتبع أي برنامج يمتلك نعت الاقتباس. |
| [`VestingRecord`](/ar/products/launchlab/vesting) | برنامج LaunchLab | سجل الجرف + فتح خطي لكل مستفيد. اختياري. |
| `creator_fee_vault` | SPL Token / Token-2022 | خزانة لكل منشئ + لكل نعت اقتباس تحتفظ برسوم المنشئ المتراكمة، يتم مسحها بواسطة `ClaimCreatorFee`. تتبع برنامج نعت الاقتباس. |
| `platform_fee_vault` | SPL Token / Token-2022 | خزانة لكل منصة + لكل نعت اقتباس تحتفظ برسوم المنصة المتراكمة، يتم مسحها بواسطة `ClaimPlatformFeeFromVault`. تتبع برنامج نعت الاقتباس. |
| [`PlatformAllowConfig`](/ar/products/launchlab/platform-config) | برنامج LaunchLab | إذن اختياري يدار من قبل المنصة لزوج واحد `(PlatformConfig, GlobalConfig)`. يتم التحقق منه فقط عندما تمكّن المنصة التقييد. |
| [`PlatformCurveRule`](/ar/products/launchlab/curve-rules) | برنامج LaunchLab | قاعدة إطلاق معاملات اختيارية يدارها المنصة لزوج واحد `(PlatformConfig, GlobalConfig)`. يتم التحقق منها فقط عندما تعيّن المنصة `restrict_curve_param`. حجم متغير، 150 بايت فارغ. |
| (بعد التخرج) `cpmm_pool_state` | برنامج CPMM | مجموعة تم إنشاؤها بواسطة `MigrateToCpswap` لكل إطلاق جديد. يمكن للحالة القديمة أن تشير إلى تخرج AMM v4 القديم. |
| (بعد التخرج) Fee Key NFT | برنامج LP-Lock | قبل ترقية 2026-08-17، يمكن لمقاييس المنصة والمنشئ أن تنتج مفاتيح رسوم منفصلة. الهجرات المنفذة بعد ذلك تجمع كلا المقياسين في مفتاح رسوم منصة واحد. |

يقرأ SDK هذا عبر `raydium.launchpad.getRpcPoolInfo({ poolId })`، التي تُعيد `PoolState` المفكوك مع `GlobalConfig` المرتبط مُلحقًا باسم `configInfo` (و `getRpcPoolsInfo({ poolIdList })` للشكل المجمّع). ولا وجود لـ `getLaunchById`. ومعرّف المجمع نفسه هو PDA من `(programId, mintA, mintB)` — `getPdaLaunchpadPoolId`.

## `PoolState`

حالة الجذر لكل إطلاق. أسماء الحقول أدناه تطابق بنية Rust على السلسلة (`states/pool.rs`)؛ تم تبسيط بعض القيم لسهولة القراءة — استشر المصدر للحصول على تخطيط الذاكرة الدقيق.

```rust theme={null}
// states/pool.rs (abridged)
pub struct PoolState {
    pub epoch:                     u64,        // recent_epoch tracker
    pub auth_bump:                 u8,
    pub status:                    u8,         // PoolStatus enum
    pub base_decimals:             u8,
    pub quote_decimals:            u8,
    pub migrate_type:              u8,         // 0 = AMM v4, 1 = CPMM
    pub supply:                    u64,        // total base tokens (no decimals)
    pub total_base_sell:           u64,        // base supply allocated to the curve
    pub virtual_base:              u64,        // virtual-reserve seed
    pub virtual_quote:             u64,        // virtual-reserve seed
    pub real_base:                 u64,        // base sold so far
    pub real_quote:                u64,        // quote raised so far (excl. fees)
    pub total_quote_fund_raising:  u64,        // graduation threshold in quote

    pub quote_protocol_fee:        u64,        // accrued, pending CollectFee
    pub platform_fee:              u64,        // accrued, pending ClaimPlatformFee
    pub migrate_fee:               u64,        // accrued, pending CollectMigrateFee
    pub vesting_schedule:          VestingSchedule,

    pub global_config:             Pubkey,
    pub platform_config:           Pubkey,
    pub base_mint:                 Pubkey,
    pub quote_mint:                Pubkey,
    pub base_vault:                Pubkey,
    pub quote_vault:               Pubkey,
    pub creator:                   Pubkey,     // NOTE: last of the seven pubkeys, not third

    pub token_program_flag:        u8,         // bit0 = base mint, bit1 = quote mint; 0 = SPL Token, 1 = Token-2022
    pub amm_creator_fee_on:        u8,         // 0 = QuoteToken, 1 = BothToken (CPMM-only)
    pub platform_vesting_share:    u64,        // the platform's slice of total_locked_amount
    pub padding:                   [u8; 54],
}

#[derive(Default, Debug, Clone)]
pub struct VestingSchedule {
    pub total_locked_amount:    u64,
    pub cliff_period:           u64,
    pub unlock_period:          u64,
    pub start_time:             u64,           // set at graduation
    pub allocated_share_amount: u64,           // running sum across VestingRecords
}
```

قيم `PoolStatus` (أسماء المتغيرات في IDL هي `Fund` / `Migrate` / `Trade`):

```
0 = Fund            — accepting buys / sells; below total_quote_fund_raising
1 = Migrate         — threshold reached; awaiting MigrateToAmm / MigrateToCpswap
2 = Trade           — migration done; post-graduation AMM trading, vesting clock running
```

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

* **`status`** — ثلاث قيم، رتيبة (`Fund` → `Migrate` → `Trade`). القراءات آمنة دائماً؛ الكتابات مقيدة. وتتطلب `ClaimVestedToken` الحالة `Trade`.
* **`real_base`**, **`real_quote`** — حالة المنحنى الحالية. مع `virtual_base` / `virtual_quote` فهي كافية لحساب سعر الفائدة دون لمس الخزائن. انظر [`bonding-curve`](/ar/products/launchlab/bonding-curve).
* **`total_base_sell`** مقابل `real_base` — نسبة "التقدم نحو التخرج" لواجهات المستخدم.
* **`migrate_type`** — يتطلب التهيئة الجديدة `1` (`CPSWAP`). يبقى `0` المخزن ذا معنى فقط لإطلاق موجود تم إنشاؤه قبل فرض CPMM فقط.
* **`amm_creator_fee_on`** — يختار `creator_fee_on = OnlyQuoteToken` (`0`) أو `BothToken` (`1`) على مجموعة CPMM بعد التخرج. لا يختار هدف الهجرة. انظر [`creator-fees`](/ar/products/launchlab/creator-fees).
* **`token_program_flag`** — حقل بت، وليس منطقي. Bit0 هو نعت الأساس و bit1 هو نعت الاقتباس، كل منهما `0` لـ SPL Token و `1` لـ Token-2022، لذا يأخذ البايت أربع قيم: `0` (كلاهما قديم)، `1` (Token-2022 أساس)، `2` (Token-2022 اقتباس)، `3` (كلاهما Token-2022). اقرأ نعت واحد مع `(token_program_flag >> bit) & 1`. مقارنة البايت بالكامل مقابل `0` لتصنيف نعت الأساس تحل `2` إلى البرنامج الخاطئ. كان Bit1 ثابتاً `0` حتى تم دعم نعات اقتباس Token-2022.
* **`quote_protocol_fee` / `platform_fee` / `migrate_fee`** — ثلاثة عدادات رسوم مستقلة. لكل منها تعليمة مطالبة خاصة بها؛ انظر [`instructions`](/ar/products/launchlab/instructions).
* **`vesting_schedule`** — موجود على كل `PoolState` لكن غير نشط عندما `total_locked_amount == 0`. انظر [`vesting`](/ar/products/launchlab/vesting) للدورة الحياة الكاملة.

## سلطة PDA

يستخدم LaunchLab سلطة PDA **واحدة** عبر جميع الإطلاقات، مشتقة بدون بذرة لكل إطلاق:

```ts theme={null}
const LAUNCHLAB_PROGRAM_ID = new PublicKey("<LAUNCHLAB_ID>"); // see reference/program-addresses

const [authority, bump] = PublicKey.findProgramAddressSync(
  [Buffer.from("vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

هذا PDA الواحد هو:

* السلطة على `base_vault` و `quote_vault` لكل إطلاق.
* لا شيء على `base_mint` — يتم إلغاء سلطة النعت قبل عودة `InitializeV2` (انظر أدناه).
* الموقّع على CPI تخرج CPMM، وعلى تخرج AMM v4 القديم للحالة الموجودة.
* الموقّع على تحويلات `ClaimVestedToken` خارج base vault.
* `transfer_fee_config_authority` على `TransferFeeConfig` لنعت أساس Token-2022، لمرحلة ما قبل التخرج بالكامل — و `withdraw_withheld_authority` أيضاً، لكن فقط عندما تترك المنصة `PlatformConfig.transfer_fee_extension_auth` غير محدد.

يتم إلغاء `mint_authority` في تعليمة **التهيئة**، وليس عند التخرج: `InitializeV2` و `InitializeWithToken2022` تصك العرض الكامل في `base_vault` ثم تعيّن `MintTokens` إلى `None` في نفس التعليمة. العرض ثابت إذاً من لحظة وجود الإطلاق، والهجرة ليس لها خطوة سلطة نعت. تأثير جانبي: لا أحد يمكنه التوقيع على نعت الأساس، لذا لا يمكن استرجاع إيجاره بواسطة [`CollectExcessLamports`](/ar/products/launchlab/instructions#collectexcesslamports).

اثنان من PDAs الإضافية يحكمان خزائن الرسوم:

```ts theme={null}
const [creatorFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("creator_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);

const [platformFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("platform_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

هذه توقّع التحويل خارج خزائن الرسوم المقابلة أثناء `ClaimCreatorFee` و `ClaimPlatformFeeFromVault`.

## نعت الأساس

تم إنشاؤه بشكل مضمّن بواسطة `Initialize` مع:

* `mint_authority = authority` (ملغى عند التخرج).
* `freeze_authority = None`.
* `supply = supply`، مصكوك بالكامل في `base_vault`.
* `decimals` اختاره المنشئ عند `Initialize` (عادة 6).

لأن العرض الكامل مصكوك مسبقاً، `base_mint.supply` ثابت لحياة الإطلاق. عمليات شراء المنحنى تنقل الرموز من `base_vault` إلى المشتري، لكن لا تستدعي `mint_to`.

`Initialize` / `InitializeV2` تنشئ نعات أساس SPL Token. تعليمة `InitializeWithToken2022` المخصصة تسمح بأن يكون نعت الأساس نعت Token-2022 (مع `TransferFeeConfig` اختياري). جميع مسارات التهيئة الثلاثة تتطلب تخرج CPMM.

عندما ترفق `InitializeWithToken2022` `TransferFeeConfig`، يتم إنشاء النعت مع `transfer_fee_config_authority = authority` و `withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth`، العودة إلى `authority` عندما لم تعيّن المنصة هذا الحقل. يتم إعادة تعيين كلا السلطتين إلى مفتاح المنصة عند التخرج، الجانب الانسحاب فقط إذا كان PDA لا يزال يحتفظ به. انظر [`platform-config`](/ar/products/launchlab/platform-config#token-2022-transfer-fee-authorities).

نعت الاقتباس مستقل عن نعت الأساس وقد يكون بنفسه نعت Token-2022 — `InitializeV2` و `InitializeWithToken2022` يقبلان أي برنامج في فتحة برنامج الاقتباس. `Initialize` المهجور لا يفعل: حساب برنامج الاقتباس الخاص به لا يزال مكتوباً لـ SPL Token، لذا يمكن فقط إطلاق إعداد نعت اقتباس Token-2022 من خلال الاثنين الآخرين. لا يتم إنشاء نعت الاقتباس بواسطة LaunchLab؛ إنه ما يسميه `GlobalConfig.quote_mint`. انظر [`global-config`](/ar/products/launchlab/global-config#token-2022-quote-mints) و [`reference/token-2022-support`](/ar/reference/token-2022-support#launchlab-quote-mints).

## الخزائن

كل من `base_vault` و `quote_vault` هما حسابات رموز يملكها LaunchLab `authority` PDA، كل منهما تم إنشاؤه على البرنامج الذي يمتلك نعته الخاص — لذا يمكن لإطلاق أن يكون لديه خزانة أساس قديمة وخزانة اقتباس Token-2022، أو أي مزيج آخر. `token_program_flag` يسجل أي منهما. يتم تخزين العناوين على `PoolState` ويمكن أيضاً اشتقاقها:

```ts theme={null}
const [baseVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), baseMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
const [quoteVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), quoteMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
```

(تحقق من بادئات البذور الدقيقة من بنية حسابات `Initialize` في المصدر قبل الاعتماد على الاشتقاق في الإنتاج.)

## خزائن الرسوم

اثنان من PDAs يجمعان الرسوم عبر الإطلاقات:

* **خزانة رسوم المنشئ** — PDA عند البذور `[creator, quote_mint]`. كل إطلاق يكسب رسوم منشئ على نفس نعت الاقتباس يصب في نفس الخزانة. المنشئ يمسحها عبر `ClaimCreatorFee`.
* **خزانة رسوم المنصة** — PDA عند البذور `[platform_config, quote_mint]`. كل إطلاق موجه عبر نفس المنصة التي تستخدم نفس نعت الاقتباس يصب في نفس الخزانة. `platform_fee_wallet` للمنصة يمسحها عبر `ClaimPlatformFeeFromVault`. هناك أيضاً متغير مسح لكل إطلاق (`ClaimPlatformFee`) يسحب من `quote_vault` للإطلاق مباشرة دون المرور عبر الخزانة المجمعة.

كلاهما يتم إنشاؤه بكسل على أول مبادلة تتراكم رسوم، على أي برنامج يمتلك نعت الاقتباس. منشئ أو منصة تشغل إطلاقات ضد كل من نعت اقتباس قديم و Token-2022 ينتهي بها الحال مع خزانة واحدة لكل نعت، كما كانت بالفعل لنعتي اقتباس قديمين مختلفين.

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

## Quote vault ↔ `real_quote`

`quote_vault.balance` و `PoolState.real_quote` يجب أن يبقيا متزامنين. يمكنهما الانجراف بحد أقصى مجموع عدادات الرسوم الثلاثة المعلقة (`quote_protocol_fee`, `platform_fee`, `migrate_fee`)، التي تجلس في الخزانة لكنها تنتمي إلى عدادات الرسوم وليس احتياطي المنحنى. رياضيات المنحنى تستخدم دائماً `real_quote`، أبداً رصيد الخزانة الخام.

ثابت ما قبل التخرج:

```
quote_vault.balance ==
   real_quote
 + quote_protocol_fee
 + platform_fee
 + migrate_fee
```

## `PlatformCurveRule`

حساب واحد لكل زوج `(PlatformConfig, GlobalConfig)`، يحتفظ بأشكال الإطلاق التي تسمح بها تلك المنصة على هذا الإعداد. بذور PDA هي `[b"platform_curve_rule", platform_config, global_config]`.

```rust theme={null}
#[account]
pub struct PlatformCurveRule {
    pub bump:            u8,
    pub version:         u8,
    pub platform_config: Pubkey,
    pub global_config:   Pubkey,
    pub epoch:           u64,
    pub padding:         [u64; 8],
    pub groups:          Vec<CurveRuleGroup>,   // up to 10
}

pub struct CurveRuleGroup {
    pub group_id:    u16,                       // stable id, used to update or remove the group
    pub epoch:       u64,
    pub constraints: Vec<ParamConstraint>,      // up to 25, ANDed
}

pub struct ParamConstraint {
    pub field: u8,                              // which launch parameter
    pub op:    u8,                              // 0 Eq, 1 Gte, 2 Lte, 3 Neq
    pub value: u128,
}
```

يتم إنشاء الحساب بدون مجموعة وتغيير حجمه عند كل تغيير مجموعة، لذا طوله `150 + Σ(14 + 18 × constraints)` والمفكّكات يجب ألا تفترض حجماً ثابتاً. المجموعات مرتبطة بـ OR: يُسمح بإطلاق بمجرد أن تحتفظ جميع قيود مجموعة واحدة. صفر مجموعات يعني لا تقييد.

اقرأها فقط عندما يكون `PlatformConfig.restrict_curve_param` المالك `1` — عند `0` يتجاهل البرنامج الحساب، وقد تكون هناك قاعدة قديمة جالسة هناك. معرفات الحقول والمشغلات والكتيبات موجودة في [`products/launchlab/curve-rules`](/ar/products/launchlab/curve-rules).

## انتقالات دورة حياة الحساب

| الحدث | الحالة | `real_base` | `real_quote` | مجموعة ما بعد التخرج |
| - | - | - | - | - |
| `Initialize` | Funding | 0 | 0 | — |
| `BuyExactIn` / `BuyExactOut` | Funding | `+base_out` | `+quote_in_after_fee` | — |
| `SellExactIn` / `SellExactOut` | Funding | `−base_in` | `−quote_out_before_fee` | — |
| `MigrateToCpswap` (أو `MigrateToAmm` القديم) | Funding → Migrate → Migrated | (مجمد) | (مجمد) | تم الإنشاء؛ LP CPMM مقسم إلى LP مقفول مملوك للمنصة و LP محروق |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | أي | — | — | يفرغ خزانة رسوم |
| `CreateVestingAccount` | Funding | — | — | يرفع `vesting_schedule.allocated_share_amount` |
| `ClaimVestedToken` | Migrated فقط | — | — | يفرغ `base_vault` |
| `CollectExcessLamports` | أي | — | — | — (ينقل lamports فقط، أبداً أرصدة الرموز) |

## أين تذهب بعد ذلك

* [`products/launchlab/bonding-curve`](/ar/products/launchlab/bonding-curve) — الرياضيات خلف `real_base` ↔ `real_quote`.
* [`products/launchlab/instructions`](/ar/products/launchlab/instructions) — قوائم الحسابات لكل تعليمة.
* [`products/launchlab/global-config`](/ar/products/launchlab/global-config) — الربط على مستوى البروتوكول.
* [`products/launchlab/platform-config`](/ar/products/launchlab/platform-config) — طبقة المنصة الإضافية.
* [`products/launchlab/vesting`](/ar/products/launchlab/vesting) — ميكانيكا العرض المقفول.
* [`products/cpmm/accounts`](/ar/products/cpmm/accounts) — كيف يبدو `cpmm_pool_state` بعد التخرج.

المصادر:

* `raydium-launch/programs/launchpad/src/states/pool.rs` — `PoolState`, `PoolStatus`, `VestingSchedule`, `AmmCreatorFeeOn`.
* `raydium-launch/programs/launchpad/src/lib.rs` — ثوابت بذور PDA (`AUTH_SEED`, `CREATOR_FEE_VAULT_AUTH_SEED`, `PLATFORM_FEE_VAULT_AUTH_SEED`).
* [وحدة Raydium SDK v2 `launchpad`](https://github.com/raydium-io/raydium-sdk-V2).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.