الانتقال إلى المحتوى الرئيسي

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.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
نموذج الحساب في سولانا هو أهم شيء يجب فهمه قبل قراءة كود رايديوم. على عكس إيثيريوم حيث تعيش الحالة جنباً إلى جنب مع كود العقد، برامج سولانا بلا حالة تماماً: جميع الحالة توجد في “حسابات” منفصلة تعمل البرامج عليها. كل بركة رايديوم، ومركز، وفولت هو حساب — فهم كيفية عمل تلك الحسابات يجعل بقية التوثيق منطقياً.

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

البرامج

البرنامج في سولانا هو كود قابل للتنفيذ — ملف ثنائي مترجم يتم تحميله من ملف، ونشره إلى 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
ATA165 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.

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

كل معاملة سولانا تحمل قائمة صريحة من الحسابات التي ستقرأ/تكتب. يفرض وقت التشغيل:
  • يمكن قراءة الحسابات المسرودة أو كتابتها (وفقاً لعلم 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. برامج Anchor تضيف discriminator بطول 8 بايت مقدماً لكل حساب تنشئه، مشتق من hash("account:<StructName>")[0..8]. هذا يسمح للعملاء بتحديد نوع الحساب بمجرد قراءة أول 8 بايت — حاسم لعمليات getProgramAccounts التي تعداد جميع الحسابات من نوع معين.

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

عبر SDK:
const pool = await raydium.cpmm.getPoolInfoFromRpc({ poolId });
console.log(pool.poolInfo);
عبر RPC خام + التخطيط:
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 للمستخدم.
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]، مملوك من قبل برنامج المزرعة.

مؤشرات

المصادر: