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

# نموذج الحساب

> البنية الموجهة نحو الحسابات في سولانا — الحسابات تحمل الحالة، والبرامج هي كود بلا حالة يعمل على الحسابات. الإيجار والملكية وحسابات البرنامج مقابل حسابات البيانات، وما يعنيه كل ذلك عند قراءة حالة البركة في رايديوم.

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

  [عرض النسخة الإنجليزية →](/solana-fundamentals/account-model)
</Info>

نموذج الحساب في سولانا هو أهم شيء يجب فهمه قبل قراءة كود رايديوم. على عكس إيثيريوم حيث تعيش الحالة جنباً إلى جنب مع كود العقد، برامج سولانا بلا حالة تماماً: جميع الحالة توجد في "حسابات" منفصلة تعمل البرامج عليها. كل بركة رايديوم، ومركز، وفولت هو حساب — فهم كيفية عمل تلك الحسابات يجعل بقية التوثيق منطقياً.

## الانقسام الأساسي: البرامج مقابل الحسابات

### البرامج

**البرنامج** في سولانا هو كود قابل للتنفيذ — ملف ثنائي مترجم يتم تحميله من ملف، ونشره إلى `Pubkey`، ويمكن استدعاؤه عبر المعاملات. البرامج لا تملك حالة مرتبطة بها؛ فهي تحتوي فقط على منطق.

برامج رايديوم:

* CPMM: `CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F`
* CLMM: `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK`
* AMM v4: `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8`

كل واحد منها ملف ثنائي ثابت. البرنامج لا "يتذكر" أي شيء بين الاستدعاءات.

### الحسابات

**الحساب** هو صف من البيانات على السلسلة. كل حساب له:

* `pubkey` — عنوانه.
* `owner` — البرنامج الذي يملكه (يتحكم في الكتابة).
* `data` — البايتات الخام.
* `lamports` — رصيد SOL (1 SOL = 1,000,000,000 lamports).
* `rent_epoch` — حقل جمع الإيجار القديم (تم تجاهله منذ أصبح الإعفاء من الإيجار إلزامياً).

عندما تستعلم عن بركة رايديوم، فأنت تقرأ حساباً واحداً أو أكثر. عندما يتم تنفيذ مبادلة، يقرأ برنامج CPMM/يكتب عدة حسابات — حالة البركة، والأقبية، وحالة الملاحظة، وحسابات الرمز الخاصة بالمستخدم.

## الملكية

كل حساب يملكه برنامج واحد بالضبط. فقط كود هذا البرنامج يمكن أن يعدل حقل `data` في الحساب. يمكن للمستخدم تعديل `lamports` (إرسال/استقبال SOL) على حساب يمكنه التوقيع عليه، لكن تعديل `data` يتطلب من برنامج المالك أن يفعل ذلك نيابة عنه.

أمثلة:

* محفظة المستخدم: مملوكة من قبل برنامج النظام. تعيش lamports هنا؛ تتوقع لتحويل.
* حساب رمز USDC الخاص بك: مملوك من قبل برنامج SPL Token. يقوم برنامج الرموز بتحديث الرصيد من خلال تعليمة `transfer`.
* حساب حالة بركة رايديوم: مملوك من قبل برنامج CPMM. فقط تعليمات CPMM يمكنها تعديل الاحتياطيات والرسوم، وما إلى ذلك.
* `PersonalPositionState` لـ NFT موضع رايديوم: مملوك من قبل برنامج CLMM.

"المملوك من قبل" صارم: إذا قام البرنامج A بالكتابة إلى حساب مملوك من قبل البرنامج B، فإن وقت تشغيل سولانا يرفض المعاملة.

## الإيجار والإعفاء من الإيجار

ينتج عن إنشاء حساب استهلاك مساحة التخزين. تفرض سولانا إيجاراً على تلك المساحة، لكن منذ عام 2020 يجب أن تكون جميع الحسابات الجديدة **معفاة من الإيجار** — بمعنى أنها تحتفظ بـ lamports كافية بحيث يتم دفع الإيجار مقدماً لمدة سنتين. من الناحية العملية:

* حساب معفى من الإيجار يعيش إلى الأبد.
* إغلاق الحساب يعيد lamports إلى موقّع الإغلاق.

