القراءة من الشبكة

اقرأ البيانات من شبكة سولانا عن طريق استرجاع الحسابات المختلفة. سيساعدك هذا القسم على فهم بنية حسابات سولانا. يمتلك كل حساب في سولانا عنوانًا فريدًا يُستخدم لتحديد موقع بياناته المقابلة على السلسلة. تحتوي الحسابات إما على بيانات حالة أو برنامج قابل للتنفيذ.

استرجاع حساب محفظة

المحفظة هي حساب مملوك من قبل System Program. تُستخدم المحافظ بشكل أساسي لحفظ SOL وتوقيع المعاملات. عندما يتم إرسال SOL إلى عنوان جديد لأول مرة، يتم إنشاء حساب نظام تلقائيًا.

المثال أدناه يقوم بإنشاء زوج مفاتيح جديد، يطلب SOL لتمويل عنوان المفتاح العام الجديد، و يسترجع بيانات الحساب للمحفظة الممولة حديثًا.

Fetch account
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 account
const 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));
Console
Click to execute the code.

عندما تسترجع حساب محفظة، تتضمن الاستجابة الحقول الموضحة في مثال الإخراج على اليمين.

يحتوي حقل data على بيانات الحساب المخزنة كبايتات. بالنسبة لحسابات المحفظة، يكون هذا الحقل فارغًا (0 بايت).

يشير حقل executable إلى ما إذا كان حقل data الخاص بالحساب يحتوي على شفرة برنامج قابلة للتنفيذ. بالنسبة لحسابات المحفظة، يكون هذا الحقل false.

يحتوي حقل lamports على رصيد SOL للحساب، بوحدة لامبورت.

يوضح حقل owner البرنامج الذي يملك الحساب. بالنسبة للمحافظ، المالك دائمًا هو System Program، بالعنوان 11111111111111111111111111111111.

حقل rentEpoch هو حقل قديم من آلية rent المهجورة. (تم تضمين هذا الحقل للحفاظ على التوافق مع الإصدارات السابقة.)

يوضح حقل space عدد البايتات الموجودة في حقل data. هذا ليس حقلًا في نوع الحساب نفسه، ولكنه مضمن في الاستجابة.

في هذا المثال، حقل space هو 0 لأن حقل data يحتوي على 0 بايت من البيانات.

عندما تسترجع حساب محفظة، تتضمن الاستجابة الحقول الموضحة في مثال الإخراج على اليمين.

يحتوي حقل data على بيانات الحساب المخزنة كبايتات. بالنسبة لحسابات المحفظة، يكون هذا الحقل فارغًا (0 بايت).

يشير حقل executable إلى ما إذا كان حقل data الخاص بالحساب يحتوي على شفرة برنامج قابلة للتنفيذ. بالنسبة لحسابات المحفظة، يكون هذا الحقل false.

يحتوي حقل lamports على رصيد SOL للحساب، بوحدة لامبورت.

يوضح حقل owner البرنامج الذي يملك الحساب. بالنسبة للمحافظ، المالك دائمًا هو System Program، بالعنوان 11111111111111111111111111111111.

حقل rentEpoch هو حقل قديم من آلية rent المهجورة. (تم تضمين هذا الحقل للحفاظ على التوافق مع الإصدارات السابقة.)

يوضح حقل space عدد البايتات الموجودة في حقل data. هذا ليس حقلًا في نوع الحساب نفسه، ولكنه مضمن في الاستجابة.

في هذا المثال، حقل space هو 0 لأن حقل data يحتوي على 0 بايت من البيانات.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

جلب Token Program

المثال أدناه يجلب Token Program لتوضيح الفرق بين حسابات المحفظة وحسابات البرنامج. يخزن حساب البرنامج الشفرة المترجمة لـ الشفرة المصدرية الخاصة بـ Token Program. يمكنك عرض حساب البرنامج هذا على مستكشف سولانا.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

Token Program هو حساب برنامج قابل للتنفيذ. تحتوي البرامج على نفس الحقول الأساسية مثل جميع الحسابات، ولكن مع اختلافات رئيسية.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

يتم تعيين حقل executable إلى true، مما يشير إلى أن حقل data الخاص بالحساب يحتوي على شفرة قابلة للتنفيذ.

يخزن حقل data الشفرة القابلة للتنفيذ للبرنامج.

كل حساب برنامج مملوك من قبل برنامج التحميل الخاص به. في هذا المثال، owner هو برنامج BPFLoader2.

Token Program هو حساب برنامج قابل للتنفيذ. تحتوي البرامج على نفس الحقول الأساسية مثل جميع الحسابات، ولكن مع اختلافات رئيسية.

يتم تعيين حقل executable إلى true، مما يشير إلى أن حقل data الخاص بالحساب يحتوي على شفرة قابلة للتنفيذ.

يخزن حقل data الشفرة القابلة للتنفيذ للبرنامج.

كل حساب برنامج مملوك من قبل برنامج التحميل الخاص به. في هذا المثال، owner هو برنامج BPFLoader2.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

جلب حساب mint

حساب mint هو حساب مملوك من قبل Token Program يخزن البيانات الوصفية العالمية لرمز معين. يتضمن ذلك إجمالي العرض، وعدد الكسور العشرية، والحسابات المصرح لها بإنشاء أو تجميد الرموز. عنوان حساب mint يحدد بشكل فريد رمزًا على شبكة سولانا.

