اقرأ البيانات من شبكة سولانا عن طريق جلب حسابات مختلفة. سيساعدك هذا القسم على فهم بنية الحسابات في سولانا. كل حساب في سولانا له عنوان فريد يُستخدم لتحديد موقع بياناته المقابلة على السلسلة. تحتوي الحسابات إما على بيانات الحالة أو برنامج قابل للتنفيذ.
جلب حساب محفظة
المحفظة هي حساب مملوك من قبل System Program. تُستخدم المحافظ بشكل أساسي للاحتفاظ بـ SOL والتوقيع على المعاملات. عندما يتم إرسال SOL إلى عنوان جديد لأول مرة، يتم إنشاء حساب نظام تلقائيًا.
يُنشئ المثال أدناه زوج مفاتيح جديد، ويطلب SOL لتمويل عنوان المفتاح العام الجديد، و يسترجع بيانات الحساب للمحفظة الممولة حديثًا.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
عندما تجلب حساب محفظة، تتضمن الاستجابة الحقول الموضحة في مثال الإخراج على اليمين.
يحتوي حقل data على بيانات الحساب المخزنة كبايتات. بالنسبة لحسابات المحفظة،
يكون هذا الحقل فارغًا (0 بايت).
يشير حقل executable إلى ما إذا كان حقل data الخاص بالحساب يحتوي على كود
برنامج قابل للتنفيذ. بالنسبة لحسابات المحفظة، يكون هذا الحقل false.
يحتوي حقل lamports على رصيد SOL الخاص بالحساب، بوحدة
lamports.
يعرض حقل owner البرنامج الذي يمتلك الحساب. بالنسبة للمحافظ، يكون المالك دائمًا
هو System Program، بالعنوان 11111111111111111111111111111111.
حقل rentEpoch هو حقل قديم من آلية rent المهملة. (تم تضمين هذا الحقل للتوافق مع
الإصدارات السابقة.)
يعرض حقل space عدد البايتات الموجودة في حقل data. هذا ليس حقلًا في
نوع Account نفسه، ولكنه مضمن في
الاستجابة.
في هذا المثال، حقل space يساوي 0 لأن حقل data يحتوي على 0 بايت من البيانات.
جلب Token Program
يوضح المثال أدناه جلب Token Program لإظهار الفرق بين حسابات المحفظة وحسابات البرنامج. يخزن حساب البرنامج الكود الثنائي المترجم لـالكود المصدري الخاص بـ Token Program. يمكنك عرض حساب البرنامج هذا على Solana Explorer.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
برنامج الرموز هو حساب برنامج قابل للتنفيذ. تحتوي البرامج على نفس الحقول الأساسية لجميع الحسابات، ولكن مع اختلافات رئيسية.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
تم تعيين حقل executable إلى true، مما يشير إلى أن حقل data الخاص بالحساب
يحتوي على كود قابل للتنفيذ.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
يخزن حقل data الكود القابل للتنفيذ الخاص بالبرنامج.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
كل حساب برنامج مملوك من قبل
برنامج التحميل الخاص به. في هذا المثال،
owner هو برنامج BPFLoader2.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
جلب حساب السك
حساب السك هو حساب مملوك من قبل برنامج الرموز يخزن البيانات الوصفية العامة لرمز معين. يتضمن ذلك إجمالي العرض، وعدد الأرقام العشرية، والحسابات المصرح لها بسك الرموز أو تجميدها. يحدد عنوان حساب السك بشكل فريد رمزاً على شبكة سولانا.
يجلب المثال أدناه حساب سك USD Coin لتوضيح كيفية تخزين حالة البرنامج في حساب منفصل.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
تخزن حسابات السك الحالة، وليس الكود القابل للتنفيذ. وهي مملوكة من قبل برنامج الرموز، الذي يتضمن تعليمات تحدد كيفية إنشاء وتحديث حسابات السك.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
يخزن حقل data الخاص بحساب mint الحالة، وليس الكود القابل للتنفيذ، لذلك يكون
حقل executable هو false.
يحدد Token Program نوع البيانات Mint، والذي يتم تخزينه في حقل data.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
يحتوي حقل data على حالة حساب Mint المتسلسلة، مثل صلاحية mint، وإجمالي العرض،
وعدد الكسور العشرية.
لقراءة حساب Mint، يجب إلغاء تسلسل حقل data إلى نوع البيانات Mint، كما هو
موضح في المثال التالي.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
حساب mint مملوك بواسطة
Token Program. وهذا يعني أن حقل
data الخاص به يمكن تعديله فقط بواسطة تعليمات Token Program.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
إلغاء تسلسل حساب mint
قبل أن يمكن تفسير البايتات الخام في حقل data الخاص بالحساب بشكل مفيد، يجب
إلغاء تسلسلها. يتم تحديد نوع البيانات المناسب بواسطة البرنامج الذي يملك الحساب.
توفر معظم برامج سولانا مكتبات عميل تحتوي على دوال مساعدة تجرد عملية إلغاء
التسلسل. تقوم هذه الدوال بتحويل بايتات الحساب الخام إلى أنواع بيانات منظمة، مما
يجعل العمل مع بيانات الحساب أسهل.
على سبيل المثال، تتضمن مكتبة @solana/spl-token دالة
getMint() للمساعدة في إلغاء تسلسل حقل data الخاص بحساب
mint إلى نوع البيانات
Mint
المحدد بواسطة Token Program.
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
pub struct Mint {/// Optional authority used to mint new tokens. The mint authority may only/// be provided during mint creation. If no mint authority is present/// then the mint has a fixed supply and no further tokens may be/// minted.pub mint_authority: COption<Pubkey>,/// Total supply of tokens.pub supply: u64,/// Number of base 10 digits to the right of the decimal place.pub decimals: u8,/// Is `true` if this structure has been initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
تقوم دالة getMint() بإلغاء تسلسل حقل data الخاص بحساب mint إلى نوع حساب
Mint.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
يمكنك عرض بيانات حساب mint المفككة بالكامل على Solana Explorer.
يحتوي حقل address على عنوان حساب السك.
يعرض حقل mintAuthority الحساب الوحيد الذي يمكنه إنشاء وحدات جديدة من الرمز
المميز.
يعرض حقل supply العدد الإجمالي للرموز المميزة التي تم سكها. يتم قياس هذه
القيمة بأصغر وحدة من الرمز المميز. للحصول على إجمالي المعروض بالوحدات القياسية،
اضبط قيمة حقل supply بواسطة decimals.
يعرض حقل decimals عدد المنازل العشرية للرمز المميز.
يشير حقل isInitialized إلى ما إذا كان حساب السك قد تم تهيئته. هذا الحقل هو فحص
أمني يستخدم في برنامج الرموز المميزة.
يعرض حقل freezeAuthority الحساب الذي لديه صلاحية تجميد حسابات الرموز المميزة.
لا يمكن لحساب الرموز المميزة المجمد نقل أو حرق الرمز المميز الذي يحتويه.
يحتوي حقل tlvData على بيانات إضافية لملحقات الرموز المميزة ويتطلب مزيدًا من
إلغاء التسلسل. هذا الحقل ذو صلة فقط بالحسابات التي تم إنشاؤها بواسطة
برنامج ملحقات الرموز المميزة (Token2022).
Is this page helpful?