اقرأ البيانات من شبكة سولانا عن طريق جلب الحسابات المختلفة. يشرح هذا الدليل بنية حسابات سولانا. لكل حساب في سولانا عنوان فريد يُستخدم لتحديد موقع بيانات الحساب على السلسلة. تحتوي حسابات سولانا إما على بيانات الحالة أو برنامج قابل للتنفيذ.
جلب حساب محفظة
حساب المحفظة هو حساب مملوك لـ System Program. تُستخدم حسابات المحافظ بشكل أساسي لحفظ SOL وتوقيع المعاملات. عند إرسال SOL إلى عنوان جديد لأول مرة، يُنشأ تلقائياً حساب نظام.
يقوم المثال أدناه بإنشاء عميل Kit، وإنشاء موقّع جديد، وطلب SOL لتمويل العنوان الجديد، واسترداد بيانات الحساب من واجهة RPC الخاصة بالعميل.
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "http://localhost:8899",rpcSubscriptionsUrl: "ws://localhost:8900"})).use(rpcAirdrop());const signer = await generateKeyPairSigner();console.log(`Address: ${signer.address}`);// Funding an address with SOL automatically creates an accountawait client.airdrop(signer.address, lamports(1_000_000_000n));const accountInfo = await client.rpc.getAccountInfo(signer.address).send();console.log(accountInfo);
عند جلب حساب محفظة باستخدام getAccountInfo()، يُعيد Kit استجابة RPC كما هو
موضح في نموذج الإخراج على اليمين.
تحتوي الاستجابة على حقلين رئيسيين: يصف context وقت حدوث عملية القراءة، بينما
يحتوي value على حقول الحساب التي تُعيدها طريقة RPC.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يُظهر حقل context الـ slot المستخدم لقراءة الحساب وإصدار واجهة RPC التي أرسلت
الاستجابة. قد تُعيد عملية قراءة لاحقة slot مختلفاً أو إصدار واجهة برمجية
مختلفاً.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يحتوي حقل value على حالة الحساب التي تُعيدها طريقة RPC. تستعرض الخطوات التالية
الحقول داخل value بالترتيب الذي تظهر فيه.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يحتوي حقل lamports على رصيد SOL للحساب، مقاساً
بالـ lamports، وهي أصغر وحدة في SOL.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يحتوي حقل data على بيانات الحساب المخزنة على شكل بايتات. يُعيد RPC بيانات
الحساب كزوج مرتب: سلسلة البيانات المُرمَّزة، يليها نوع الترميز. بالنسبة لحسابات
المحفظة، تكون سلسلة البيانات المُرمَّزة فارغة لأن الحساب يخزن 0 بايت من
البيانات.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يُظهر حقل owner البرنامج المالك للحساب. بالنسبة للمحافظ، يكون المالك دائماً هو
System Program، بالعنوان 11111111111111111111111111111111.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يُخبرك حقل executable بما إذا كان عنوان الحساب قابلاً للاستدعاء. true يعني
أن العنوان يمثل برنامجاً يمكنه معالجة التعليمات. false يعني أن الحساب يخزن
حالة، كرصيد المحفظة أو بيانات الحساب، وليس مستدعىً كبرنامج. تستخدم حسابات
المحفظة false.
حقل rentEpoch هو حقل قديم موروث من آلية rent مُهمَلة. لا يزال هذا الحقل يُعاد
للحفاظ على التوافق مع الإصدارات السابقة.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
يُظهر حقل space عدد البايتات الموجودة في حقل data. يُعاد حقل space ضمن
استجابة جلب الحساب، لكنه ليس جزءاً من نوع بيانات الحساب.
في مثال حساب المحفظة، قيمة حقل space هي 0 لأن حقل data يحتوي على 0 بايت من
البيانات.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
استرجاع Token Program
يسترجع المثال أدناه Token Program لتوضيح الفرق بين حسابات المحفظة وحسابات البرامج. يُحدِّد Token Program التعليمات الخاصة بالتعامل مع الرموز، كإنشاء الرموز ونقلها. تُستدعى البرامج لمعالجة التعليمات. أما حالة البرنامج، كبيانات الرموز والأرصدة، فتُخزَّن في حسابات منفصلة يمتلكها البرنامج.
عنوان Token Program هو program account على السلسلة. للتبسيط، يمكنك التفكير في عنوان البرنامج باعتباره البرنامج نفسه، لأن هذا هو العنوان المستخدم لاستدعائه. بالنسبة للبرامج القابلة للترقية، يُخزِّن program account البيانات الوصفية ويُشير إلى ProgramData account منفصل يحتوي على الكود التنفيذي المنشور. يمكنك الاطلاع على كود مصدر Token Program و program account على مستكشف سولانا.
import { address, createClient, fetchJsonParsedAccount } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const tokenProgramAddress = address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await client.rpc.getAccountInfo(tokenProgramAddress, {encoding: "base64"}).send();console.log(accountInfo);const parsedAccount = await fetchJsonParsedAccount(client.rpc,tokenProgramAddress);console.log(parsedAccount);
Token Program هو program account تنفيذي. تمتلك البرامج نفس الحقول الأساسية لجميع الحسابات، ولكن مع اختلافات جوهرية.
يستخدم مثال Token Program ترميز base64 لإرجاع البيانات الخام لـ program
account.
تستعرض الخطوات التالية الحقول داخل value بالترتيب الذي تظهر به.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
يُخزِّن حقل data حالة program account الخاصة بـ BPF Upgradeable Loader. يحتوي
العنصر الأول من الصف على بيانات الحساب الكاملة مُرمَّزةً بصيغة base64، فيما
يُحدِّد العنصر الثاني طريقة الترميز. تتضمن الـ 36 بايت هنا البيانات الوصفية
وعنوان programdata account.
بالنسبة للبرامج القابلة للترقية، تُشير حالة program account إلى programdata account المنفصل الذي يُخزِّن الكود التنفيذي للبرنامج.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
حقل executable مضبوط على true، مما يشير إلى أن عنوان الحساب يمكن استدعاؤه
كبرنامج.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
يحتوي حقل lamports على رصيد SOL المحتفظ به في program account. تحتاج program
accounts إلى عدد كافٍ من lamport للبقاء معفاة من rent.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
كل program account مملوكة لـ
برنامج محمّل. بالنسبة
لـ Token Program account، فإن owner هو BPF Upgradeable Loader.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
حقل rentEpoch هو حقل قديم موروث من آلية rent مهجورة. لا يزال الحقل يُعاد
للحفاظ على التوافق مع الإصدارات السابقة.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
يُظهر حقل space الحجم الكامل لبيانات program account بالبايت. قيمة space
تبلغ 36 بايت فقط، لأن program account تخزّن بيانات وصفية لبرنامج التحميل
وعنوان programdata account، وليس البرنامج المُجمَّع الكامل.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
أعاد الاستجابة السابقة حقل data الخاص بـ program account كـ قائمة مرمّزة بـ
base64. تُفكّك الاستجابة المُحللة تلك البايتات إلى حقول مسماة في كائن data.
يحتوي حقل programData على عنوان programdata account الذي يخزّن كود البرنامج
القابل للتنفيذ.
{executable: true,lamports: 43712780n,programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",space: 36n,address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",data: {programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }},exists: true}
جلب mint account
الـ mint account هو حساب مملوك للـ Token Program يخزّن البيانات الوصفية العامة لرمز مميز محدد. يخزّن الـ mint account إجمالي المعروض من الرمز المميز، وعدد الخانات العشرية، وصلاحية الإصدار، وصلاحية التجميد. يُعرِّف عنوان الـ mint account بشكل فريد كل رمز مميز على شبكة سولانا.
يجلب المثال أدناه حساب USD Coin Mint لتوضيح كيفية تخزين حالة البرنامج في حساب منفصل. قد تختلف قيم الأرصدة والمعروض تبعاً للـ slot الذي يقرأ منه عقدة RPC الخاصة بك.
import { address, createClient } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await client.rpc.getAccountInfo(mintAddress, {encoding: "base64"}).send();console.log(accountInfo);
تخزّن حسابات mint المعروفة بـ mint accounts الحالةَ وليس الشيفرة القابلة للتنفيذ. تخضع mint accounts لملكية الـ Token Program، الذي يتضمن تعليمات تحدد كيفية إنشاء mint accounts وتحديثها.
تستعرض الخطوات التالية الحقول الموجودة داخل value بالترتيب الذي تظهر فيه.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يحتوي حقل data على حالة حساب Mint المُسلسَلة. يحتوي العنصر الأول في الصف على
بيانات الحساب الكاملة البالغة 82 بايت مُرمَّزةً بصيغة base64. أما العنصر الثاني
في الصف فيُحدد طريقة الترميز.
لقراءة البيانات من mint account، يجب إلغاء تسلسل حقل data إلى نوع البيانات
Mint، وهو ما يظهر في المثال التالي.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يُشير حقل executable إلى ما إذا كان يمكن استدعاء الحساب كبرنامج. تخزّن mint
accounts الحالةَ، لذا فإن حقل executable يكون false.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يحتوي حقل lamports على رصيد SOL المحتفظ به في الـ mint account. قيمة الـ
lamports هي الرصيد المعفي من الإيجار الخاص بالـ mint account، وليست المعروض من
الرمز المميز.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يمتلك Token Program حساب mint account. لا يمكن تعديل حقل data الخاص بـ mint
account إلا من خلال تعليمات Token Program.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
حقل rentEpoch هو حقل قديم موروث من آلية rent منتهية الصلاحية. لا يزال هذا
الحقل يُعاد للحفاظ على التوافق مع الإصدارات السابقة.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يُظهر حقل space أن mint account يحتوي على 82 بايت من البيانات.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
إلغاء تسلسل mint account
تُخزَّن بيانات الحساب في حقل data بصيغة متسلسلة. لقراءة هذه البيانات كحقول مثل
supply أو decimals، يجب إلغاء تسلسل حقل data إلى نوع الحساب المُعرَّف
بواسطة البرنامج المالك. توفر معظم برامج سولانا مكتبات عميل تحتوي على دوال مساعدة
لهذه الخطوة. تُعيد هذه الدوال المساعدة بيانات الحساب بصيغة منظمة، مما يُسهّل
التعامل مع النتيجة.
على سبيل المثال، تتضمن مكتبة @solana-program/token الدالة
fetchMint() لجلب mint account وإلغاء تسلسل حقل data الخاص
بـ mint account إلى نوع البيانات
Mint
المُعرَّف بواسطة Token Program.
import { address, createClient } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";import { fetchMint } from "@solana-program/token";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mint = await fetchMint(client.rpc, mintAddress);console.log(mint);
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>,}
تجلب الدالة fetchMint() mint account وتُلغي تسلسل حقل data الخاص بـ mint
account إلى نوع حساب Mint.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
يمكنك عرض بيانات mint account المفككة بالكامل في مستكشف سولانا.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يحتوي حقل address على عنوان mint account.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يحتوي حقل data على حالة حساب Mint المفككة. وتأتي الحقول المتداخلة في data
من نوع حساب Mint الخاص بـ Token Program.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل data.mintAuthority الحساب الوحيد الذي يملك صلاحية إنشاء وحدات جديدة
من الرمز.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل supply إجمالي عدد الرموز التي تم سكّها. تُقاس قيمة العرض بأصغر وحدة
للرمز. للحصول على إجمالي العرض بالوحدات المعيارية، اضبط قيمة حقل supply وفقاً
لـ decimals.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل decimals عدد المنازل العشرية للرمز.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُشير حقل isInitialized إلى ما إذا كان mint account قد تمت تهيئته. ويُعدّ حقل
isInitialized فحصاً أمنياً يُستخدم في Token Program.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل data.freezeAuthority الحساب الذي يملك صلاحية تجميد token accounts.
إن token account هو حساب منفصل يخزن وحدات من الرمز لصاحبه. عند التجميد، لا
يستطيع token account نقل رصيده من الرموز أو حرقها.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
قيمة الحقل executable هي false. يخزّن mint account الخاص بـ USDC حالة الرمز،
لذلك لا يمكن استدعاء mint account الخاص بـ USDC كبرنامج.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يحتوي حقل lamports على رصيد SOL الذي يحتفظ به mint account. قيمة lamports هي
رصيد الإعفاء من الإيجار الخاص بـ mint account، وليست إجمالي المعروض من الرموز.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل programAddress البرنامج المالك لـ mint account. بالنسبة لـ USDC،
البرنامج المالك هو Token Program. فقط البرنامج الذي يملك الحساب يمكنه تعديل حقل
data من خلال التعليمات المنشورة للبرنامج.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
يُظهر حقل space حجم بيانات mint account الأصلية بالبايت. حجم حساب Mint
الأساسي في Token Program هو 82 بايت.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
المخرجات المتسلسلة مقابل غير المتسلسلة
يقرأ كلا المثالين mint account الخاص بـ USDC ذاته. تترك الاستجابة الأولى حقل
data متسلسلاً. لقراءة محتويات mint account، يجب فك ترميز تلك البيانات وفق نوع
الحساب الذي يحدده البرنامج المالك. بالنسبة لـ mint account، يُعرّف Token Program
النوع Mint الظاهر على اليمين.
قبل فك التشفير، يحتوي حقل data على بيانات الحساب
المتسلسلة.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
بعد فك تشفير البيانات بوصفها Mint، يحتوي حقل data
على حقول الحساب المسمّاة.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Is this page helpful?