كيفية جلب بيانات الكائنات
الجمهور: المطورون الذين ينفذون أول عملية قراءة على Sui.
الهدف: كتابة برنامج نصي بلغة Node.js لاسترداد وفحص البيانات الأولية للكائنات من شبكة devnet الخاصة بـ Sui.
نظرة عامة
في هذا البرنامج التعليمي، ستستخدم SuiClient لتنفيذ عملية قراءة. ستقوم بالاستعلام في شبكة Sui devnet عن كائن رمز غير قابل للاستبدال (NFT) موجود على السلسلة لفحص خصائصه.
ما ستقوم ببنائه:
برنامج نصي خفيف الوزن بلغة Node.js يتصل بالشبكة، ويطلب كائنًا بواسطة معرّفه، ويطبع استجابة JSON.
المتطلبات الأساسية
- Node.js: الإصدار v18.0.0 أو أحدث.
- مدير الحزم:
npmأوyarn. - الطرفية: مهارات التعامل الأساسية مع سطر الأوامر.
1. إعداد المشروع
-
أنشئ دليلاً جديداً وانتقل إليه:
Terminalmkdir sui-data-fetcher && cd sui-data-fetcher -
قم بتهيئة مشروع Node وتكوينه ليدعم وحدات ES Modules:
Terminalnpm init -ynpm pkg set type="module" -
قم بتثبيت حزمة Sui TypeScript SDK:
Terminalnpm install @mysten/sui
2. تهيئة العميل
أنشئ ملفاً باسم index.js. ابدأ باستيراد العميل والاتصال بشبكة devnet.
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:
// معرّف كائن معروف على 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. التشغيل والتحقق
شغّل البرنامج النصي في الطرفية:
node index.js
فهم المخرجات
من المفترض أن تشاهد بنية JSON تشبه ما يلي:
{
"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 في الكود. لاستكشاف معلمات الاستعلام المتاحة ومتابعة التعلم:
- راجع مرجع واجهة برمجة التطبيقات لـ
getObjectلجميع خيارات الاستجابة والمرشحات المتاحة. - راجع كيفية جلب كائنات متعددة و كيفية جلب الكائنات المملوكة للاستعلامات الدفعية.
- انتقل إلى البرنامج التعليمي التالي، استخدام عملية الكتابة لإرسال معاملة، لبناء وتنفيذ تغييرات الحالة على السلسلة.