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

كيفية تطوير واختبار تطبيق لامركزي على شبكة اختبار محلية ومتعددة العملاء

العملاء
العُقَد
العقود الذكيه
قابلية التركيب
طبقة الإجماع
طبقة التنفيذ
الاختبار
المستوى المتوسط
تيدي ميتيكو
11 أبريل 2023
10 دقيقة قراءة

مقدمة

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

في هذا الدليل، ستقوم بما يلي:

  • إنشاء شبكة اختبار إيثريوم محلية باستخدام eth-network-package (opens in a new tab) باستخدام كورتوسيس (opens in a new tab)،
  • ربط بيئة تطوير التطبيقات اللامركزية هارد هات الخاصة بك بشبكة الاختبار المحلية لتجميع ونشر واختبار تطبيق لامركزي، و
  • تكوين شبكة الاختبار المحلية، بما في ذلك المعلمات مثل عدد العقد وأزواج عملاء EL/CL المحددة، لتمكين عمليات التطوير والاختبار مقابل تكوينات الشبكة المختلفة.

ما هو كورتوسيس؟

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

في هذا الدليل، تقوم حزمة كورتوسيس eth-network-package بإنشاء شبكة اختبار إيثريوم محلية مع دعم لعميل طبقة التنفيذ (EL) geth (opens in a new tab)، بالإضافة إلى عملاء طبقة الإجماع (CL) teku (opens in a new tab)، وlighthouse (opens in a new tab)، وlodestar (opens in a new tab). تعمل هذه الحزمة كبديل قابل للتكوين والتأليف للشبكات في أطر العمل مثل هارد هات Network وGanache وAnvil. يوفر كورتوسيس للمطورين تحكماً ومرونة أكبر على شبكات الاختبار التي يستخدمونها، وهو سبب رئيسي لاستخدام مؤسسة إيثريوم لـ كورتوسيس لاختبار الدمج (opens in a new tab) واستمرارها في استخدامه لاختبار ترقيات الشبكة.

إعداد كورتوسيس

قبل المتابعة، تأكد من أن لديك:

إنشاء شبكة اختبار إيثريوم محلية

لتشغيل شبكة اختبار إيثريوم محلية، قم بتشغيل:

1kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package

ملاحظة: يقوم هذا الأمر بتسمية شبكتك: "local-eth-testnet" باستخدام علامة --enclave.

سيطبع كورتوسيس الخطوات التي يتخذها في الخلفية أثناء عمله على تفسير التعليمات والتحقق منها ثم تنفيذها. في النهاية، يجب أن ترى مخرجات تشبه ما يلي:

1INFO[2023-04-04T18:09:44-04:00] ======================================================
2INFO[2023-04-04T18:09:44-04:00] || Created enclave: local-eth-testnet ||
3INFO[2023-04-04T18:09:44-04:00] ======================================================
4Name: local-eth-testnet
5UUID: 39372d756ae8
6Status: RUNNING
7Creation Time: Tue, 04 Apr 2023 18:09:03 EDT
8
9========================================= Files Artifacts =========================================
10UUID Name
11d4085a064230 cl-genesis-data
121c62cb792e4c el-genesis-data
13bd60489b73a7 genesis-generation-config-cl
14b2e593fe5228 genesis-generation-config-el
15d552a54acf78 geth-prefunded-keys
165f7e661eb838 prysm-password
17054e7338bb59 validator-keystore-0
18
19========================================== User Services ==========================================
20UUID Name Ports Status
21e20f129ee0c5 cl-client-0-beacon http: 4000/tcp -> <http://127.0.0.1:54261> RUNNING
22 metrics: 5054/tcp -> <http://127.0.0.1:54262>
23 tcp-discovery: 9000/tcp -> 127.0.0.1:54263
24 udp-discovery: 9000/udp -> 127.0.0.1:60470
25a8b6c926cdb4 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:54267 RUNNING
26 metrics: 5064/tcp -> <http://127.0.0.1:54268>
27d7b802f623e8 el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:54253 RUNNING
28 rpc: 8545/tcp -> 127.0.0.1:54251
29 tcp-discovery: 30303/tcp -> 127.0.0.1:54254
30 udp-discovery: 30303/udp -> 127.0.0.1:53834
31 ws: 8546/tcp -> 127.0.0.1:54252
32514a829c0a84 prelaunch-data-generator-1680646157905431468 <none> STOPPED
3362bd62d0aa7a prelaunch-data-generator-1680646157915424301 <none> STOPPED
3405e9619e0e90 prelaunch-data-generator-1680646157922872635 <none> STOPPED
35

