تخطي إلى المحتوى الرئيسي

كيفية سك ⁦NFT⁩ (الجزء 2/3 من سلسلة دروس ⁦NFT⁩)

ERC-721
Alchemy
Solidity
العقود الذكية
مبتدئ
سومي مودجيل
22 أبريل 2021
9 دقيقة للقراءة

"سك رمز غير قابل للاستبدال (NFT)" هو عملية نشر نسخة فريدة من الرمز المميز ERC-721 الخاص بك على سلسلة الكتل. باستخدام عقدنا الذكي من الجزء 1 من سلسلة دروس الرمز غير القابل للاستبدال (NFT)، دعنا نستعرض مهاراتنا في Web3 ونسك رمزًا غير قابل للاستبدال (NFT). في نهاية هذا البرنامج التعليمي، ستتمكن من سك أي عدد تريده من الرموز غير القابلة للاستبدال (NFTs) كما يشتهي قلبك (ومحفظتك)!

دعنا نبدأ!

الخطوة 1: التحقق من إعداداتك

إذا اتبعت البرنامج التعليمي الأول حول إنشاء العقد الذكي للرمز غير القابل للاستبدال (NFT) الخاص بك، فلديك بالفعل كل ما تحتاجه: مشروع Hardhat 3 مع مكون Ethers الإضافي (يفتح في علامة تبويب جديدة) وEthers.js (يفتح في علامة تبويب جديدة)، وهي مكتبة تُستخدم لجعل إنشاء الطلبات إلى سلسلة كتل إيثيريوم أسهل. سنكتب كود السك الخاص بنا كبرنامج نصي في Hardhat، بحيث يعيد استخدام إعدادات شبكة Sepolia وقيم API_URL وPRIVATE_KEY من الجزء 1 — لا يوجد شيء جديد لتثبيته.

الخطوة 2: إنشاء ملف mint-nft.js

داخل دليل البرامج النصية (scripts) الخاص بك، قم بإنشاء ملف mint-nft.js وأضف أسطر الكود التالية:

import { network } from "hardhat"

const { ethers } = await network.create()

كما هو الحال في البرنامج النصي للنشر الخاص بنا، يتصل network.create() بالشبكة التي تختارها باستخدام --network عند تشغيل البرنامج النصي، ويعطينا كائن ethers لها.

الخطوة 3: الحصول على واجهة التطبيق الثنائية (ABI) للعقد الخاص بك

واجهة التطبيق الثنائية (ABI) للعقد الخاص بنا هي الواجهة للتفاعل مع عقدنا الذكي. يمكنك معرفة المزيد حول . يقوم Hardhat تلقائيًا بإنشاء واجهة التطبيق الثنائية (ABI) لنا عندما يقوم بتجميع العقد ويحفظها في ملف artifacts/contracts/MyNFT.sol/MyNFT.json. يقرأها مكون Ethers الإضافي في Hardhat من هناك من أجلنا عندما ننشئ مثيل العقد الخاص بنا في الخطوة 5، لذلك لا نحتاج إلى تحميلها بأنفسنا.

إذا كنت ترغب في رؤية واجهة التطبيق الثنائية (ABI)، يمكنك طباعتها في وحدة التحكم الخاصة بك. من الدليل الجذر لمشروعك، قم بتشغيل:

node -p "JSON.stringify(require('./artifacts/contracts/MyNFT.sol/MyNFT.json').abi)"

الخطوة 4: تكوين البيانات الوصفية للرمز غير القابل للاستبدال (NFT) الخاص بك باستخدام IPFS

إذا كنت تتذكر من برنامجنا التعليمي في الجزء 1، فإن دالة العقد الذكي mintNFT الخاصة بنا تأخذ معلمة tokenURI التي يجب أن تشير إلى مستند JSON يصف البيانات الوصفية للرمز غير القابل للاستبدال (NFT) — وهو ما يبعث الحياة حقًا في الرمز غير القابل للاستبدال (NFT)، مما يسمح له بامتلاك خصائص قابلة للتكوين، مثل الاسم والوصف والصورة والسمات الأخرى.

نظام الملفات بين الكواكب (IPFS) هو بروتوكول لامركزي وشبكة نظير إلى نظير لتخزين ومشاركة البيانات في نظام ملفات موزع.

سنستخدم Pinata، وهي واجهة برمجة تطبيقات (API) ومجموعة أدوات IPFS ملائمة، لتخزين أصل الرمز غير القابل للاستبدال (NFT) والبيانات الوصفية الخاصة بنا لضمان أن الرمز غير القابل للاستبدال (NFT) الخاص بنا لامركزي حقًا. إذا لم يكن لديك حساب Pinata، فقم بالتسجيل للحصول على حساب مجاني هنا (يفتح في علامة تبويب جديدة) وأكمل الخطوات للتحقق من بريدك الإلكتروني.