بالنسبة لحساب بحجم 165 بايت (مثل حساب SPL Token)، الإعفاء من الإيجار هو \~0.00204 SOL. بالنسبة لحالة بركة CPMM في رايديوم بحجم 1,440 بايت، فهو \~0.011 SOL.

### تكاليف الإيجار في رايديوم

| الحساب                     | الحجم     | الإيجار     |
| -------------------------- | --------- | ----------- |
| CPMM PoolState             | \~1,440 B | \~0.011 SOL |
| CLMM PoolState             | \~1,500 B | \~0.012 SOL |
| CLMM TickArray             | \~9,000 B | \~0.063 SOL |
| CLMM PersonalPositionState | \~280 B   | \~0.003 SOL |
| ATA                        | 165 B     | \~0.002 SOL |
| Vault (Token Account)      | 165 B     | \~0.002 SOL |

يتطلب إنشاء البركة إيجار عدة حسابات في نفس الوقت — وهذا هو السبب في أن إنشاء بركة CPMM يكلف \~0.15 SOL إجمالاً.

## حسابات البيانات مقابل الحسابات القابلة للتنفيذ

الحسابات تأتي بنكهتين:

### حسابات البيانات

تحمل حالة (احتياطيات البركة، أرصدة الرموز، مواضع المستخدم). `executable = false`. هذا هو الأغلبية الساحقة.

### حسابات قابلة للتنفيذ

تحمل بايتكود البرنامج. `executable = true`. هذه برامج (CPMM, CLMM, إلخ). البرامج ليس لديها بيانات تتجاوز بايتكودها.

### الحسابات المشتقة من البرنامج (PDAs)

PDA هو حساب بيانات عنوانه *مشتق بشكل حتمي* من برنامج وبعض البذور — لا توجد مفتاح خاص لهذا العنوان. فقط برنامج الاشتقاق يمكنه التوقيع نيابة عن PDA عبر `invoke_signed`.

تستخدم رايديوم PDAs على نطاق واسع:

* PDAs حالة البركة: مشتقة من `[poolTypeDiscriminator, mintA, mintB, ammConfig]`.
* PDAs الفولت: مشتقة من `[pool, mint]`.
* PDA حالة الملاحظة: مشتقة من `[observationSeed, pool]`.

تسمح PDAs لرايديوم بإنشاء حسابات في عناوين يمكن التنبؤ بها دون إدارة المفاتيح. يمكن لأي شخص حساب عنوان PDA لبركة معروفة نظراً للبذور.

انظر إلى [`solana-fundamentals/pdas-and-cpis`](/ar/solana-fundamentals/pdas-and-cpis).

## المعاملات وإشارات الحساب

كل معاملة سولانا تحمل قائمة صريحة من الحسابات التي ستقرأ/تكتب. يفرض وقت التشغيل:

* يمكن قراءة الحسابات المسرودة أو كتابتها (وفقاً لعلم `is_writable` الخاص بها).
* لا يمكن لمس الحسابات غير المسردة.

بالنسبة لمبادلة رايديوم، تتضمن قائمة حسابات المعاملة:

```
[readonly] CPMM program
[writable] pool state
[readonly] amm config
[readonly] pool authority (PDA)
[writable] input vault
[writable] output vault
[writable] user input ATA
[writable] user output ATA
[readonly] input mint
[readonly] output mint
[readonly] input token program
[readonly] output token program
[writable] observation state
[signer,writable] user
```

هذا العد الصريح هو السبب في أن معاملات سولانا سريعة وقابلة للتوازي — يمكن لوقت التشغيل تحديد txs غير المتضاربة مقدماً.

## حجم الحساب وتخطيط البيانات

كل حساب رايديوم له حجم ثابت أو محدود. يتم تحديد التخطيط في الكود (هياكل Rust مع `#[repr(C)]`) وموثق في [`sdk-api/anchor-idl`](/ar/sdk-api/anchor-idl).

برامج Anchor تضيف **discriminator** بطول 8 بايت مقدماً لكل حساب تنشئه، مشتق من `hash("account:<StructName>")[0..8]`. هذا يسمح للعملاء بتحديد نوع الحساب بمجرد قراءة أول 8 بايت — حاسم لعمليات `getProgramAccounts` التي تعداد جميع الحسابات من نوع معين.

### قراءة حالة بركة رايديوم

عبر SDK:

