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

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

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

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

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

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

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

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

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

Once you’ve created an ألكيمي account, you can generate an API key by creating an app. سيسمح لنا هذا بتقديم طلبات إلى شبكة اختبار سيبوليا. إذا لم تكن على دراية بشبكات الاختبار، فتفقد هذه الصفحة.

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

إنشاء تطبيق Hello world

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

عرض إنشاء تطبيق hello world

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

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

We need an إيثريوم account to send and receive transactions. For this tutorial, we’ll use ميتاماسك, a virtual wallet in the browser used to manage your إيثريوم account address. المزيد عن المعاملات.

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

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

مثال على ميتاماسك sepolia

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

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

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

للتأكد من وجود رصيدنا، لنجري طلبًا لـ eth_getBalance باستخدام أداة الإنشاء الخاصة بـ ألكيمي (opens in a new tab). This will return the amount of ETH in our wallet. After you input your ميتاماسك account address and click “Send Request”, you should see a response like this:

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

ملاحظة: هذه النتيجة بوحدة wei وليس ETH. Wei is used as the smallest denomination of ether. التحويل من wei إلى ETH هو: 1 eth = 1018 wei. لذلك إذا قمنا بتحويل 0x2B5E3AF16B1880000 إلى النظام العشري، فسنحصل على 5*10¹⁸ وهو ما يعادل 5 ETH.

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

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

First, we’ll need to create a folder for our project. Navigate to your command line and type:

1mkdir hello-world
2cd hello-world

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

1npm init

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

1package name: (hello-world)
2version: (1.0.0)
3description: عقد hello world الذكي
4entry point: (index.js)
5test command:
6git repository:
7keywords:
8author:
9license: (ISC)
10About to write to /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "عقد hello world الذكي",
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: تنزيل هارد هات (opens in a new tab)

هارد هات is a development environment to compile, deploy, test, and debug your إيثريوم software. It helps developers when building smart contracts and dapps locally before deploying to the live chain.

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

1npm install --save-dev hardhat

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

الخطوة 8: إنشاء مشروع هارد هات

Inside our project folder run:

1npx hardhat

You should then see a welcome message and option to select what you want to do. Select “create an empty hardhat.config.js”:

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Welcome to Hardhat v2.0.11 👷‍?
11
12What do you want to do? …
13Create a sample project
14❯ Create an empty hardhat.config.js
15Quit
إظهار الكل

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

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

للحفاظ على تنظيم مشروعنا، سننشئ مجلدين جديدين. Navigate to the root directory of your project in your command line and type:

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

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

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

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

  1. انتقل إلى مجلد "contracts" وأنشئ ملفًا جديدًا باسم HelloWorld.sol
  2. يوجد أدناه نموذج لعقد Hello World الذكي من مؤسسة إيثريوم والذي سنستخدمه في هذا الدرس التعليمي. انسخ المحتويات أدناه والصقها في ملف HelloWorld.sol الخاص بك، وتأكد من قراءة التعليقات لفهم ما يفعله هذا العقد:
1// يحدد إصدار Solidity، باستخدام الإصدار الدلالي.
2// اعرف المزيد: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// يُعرّف عقدًا باسم `HelloWorld`.
6// العقد هو مجموعة من الوظائف والبيانات (حالته). بمجرد النشر، يقيم العقد في عنوان محدد على بلوكتشين إيثريوم. اعرف المزيد: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // يصرح عن متغير حالة `message` من النوع `string`.
10 // متغيرات الحالة هي متغيرات يتم تخزين قيمها بشكل دائم في تخزين العقد. الكلمة الأساسية `public` تجعل المتغيرات قابلة للوصول إليها من خارج العقد وتنشئ دالة يمكن للعقود أو العملاء الآخرين استدعاؤها للوصول إلى القيمة.
11 string public message;
12
13 // على غرار العديد من اللغات الكائنية التوجه القائمة على الفئات، المُنشئ هو دالة خاصة يتم تنفيذها فقط عند إنشاء العقد.
14 // تُستخدم المُنشئات لتهيئة بيانات العقد. اعرف المزيد:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // يقبل وسيطة سلسلة `initMessage` ويضبط القيمة في متغير التخزين `message` الخاص بالعقد).
18 message = initMessage;
19 }
20
21 // دالة عامة تقبل وسيطة سلسلة وتقوم بتحديث متغير التخزين `message`.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
إظهار الكل

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

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

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

Every transaction sent from your virtual wallet requires a signature using your unique private key. To provide our program with this permission, we can safely store our private key (and ألكيمي API key) in an environment file.

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

First, install the dotenv package in your project directory:

1npm install dotenv --save

بعد ذلك، قم بإنشاء ملف .env في الدليل الجذر لمشروعنا، وأضف مفتاح ميتاماسك الخاص بك وعنوان URL لواجهة برمجة تطبيقات ألكيمي HTTP إليه.

الحصول على مفتاح alchemy api

نسخ عنوان URL الخاص بـ ألكيمي API

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

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

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

الخطوة 12: تثبيت إيثرز.جي إس

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

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

In your project directory type:

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

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

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

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

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

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "sepolia",
12 networks: {
13 hardhat: {},
14 sepolia: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
إظهار الكل

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

To make sure everything is working so far, let’s compile our contract. مهمة compile هي إحدى مهام hardhat المضمنة.

From the command line run:

1npx hardhat compile

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

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

Now that our contract is written and our configuration file is good to go, it’s time to write our contract deploy script.

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

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // ابدأ النشر، مع إرجاع وعد يتم حله إلى كائن عقد
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("تم نشر العقد على العنوان:", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
إظهار الكل

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

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

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

1const hello_world = await HelloWorld.deploy();

استدعاء deploy() على ContractFactory سيبدأ النشر، ويعيد Promise يتم حله إلى Contract. This is the object that has a method for each of our smart contract functions.

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

We’re finally ready to deploy our smart contract! انتقل إلى سطر الأوامر وقم بتشغيل:

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

You should then see something like:

1تم نشر العقد على العنوان: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

إذا ذهبنا إلى سيبوليا etherscan (opens in a new tab) وبحثنا عن عنوان عقدنا، فمن المفترض أن نتمكن من رؤية أنه تم نشره بنجاح. The transaction will look something like this:

عقد etherscan

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

معاملة etherscan

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

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

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

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

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

آخر تحديث للصفحة: 3 مارس 2026

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