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

كيفية كتابة ونشر رمز غير قابل للاستبدال (الجزء 1/3 من سلسلة دروس الرموز غير القابلة للاستبدال)

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

مع جلب الرموز غير القابلة للاستبدال (NFTs) لتقنية البلوك تشين إلى أنظار الجمهور، أصبحت الآن فرصة ممتازة لفهم هذه الضجة بنفسك من خلال نشر عقد الرمز غير القابل للاستبدال الخاص بك (رمز ERC-721) على شبكة البلوك تشين لإيثريوم!

تفخر Alchemy بشدة بتشغيل أكبر الأسماء في مجال الرموز غير القابلة للاستبدال، بما في ذلك Makersplace (التي سجلت مؤخرًا رقمًا قياسيًا في مبيعات الأعمال الفنية الرقمية في Christie’s مقابل 69 مليون دولار)، و Dapper Labs (مبتكري NBA Top Shot و Crypto Kitties)، و OpenSea (أكبر سوق للرموز غير القابلة للاستبدال في العالم)، و Zora، و Super Rare، و NFTfi، و Foundation، و Enjin، و Origin Protocol، و Immutable، والمزيد.

في هذا الدرس، سنستعرض كيفية إنشاء ونشر عقد ذكي من نوع ERC-721 على شبكة الاختبار Sepolia باستخدام MetaMask (opens in a new tab)، و Solidity (opens in a new tab)، و Hardhat (opens in a new tab)، و Pinata (opens in a new tab)، و Alchemy (opens in a new tab) (لا تقلق إذا كنت لا تفهم ما يعنيه أي من هذا حتى الآن — سنشرح ذلك!).

في الجزء الثاني من هذا الدرس، سنستعرض كيف يمكننا استخدام عقدنا الذكي من أجل السك او انشاء رمز غير قابل للاستبدال، وفي الجزء الثالث سنشرح كيفية عرض الرمز غير القابل للاستبدال الخاص بك على MetaMask.

وبالطبع، إذا كانت لديك أسئلة في أي وقت، فلا تتردد في التواصل عبر Alchemy Discord (opens in a new tab) أو زيارة مستندات واجهة برمجة تطبيقات الرموز غير القابلة للاستبدال الخاصة بـ Alchemy (opens in a new tab)!

الخطوة 1: الاتصال بشبكة إيثريوم

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

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

الخطوة 2: إنشاء تطبيقك (ومفتاح واجهة برمجة التطبيقات)

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

  1. انتقل إلى صفحة "Create App" (إنشاء تطبيق) في لوحة تحكم Alchemy الخاصة بك عن طريق التمرير فوق "Apps" (التطبيقات) في شريط التنقل والنقر على "Create App"

Create your app

  1. قم بتسمية تطبيقك (اخترنا "My First NFT!")، وقدم وصفًا قصيرًا، وحدد "Ethereum" للسلسلة (Chain)، واختر "Sepolia" لشبكتك. منذ الدمج، تم إيقاف شبكات الاختبار الأخرى.

Configure and publish your app

  1. انقر على "Create app" (إنشاء تطبيق) وهذا كل شيء! يجب أن يظهر تطبيقك في الجدول أدناه.

الخطوة 3: إنشاء حساب إيثريوم (عنوان)

نحتاج إلى حساب إيثريوم لإرسال واستقبال المعاملات. في هذا الدرس، سنستخدم MetaMask، وهي محفظة افتراضية في المتصفح تُستخدم لإدارة عنوان حساب إيثريوم الخاص بك. إذا كنت ترغب في فهم المزيد حول كيفية عمل المعاملات على إيثريوم، فتحقق من هذه الصفحة من مؤسسة إيثريوم.

يمكنك تنزيل وإنشاء حساب MetaMask مجانًا هنا (opens in a new tab). عند إنشاء حساب، أو إذا كان لديك حساب بالفعل، تأكد من التبديل إلى "Sepolia Test Network" (شبكة الاختبار Sepolia) في أعلى اليمين (حتى لا نتعامل بأموال حقيقية).

Set Sepolia as your network

الخطوة 4: إضافة إيثر من صنبور

من أجل نشر عقدنا الذكي على شبكة الاختبار، سنحتاج إلى بعض من ETH الوهمي. للحصول على ETH، يمكنك الذهاب إلى صنبور Sepolia (opens in a new tab) المستضاف بواسطة Alchemy، وتسجيل الدخول وإدخال عنوان حسابك، ثم النقر على "Send Me ETH" (أرسل لي ETH). يجب أن ترى ETH في حساب MetaMask الخاص بك بعد فترة وجيزة!

الخطوة 5: التحقق من رصيدك

للتحقق مرة أخرى من وجود رصيدنا، دعنا نُجري طلب eth_getBalance (opens in a new tab) باستخدام أداة الملحن الخاصة بـ Alchemy (opens in a new tab). سيؤدي هذا إلى إرجاع كمية ETH في محفظتنا. بعد إدخال عنوان حساب MetaMask الخاص بك والنقر على "Send Request" (إرسال الطلب)، يجب أن ترى استجابة مثل هذه:

{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}

ملاحظة هذه النتيجة بوحدة wei، وليس ETH. تُستخدم wei كأصغر فئة من الإيثر. التحويل من wei إلى ETH هو 1 eth = 1018 wei. لذا إذا قمنا بتحويل 0xde0b6b3a7640000 إلى النظام العشري نحصل على 1*1018 wei، وهو ما يساوي 1 ETH.

رائع! أموالنا الوهمية كلها موجودة.

الخطوة 6: تهيئة مشروعنا

أولاً، سنحتاج إلى إنشاء مجلد لمشروعنا. انتقل إلى سطر الأوامر واكتب:

mkdir my-nft cd my-nft

الآن ونحن داخل مجلد مشروعنا، سنستخدم npm init لتهيئة المشروع. إذا لم يكن لديك npm مثبتًا بالفعل، فاتبع هذه التعليمات (opens in a new tab) (سنحتاج أيضًا إلى Node.js (opens in a new tab)، لذا قم بتنزيله أيضًا!).

npm init

لا يهم حقًا كيف تجيب على أسئلة التثبيت؛ إليك كيف فعلنا ذلك كمرجع:

