मुख्य सामग्री पर जाएं

स्थानीय, मल्टी-क्लाइंट टेस्टनेट पर विकेंद्रीकृत एप्लिकेशन (dapp) कैसे विकसित और परीक्षण करें

क्लाइंट्स
नोड्स
स्मार्ट अनुबंध
संयोज्यता
सर्वसम्मति परत
निष्पादन परत
परीक्षण
मध्यवर्ती
टेडी मितिकु
11 अप्रैल 2023
13 मिनट पढ़ें

परिचय

यह मार्गदर्शिका आपको एक कॉन्फ़िगर करने योग्य स्थानीय इथेरियम टेस्टनेट को इंस्टेंटिएट करने, उस पर एक स्मार्ट अनुबंध तैनात करने, और अपने विकेंद्रीकृत एप्लिकेशन (dapp) के विरुद्ध परीक्षण चलाने के लिए टेस्टनेट का उपयोग करने की प्रक्रिया के बारे में बताती है। यह मार्गदर्शिका उन dapp डेवलपर्स के लिए डिज़ाइन की गई है जो लाइव टेस्टनेट या मेननेट पर तैनात करने से पहले विभिन्न नेटवर्क कॉन्फ़िगरेशन के विरुद्ध स्थानीय रूप से अपने dapps को विकसित और परीक्षण करना चाहते हैं।

इस मार्गदर्शिका में, आप:

  • Kurtosis (opens in a new tab) का उपयोग करके eth-network-package (opens in a new tab) के साथ एक स्थानीय इथेरियम टेस्टनेट को इंस्टेंटिएट करेंगे,
  • एक dapp को संकलित करने, तैनात करने और परीक्षण करने के लिए अपने Hardhat dapp विकास वातावरण को स्थानीय टेस्टनेट से जोड़ेंगे, और
  • विभिन्न नेटवर्क कॉन्फ़िगरेशन के विरुद्ध विकास और परीक्षण वर्कफ़्लो को सक्षम करने के लिए, नोड्स की संख्या और विशिष्ट EL/CL क्लाइंट पेयरिंग जैसे मापदंडों सहित स्थानीय टेस्टनेट को कॉन्फ़िगर करेंगे।

Kurtosis क्या है?

Kurtosis (opens in a new tab) एक संयोज्य बिल्ड सिस्टम है जिसे मल्टी-कंटेनर परीक्षण वातावरण को कॉन्फ़िगर करने के लिए डिज़ाइन किया गया है। यह विशेष रूप से डेवलपर्स को ऐसे प्रतिलिपि प्रस्तुत करने योग्य वातावरण बनाने में सक्षम बनाता है जिनके लिए गतिशील सेटअप लॉजिक की आवश्यकता होती है, जैसे कि ब्लॉकचेन टेस्टनेट।

इस मार्गदर्शिका में, Kurtosis eth-network-package geth (opens in a new tab) निष्पादन परत (EL) क्लाइंट, साथ ही teku (opens in a new tab), lighthouse (opens in a new tab), और lodestar (opens in a new tab) सर्वसम्मति परत (CL) क्लाइंट्स के समर्थन के साथ एक स्थानीय इथेरियम टेस्टनेट शुरू करता है। यह पैकेज Hardhat Network, Ganache, और Anvil जैसे फ्रेमवर्क में नेटवर्क के लिए एक कॉन्फ़िगर करने योग्य और संयोज्य विकल्प के रूप में कार्य करता है। Kurtosis डेवलपर्स को उनके द्वारा उपयोग किए जाने वाले टेस्टनेट पर अधिक नियंत्रण और लचीलापन प्रदान करता है, जो एक प्रमुख कारण है कि एथेरियम फाउंडेशन ने द मर्ज का परीक्षण करने के लिए Kurtosis का उपयोग किया (opens in a new tab) और नेटवर्क अपग्रेड के परीक्षण के लिए इसका उपयोग करना जारी रखा है।

Kurtosis सेट अप करना

आगे बढ़ने से पहले, सुनिश्चित करें कि आपके पास:

एक स्थानीय इथेरियम टेस्टनेट को इंस्टेंटिएट करना

एक स्थानीय इथेरियम टेस्टनेट शुरू करने के लिए, चलाएं:

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

नोट: यह कमांड --enclave फ़्लैग का उपयोग करके आपके नेटवर्क को नाम देता है: "local-eth-testnet”।