بمجرد إنشاء حساب:

  • انتقل إلى صفحة الملفات (يفتح في علامة تبويب جديدة) وانقر على زر "Add" (إضافة) في الزاوية العلوية اليمنى من الصفحة.

  • قم بتحميل صورة إلى Pinata — ستكون هذه هي أصل الصورة للرمز غير القابل للاستبدال (NFT) الخاص بك. لا تتردد في تسمية الأصل بأي اسم تريده. تأكد من تحميله إلى IPFS العام: لا يمكن جلب الملفات الموجودة على IPFS الخاص (يفتح في علامة تبويب جديدة) بواسطة المحافظ والأسواق التي تعرض الرمز غير القابل للاستبدال (NFT) الخاص بك.

  • بعد التحميل، سترى الملف مدرجًا في صفحة الملفات مع معرف المحتوى (CID) الخاص به. انسخ معرف المحتوى (CID). يمكنك عرض ما قمت بتحميله على: https://gateway.pinata.cloud/ipfs/<CID>، أو من خلال البوابة المخصصة المدرجة ضمن "Gateways" (البوابات) في الشريط الجانبي لـ Pinata. يمكنك العثور على الصورة التي استخدمناها على IPFS هنا (يفتح في علامة تبويب جديدة)، على سبيل المثال.

الآن، سنرغب في تحميل مستند آخر إلى Pinata. ولكن قبل أن نفعل ذلك، نحتاج إلى إنشائه!

في الدليل الجذر الخاص بك، قم بإنشاء ملف جديد يسمى nft-metadata.json وأضف كود JSON التالي:

لا تتردد في تغيير البيانات في ملف JSON. يمكنك الإزالة أو الإضافة إلى قسم السمات (attributes). والأهم من ذلك، تأكد من أن حقل الصورة يشير إلى موقع صورة IPFS الخاصة بك، بالتنسيق ipfs://<image-CID> — وإلا، سيتضمن الرمز غير القابل للاستبدال (NFT) الخاص بك صورة لكلب (لطيف جدًا!).

بمجرد الانتهاء من تحرير ملف JSON، احفظه وقم بتحميله إلى Pinata، باتباع نفس الخطوات التي قمنا بها لتحميل الصورة. انسخ معرف المحتوى (CID) لملف nft-metadata.json أيضًا؛ سنحتاجه في الخطوة 9.

الخطوة 5: إنشاء مثيل للعقد الخاص بك

الآن، للتفاعل مع عقدنا، نحتاج إلى إنشاء مثيل له في الكود الخاص بنا. للقيام بذلك، سنحتاج إلى عنوان العقد الخاص بنا، والذي طبعه البرنامج النصي للنشر الخاص بنا في الجزء 1. يمكنك أيضًا العثور عليه على Etherscan (يفتح في علامة تبويب جديدة) أو Blockscout (يفتح في علامة تبويب جديدة) من خلال البحث عن العنوان الذي استخدمته لنشر العقد.

عرض عنوان العقد الخاص بك على Etherscan

في المثال أعلاه، عنوان العقد الخاص بنا هو 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.

بعد ذلك، سنستخدم طريقة getContractAt الخاصة بمكون Ethers الإضافي في Hardhat لإنشاء عقدنا باستخدام اسمه (والذي يخبره بواجهة التطبيق الثنائية (ABI) التي يجب استخدامها) وعنوانه. في ملف mint-nft.js الخاص بك، أضف ما يلي، مع استبدال العنوان بعنوانك الخاص:

const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = await ethers.getContractAt("MyNFT", contractAddress)

الخطوة 6: التحقق من ملف .env

يجب توقيع كل معاملة نرسلها باستخدام المفتاح الخاص لحسابك. إذا أكملت الجزء 1 من البرنامج التعليمي، فيجب أن يبدو ملف .env الخاص بنا بالفعل هكذا:

API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY="your-metamask-private-key"

ليست هناك حاجة لإضافة عنوانك العام: يستنتجه ethers من المفتاح الخاص.

الخطوة 7: إنشاء معاملتك

أولاً، دعنا نحدد دالة تسمى mintNFT(tokenURI) وننشئ معاملتنا عن طريق القيام بما يلي:

  1. الحصول على الحساب الذي نرسل المعاملة منه. تُرجع ethers.getSigners() الحسابات المكونة للشبكة، والتي تكون على Sepolia هي الحساب الذي يوجد مفتاحه الخاص في .env. نظرًا لأن mintNFT هي onlyOwner، يجب أن يكون هذا هو نفس الحساب الذي نشر العقد.

  2. استدعاء دالة mintNFT على مثيل العقد الخاص بنا، مع عنواننا الخاص كمتلقي ومعرف الموارد المنتظم (URI) للبيانات الوصفية. هذا هو الحساب الذي نرغب في إجرائه في هذه المعاملة — والذي يتمثل في هذه الحالة في سك رمز غير قابل للاستبدال (NFT).

لا تحتاج إلى حساب الرقم الفريد (عدد المعاملات المرسلة من عنوانك، والذي يمنع هجمات إعادة التشغيل)، أو حد الغاز، أو الرسوم بنفسك: يقوم ethers بجلبها أو تقديرها قبل إرسال المعاملة.

يجب أن يبدو ملف mint-nft.js الخاص بك هكذا الآن:

الخطوة 8: توقيع المعاملة

نظرًا لأن الشبكة مكونة بمفتاحنا الخاص، يقوم ethers بتوقيع المعاملة به تلقائيًا قبل إرسالها.

يعود استدعاء mintNFT بمجرد إرسال المعاملة، ويعطينا تجزئة المعاملة، والتي يمكننا استخدامها للتأكد من أنه تم تعدين معاملتنا ولم يتم إسقاطها بواسطة الشبكة. ثم ينتظر tx.wait() حتى يتم تضمين المعاملة في كتلة. لقد أضفنا أيضًا بعض التحقق من الأخطاء حتى نعرف ما إذا كانت معاملتنا قد تمت بنجاح.

الخطوة 9: استدعاء mintNFT وتشغيل mint-nft.js

هل تتذكر ملف nft-metadata.json الذي قمت بتحميله إلى Pinata؟ احصل على معرف المحتوى (CID) الخاص به من Pinata وقم بتمرير ipfs://<metadata-CID> كمعلمة للدالة mintNFT. تقوم المحافظ والأسواق بتحليل معرفات الموارد المنتظمة (URIs) التي تبدأ بـ ipfs:// من خلال بوابة IPFS من اختيارهم، لذلك لا يعتمد الرمز غير القابل للاستبدال (NFT) الخاص بك على أي بوابة واحدة.

تحقق مرة أخرى من أن معرف المحتوى (CID) الذي نسخته يرتبط بملف nft-metadata.json الخاص بك عن طريق تحميل https://gateway.pinata.cloud/ipfs/<metadata-CID> في نافذة منفصلة. يجب أن تبدو الصفحة مشابهة للقطة الشاشة أدناه:

يجب أن تعرض صفحتك البيانات الوصفية بتنسيق jsonيجب أن تعرض صفحتك البيانات الوصفية بتنسيق json

إجمالاً، يجب أن يبدو الكود الخاص بك هكذا تقريبًا:

الآن، قم بتشغيل البرنامج النصي على Sepolia لسك الرمز غير القابل للاستبدال (NFT) الخاص بك:

npx hardhat run scripts/mint-nft.js --network sepolia

بعد بضع ثوانٍ، يجب أن ترى استجابة مثل هذه في جهازك الطرفي:

The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
Your NFT was minted in block <block number>

لرؤية تفاصيل معاملتك، ابحث عن التجزئة الخاصة بها على Etherscan (يفتح في علامة تبويب جديدة) أو Blockscout (يفتح في علامة تبويب جديدة).

عرض تجزئة معاملة الرمز غير القابل للاستبدال (NFT) الخاص بك على Etherscanعرض تجزئة معاملة الرمز غير القابل للاستبدال (NFT) الخاص بك على Etherscan

وهذا كل شيء! لقد قمت الآن بنشر وسك رمز غير قابل للاستبدال (NFT) على سلسلة كتل إيثيريوم

باستخدام mint-nft.js، يمكنك سك أي عدد تريده من الرموز غير القابلة للاستبدال (NFTs) كما يشتهي قلبك (ومحفظتك)! فقط تأكد من تمرير tokenURI جديد يصف البيانات الوصفية للرمز غير القابل للاستبدال (NFT) (وإلا، سينتهي بك الأمر بصنع مجموعة من الرموز المتطابقة بمعرفات مختلفة).

من المفترض أنك ترغب في التباهي بالرمز غير القابل للاستبدال (NFT) الخاص بك في محفظتك — لذا تأكد من مراجعة الجزء 3: كيفية عرض الرمز غير القابل للاستبدال (NFT) الخاص بك في محفظتك!