ملخص
تحتوي الحسابات على 5 حقول: lamports وdata وowner وexecutable وrent_epoch. يتم تحديد كل حساب بعنوان فريد بحجم 32 بايت. يجب أن تحتفظ الحسابات برصيد أدنى من lamports يتناسب مع حجم بياناتها للبقاء على السلسلة.
عنوان الحساب
كل عنوان حساب هو قيمة بحجم 32 بايت، يتم عرضها كسلسلة نصية مشفرة بنظام base58. يمكن أن يكون العنوان من نوعين:
- مفتاح عام: يتوافق مع زوج مفاتيح Ed25519 (يحتوي على مفتاح خاص)
- عنوان مشتق من البرنامج (PDA): يتم اشتقاقه بشكل حتمي من معرف البرنامج والبذور (لا يحتوي على مفتاح خاص)
حساب مع عنوان مفتاحه العام المشفر بنظام base58
مفتاح عام
يتكون Keypair من مفتاح عام (يُستخدم كعنوان للحساب) ومفتاح خاص (يُستخدم
لتوقيع المعاملات). يُنشئ المثال التالي زوج مفاتيح باستخدام Solana SDK.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
عنوان مشتق من البرنامج
العنوان المشتق من البرنامج (PDA) يتم اشتقاقه بشكل حتمي من معرف البرنامج وبذرة واحدة أو أكثر اختيارية. لا تحتوي عناوين PDA على مفتاح خاص مقابل. يشتق المثال التالي PDA باستخدام Solana SDK.
import { Address, getProgramDerivedAddress } from "@solana/kit";const programAddress = "11111111111111111111111111111111" as Address;const seeds = ["helloWorld"];const [pda, bump] = await getProgramDerivedAddress({programAddress,seeds});console.log(`PDA: ${pda}`);console.log(`Bump: ${bump}`);
حقول الحساب
كل
Account
له حجم أقصى يبلغ
MAX_ACCOUNT_DATA_LEN
(10 ميجابايت، أي ما يعادل MAX_PERMITTED_DATA_LENGTH) ويحتوي على خمسة حقول:
| الحقل | النوع | الوصف |
|---|---|---|
lamports | u64 | الرصيد بوحدة lamport. يمكن للمالك الخصم؛ أي برنامج يمكنه الإضافة. |
data | Vec<u8> | حالة الحساب أو bytecode البرنامج. الحد الأقصى 10 ميجابايت. قابل للكتابة من المالك فقط. |
owner | Pubkey | البرنامج الذي لديه صلاحية الكتابة. قابل لإعادة التعيين فقط عند تصفير البيانات. |
executable | bool | صحيح = حساب برنامج. |
rent_epoch | Epoch | مهمل. يتم تعيينه إلى u64::MAX للحسابات المعفاة من rent. |
pub struct Account {/// lamports in the accountpub lamports: u64,/// data held in this account#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]pub data: Vec<u8>,/// the program that owns this account. If executable, the program that loads this account.pub owner: Pubkey,/// if true, this account's data contains a program (and is now read-only)pub executable: bool,/// deprecatedpub rent_epoch: Epoch,}
Lamports
يحتوي حقل lamports على رصيد الحساب بوحدة
lamport (1 SOL = 1,000,000,000 lamport).
يجب أن يحتفظ كل حساب برصيد أدنى من lamport، يُعرف بالرصيد المعفى من rent، للحفاظ على بياناته مخزنة على السلسلة. هذا الرصيد يتناسب مع حجم بيانات الحساب.
على الرغم من أنه غالبًا ما يُسمى "rent"، فإن الرصيد المعفى من rent يعمل كوديعة قابلة للاسترداد، ويتم استرداد الرصيد الكامل عند إغلاق الحساب.
راجع
minimum_balance()
وثوابت rent
constants.
Data
يخزن حقل data مصفوفة بايتات عشوائية. تعتمد محتوياته على نوع الحساب:
- حسابات البرامج: تحتوي على bytecode قابل للتنفيذ أو عنوان حساب بيانات البرنامج الذي يخزن bytecode.
- حسابات البيانات: تحتوي على بيانات الحالة المحددة من قبل البرنامج. يحدد البرنامج المالك تنسيق التسلسل.
تتطلب قراءة بيانات الحساب خطوتين:
- جلب الحساب عن طريق عنوانه.
- إلغاء تسلسل حقل
dataمن البايتات الخام إلى بنية البيانات المحددة من قبل البرنامج.
المالك
يحتوي حقل owner على معرّف البرنامج (المفتاح العام) للبرنامج الذي يمتلك هذا
الحساب.
البرنامج المالك هو البرنامج الوحيد الذي يمكنه:
- تعديل حقل
dataللحساب - خصم lamports من حقل
lamportsللحساب
يمكن لأي برنامج إضافة lamports إلى حساب آخر، لكن المالك فقط هو من يمكنه خصم lamports منه.
بالنسبة لحسابات البرامج، المالك هو برنامج التحميل الخاص بالحساب.
قابل للتنفيذ
حقل executable هو قيمة منطقية تحدد ما إذا كان الحساب
حساب برنامج أو
حساب بيانات:
true= حساب برنامج (يحتوي على كود قابل للتنفيذ)false= حساب بيانات (يخزن الحالة)
فترة الإيجار
حقل rent_epoch لم يعد مستخدماً.
كان يتتبع سابقاً موعد خصم lamports تلقائياً من الحساب لدفع تكلفة الاحتفاظ
ببياناته على السلسلة. نظراً لأن تحصيل rent لم يعد مستخدماً، يتم تعيين
rent_epoch إلى u64::MAX لجميع الحسابات الجديدة المعفاة من الإيجار.
Is this page helpful?