تهانينا! لقد استخدمت كورتوسيس لإنشاء شبكة اختبار إيثريوم محلية، مع عميل CL (lighthouse) وعميل EL (geth)، عبر دوكر.

المراجعة

في هذا القسم، قمت بتنفيذ أمر وجه كورتوسيس لاستخدام eth-network-package المستضافة عن بعد على غيت هاب (opens in a new tab) لتشغيل شبكة اختبار إيثريوم محلية داخل Enclave (opens in a new tab) الخاص بـ كورتوسيس. داخل enclave الخاص بك، ستجد كلاً من "مصنوعات الملفات" و "خدمات المستخدم".

تتضمن مصنوعات الملفات (opens in a new tab) الموجودة في enclave الخاص بك جميع البيانات التي تم إنشاؤها واستخدامها لتشغيل عملاء EL وCL. تم إنشاء البيانات باستخدام خدمة prelaunch-data-generator التي تم إنشاؤها من صورة دوكر هذه (opens in a new tab)

تعرض خدمات المستخدم جميع الخدمات المعبأة في حاويات والتي تعمل في enclave الخاص بك. ستلاحظ أنه تم إنشاء عقدة واحدة، تضم عميل EL وعميل CL.

ربط بيئة تطوير التطبيقات اللامركزية الخاصة بك بشبكة اختبار إيثريوم المحلية

إعداد بيئة تطوير التطبيقات اللامركزية

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

لإعداد بيئة تطوير التطبيقات اللامركزية الخاصة بك، استنسخ المستودع الذي يحتوي على نموذج التطبيق اللامركزي الخاص بنا وقم بتثبيت تبعياته، ثم قم بتشغيل:

1git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn

يحتوي مجلد smart-contract-example (opens in a new tab) المستخدم هنا على الإعداد النموذجي لمطور التطبيقات اللامركزية الذي يستخدم إطار عمل هارد هات (opens in a new tab):

  • يحتوي contracts/ (opens in a new tab) على بعض العقود الذكية البسيطة لتطبيق بلاك جاك اللامركزي
  • يحتوي scripts/ (opens in a new tab) على برنامج نصي لنشر عقد رمزي إلى شبكة إيثريوم المحلية الخاصة بك
  • يحتوي test/ (opens in a new tab) على اختبار .js بسيط لعقد الرمز المميز الخاص بك للتأكد من أن كل لاعب في تطبيق Blackjack اللامركزي الخاص بنا قد تم إصدار 1000 له
  • hardhat.config.ts (opens in a new tab) يقوم بتكوين إعداد هارد هات الخاص بك

تكوين هارد هات لاستخدام شبكة الاختبار المحلية

بعد إعداد بيئة تطوير التطبيقات اللامركزية الخاصة بك، ستقوم الآن بتوصيل هارد هات لاستخدام شبكة اختبار إيثريوم المحلية التي تم إنشاؤها باستخدام كورتوسيس. لتحقيق ذلك، استبدل <$YOUR_PORT> في بنية localnet في ملف التكوين hardhat.config.ts الخاص بك بمنفذ مخرجات rpc uri من أي خدمة el-client-<num>. في هذه الحالة النموذجية، سيكون المنفذ 64248. سيكون المنفذ الخاص بك مختلفًا.

مثال في hardhat.config.ts:

1localnet: {
2url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: استبدل $YOUR_PORT بمنفذ URI للعقدة الذي أنتجته حزمة شبكة ETH KURTOSIS
3
4// هذه مفاتيح خاصة مرتبطة بحسابات اختبار ممولة مسبقًا تم إنشاؤها بواسطة حزمة شبكة eth
5// <https://github.com/kurtosis-tech/eth-network-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star>
6accounts: [
7 "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2",
8 "48fcc39ae27a0e8bf0274021ae6ebd8fe4a0e12623d61464c498900b28feb567",
9 "7988b3a148716ff800414935b305436493e1f25237a2a03e5eebc343735e2f31",
10 "b3c409b6b0b3aa5e65ab2dc1930534608239a478106acf6f3d9178e9f9b00b35",
11 "df9bb6de5d3dc59595bcaa676397d837ff49441d211878c024eabda2cd067c9f",
12 "7da08f856b5956d40a72968f93396f6acff17193f013e8053f6fbb6c08c194d6",
13 ],
14},

بمجرد حفظ ملفك، يتم الآن توصيل بيئة تطوير التطبيقات اللامركزية هارد هات الخاصة بك بشبكة اختبار إيثريوم المحلية! يمكنك التحقق من أن شبكة الاختبار الخاصة بك تعمل عن طريق تشغيل:

1npx hardhat balances --network localnet

يجب أن يبدو الناتج شيئًا كهذا:

10x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000
20x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000
30xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000
40x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000
50x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000
60x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000

يؤكد هذا أن هارد هات يستخدم شبكة الاختبار المحلية الخاصة بك ويكتشف الحسابات الممولة مسبقًا التي أنشأتها eth-network-package.

نشر واختبار تطبيقك اللامركزي محليًا

مع توصيل بيئة تطوير التطبيقات اللامركزية بالكامل بشبكة اختبار إيثريوم المحلية، يمكنك الآن تشغيل مهام التطوير والاختبار على تطبيقك اللامركزي باستخدام شبكة الاختبار المحلية.

لتجميع ونشر العقد الذكي ChipToken.sol للنماذج الأولية والتطوير المحلي، قم بتشغيل:

1npx hardhat compile
2npx hardhat run scripts/deploy.ts --network localnet

يجب أن يبدو الناتج شيئًا مثل:

1تم نشر ChipToken إلى: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

الآن حاول تشغيل اختبار simple.js على تطبيقك اللامركزي المحلي للتأكد من أنه قد تم إصدار 1000 لكل لاعب في تطبيق Blackjack اللامركزي الخاص بنا:

يجب أن يبدو الناتج شيئًا كهذا:

1npx hardhat test --network localnet

يجب أن يبدو الناتج شيئًا كهذا:

1ChipToken
2 mint
3 ✔ should mint 1000 chips for PLAYER ONE
4
5 1 passing (654ms)

المراجعة

في هذه المرحلة، لقد قمت الآن بإعداد بيئة تطوير للتطبيقات اللامركزية، وربطها بشبكة إيثريوم محلية تم إنشاؤها بواسطة كورتوسيس، وقمت بتجميع تطبيقك اللامركزي ونشره وتشغيل اختبار بسيط عليه.

الآن دعنا نستكشف كيف يمكنك تكوين الشبكة الأساسية لاختبار تطبيقاتنا اللامركزية تحت تكوينات شبكة مختلفة.

تكوين شبكة اختبار إيثريوم المحلية

تغيير تكوينات العميل وعدد العقد

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

جرّب ذلك! يمكنك تمرير خيارات تكوين مختلفة إلى eth-network-package عبر ملف JSON. يوفر ملف JSON الخاص بمعلمات الشبكة هذا التكوينات المحددة التي سيستخدمها كورتوسيس لإعداد شبكة إيثريوم المحلية.

خذ ملف التكوين الافتراضي وقم بتحريره لتشغيل ثلاث عقد بأزواج EL/CL مختلفة:

  • العقدة 1 مع geth/lighthouse
  • العقدة 2 مع geth/lodestar
  • العقدة 3 مع geth/teku

ينشئ هذا التكوين شبكة غير متجانسة من تطبيقات عقدة إيثريوم لاختبار تطبيقك اللامركزي. يجب أن يبدو ملف التكوين الخاص بك الآن كما يلي:

