إنتقل إلى المحتوى الرئيسي

كيفية جلب بيانات الكائنات

الجمهور: المطورون الذين ينفذون أول عملية قراءة على Sui.
الهدف: كتابة برنامج نصي بلغة Node.js لاسترداد وفحص البيانات الأولية للكائنات من شبكة devnet الخاصة بـ Sui.


نظرة عامة

في هذا البرنامج التعليمي، ستستخدم SuiClient لتنفيذ عملية قراءة. ستقوم بالاستعلام في شبكة Sui devnet عن كائن رمز غير قابل للاستبدال (NFT) موجود على السلسلة لفحص خصائصه.

ما ستقوم ببنائه:
برنامج نصي خفيف الوزن بلغة Node.js يتصل بالشبكة، ويطلب كائنًا بواسطة معرّفه، ويطبع استجابة JSON.

المتطلبات الأساسية

  • Node.js: الإصدار v18.0.0 أو أحدث.
  • مدير الحزم: npm أو yarn.
  • الطرفية: مهارات التعامل الأساسية مع سطر الأوامر.

1. إعداد المشروع

  1. أنشئ دليلاً جديداً وانتقل إليه:

    Terminal
    mkdir sui-data-fetcher && cd sui-data-fetcher
  2. قم بتهيئة مشروع Node وتكوينه ليدعم وحدات ES Modules:

    Terminal
    npm init -y
    npm pkg set type="module"
  3. قم بتثبيت حزمة Sui TypeScript SDK:

    Terminal
    npm install @mysten/sui

2. تهيئة العميل

أنشئ ملفاً باسم index.js. ابدأ باستيراد العميل والاتصال بشبكة devnet.

index.js
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';

// التكوين
const NETWORK = 'devnet';

// 1. تهيئة العميل
// getFullnodeUrl يحدد تلقائياً نقطة نهاية RPC المناسبة لـ 'devnet'
const client = new SuiClient({
url: getFullnodeUrl(NETWORK),
});

console.log(`✅ تم الاتصال بـ Sui ${NETWORK}`);

3. كتابة منطق الاستعلام

استعلم عن كائن "NFT على devnet" معروف.

ملاحظة

في devnet، يتم حذف الكائنات بشكل متكرر أثناء عمليات إعادة تعيين الشبكة. إذا فشل المعرّف أدناه، فقد تحتاج إلى البحث عن معرّف كائن جديد من Sui Explorer.

أضف الكود التالي إلى index.js:

index.js
// معرّف كائن معروف على devnet (مثال NFT)
const TARGET_OBJECT_ID = '0x7d6539b7a423b035109b823e20c641c73defd23b8f3107b38d1d368688c2797c';

async function fetchObjectData() {
try {
console.log(`🔍 الاستعلام عن الكائن: ${TARGET_OBJECT_ID}...`);

// 2. تنفيذ الجلب
const response = await client.getObject({
id: TARGET_OBJECT_ID,
// تحدد "options" مقدار البيانات التي تعيدها العقدة.
// نطلب المحتوى (الحقول) والنوع فقط للحفاظ على حجم الحمولة صغيراً.
options: {
showContent: true,
showType: true
}
});

// 3. معالجة الاستجابة
if (response.error) {
throw new Error(`لم يتم العثور على الكائن: ${response.error.code}`);
}

console.log('--- بيانات الكائن ---');
console.dir(response.data, { depth: null, colors: true });

} catch (err) {
console.error('❌ فشل الاستعلام:', err.message);
}
}

fetchObjectData();

4. التشغيل والتحقق

شغّل البرنامج النصي في الطرفية:

Terminal
node index.js

فهم المخرجات

من المفترض أن تشاهد بنية JSON تشبه ما يلي:

Output
{
"objectId": "0x7d...",
"version": "120",
"digest": "AuF...",
"type": "0x2::devnet_nft::DevNetNFT",
"content": {
"dataType": "moveObject",
"fields": {
"name": "Sui DevNet NFT",
"description": "An NFT created by the Sui DevNet",
"url": "ipfs://..."
}
}
}
  • digest: تجزئة تتحقق من إصدار الكائن.
  • type: تعريف نوع لغة Move المحدد (Package::Module::Type).
  • content.fields: البيانات الفعلية المخزنة على السلسلة (على سبيل المثال، اسم الـ NFT ووصفه وعنوان URL لصورته).

الخطوات التالية

لقد قمت بنجاح بجلب البيانات الأولية، ولكنك لاحظت بالتأكيد وجود معلمة options في الكود. لاستكشاف معلمات الاستعلام المتاحة ومتابعة التعلم: