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

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

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

Beeple (opens in a new tab): $69 Million 3LAU (opens in a new tab): $11 Million Grimes (opens in a new tab): $6 Million

جميعهم قاموا بسك رموزهم غير القابلة للاستبدال (NFTs) باستخدام API القوية من Alchemy. في هذا البرنامج التعليمي، سنعلمك كيفية القيام بالشيء نفسه في أقل من 10 دقائق.

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

دعونا نبدأ!

الخطوة 1: تثبيت Web3

إذا اتبعت البرنامج التعليمي الأول حول إنشاء العقد الذكي لـ NFT الخاص بك، فلديك بالفعل خبرة في استخدام Ethers.js. تشبه Web3 مكتبة Ethers، حيث إنها مكتبة تُستخدم لتسهيل إنشاء الطلبات إلى سلسلة كتل إيثيريوم. في هذا البرنامج التعليمي، سنستخدم Alchemy Web3 (opens in a new tab)، وهي مكتبة Web3 محسنة توفر إعادة المحاولة التلقائية ودعمًا قويًا لـ WebSocket.

في الدليل الرئيسي لمشروعك، قم بتشغيل:

npm install @alch/alchemy-web3

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

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

require("dotenv").config()
const API_URL = process.env.API_URL
const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)

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

واجهة التطبيق الثنائية (ABI) للعقد الخاص بنا هي الواجهة للتفاعل مع عقدنا الذكي. يمكنك معرفة المزيد حول واجهات التطبيق الثنائية للعقود هنا (opens in a new tab). يقوم Hardhat تلقائيًا بإنشاء ABI لنا ويحفظه في ملف MyNFT.json. من أجل استخدام هذا، سنحتاج إلى تحليل المحتويات عن طريق إضافة أسطر التعليمات البرمجية التالية إلى ملف mint-nft.js الخاص بنا:

const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")

إذا كنت ترغب في رؤية ABI، يمكنك طباعته في وحدة التحكم الخاصة بك:

console.log(JSON.stringify(contract.abi))

لتشغيل mint-nft.js ورؤية ABI الخاص بك مطبوعًا على وحدة التحكم، انتقل إلى جهازك الطرفي (terminal) وقم بتشغيل:

node scripts/mint-nft.js

الخطوة 4: تكوين البيانات الوصفية لـ NFT الخاص بك باستخدام IPFS

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

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

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

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

  • انتقل إلى صفحة "الملفات" (Files) وانقر على زر "تحميل" (Upload) الأزرق في أعلى يسار الصفحة.

  • قم بتحميل صورة إلى Pinata — ستكون هذه هي صورة الأصل لـ NFT الخاص بك. لا تتردد في تسمية الأصل بأي اسم تريده.

  • بعد التحميل، سترى معلومات الملف في الجدول الموجود في صفحة "الملفات". سترى أيضًا عمود CID. يمكنك نسخ CID بالنقر فوق زر النسخ بجواره. يمكنك عرض ما قمت بتحميله على: https://gateway.pinata.cloud/ipfs/<CID>. يمكنك العثور على الصورة التي استخدمناها على IPFS هنا (opens in a new tab)، على سبيل المثال.

للمتعلمين البصريين، تم تلخيص الخطوات المذكورة أعلاه هنا:

How to upload your image to Pinata

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

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

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

بمجرد الانتهاء من تحرير ملف JSON، احفظه وقم بتحميله إلى Pinata، باتباع نفس الخطوات التي قمنا بها لتحميل الصورة.

How to upload your nft-metadata.json to Pinata

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

الآن، للتفاعل مع عقدنا، نحتاج إلى إنشاء نسخة منه في الكود الخاص بنا. للقيام بذلك، سنحتاج إلى عنوان العقد الخاص بنا والذي يمكننا الحصول عليه من النشر أو Blockscout (opens in a new tab) من خلال البحث عن العنوان الذي استخدمته لنشر العقد.

View your contract address on Etherscan

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

بعد ذلك سنستخدم طريقة العقد (opens in a new tab) في Web3 لإنشاء عقدنا باستخدام ABI والعنوان. في ملف mint-nft.js الخاص بك، أضف ما يلي:

const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"

const nftContract = new web3.eth.Contract(contract.abi, contractAddress)

الخطوة 6: تحديث ملف .env

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

أضف مفتاحك العام إلى ملف .env الخاص بك — إذا أكملت الجزء الأول من البرنامج التعليمي، فيجب أن يبدو ملف .env الخاص بنا الآن هكذا:

API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-private-account-address"
PUBLIC_KEY = "your-public-account-address"

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

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

  1. احصل على PRIVATE_KEY و PUBLIC_KEY من ملف .env.

  2. بعد ذلك، سنحتاج إلى معرفة الرقم الفريد (nonce) للحساب. تُستخدم مواصفات الرقم الفريد لتتبع عدد المعاملات المرسلة من عنوانك — وهو ما نحتاجه لأغراض أمنية ولمنع هجمات إعادة الإرسال (opens in a new tab). للحصول على عدد المعاملات المرسلة من عنوانك، نستخدم getTransactionCount (opens in a new tab).

  3. أخيرًا سنقوم بإعداد معاملتنا بالمعلومات التالية:

  • 'from': PUBLIC_KEY — أصل معاملتنا هو عنواننا العام

  • 'to': contractAddress — العقد الذي نرغب في التفاعل معه وإرسال المعاملة إليه

  • 'nonce': nonce — الرقم الفريد للحساب مع عدد المعاملات المرسلة من عنواننا

  • 'gas': estimatedGas — الغاز المقدر اللازم لإكمال المعاملة

  • 'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI() — العملية الحسابية التي نرغب في إجرائها في هذه المعاملة — والتي في هذه الحالة هي سك NFT

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

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

الآن بعد أن أنشأنا معاملتنا، نحتاج إلى توقيعها من أجل إرسالها. هنا سنستخدم مفتاحنا الخاص.

سيعطينا web3.eth.sendSignedTransaction تجزئة المعاملة، والتي يمكننا استخدامها للتأكد من أنه تم تعدين معاملتنا ولم يتم إسقاطها بواسطة الشبكة. ستلاحظ في قسم توقيع المعاملة، أننا أضفنا بعض التحقق من الأخطاء حتى نعرف ما إذا كانت معاملتنا قد تمت بنجاح.

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

هل تتذكر metadata.json الذي قمت بتحميله إلى Pinata؟ احصل على رمز التجزئة الخاص به من Pinata وقم بتمرير ما يلي كمعلمة إلى الدالة mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>

إليك كيفية الحصول على رمز التجزئة:

How to get your nft metadata hashcode on Pinataكيفية الحصول على رمز تجزئة البيانات الوصفية لـ NFT الخاص بك على Pinata

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

Your page should display the json metadataيجب أن تعرض صفحتك البيانات الوصفية بتنسيق json

بشكل عام، يجب أن يبدو الكود الخاص بك هكذا:

الآن، قم بتشغيل node scripts/mint-nft.js لنشر NFT الخاص بك. بعد بضع ثوانٍ، يجب أن ترى استجابة مثل هذه في جهازك الطرفي:

تجزئة المعاملة الخاصة بك هي: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8

تحقق من مجمع الذاكرة (Mempool) الخاص بـ Alchemy لعرض حالة معاملتك!

بعد ذلك، قم بزيارة مجمع الذاكرة في Alchemy (opens in a new tab) لمعرفة حالة معاملتك (سواء كانت معلقة أو تم تعدينها أو تم إسقاطها بواسطة الشبكة). إذا تم إسقاط معاملتك، فمن المفيد أيضًا التحقق من Blockscout (opens in a new tab) والبحث عن تجزئة المعاملة الخاصة بك.

View your NFT transaction hash on Etherscanعرض تجزئة معاملة NFT الخاصة بك على Etherscan

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

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

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