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

عقد ذكي ⁦Hello World⁩ للمبتدئين

Solidity
Hardhat
Alchemy
عقود ذكية
نشر
مبتدئ
إيلانه
31 مارس 2021
11 دقيقة للقراءة

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

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

إذا كانت لديك أسئلة في أي وقت، فلا تتردد في التواصل معنا في ديسكورد Alchemy (opens in a new tab)!

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

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

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

بمجرد إنشاء حساب Alchemy، يمكنك إنشاء مفتاح API عن طريق إنشاء تطبيق. سيسمح لنا ذلك بتقديم طلبات إلى شبكة اختبار Sepolia. إذا لم تكن على دراية بشبكات الاختبار، فراجع هذه الصفحة.

  1. انتقل إلى صفحة "Create new app" (إنشاء تطبيق جديد) في لوحة تحكم Alchemy الخاصة بك عن طريق تحديد "Select an app" (تحديد تطبيق) في شريط التنقل والنقر على "Create new app"

Hello world create app

  1. قم بتسمية تطبيقك "Hello World"، وقدم وصفًا قصيرًا، واختر حالة استخدام، على سبيل المثال، "Infra & Tooling". بعد ذلك، ابحث عن "Ethereum" وحدد الشبكة.

create app view hello world

  1. انقر على "Next" (التالي) للمتابعة، ثم "Create app" (إنشاء تطبيق) وهذا كل شيء! يجب أن يظهر تطبيقك في القائمة المنسدلة لشريط التنقل، مع توفر مفتاح API للنسخ.

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

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

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

إذا لم ترَ Sepolia مدرجة، فانتقل إلى القائمة، ثم Advanced (متقدم) وقم بالتمرير لأسفل لتبديل "Show test networks" (إظهار شبكات الاختبار) إلى وضع التشغيل. في قائمة تحديد الشبكة، اختر علامة التبويب "Custom" (مخصص) للعثور على قائمة بشبكات الاختبار وحدد "Sepolia".

metamask sepolia example

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

من أجل نشر عقدنا الذكي على شبكة الاختبار، سنحتاج إلى بعض الـ ETH الوهمي. للحصول على Sepolia ETH يمكنك الذهاب إلى تفاصيل شبكة Sepolia لعرض قائمة بالصنابير المختلفة. إذا لم يعمل أحدها، جرب آخر لأنها قد تنفد أحيانًا. قد يستغرق الأمر بعض الوقت لتلقي الـ ETH الوهمي الخاص بك بسبب حركة مرور الشبكة. يجب أن ترى ETH في حساب ميتاماسك الخاص بك بعد فترة وجيزة!

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

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

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

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

أوف! أموالنا الوهمية كلها موجودة .

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

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

mkdir hello-world
cd hello-world

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

npm init

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

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

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

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

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

npm install --save-dev hardhat

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

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

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

npx hardhat

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

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

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

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

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

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

قد تسأل نفسك، متى بالضبط سنكتب الكود؟؟ حسنًا، ها نحن ذا، في الخطوة 10.

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

  1. انتقل إلى مجلد "contracts" وأنشئ ملفًا جديدًا يسمى HelloWorld.sol
  2. يوجد أدناه نموذج لعقد ذكي Hello World من مؤسسة إيثيريوم سنستخدمه في هذا البرنامج التعليمي. انسخ والصق المحتويات أدناه في ملف HelloWorld.sol الخاص بك، وتأكد من قراءة التعليقات لفهم ما يفعله هذا العقد:

هذا عقد ذكي بسيط للغاية يخزن رسالة عند إنشائه ويمكن تحديثه عن طريق استدعاء دالة update.

الخطوة 11: ربط ميتاماسك وAlchemy بمشروعك

لقد أنشأنا محفظة ميتاماسك، وحساب Alchemy، وكتبنا عقدنا الذكي، والآن حان الوقت لربط الثلاثة.

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

لمعرفة المزيد حول إرسال المعاملات، راجع هذا البرنامج التعليمي حول إرسال المعاملات باستخدام Web3.

أولاً، قم بتثبيت حزمة dotenv في دليل مشروعك:

npm install dotenv --save

ثم، أنشئ ملف .env في الدليل الجذر لمشروعنا، وأضف مفتاح ميتاماسك الخاص بك وعنوان URL الخاص بـ HTTP Alchemy API إليه.

get alchemy api key

نسخ عنوان URL الخاص بـ Alchemy API

يجب أن يبدو ملف .env الخاص بك هكذا:

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

لربط هذه المتغيرات فعليًا بالكود الخاص بنا، سنشير إليها في ملف hardhat.config.js الخاص بنا في الخطوة 13.

لا تقم بإيداع (commit) ملف .env! يرجى التأكد من عدم مشاركة أو كشف ملف .env الخاص بك لأي شخص، لأنك بذلك تعرض أسرارك للخطر. إذا كنت تستخدم نظام التحكم في الإصدارات، فأضف ملف .env الخاص بك إلى ملف gitignore.

الخطوة 12: تثبيت Ethers.js

Ethers.js هي مكتبة تسهل التفاعل وتقديم الطلبات إلى إيثيريوم عن طريق تغليف طرق JSON-RPC القياسية بطرق أكثر سهولة في الاستخدام.

يجعل Hardhat من السهل جدًا دمج الإضافات (Plugins) (opens in a new tab) للحصول على أدوات إضافية ووظائف موسعة. سنستفيد من إضافة Ethers (opens in a new tab) لنشر العقد (تحتوي Ethers.js (opens in a new tab) على بعض طرق نشر العقود الواضحة والممتازة).

في دليل مشروعك اكتب:

npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

سنحتاج أيضًا إلى ethers في ملف hardhat.config.js الخاص بنا في الخطوة التالية.

الخطوة 13: تحديث hardhat.config.js

لقد أضفنا العديد من التبعيات والإضافات حتى الآن، والآن نحتاج إلى تحديث hardhat.config.js حتى يتعرف مشروعنا عليها جميعًا.

قم بتحديث hardhat.config.js الخاص بك ليبدو هكذا:

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

للتأكد من أن كل شيء يعمل حتى الآن، دعنا نجمع عقدنا. مهمة compile هي إحدى مهام Hardhat المدمجة.

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

npx hardhat compile

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

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

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

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

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

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

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

const hello_world = await HelloWorld.deploy();

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

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

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

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

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

Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

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

etherscan contract

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

etherscan transaction

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

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

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

هذا كل شيء بالنسبة للجزء الأول من هذا البرنامج التعليمي، في الجزء الثاني سنقوم فعليًا بـ التفاعل مع عقدنا الذكي عن طريق تحديث رسالتنا الأولية، وفي الجزء الثالث سنقوم بـ نشر عقدنا الذكي على Etherscan حتى يعرف الجميع كيفية التفاعل معه.

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