```ts theme={null}
const pool = await raydium.cpmm.getPoolInfoFromRpc({ poolId });
console.log(pool.poolInfo);
```

عبر RPC خام + التخطيط:

```ts theme={null}
const accountInfo = await connection.getAccountInfo(poolId);
const data = accountInfo.data;
// تخطي أول 8 بايت (discriminator)، ثم حلل وفقاً لتخطيط الهيكل.
const poolState = CpmmPoolStateLayout.decode(data.slice(8));
```

التخطيط موجود في `src/raydium/cpmm/layout.ts` في مصدر SDK.

## مثال عملي: قراءة حساب رمز

دعنا نقرأ رصيد USDC للمستخدم.

```ts theme={null}
import { Connection, PublicKey } from "@solana/web3.js";
import { getAssociatedTokenAddressSync, AccountLayout } from "@solana/spl-token";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const user       = new PublicKey("YourUserWallet...");
const usdcMint   = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");

// 1. احسب عنوان ATA (اشتقاق على طراز PDA).
const ata = getAssociatedTokenAddressSync(usdcMint, user);

// 2. اقرأ الحساب.
const accountInfo = await connection.getAccountInfo(ata);
if (!accountInfo) {
  console.log("ATA doesn't exist yet (user has never held USDC).");
  return;
}

// 3. تحقق من أن المالك هو برنامج SPL Token.
console.assert(accountInfo.owner.toBase58() === "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");

// 4. قم بفك تشفير البيانات.
const parsed = AccountLayout.decode(accountInfo.data);
console.log("Balance (smallest units):", parsed.amount.toString());
console.log("Mint:",                     new PublicKey(parsed.mint).toBase58());
console.log("Owner:",                    new PublicKey(parsed.owner).toBase58());
```

هذا النمط — استمد العنوان، جلب الحساب، تحقق من المالك، فك التشفير — ينطبق على كل قراءة على السلسلة، بما في ذلك بركات رايديوم.

## لماذا هذا مهم بالنسبة لرايديوم

نموذج الحساب يشكل تصميم رايديوم:

* **حالة البركة هي حساب واحد** — كل شيء عن البركة (العملات، الاحتياطيات، الرسوم، المسؤول) يعيش في حساب واحد مملوك من قبل برنامج البركة.
* **رموز LP هي حسابات رموز SPL قياسية** — يفوض رايديوم التكامل إلى برنامج SPL Token.
* **مصفوفات التكات مقسمة** — CLMM لا يمكن أن يكون لديها مصفوفة واحدة قابلة للنمو من التكات لأن الحسابات لها حجم مخصص ثابت؛ بدلاً من ذلك، فإنها تستخدم PDAs `TickArray` مقسمة.
* **NFTs الموضع هي NFTs Metaplex** — مواضع CLMM هي NFTs قياسية لكل Metaplex؛ حالة الموضع هي PDA منفصل.

يتيح لك فهم هذا الإجابة بشكل صحيح على أسئلة "أين يعيش X؟":

* "أين احتياطيات البركة؟" → حسابان من الأقبية (حسابات رموز) مملوكة من قبل برنامج SPL Token، مع السلطة المفوضة إلى PDA لبرنامج البركة.
* "أين بيانات التك لـ CLMM؟" → سلسلة من TickArray PDAs، كل منها يغطي 60 تك متتالي.
* "أين الرهان الزراعي الخاص بي؟" → `UserLedger` PDA مشتق من `[user, farmId]`، مملوك من قبل برنامج المزرعة.

## مؤشرات

* [`solana-fundamentals/programs-and-anchor`](/ar/solana-fundamentals/programs-and-anchor) — كيف تعالج البرامج الحسابات.
* [`solana-fundamentals/pdas-and-cpis`](/ar/solana-fundamentals/pdas-and-cpis) — اشتقاق PDA و CPI.
* [`solana-fundamentals/transactions-and-fees`](/ar/solana-fundamentals/transactions-and-fees) — كيفية الإشارة إلى الحسابات في المعاملات.
* [`sdk-api/anchor-idl`](/ar/sdk-api/anchor-idl) — تخطيطات الحساب لبرامج رايديوم.

المصادر:

* [Solana Account docs](https://docs.solana.com/developing/programming-model/accounts).
* [SPL Token program](https://spl.solana.com/token) — حيث توجد حسابات الرموز.