Kurtosis निर्देशों की व्याख्या करने, मान्य करने और फिर निष्पादित करने के लिए काम करते समय आंतरिक रूप से उठाए जा रहे कदमों को प्रिंट करेगा। अंत में, आपको एक आउटपुट दिखाई देना चाहिए जो निम्नलिखित जैसा दिखता है:

बधाई हो! आपने Docker पर CL (lighthouse) और EL क्लाइंट (geth) के साथ एक स्थानीय इथेरियम टेस्टनेट को इंस्टेंटिएट करने के लिए Kurtosis का उपयोग किया।

समीक्षा

इस अनुभाग में, आपने एक कमांड निष्पादित किया जिसने Kurtosis को Kurtosis Enclave (opens in a new tab) के भीतर एक स्थानीय इथेरियम टेस्टनेट शुरू करने के लिए GitHub पर दूरस्थ रूप से होस्ट किए गए eth-network-package (opens in a new tab) का उपयोग करने का निर्देश दिया। आपके एन्क्लेव के अंदर, आपको "फ़ाइल आर्टिफैक्ट्स" और "उपयोगकर्ता सेवाएँ" दोनों मिलेंगे।

आपके एन्क्लेव में फ़ाइल आर्टिफैक्ट्स (opens in a new tab) में EL और CL क्लाइंट्स को बूटस्ट्रैप करने के लिए उत्पन्न और उपयोग किया गया सभी डेटा शामिल है। डेटा इस Docker छवि (opens in a new tab) से निर्मित prelaunch-data-generator सेवा का उपयोग करके बनाया गया था।

उपयोगकर्ता सेवाएँ आपके एन्क्लेव में काम कर रही सभी कंटेनरीकृत सेवाओं को प्रदर्शित करती हैं। आप देखेंगे कि एक एकल नोड बनाया गया है, जिसमें EL क्लाइंट और CL क्लाइंट दोनों शामिल हैं।

अपने dapp विकास वातावरण को स्थानीय इथेरियम टेस्टनेट से कनेक्ट करें

dapp विकास वातावरण सेट अप करें

अब जब आपके पास एक चालू स्थानीय टेस्टनेट है, तो आप अपने स्थानीय टेस्टनेट का उपयोग करने के लिए अपने dapp विकास वातावरण को कनेक्ट कर सकते हैं। इस मार्गदर्शिका में आपके स्थानीय टेस्टनेट पर एक ब्लैकजैक dapp तैनात करने के लिए Hardhat फ्रेमवर्क का उपयोग किया जाएगा।

अपना dapp विकास वातावरण सेट अप करने के लिए, उस रिपॉजिटरी को क्लोन करें जिसमें हमारा नमूना dapp है और इसकी निर्भरताएँ स्थापित करें, चलाएं:

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

यहाँ उपयोग किए गए smart-contract-example (opens in a new tab) फ़ोल्डर में Hardhat (opens in a new tab) फ्रेमवर्क का उपयोग करने वाले dapp डेवलपर के लिए विशिष्ट सेटअप शामिल है:

  • contracts/ (opens in a new tab) में ब्लैकजैक dapp के लिए कुछ सरल स्मार्ट अनुबंध शामिल हैं
  • scripts/ (opens in a new tab) में आपके स्थानीय इथेरियम नेटवर्क पर एक टोकन अनुबंध तैनात करने के लिए एक स्क्रिप्ट शामिल है
  • test/ (opens in a new tab) में आपके टोकन अनुबंध के लिए एक सरल .js परीक्षण शामिल है ताकि यह पुष्टि की जा सके कि हमारे ब्लैकजैक dapp में प्रत्येक खिलाड़ी के लिए 1000 मिंट किए गए हैं
  • hardhat.config.ts (opens in a new tab) आपके Hardhat सेटअप को कॉन्फ़िगर करता है

स्थानीय टेस्टनेट का उपयोग करने के लिए Hardhat को कॉन्फ़िगर करें

अपना dapp विकास वातावरण सेट अप करने के साथ, अब आप Kurtosis का उपयोग करके उत्पन्न स्थानीय इथेरियम टेस्टनेट का उपयोग करने के लिए Hardhat को कनेक्ट करेंगे। इसे पूरा करने के लिए, अपनी hardhat.config.ts कॉन्फ़िगरेशन फ़ाइल में localnet संरचना में <$YOUR_PORT> को किसी भी el-client-<num> सेवा से rpc uri आउटपुट के पोर्ट से बदलें। इस नमूना मामले में, पोर्ट 64248 होगा। आपका पोर्ट अलग होगा।