1{
2 "participants":
3 [
4 {
5 "el_client_type": "geth",
6 "el_client_image": "",
7 "el_client_log_level": "",
8 "cl_client_type": "lighthouse",
9 "cl_client_image": "",
10 "cl_client_log_level": "",
11 "beacon_extra_params": [],
12 "el_extra_params": [],
13 "validator_extra_params": [],
14 "builder_network_params": null,
15 },
16 {
17 "el_client_type": "geth",
18 "el_client_image": "",
19 "el_client_log_level": "",
20 "cl_client_type": "lodestar",
21 "cl_client_image": "",
22 "cl_client_log_level": "",
23 "beacon_extra_params": [],
24 "el_extra_params": [],
25 "validator_extra_params": [],
26 "builder_network_params": null,
27 },
28 {
29 "el_client_type": "geth",
30 "el_client_image": "",
31 "el_client_log_level": "",
32 "cl_client_type": "teku",
33 "cl_client_image": "",
34 "cl_client_log_level": "",
35 "beacon_extra_params": [],
36 "el_extra_params": [],
37 "validator_extra_params": [],
38 "builder_network_params": null,
39 },
40 ],
41 "network_params":
42 {
43 "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete",
44 "num_validator_keys_per_node": 64,
45 "network_id": "3151908",
46 "deposit_contract_address": "0x4242424242424242424242424242424242424242",
47 "seconds_per_slot": 12,
48 "genesis_delay": 120,
49 "capella_fork_epoch": 5,
50 },
51}

تتوافق كل بنية participants مع عقدة في الشبكة، لذلك ستخبر 3 بنيات participants برنامج كورتوسيس بتشغيل 3 عقد في شبكتك. ستسمح لك كل بنية participants بتحديد زوج EL و CL المستخدم لتلك العقدة المحددة.

تقوم بنية network_params بتكوين إعدادات الشبكة التي يتم استخدامها لإنشاء ملفات التكوين الأولية لكل عقدة بالإضافة إلى إعدادات أخرى مثل الثواني لكل فترة زمنية للشبكة.

احفظ ملف المعلمات الذي تم تحريره في أي دليل تريده (في المثال أدناه، يتم حفظه على سطح المكتب) ثم استخدمه لتشغيل حزمة كورتوسيس الخاصة بك عن طريق تشغيل:

1kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)"

ملاحظة: يُستخدم الأمر kurtosis clean -a هنا لتوجيه كورتوسيس لتدمير شبكة الاختبار القديمة ومحتوياتها قبل بدء تشغيل شبكة جديدة.

مرة أخرى، سيعمل كورتوسيس قليلاً ويطبع الخطوات الفردية التي تحدث. في النهاية، يجب أن يبدو الناتج شيئًا مثل:

1Starlark code successfully run. No output was returned.
2INFO[2023-04-07T11:43:16-04:00] ==========================================================
3INFO[2023-04-07T11:43:16-04:00] || Created enclave: local-eth-testnet ||
4INFO[2023-04-07T11:43:16-04:00] ==========================================================
5Name: local-eth-testnet
6UUID: bef8c192008e
7Status: RUNNING
8Creation Time: Fri, 07 Apr 2023 11:41:58 EDT
9
10========================================= Files Artifacts =========================================
11UUID Name
12cc495a8e364a cl-genesis-data
137033fcdb5471 el-genesis-data
14a3aef43fc738 genesis-generation-config-cl
158e968005fc9d genesis-generation-config-el
163182cca9d3cd geth-prefunded-keys
178421166e234f prysm-password
18d9e6e8d44d99 validator-keystore-0
1923f5ba517394 validator-keystore-1
204d28dea40b5c validator-keystore-2
21
22========================================== User Services ==========================================
23UUID Name Ports Status
24485e6fde55ae cl-client-0-beacon http: 4000/tcp -> http://127.0.0.1:65010 RUNNING
25 metrics: 5054/tcp -> http://127.0.0.1:65011
26 tcp-discovery: 9000/tcp -> 127.0.0.1:65012
27 udp-discovery: 9000/udp -> 127.0.0.1:54455
2873739bd158b2 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:65016 RUNNING
29 metrics: 5064/tcp -> http://127.0.0.1:65017
301b0a233cd011 cl-client-1-beacon http: 4000/tcp -> 127.0.0.1:65021 RUNNING
31 metrics: 8008/tcp -> 127.0.0.1:65023
32 tcp-discovery: 9000/tcp -> 127.0.0.1:65024
33 udp-discovery: 9000/udp -> 127.0.0.1:56031
34 validator-metrics: 5064/tcp -> 127.0.0.1:65022
35949b8220cd53 cl-client-1-validator http: 4000/tcp -> 127.0.0.1:65028 RUNNING
36 metrics: 8008/tcp -> 127.0.0.1:65030
37 tcp-discovery: 9000/tcp -> 127.0.0.1:65031
38 udp-discovery: 9000/udp -> 127.0.0.1:60784
39 validator-metrics: 5064/tcp -> 127.0.0.1:65029
40c34417bea5fa cl-client-2 http: 4000/tcp -> 127.0.0.1:65037 RUNNING
41 metrics: 8008/tcp -> 127.0.0.1:65035
42 tcp-discovery: 9000/tcp -> 127.0.0.1:65036
43 udp-discovery: 9000/udp -> 127.0.0.1:63581
44e19738e6329d el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:64986 RUNNING
45 rpc: 8545/tcp -> 127.0.0.1:64988
46 tcp-discovery: 30303/tcp -> 127.0.0.1:64987
47 udp-discovery: 30303/udp -> 127.0.0.1:55706
48 ws: 8546/tcp -> 127.0.0.1:64989
49e904687449d9 el-client-1 engine-rpc: 8551/tcp -> 127.0.0.1:64993 RUNNING
50 rpc: 8545/tcp -> 127.0.0.1:64995
51 tcp-discovery: 30303/tcp -> 127.0.0.1:64994
52 udp-discovery: 30303/udp -> 127.0.0.1:58096
53 ws: 8546/tcp -> 127.0.0.1:64996
54ad6f401126fa el-client-2 engine-rpc: 8551/tcp -> 127.0.0.1:65003 RUNNING
55 rpc: 8545/tcp -> 127.0.0.1:65001
56 tcp-discovery: 30303/tcp -> 127.0.0.1:65000
57 udp-discovery: 30303/udp -> 127.0.0.1:57269
58 ws: 8546/tcp -> 127.0.0.1:65002
5912d04a9dbb69 prelaunch-data-generator-1680882122181135513 <none> STOPPED
605b45f9c0504b prelaunch-data-generator-1680882122192182847 <none> STOPPED
613d4aaa75e218 prelaunch-data-generator-1680882122201668972 <none> STOPPED

