ملخص
تحتوي الحسابات على 5 حقول: lamports والبيانات والمالك وقابلية التنفيذ وفترة الإيجار. يتم تحديد كل حساب بعنوان فريد مكون من 32 بايت. يجب أن تحتفظ الحسابات برصيد lamport أدنى يتناسب مع حجم بياناتها للبقاء على السلسلة.
عنوان الحساب
كل عنوان حساب هو قيمة بحجم 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 يعمل كوديعة قابلة للاسترداد، ويتم استرداد الرصيد الكامل عند إغلاق الحساب.
راجع
minimum_balance()
وثوابت rent
constants.
Data
يخزن حقل data مصفوفة بايتات عشوائية. تعتمد محتوياته على نوع الحساب:
- حسابات البرامج: تحتوي على bytecode قابل للتنفيذ أو عنوان حساب بيانات البرنامج الذي يخزن bytecode.
- حسابات البيانات: تحتوي على بيانات الحالة المحددة من قبل البرنامج. يحدد البرنامج المالك تنسيق التسلسل.
تتطلب قراءة بيانات الحساب خطوتين:
- جلب الحساب عن طريق عنوانه.
- إلغاء تسلسل حقل
dataمن البايتات الخام إلى بنية البيانات المحددة من قبل البرنامج.
المالك
يحتوي حقل owner على معرّف البرنامج (المفتاح العام) للبرنامج الذي يمتلك هذا
الحساب.
البرنامج المالك هو البرنامج الوحيد الذي يمكنه:
- تعديل حقل
dataللحساب - خصم lamports من حقل
lamportsللحساب
يمكن لأي برنامج إضافة lamports إلى حساب آخر، لكن المالك فقط هو من يمكنه خصم lamports منه.
بالنسبة لحسابات البرامج، المالك هو برنامج التحميل الخاص بالحساب.
قابل للتنفيذ
حقل executable هو قيمة منطقية تحدد ما إذا كان الحساب
حساب برنامج أو
حساب بيانات:
true= حساب برنامج (يحتوي على كود قابل للتنفيذ)false= حساب بيانات (يخزن الحالة)
فترة الإيجار
حقل rent_epoch لم يعد مستخدماً.
كان يتتبع سابقاً موعد خصم lamports تلقائياً من الحساب لدفع تكاليف الحفاظ على
بياناته على السلسلة. نظراً لإلغاء تحصيل الإيجار، يتم تعيين rent_epoch إلى
u64::MAX لجميع الحسابات الجديدة المعفاة من الإيجار.
Is this page helpful?