hardhat.config.ts में उदाहरण:

एक बार जब आप अपनी फ़ाइल सहेज लेते हैं, तो आपका Hardhat dapp विकास वातावरण अब आपके स्थानीय इथेरियम टेस्टनेट से जुड़ जाता है! आप यह सत्यापित कर सकते हैं कि आपका टेस्टनेट काम कर रहा है, इसे चलाकर:

npx hardhat balances --network localnet

आउटपुट कुछ इस तरह दिखना चाहिए:

0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000
0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000
0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000
0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000
0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000
0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000

यह पुष्टि करता है कि Hardhat आपके स्थानीय टेस्टनेट का उपयोग कर रहा है और eth-network-package द्वारा बनाए गए पूर्व-वित्त पोषित खातों का पता लगाता है।

अपने dapp को स्थानीय रूप से तैनात और परीक्षण करें

dapp विकास वातावरण पूरी तरह से स्थानीय इथेरियम टेस्टनेट से जुड़े होने के साथ, अब आप स्थानीय टेस्टनेट का उपयोग करके अपने dapp के विरुद्ध विकास और परीक्षण वर्कफ़्लो चला सकते हैं।

स्थानीय प्रोटोटाइपिंग और विकास के लिए ChipToken.sol स्मार्ट अनुबंध को संकलित और तैनात करने के लिए, चलाएं:

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

आउटपुट कुछ इस तरह दिखना चाहिए:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

अब यह पुष्टि करने के लिए कि हमारे ब्लैकजैक dapp में प्रत्येक खिलाड़ी के लिए 1000 मिंट किए गए हैं, अपने स्थानीय dapp के विरुद्ध simple.js परीक्षण चलाने का प्रयास करें:

आउटपुट कुछ इस तरह दिखना चाहिए:

npx hardhat test --network localnet

आउटपुट कुछ इस तरह दिखना चाहिए:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

समीक्षा

इस बिंदु पर, आपने अब एक dapp विकास वातावरण सेट अप कर लिया है, इसे Kurtosis द्वारा बनाए गए एक स्थानीय इथेरियम नेटवर्क से जोड़ दिया है, और अपने dapp के विरुद्ध एक सरल परीक्षण संकलित, तैनात और चलाया है।

अब आइए जानें कि आप विभिन्न नेटवर्क कॉन्फ़िगरेशन के तहत हमारे dapps के परीक्षण के लिए अंतर्निहित नेटवर्क को कैसे कॉन्फ़िगर कर सकते हैं।

स्थानीय इथेरियम टेस्टनेट को कॉन्फ़िगर करना

क्लाइंट कॉन्फ़िगरेशन और नोड्स की संख्या बदलना

आपके स्थानीय इथेरियम टेस्टनेट को उस परिदृश्य और विशिष्ट नेटवर्क कॉन्फ़िगरेशन के आधार पर जिसे आप विकसित या परीक्षण करना चाहते हैं, विभिन्न EL और CL क्लाइंट पेयरिंग, साथ ही अलग-अलग संख्या में नोड्स का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। इसका मतलब यह है कि, एक बार सेट अप हो जाने के बाद, आप एक अनुकूलित स्थानीय टेस्टनेट शुरू कर सकते हैं और यह सुनिश्चित करने के लिए कि सब कुछ अपेक्षित रूप से काम करता है, विभिन्न नेटवर्क कॉन्फ़िगरेशन के तहत समान वर्कफ़्लो (तैनाती, परीक्षण, आदि) चलाने के लिए इसका उपयोग कर सकते हैं। अन्य मापदंडों के बारे में अधिक जानने के लिए जिन्हें आप संशोधित कर सकते हैं, इस लिंक पर जाएँ।

इसे आज़माएं! आप JSON फ़ाइल के माध्यम से eth-network-package को विभिन्न कॉन्फ़िगरेशन विकल्प पास कर सकते हैं। यह नेटवर्क पैरामीटर JSON फ़ाइल विशिष्ट कॉन्फ़िगरेशन प्रदान करती है जिसका उपयोग Kurtosis स्थानीय इथेरियम नेटवर्क सेट अप करने के लिए करेगा।

डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल लें और विभिन्न EL/CL पेयरिंग के साथ दो नोड्स शुरू करने के लिए इसे संपादित करें:

  • geth/lighthouse के साथ नोड 1
  • geth/lodestar के साथ नोड 2
  • geth/teku के साथ नोड 3

यह कॉन्फ़िगरेशन आपके dapp के परीक्षण के लिए इथेरियम नोड कार्यान्वयन का एक विषम नेटवर्क बनाता है। आपकी कॉन्फ़िगरेशन फ़ाइल अब इस तरह दिखनी चाहिए:

प्रत्येक participants संरचना नेटवर्क में एक नोड को मैप करती है, इसलिए 3 participants संरचनाएं Kurtosis को आपके नेटवर्क में 3 नोड्स शुरू करने के लिए कहेंगी। प्रत्येक participants संरचना आपको उस विशिष्ट नोड के लिए उपयोग किए जाने वाले EL और CL पेयरिंग को निर्दिष्ट करने की अनुमति देगी।

network_params संरचना उन नेटवर्क सेटिंग्स को कॉन्फ़िगर करती है जिनका उपयोग प्रत्येक नोड के लिए जेनेसिस फ़ाइलें बनाने के साथ-साथ नेटवर्क के प्रति स्लॉट सेकंड जैसी अन्य सेटिंग्स के लिए किया जाता है।

अपनी संपादित पैरामीटर फ़ाइल को अपनी इच्छानुसार किसी भी निर्देशिका में सहेजें (नीचे दिए गए उदाहरण में, इसे डेस्कटॉप पर सहेजा गया है) और फिर इसे चलाकर अपने Kurtosis पैकेज को चलाने के लिए इसका उपयोग करें:

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

नोट: kurtosis clean -a कमांड का उपयोग यहाँ Kurtosis को एक नया टेस्टनेट शुरू करने से पहले पुराने टेस्टनेट और उसकी सामग्री को नष्ट करने का निर्देश देने के लिए किया जाता है।

फिर से, Kurtosis थोड़ी देर के लिए काम करेगा और हो रहे व्यक्तिगत चरणों को प्रिंट करेगा। अंततः, आउटपुट कुछ इस तरह दिखना चाहिए:

बधाई हो! आपने अपने स्थानीय टेस्टनेट को 1 के बजाय 3 नोड्स रखने के लिए सफलतापूर्वक कॉन्फ़िगर किया है। अपने dapp (तैनाती और परीक्षण) के विरुद्ध पहले किए गए समान वर्कफ़्लो को चलाने के लिए, अपने नए, 3-नोड स्थानीय टेस्टनेट में किसी भी el-client-<num> सेवा से rpc uri आउटपुट के पोर्ट के साथ अपनी hardhat.config.ts कॉन्फ़िगरेशन फ़ाइल में localnet संरचना में <$YOUR_PORT> को बदलकर वही संचालन करें जो हमने पहले किया था।

निष्कर्ष

और बस इतना ही! इस संक्षिप्त मार्गदर्शिका को संक्षेप में बताने के लिए, आपने:

  • Kurtosis का उपयोग करके Docker पर एक स्थानीय इथेरियम टेस्टनेट बनाया
  • अपने स्थानीय dapp विकास वातावरण को स्थानीय इथेरियम नेटवर्क से जोड़ा
  • एक dapp तैनात किया और स्थानीय इथेरियम नेटवर्क पर इसके विरुद्ध एक सरल परीक्षण चलाया
  • अंतर्निहित इथेरियम नेटवर्क को 3 नोड्स रखने के लिए कॉन्फ़िगर किया

हम आपसे यह सुनना पसंद करेंगे कि आपके लिए क्या अच्छा रहा, क्या सुधारा जा सकता है, या आपके किसी भी प्रश्न का उत्तर देना चाहेंगे। GitHub (opens in a new tab) के माध्यम से संपर्क करने या हमें ईमेल करने (opens email client) में संकोच न करें!

अन्य उदाहरण और मार्गदर्शिकाएँ

हम आपको हमारे क्विकस्टार्ट (opens in a new tab) (जहाँ आप शीर्ष पर एक Postgres डेटाबेस और API बनाएंगे) और हमारे awesome-kurtosis रिपॉजिटरी (opens in a new tab) में हमारे अन्य उदाहरणों को देखने के लिए प्रोत्साहित करते हैं जहाँ आपको कुछ बेहतरीन उदाहरण मिलेंगे, जिनमें इनके लिए पैकेज शामिल हैं: