كيفية تعدين إن إف تي (الجزء 2/3 من سلسلة دروس إن إف تي التعليمية)
Beeple (opens in a new tab): 69 مليون دولار\n3LAU (opens in a new tab): 11 مليون دولار\nGrimes (opens in a new tab): 6 ملايين دولار
جميعهم قاموا بتعدين رموز إن إف تي الخاصة بهم باستخدام واجهة برمجة التطبيقات (API) القوية من ألكيمي. في هذا البرنامج التعليمي، سنعلمك كيف تفعل الشيء نفسه في أقل من 10 دقائق.
إن "تعدين إن إف تي" هو إجراء نشر نسخة فريدة من رمز ERC-721 الخاص بك على البلوكتشين. باستخدام عقدنا الذكي من الجزء 1 من سلسلة دروس إن إف تي التعليمية هذه، دعونا نستعرض مهاراتنا في ويب3 ونعدّن إن إف تي. في نهاية هذا البرنامج التعليمي، ستتمكن من تعدين ما تشاء من رموز إن إف تي كما يحلو لقلبك (ومحفظتك)!
لنبدأ!
الخطوة 1: تثبيت ويب3
إذا كنت قد اتبعت البرنامج التعليمي الأول حول إنشاء عقد إن إف تي الذكي الخاص بك، فلديك بالفعل خبرة في استخدام إيثرز.جي إس. تشبه ويب3 مكتبة Ethers، حيث إنها مكتبة تُستخدم لتسهيل إنشاء الطلبات إلى بلوكتشين إيثريوم. في هذا البرنامج التعليمي، سوف نستخدم ألكيمي ويب3 (opens in a new tab)، وهي مكتبة ويب3 مُحسَّنة توفر محاولات إعادة تلقائية ودعمًا قويًا لـ WebSocket.
في الدليل الرئيسي لمشروعك، قم بتشغيل:
1npm install @alch/alchemy-web3الخطوة 2: إنشاء ملف mint-nft.js
داخل دليل scripts الخاص بك، قم بإنشاء ملف mint-nft.js وأضف أسطر التعليمات البرمجية التالية:
1require("dotenv").config()\nconst API_URL = process.env.API_URL\nconst { createAlchemyWeb3 } = require("@alch/alchemy-web3")\nconst web3 = createAlchemyWeb3(API_URL)الخطوة 3: الحصول على واجهة ABI الخاصة بالعقد
واجهة التطبيق الثنائية (ABI) لعقدنا هي الواجهة للتفاعل مع عقدنا الذكي. يمكنك معرفة المزيد عن واجهات ABI للعقود هنا (opens in a new tab). يقوم هارد هات تلقائيًا بإنشاء واجهة ABI لنا وحفظها في ملف MyNFT.json. لاستخدام هذا، سنحتاج إلى تحليل المحتويات عن طريق إضافة أسطر التعليمات البرمجية التالية إلى ملف mint-nft.js الخاص بنا:
1const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")إذا كنت تريد رؤية واجهة ABI، فيمكنك طباعتها على وحدة التحكم الخاصة بك:
1console.log(JSON.stringify(contract.abi))لتشغيل mint-nft.js ورؤية واجهة ABI الخاصة بك مطبوعة على وحدة التحكم، انتقل إلى الطرفية الخاصة بك وقم بتشغيل:
1node scripts/mint-nft.jsالخطوة 4: تكوين البيانات الوصفية لرمز إن إف تي الخاص بك باستخدام آي بي إف إس
إذا كنت تتذكر من برنامجنا التعليمي في الجزء الأول، فإن وظيفة العقد الذكي mintNFT الخاصة بنا تأخذ معلمة tokenURI التي يجب أن تؤدي إلى مستند JSON يصف البيانات الوصفية لـ إن إف تي - وهو ما يبث الحياة في إن إف تي، مما يسمح لها بامتلاك خصائص قابلة للتكوين، مثل الاسم والوصف والصورة والسمات الأخرى.
نظام الملفات بين الكواكب (آي بي إف إس) هو بروتوكول لامركزي وشبكة نظير إلى نظير لتخزين البيانات ومشاركتها في نظام ملفات موزع.
سنستخدم بينياتا، وهي واجهة برمجة تطبيقات ومجموعة أدوات آي بي إف إس ملائمة، لتخزين أصول إن إف تي والبيانات الوصفية الخاصة بنا لضمان أن إن إف تي الخاص بنا لامركزي حقًا. إذا لم يكن لديك حساب بينياتا، فقم بالتسجيل للحصول على حساب مجاني هنا (opens in a new tab) وأكمل خطوات التحقق من بريدك الإلكتروني.
بمجرد إنشاء حساب:
-
انتقل إلى صفحة "الملفات" وانقر على زر "تحميل" الأزرق في الجزء العلوي الأيسر من الصفحة.
-
قم بتحميل صورة إلى بينياتا - سيكون هذا هو أصل الصورة لرمز إن إف تي الخاص بك. لا تتردد في تسمية الأصل بما تشاء
-
بعد التحميل، سترى معلومات الملف في الجدول في صفحة "الملفات". سترى أيضًا عمود CID. يمكنك نسخ CID بالنقر فوق زر النسخ المجاور له. يمكنك عرض ما قمت بتحميله على:
https://gateway.pinata.cloud/ipfs/<CID>. على سبيل المثال، يمكنك العثور على الصورة التي استخدمناها على آي بي إف إس هنا (opens in a new tab).
للمتعلمين الأكثر اعتمادًا على البصر، تم تلخيص الخطوات المذكورة أعلاه هنا:
الآن، سنرغب في تحميل مستند آخر إلى بينياتا. ولكن قبل أن نفعل ذلك، نحن بحاجة إلى إنشائه!
في الدليل الجذر الخاص بك، أنشئ ملفًا جديدًا باسم nft-metadata.json وأضف كود json التالي:
1{\n "attributes": [\n {\n "trait_type": "السلالة",\n "value": "مالتيبو"\n },\n {\n "trait_type": "لون العين",\n "value": "موكا"\n }\n ],\n "description": "ألطف جرو وأكثره حساسية في العالم.",\n "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",\n "name": "رمسيس"\n}لا تتردد في تغيير البيانات في ملف json. يمكنك الإزالة من قسم السمات أو الإضافة إليه. الأهم من ذلك، تأكد من أن حقل الصورة يشير إلى موقع صورة آي بي إف إس الخاصة بك — وإلا، فإن إن إف تي الخاص بك سيتضمن صورة (لطيف جدًا!) كلب.
بمجرد الانتهاء من تحرير ملف JSON، احفظه وقم بتحميله إلى بينياتا، باتباع نفس الخطوات التي قمنا بها لتحميل الصورة.
الخطوة 5: إنشاء نسخة من عقدك
الآن، للتفاعل مع عقدنا، نحتاج إلى إنشاء نسخة منه في التعليمات البرمجية الخاصة بنا. للقيام بذلك، سنحتاج إلى عنوان عقدنا الذي يمكننا الحصول عليه من النشر أو بلوك سكوت (opens in a new tab) من خلال البحث عن العنوان الذي استخدمته لنشر العقد.
في المثال أعلاه، عنوان عقدنا هو 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.
بعد ذلك، سنستخدم طريقة العقد (opens in a new tab) في ويب3 لإنشاء عقدنا باستخدام واجهة ABI والعنوان. في ملف mint-nft.js الخاص بك، أضف ما يلي:
1const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"\n\nconst nftContract = new web3.eth.Contract(contract.abi, contractAddress)الخطوة 6: تحديث ملف .env
الآن، من أجل إنشاء وإرسال المعاملات إلى سلسلة إيثريوم، سنستخدم عنوان حساب إيثريوم العام الخاص بك للحصول على رقم nonce الخاص بالحساب (سيتم شرحه أدناه).
أضف مفتاحك العام إلى ملف .env الخاص بك — إذا كنت قد أكملت الجزء الأول من البرنامج التعليمي، فيجب أن يبدو ملف .env الخاص بنا الآن على هذا النحو:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"\nPRIVATE_KEY = "your-private-account-address"\nPUBLIC_KEY = "your-public-account-address"الخطوة 7: إنشاء معاملتك
أولاً، دعنا نعرّف دالة باسم mintNFT(tokenData) وننشئ معاملتنا عن طريق القيام بما يلي:
-
احصل على PRIVATE_KEY و PUBLIC_KEY من ملف
.env. -
بعد ذلك، سنحتاج إلى تحديد رقم nonce الخاص بالحساب. تُستخدم مواصفات nonce لتتبع عدد المعاملات المرسلة من عنوانك - وهو ما نحتاجه لأغراض أمنية ولمنع هجمات إعادة الإرسال (opens in a new tab). للحصول على عدد المعاملات المرسلة من عنوانك، نستخدم getTransactionCount (opens in a new tab).
-
أخيرًا، سنقوم بإعداد معاملتنا بالمعلومات التالية:
-
'from': PUBLIC_KEY— أصل معاملتنا هو عنواننا العام -
'to': contractAddress— العقد الذي نرغب في التفاعل معه وإرسال المعاملة إليه -
'nonce': nonce— رقم nonce الخاص بالحساب مع عدد المعاملات المرسلة من عنواننا -
'gas': estimatedGas— الغاز المقدر اللازم لإتمام المعاملة -
'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()— العملية الحسابية التي نرغب في إجرائها في هذه المعاملة — وهي في هذه الحالة تعدين إن إف تي
يجب أن يبدو ملف mint-nft.js الخاص بك على هذا النحو الآن:
1 require('dotenv').config();\n const API_URL = process.env.API_URL;\n const PUBLIC_KEY = process.env.PUBLIC_KEY;\n const PRIVATE_KEY = process.env.PRIVATE_KEY;\n\n const { createAlchemyWeb3 } = require("@alch/alchemy-web3");\n const web3 = createAlchemyWeb3(API_URL);\n\n const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");\n const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778";\n const nftContract = new web3.eth.Contract(contract.abi, contractAddress);\n\n async function mintNFT(tokenURI) {\n const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //الحصول على أحدث nonce\n\n //المعاملة\n const tx = {\n 'from': PUBLIC_KEY,\n 'to': contractAddress,\n 'nonce': nonce,\n 'gas': 500000,\n 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()\n };\n }الخطوة 8: توقيع المعاملة
الآن بعد أن أنشأنا معاملتنا، نحتاج إلى توقيعها لإرسالها. هنا سنستخدم مفتاحنا الخاص.
سيعطينا web3.eth.sendSignedTransaction تجزئة (هاش) المعاملة، والتي يمكننا استخدامها للتأكد من أن معاملتنا قد تم تعدينها ولم يتم إسقاطها من قبل الشبكة. ستلاحظ في قسم توقيع المعاملة، أننا أضفنا بعض عمليات التحقق من الأخطاء حتى نعرف ما إذا كانت معاملتنا قد تمت بنجاح.
1require("dotenv").config()\nconst API_URL = process.env.API_URL\nconst PUBLIC_KEY = process.env.PUBLIC_KEY\nconst PRIVATE_KEY = process.env.PRIVATE_KEY\n\nconst { createAlchemyWeb3 } = require("@alch/alchemy-web3")\nconst web3 = createAlchemyWeb3(API_URL)\n\nconst contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")\nconst contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"\nconst nftContract = new web3.eth.Contract(contract.abi, contractAddress)\n\nasync function mintNFT(tokenURI) {\n const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //الحصول على أحدث nonce\n\n //المعاملة\n const tx = {\n from: PUBLIC_KEY,\n to: contractAddress,\n nonce: nonce,\n gas: 500000,\n data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),\n }\n\n const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)\n signPromise\n .then((signedTx) => {\n web3.eth.sendSignedTransaction(\n signedTx.rawTransaction,\n function (err, hash) {\n if (!err) {\n console.log(\n "تجزئة (هاش) معاملتك هو: ",\n hash,\n "\nتحقق من Mempool الخاص بـ Alchemy لعرض حالة معاملتك!"\n )\n } else {\n console.log(\n "حدث خطأ ما عند إرسال معاملتك:",\n err\n )\n }\n }\n )\n })\n .catch((err) => {\n console.log(" فشل الوعد:", err)\n })\n}الخطوة 9: استدعاء mintNFT وتشغيل node mint-nft.js
هل تتذكر ملف metadata.json الذي قمت بتحميله إلى بينياتا؟ احصل على رمز التجزئة الخاص به من بينياتا ومرر ما يلي كمعلمة للدالة mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>
إليك كيفية الحصول على رمز التجزئة:
كيفية الحصول على رمز التجزئة للبيانات الوصفية لـ إن إف تي على Pinata
تأكد مرة أخرى من أن رمز التجزئة الذي نسخته يرتبط بملف metadata.json الخاص بك عن طريق تحميل
https://gateway.pinata.cloud/ipfs/<metadata-hash-code>في نافذة منفصلة. يجب أن تبدو الصفحة مشابهة للقطة الشاشة أدناه:
يجب أن تعرض صفحتك البيانات الوصفية لـ json
بشكل عام، يجب أن تبدو التعليمات البرمجية الخاصة بك على هذا النحو:
1require("dotenv").config()\nconst API_URL = process.env.API_URL\nconst PUBLIC_KEY = process.env.PUBLIC_KEY\nconst PRIVATE_KEY = process.env.PRIVATE_KEY\n\nconst { createAlchemyWeb3 } = require("@alch/alchemy-web3")\nconst web3 = createAlchemyWeb3(API_URL)\n\nconst contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")\nconst contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"\nconst nftContract = new web3.eth.Contract(contract.abi, contractAddress)\n\nasync function mintNFT(tokenURI) {\n const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //الحصول على أحدث nonce\n\n //المعاملة\n const tx = {\n from: PUBLIC_KEY,\n to: contractAddress,\n nonce: nonce,\n gas: 500000,\n data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),\n }\n\n const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)\n signPromise\n .then((signedTx) => {\n web3.eth.sendSignedTransaction(\n signedTx.rawTransaction,\n function (err, hash) {\n if (!err) {\n console.log(\n "تجزئة (هاش) معاملتك هو: ",\n hash,\n "\nتحقق من Mempool الخاص بـ Alchemy لعرض حالة معاملتك!"\n )\n } else {\n console.log(\n "حدث خطأ ما عند إرسال معاملتك:",\n err\n )\n }\n }\n )\n })\n .catch((err) => {\n console.log("فشل الوعد:", err)\n })\n}\n\nmintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")الآن، قم بتشغيل node scripts/mint-nft.js لنشر إن إف تي الخاص بك. بعد بضع ثوانٍ، يجب أن ترى استجابة كهذه في الطرفية:
1تجزئة (هاش) معاملتك هو: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8\n\nتحقق من Mempool الخاص بـ ألكيمي لعرض حالة معاملتك!بعد ذلك، قم بزيارة ألكيمي mempool (opens in a new tab) الخاص بك لمعرفة حالة معاملتك (سواء كانت معلقة أو تم تعدينها أو تم إسقاطها بواسطة الشبكة). إذا تم إسقاط معاملتك، فمن المفيد أيضًا التحقق من بلوك سكوت (opens in a new tab) والبحث عن تجزئة (هاش) معاملتك.
عرض تجزئة (هاش) معاملة إن إف تي على Etherscan
وهذا كل شيء! لقد قمت الآن بالنشر والتعدين باستخدام إن إف تي على بلوكتشين إيثريوم
باستخدام mint-nft.js يمكنك تعدين أي عدد من رموز إن إف تي كما يحلو لقلبك (ومحفظتك)! فقط تأكد من تمرير tokenURI جديد يصف البيانات الوصفية لـ إن إف تي (وإلا، سينتهي بك الأمر بإنشاء مجموعة من النسخ المتطابقة بمعرفات مختلفة).
من المفترض أنك ترغب في أن تكون قادرًا على عرض إن إف تي الخاص بك في محفظتك - لذا تأكد من مراجعة الجزء 3: كيفية عرض إن إف تي الخاص بك في محفظتك!
آخر تحديث للصفحة: 3 مارس 2026