يجلب المثال أدناه حساب mint الخاص بـ USD Coin لتوضيح كيفية تخزين حالة البرنامج في حساب منفصل.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

تخزن حسابات mint الحالة، وليس الشفرة القابلة للتنفيذ. وهي مملوكة من قبل Token Program، الذي يتضمن تعليمات تحدد كيفية إنشاء وتحديث حسابات mint.

يخزن حقل data الخاص بحساب mint الحالة، وليس الشفرة القابلة للتنفيذ، لذلك حقل executable هو false.

يحدد Token Program نوع البيانات Mint، الذي يتم تخزينه في حقل data.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

يحتوي حقل data على حالة حساب Mint المسلسلة، مثل سلطة الإصدار، والعرض الكلي، وعدد الكسور العشرية.

للقراءة من حساب Mint، يجب عليك فك تسلسل حقل data إلى نوع البيانات Mint، وهو ما يظهر في المثال التالي.

Mint account
{
"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.

Mint Account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

تخزن حسابات mint الحالة، وليس الشفرة القابلة للتنفيذ. وهي مملوكة من قبل Token Program، الذي يتضمن تعليمات تحدد كيفية إنشاء وتحديث حسابات mint.

يخزن حقل data الخاص بحساب mint الحالة، وليس الشفرة القابلة للتنفيذ، لذلك حقل executable هو false.

يحدد Token Program نوع البيانات Mint، الذي يتم تخزينه في حقل data.

يحتوي حقل data على حالة حساب Mint المسلسلة، مثل سلطة الإصدار، والعرض الكلي، وعدد الكسور العشرية.

للقراءة من حساب Mint، يجب عليك فك تسلسل حقل data إلى نوع البيانات Mint، وهو ما يظهر في المثال التالي.

يملك حساب mint Token Program. وهذا يعني أن حقل data الخاص به يمكن تعديله فقط بواسطة تعليمات Token Program.

Mint account
{
"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.

Deserialize mint account data
import { PublicKey, Connection } from "@solana/web3.js";
import { getMint } from "@solana/spl-token";
const connection = new Connection(
"https://api.mainnet-beta.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mintData = await getMint(connection, address, "confirmed");
Console
Click to execute the code.
Mint account type
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 initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

تقوم وظيفة getMint() بفك تسلسل حقل data الخاص بحساب mint إلى نوع حساب Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

يمكنك عرض بيانات حساب mint المفككة بالكامل على مستكشف سولانا.

يحتوي حقل address على عنوان حساب mint.

يُظهر حقل mintAuthority الحساب الوحيد الذي يمكنه إنشاء وحدات جديدة من الرمز.

يُظهر حقل supply العدد الإجمالي للرموز التي تم سكها. يتم قياس هذه القيمة بأصغر وحدة للرمز. للحصول على إجمالي المعروض بالوحدات القياسية، قم بتعديل قيمة حقل supply وفقًا لـ decimals.

يُظهر حقل decimals عدد المنازل العشرية للرمز.

يشير حقل isInitialized إلى ما إذا كان قد تم تهيئة حساب mint. يُستخدم هذا الحقل كفحص أمان في Token Program.

يوضح حقل freezeAuthority الحساب الذي يملك صلاحية تجميد حسابات token. لا يمكن لحساب token المجمد تحويل أو حرق الرمز الذي يحتويه.

يحتوي حقل tlvData على بيانات إضافية لـ Token Extensions وتتطلب مزيدًا من التفكيك. هذا الحقل مهم فقط للحسابات التي تم إنشاؤها بواسطة برنامج Token Extension (Token2022).

تقوم وظيفة getMint() بفك تسلسل حقل data الخاص بحساب mint إلى نوع حساب Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

يمكنك عرض بيانات حساب mint المفككة بالكامل على مستكشف سولانا.

يحتوي حقل address على عنوان حساب mint.

يُظهر حقل mintAuthority الحساب الوحيد الذي يمكنه إنشاء وحدات جديدة من الرمز.

يُظهر حقل supply العدد الإجمالي للرموز التي تم سكها. يتم قياس هذه القيمة بأصغر وحدة للرمز. للحصول على إجمالي المعروض بالوحدات القياسية، قم بتعديل قيمة حقل supply وفقًا لـ decimals.

يُظهر حقل decimals عدد المنازل العشرية للرمز.

يشير حقل isInitialized إلى ما إذا كان قد تم تهيئة حساب mint. يُستخدم هذا الحقل كفحص أمان في Token Program.

يوضح حقل freezeAuthority الحساب الذي يملك صلاحية تجميد حسابات token. لا يمكن لحساب token المجمد تحويل أو حرق الرمز الذي يحتويه.

يحتوي حقل tlvData على بيانات إضافية لـ Token Extensions وتتطلب مزيدًا من التفكيك. هذا الحقل مهم فقط للحسابات التي تم إنشاؤها بواسطة برنامج Token Extension (Token2022).

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

جدول المحتويات

تعديل الصفحة

تدار بواسطة

© 2025 مؤسسة سولانا.
جميع الحقوق محفوظة.