1 package name: (my-nft)
2 version: (1.0.0)
3 description: My first NFT!
4 entry point: (index.js)
5 test command:
6 git repository:
7 keywords:
8 author:
9 license: (ISC)
10 About to write to /Users/thesuperb1/Desktop/my-nft/package.json:
11
12 {
13 "name": "my-nft",
14 "version": "1.0.0",
15 "description": "My first NFT!",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \"Error: no test specified\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22 }
إظهار الكل

وافق على package.json، ونحن جاهزون للبدء!

الخطوة 7: تثبيت Hardhat (opens in a new tab)

Hardhat هي بيئة تطوير لتجميع ونشر واختبار وتصحيح أخطاء برمجيات إيثريوم الخاصة بك. إنها تساعد المطورين عند بناء عقود ذكية والتطبيقات اللامركزية محليًا قبل نشرها على السلسلة الحية.

داخل مشروع my-nft الخاص بنا، قم بتشغيل:

npm install --save-dev hardhat

تحقق من هذه الصفحة لمزيد من التفاصيل حول تعليمات التثبيت (opens in a new tab).

الخطوة 8: إنشاء مشروع Hardhat

داخل مجلد مشروعنا، قم بتشغيل:

npx hardhat

يجب أن ترى بعد ذلك رسالة ترحيب وخيارًا لتحديد ما تريد القيام به. حدد "create an empty hardhat.config.js":

888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 888 888 "88b 888P" d88" 888 888 "88b "88b 888 888 888 .d888888 888 888 888 888 888 .d888888 888 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 👷 Welcome to Hardhat v2.0.11 👷‍ ? What do you want to do? … Create a sample project ❯ Create an empty hardhat.config.js Quit

سيؤدي هذا إلى إنشاء ملف hardhat.config.js لنا والذي سنحدد فيه جميع إعدادات مشروعنا (في الخطوة 13).

الخطوة 9: إضافة مجلدات المشروع

للحفاظ على تنظيم مشروعنا، سنقوم بإنشاء مجلدين جديدين. انتقل إلى الدليل الجذر لمشروعك في سطر الأوامر واكتب:

mkdir contracts mkdir scripts

  • contracts/ هو المكان الذي سنحتفظ فيه بكود العقد الذكي للرمز غير القابل للاستبدال الخاص بنا

  • scripts/ هو المكان الذي سنحتفظ فيه بالبرامج النصية لنشر والتفاعل مع عقدنا الذكي

الخطوة 10: كتابة عقدنا

الآن بعد إعداد بيئتنا، ننتقل إلى أشياء أكثر إثارة: كتابة كود عقدنا الذكي!

افتح مشروع my-nft في محرر النصوص المفضل لديك (نحن نفضل VSCode (opens in a new tab)). تُكتب العقود الذكية بلغة تسمى Solidity وهي ما سنستخدمه لكتابة العقد الذكي MyNFT.sol الخاص بنا.‌

  1. انتقل إلى مجلد contracts وأنشئ ملفًا جديدًا يسمى MyNFT.sol

  2. يوجد أدناه كود العقد الذكي للرمز غير القابل للاستبدال الخاص بنا، والذي استندنا فيه إلى تنفيذ ERC-721 من مكتبة OpenZeppelin (opens in a new tab). انسخ والصق المحتويات أدناه في ملف MyNFT.sol الخاص بك.

    1//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) // عقد مبني على [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
    2// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
    3pragma solidity ^0.8.0;
    4
    5import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
    6import "@openzeppelin/contracts/utils/Counters.sol";
    7import "@openzeppelin/contracts/access/Ownable.sol";
    8import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    9
    10contract MyNFT is ERC721URIStorage, Ownable {
    11 using Counters for Counters.Counter;
    12 Counters.Counter private _tokenIds;
    13
    14 constructor() ERC721("MyNFT", "NFT") {}
    15
    16 function mintNFT(address recipient, string memory tokenURI)
    17 public onlyOwner
    18 returns (uint256)
    19 {
    20 _tokenIds.increment();
    21
    22 uint256 newItemId = _tokenIds.current();
    23 _mint(recipient, newItemId);
    24 _setTokenURI(newItemId, tokenURI);
    25
    26 return newItemId;
    27 }
    28}
    إظهار الكل
1
23. نظرًا لأننا نرث فئات من مكتبة عقود OpenZeppelin، قم بتشغيل `npm install @openzeppelin/contracts^4.0.0` في سطر الأوامر لتثبيت المكتبة في مجلدنا.
3
4إذن، ماذا يفعل هذا الكود _بالتحديد_؟ دعنا نقسمه، سطرًا بسطر.
5
6في الجزء العلوي من عقدنا الذكي، نقوم باستيراد ثلاث فئات عقود ذكية من [OpenZeppelin](https://openzeppelin.com/):
7
8- يحتوي @openzeppelin/contracts/token/ERC721/ERC721.sol على تنفيذ معيار ERC-721، والذي سيرثه العقد الذكي للرمز غير القابل للاستبدال الخاص بنا. (لكي يكون رمزًا غير قابل للاستبدال صالحًا، يجب أن ينفذ عقدك الذكي جميع طرق معيار ERC-721.) لمعرفة المزيد حول وظائف ERC-721 الموروثة، تحقق من تعريف الواجهة [هنا](https://eips.ethereum.org/EIPS/eip-721).
9
10- يوفر @openzeppelin/contracts/utils/Counters.sol عدادات لا يمكن زيادتها أو إنقاصها إلا بمقدار واحد. يستخدم عقدنا الذكي عدادًا لتتبع العدد الإجمالي للرموز غير القابلة للاستبدال التي تم سكها وتعيين المعرف الفريد على الرمز غير القابل للاستبدال الجديد الخاص بنا. (يجب تعيين معرف فريد لكل رمز غير قابل للاستبدال يتم سكه باستخدام عقد ذكي — هنا يتم تحديد المعرف الفريد الخاص بنا فقط من خلال العدد الإجمالي للرموز غير القابلة للاستبدال الموجودة. على سبيل المثال، الرمز غير القابل للاستبدال الأول الذي نقوم بسكه باستخدام عقدنا الذكي له معرف "1"، والرمز الثاني له معرف "2"، وما إلى ذلك.)
11
12- يقوم @openzeppelin/contracts/access/Ownable.sol بإعداد [التحكم في الوصول](https://docs.openzeppelin.com/contracts/3.x/access-control) على عقدنا الذكي، بحيث يمكن لمالك العقد الذكي (أنت) فقط السك او انشاء رموز غير قابلة للاستبدال. (ملاحظة، تضمين التحكم في الوصول هو تفضيل بالكامل. إذا كنت ترغب في أن يتمكن أي شخص من السك او انشاء رمز غير قابل للاستبدال باستخدام عقدك الذكي، فقم بإزالة كلمة Ownable في السطر 10 و onlyOwner في السطر 17.)
13
14بعد عبارات الاستيراد الخاصة بنا، لدينا العقد الذكي المخصص للرمز غير القابل للاستبدال، وهو قصير بشكل مدهش — فهو يحتوي فقط على عداد، ومنشئ (constructor)، ووظيفة واحدة! هذا بفضل عقود OpenZeppelin الموروثة، والتي تنفذ معظم الطرق التي نحتاجها لإنشاء رمز غير قابل للاستبدال، مثل `ownerOf` التي تُرجع مالك الرمز غير القابل للاستبدال، و `transferFrom`، التي تنقل ملكية الرمز غير القابل للاستبدال من حساب إلى آخر.
15
16في منشئ ERC-721 الخاص بنا، ستلاحظ أننا نمرر سلسلتين نصيتين، "MyNFT" و "NFT". المتغير الأول هو اسم العقد الذكي، والثاني هو رمزه. يمكنك تسمية كل من هذه المتغيرات بأي اسم تريده!
17
18أخيرًا، لدينا وظيفتنا `mintNFT(address recipient, string memory tokenURI)` التي تتيح لنا السك او انشاء رمز غير قابل للاستبدال! ستلاحظ أن هذه الوظيفة تأخذ متغيرين:
19
20- يحدد `address recipient` العنوان الذي سيتلقى الرمز غير القابل للاستبدال المسكوك حديثًا
21
22- `string memory tokenURI` هي سلسلة نصية يجب أن تشير إلى مستند JSON يصف البيانات الوصفية للرمز غير القابل للاستبدال. البيانات الوصفية للرمز غير القابل للاستبدال هي حقًا ما يجعله ينبض بالحياة، مما يسمح له بامتلاك خصائص قابلة للتكوين، مثل الاسم والوصف والصورة والسمات الأخرى. في الجزء الثاني من هذا الدرس، سنصف كيفية تكوين هذه البيانات الوصفية.
23
24تستدعي `mintNFT` بعض الطرق من مكتبة ERC-721 الموروثة، وتُرجع في النهاية رقمًا يمثل معرف الرمز غير القابل للاستبدال المسكوك حديثًا.
25
26## الخطوة 11: ربط MetaMask و Alchemy بمشروعك \{#connect-metamask-and-alchemy\}
27
28الآن بعد أن أنشأنا محفظة MetaMask، وحساب Alchemy، وكتبنا عقدنا الذكي، حان الوقت لربط الثلاثة معًا.
29
30تتطلب كل معاملة يتم إرسالها من محفظتك الافتراضية توقيعًا باستخدام المفتاح الخاص الفريد الخاص بك. لتزويد برنامجنا بهذا الإذن، يمكننا تخزين المفتاح الخاص بنا (ومفتاح واجهة برمجة تطبيقات Alchemy) بأمان في ملف بيئة.
31
32لمعرفة المزيد حول إرسال المعاملات، تحقق من [هذا الدرس](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) حول إرسال المعاملات باستخدام ويب 3.
33
34أولاً، قم بتثبيت حزمة dotenv في دليل مشروعك:
35
36 npm install dotenv --save
37
38ثم، أنشئ ملف `.env` في الدليل الجذر لمشروعنا، وأضف المفتاح الخاص لـ MetaMask وعنوان URL لواجهة برمجة تطبيقات HTTP الخاصة بـ Alchemy إليه.
39
40- اتبع [هذه التعليمات](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) لتصدير المفتاح الخاص بك من MetaMask
41
42- انظر أدناه للحصول على عنوان URL لواجهة برمجة تطبيقات HTTP الخاصة بـ Alchemy وانسخه إلى الحافظة الخاصة بك
43
44![Copy your Alchemy API URL](./copy-alchemy-api-url.gif)
45
46يجب أن يبدو ملف `.env` الخاص بك الآن هكذا:
47
48 API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
49 PRIVATE_KEY="your-metamask-private-key"
50
51لربط هذه المتغيرات فعليًا بالكود الخاص بنا، سنشير إليها في ملف hardhat.config.js الخاص بنا في الخطوة 13.
52
53<EnvWarningBanner />
54
55## الخطوة 12: تثبيت Ethers.js \{#install-ethers\}
56
57Ethers.js هي مكتبة تسهل التفاعل وإجراء الطلبات إلى إيثريوم عن طريق تغليف [طرق JSON-RPC القياسية](/developers/docs/apis/json-rpc/) بطرق أكثر سهولة في الاستخدام.
58
59يجعل Hardhat من السهل جدًا دمج [الإضافات (Plugins)](https://hardhat.org/plugins/) للحصول على أدوات إضافية ووظائف موسعة. سنستفيد من [إضافة Ethers](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) لنشر العقود (تحتوي [Ethers.js](https://github.com/ethers-io/ethers.js/) على بعض طرق نشر العقود النظيفة جدًا).
60
61في دليل مشروعك اكتب:
62
63 npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0
64
65سنحتاج أيضًا إلى ethers في ملف hardhat.config.js الخاص بنا في الخطوة التالية.
66
67## الخطوة 13: تحديث hardhat.config.js \{#update-hardhat-config\}
68
69لقد أضفنا العديد من التبعيات والإضافات حتى الآن، والآن نحتاج إلى تحديث hardhat.config.js حتى يتعرف مشروعنا عليها جميعًا.
70
71قم بتحديث hardhat.config.js الخاص بك ليبدو هكذا:
72
73```js
74 /* *
75 * @type import('hardhat/config').HardhatUserConfig */
76 /**
77 * @type import('hardhat/config').HardhatUserConfig
78 */
79 require('dotenv').config();
80 require("@nomiclabs/hardhat-ethers");
81 const { API_URL, PRIVATE_KEY } = process.env;
82 module.exports = {
83 solidity: "0.8.1",
84 defaultNetwork: "sepolia",
85 networks: {
86 hardhat: {},
87 sepolia: {
88 url: API_URL,
89 accounts: [`0x${PRIVATE_KEY}`]
90 }
91 },
92 }
إظهار الكل

الخطوة 14: تجميع عقدنا

للتأكد من أن كل شيء يعمل حتى الآن، دعنا نقوم بتجميع عقدنا. مهمة التجميع (compile) هي إحدى مهام hardhat المدمجة.

من سطر الأوامر قم بتشغيل:

npx hardhat compile

قد تتلقى تحذيرًا بشأن عدم توفير معرف ترخيص SPDX في الملف المصدر، ولكن لا داعي للقلق بشأن ذلك — نأمل أن يبدو كل شيء آخر جيدًا! إذا لم يكن الأمر كذلك، يمكنك دائمًا المراسلة في Alchemy discord (opens in a new tab).

الخطوة 15: كتابة البرنامج النصي للنشر

الآن بعد أن تمت كتابة عقدنا وملف التكوين الخاص بنا جاهز للعمل، حان الوقت لكتابة البرنامج النصي لنشر العقد.

انتقل إلى مجلد scripts/ وأنشئ ملفًا جديدًا يسمى deploy.js، وأضف المحتويات التالية إليه:

1async function main() {
2 const MyNFT = await ethers.getContractFactory("MyNFT")
3
4 // Start deployment, returning a promise that resolves to a contract object // بدء النشر، وإرجاع وعد يحل إلى كائن عقد
5 const myNFT = await MyNFT.deploy()
6 await myNFT.deployed()
7 console.log("Contract deployed to address:", myNFT.address)
8}
9
10main()
11 .then(() => process.exit(0))
12 .catch((error) => {
13 console.error(error)
14 process.exit(1)
15 })
إظهار الكل

يقوم Hardhat بعمل رائع في شرح ما يفعله كل سطر من أسطر الكود هذه في درس العقود (opens in a new tab) الخاص بهم، وقد اعتمدنا شروحاتهم هنا.

const MyNFT = await ethers.getContractFactory("MyNFT");

ContractFactory في ethers.js هو تجريد يُستخدم لنشر عقود ذكية جديدة، لذا فإن MyNFT هنا هو مصنع لمثيلات عقد الرمز غير القابل للاستبدال الخاص بنا. عند استخدام إضافة hardhat-ethers، يتم توصيل مثيلات ContractFactory و Contract بالموقّع الأول افتراضيًا.

const myNFT = await MyNFT.deploy();

سيؤدي استدعاء deploy() على ContractFactory إلى بدء النشر، وإرجاع وعد (Promise) يُحل إلى عقد (Contract). هذا هو الكائن الذي يحتوي على طريقة لكل وظيفة من وظائف العقد الذكي الخاص بنا.

الخطوة 16: نشر عقدنا

نحن مستعدون أخيرًا لنشر عقدنا الذكي! ارجع إلى الدليل الجذر لمشروعك، وفي سطر الأوامر قم بتشغيل:

npx hardhat --network sepolia run scripts/deploy.js

يجب أن ترى بعد ذلك شيئًا مثل:

Contract deployed to address: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650

إذا ذهبنا إلى Sepolia etherscan (opens in a new tab) وبحثنا عن عنوان العقد الخاص بنا، يجب أن نكون قادرين على رؤية أنه قد تم نشره بنجاح. إذا لم تتمكن من رؤيته على الفور، يرجى الانتظار لفترة حيث قد يستغرق الأمر بعض الوقت. ستبدو المعاملة هكذا تقريبًا:

View your transaction address on Etherscan

يجب أن يتطابق عنوان "From" (من) مع عنوان حساب MetaMask الخاص بك وسيشير عنوان "To" (إلى) إلى "Contract Creation" (إنشاء عقد). إذا نقرنا على المعاملة، فسنرى عنوان العقد الخاص بنا في حقل "To":

View your contract address on Etherscan

رائع! لقد قمت للتو بنشر العقد الذكي للرمز غير القابل للاستبدال الخاص بك على سلسلة إيثريوم (شبكة الاختبار)!

لفهم ما يحدث خلف الكواليس، دعنا ننتقل إلى علامة التبويب Explorer (المستكشف) في لوحة تحكم Alchemy (opens in a new tab) الخاصة بنا. إذا كان لديك تطبيقات Alchemy متعددة، فتأكد من التصفية حسب التطبيق وحدد "MyNFT".

View calls made “under the hood” with Alchemy’s Explorer Dashboard

هنا سترى مجموعة من طلبات JSON-RPC التي أجراها Hardhat/Ethers خلف الكواليس لنا عندما استدعينا وظيفة .deploy(). هناك طلبان مهمان يجب الإشارة إليهما هنا وهما eth_sendRawTransaction، وهو الطلب لكتابة عقدنا الذكي فعليًا على سلسلة Sepolia، و eth_getTransactionByHash وهو طلب لقراءة معلومات حول معاملتنا بناءً على التجزئة (هاش) (نمط نموذجي عند إرسال المعاملات). لمعرفة المزيد حول إرسال المعاملات، تحقق من هذا الدرس حول إرسال المعاملات باستخدام ويب 3.

هذا كل شيء بالنسبة للجزء الأول من هذا الدرس. في الجزء الثاني، سنتفاعل فعليًا مع عقدنا الذكي من خلال السك او انشاء رمز غير قابل للاستبدال، وفي الجزء الثالث سنوضح لك كيفية عرض الرمز غير القابل للاستبدال الخاص بك في محفظة إيثريوم الخاصة بك!

آخر تحديث للصفحة: 5 ديسمبر 2025

هل كانت تعليمات الاستخدام هذه مفيدة؟