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

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

جلب حساب محفظة

المحفظة هي حساب مملوك من قبل 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 الخاص بالحساب، بوحدة lamports.

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

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

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

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

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

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

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

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

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

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

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

في هذا المثال، حقل 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. يمكنك عرض حساب البرنامج هذا على Solana Explorer.

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

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

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 الخاص بالحساب يحتوي على كود قابل للتنفيذ.

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

يخزن حقل data الكود القابل للتنفيذ الخاص بالبرنامج.

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

كل حساب برنامج مملوك من قبل برنامج التحميل الخاص به. في هذا المثال، 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
}

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

تم تعيين حقل 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
}

جلب حساب السك

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

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

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

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

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

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، وإجمالي العرض، وعدد الكسور العشرية.

لقراءة حساب 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
}

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

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

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

يحتوي حقل data على حالة حساب Mint المتسلسلة، مثل صلاحية 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.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 المفككة بالكامل على Solana Explorer.

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

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

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

يعرض حقل decimals عدد المنازل العشرية للرمز المميز.

يشير حقل isInitialized إلى ما إذا كان حساب السك قد تم تهيئته. هذا الحقل هو فحص أمني يستخدم في برنامج الرموز المميزة.

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

يحتوي حقل tlvData على بيانات إضافية لملحقات الرموز المميزة ويتطلب مزيدًا من إلغاء التسلسل. هذا الحقل ذو صلة فقط بالحسابات التي تم إنشاؤها بواسطة برنامج ملحقات الرموز المميزة (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 المفككة بالكامل على Solana Explorer.

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

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

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

يعرض حقل decimals عدد المنازل العشرية للرمز المميز.

يشير حقل isInitialized إلى ما إذا كان حساب السك قد تم تهيئته. هذا الحقل هو فحص أمني يستخدم في برنامج الرموز المميزة.

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

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

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

Is this page helpful?

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

تعديل الصفحة

تدار بواسطة

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