تهانينا! لقد نجحت في تكوين شبكة الاختبار المحلية الخاصة بك لتحتوي على 3 عقد بدلاً من 1. لتشغيل نفس مهام سير العمل التي قمت بها من قبل على تطبيقك اللامركزي (النشر والاختبار)، قم بتنفيذ نفس العمليات التي قمنا بها من قبل عن طريق استبدال <$YOUR_PORT> في بنية localnet في ملف التكوين hardhat.config.ts الخاص بك بمنفذ إخراج uri rpc من أي خدمة el-client-<num> في شبكة الاختبار المحلية الجديدة المكونة من 3 عقد.

الخلاصة

وهذا كل شيء! لتلخيص هذا الدليل القصير، قمت بما يلي:

  • إنشاء شبكة اختبار إيثريوم محلية عبر دوكر باستخدام كورتوسيس
  • توصيل بيئة تطوير التطبيقات اللامركزية المحلية الخاصة بك بشبكة إيثريوم المحلية
  • نشر تطبيق لامركزي وتشغيل اختبار بسيط عليه على شبكة إيثريوم المحلية
  • تكوين شبكة إيثريوم الأساسية لتحتوي على 3 عقد

يسعدنا أن نسمع منك حول ما سار على ما يرام بالنسبة لك، وما الذي يمكن تحسينه، أو للإجابة على أي من أسئلتك. لا تتردد في التواصل معنا عبر غيت هاب (opens in a new tab) أو مراسلتنا عبر البريد الإلكتروني (opens email client)!

أمثلة وأدلة أخرى

نشجعك على الاطلاع على البداية السريعة (opens in a new tab) (حيث ستقوم بإنشاء قاعدة بيانات Postgres وواجهة برمجة تطبيقات فوقها) وأمثلتنا الأخرى في مستودع awesome-kurtosis (opens in a new tab) حيث ستجد بعض الأمثلة الرائعة، بما في ذلك حزم لـ:

  • تشغيل نفس شبكة اختبار إيثريوم المحلية، ولكن مع خدمات إضافية متصلة مثل مرسل المعاملات المزعجة (لمحاكاة المعاملات)، ومراقب الانقسام، ومثيل غرافانا وPrometheus متصل
  • إجراء اختبار شبكة فرعية (opens in a new tab) على نفس شبكة إيثريوم المحلية

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

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