মূল কন্টেন্টে যান

কীভাবে একটি লোকাল, মাল্টি-ক্লায়েন্ট টেস্টনেটে একটি dapp তৈরি এবং টেস্ট করবেন

ক্লায়েন্ট
নোড
স্মার্ট কন্ট্রাক্ট
সংযোজনযোগ্যতা
কনসেনসাস লেয়ার
এক্সিকিউশন লেয়ার
টেস্টিং
মধ্যবর্তী
টেডি মিতিকু
11 এপ্রিল, 2023
11 মিনিট পড়ার সময়
পৃষ্ঠা সম্পাদনা করুন (opens in a new tab)

ভূমিকা

এই গাইডটি আপনাকে একটি কনফিগারযোগ্য লোকাল ইথেরিয়াম টেস্টনেট ইনস্ট্যানশিয়েট করার, এতে একটি স্মার্ট কন্ট্রাক্ট ডিপ্লয় করার এবং আপনার বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp)-এর বিরুদ্ধে টেস্ট চালানোর জন্য টেস্টনেটটি ব্যবহার করার প্রক্রিয়া সম্পর্কে জানাবে। এই গাইডটি সেইসব dapp ডেভেলপারদের জন্য তৈরি করা হয়েছে যারা একটি লাইভ টেস্টনেট বা মেইননেটে ডিপ্লয় করার আগে বিভিন্ন নেটওয়ার্ক কনফিগারেশনের বিপরীতে স্থানীয়ভাবে তাদের dapp তৈরি এবং টেস্ট করতে চান।

এই গাইডে, আপনি যা করবেন:

  • 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) ব্যবহার করার নির্দেশ দিয়েছে। আপনার এনক্লেভের ভিতরে, আপনি "file artifacts" এবং "user services" উভয়ই পাবেন।

আপনার এনক্লেভের File Artifacts (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-এর বিপরীতে একটি সাধারণ টেস্ট কম্পাইল, ডিপ্লয় এবং রান করেছেন।

এখন আসুন দেখি কীভাবে আপনি বিভিন্ন নেটওয়ার্ক কনফিগারেশনের অধীনে আমাদের dapp-গুলি টেস্ট করার জন্য অন্তর্নিহিত নেটওয়ার্ক কনফিগার করতে পারেন।

লোকাল ইথেরিয়াম টেস্টনেট কনফিগার করা

ক্লায়েন্ট কনফিগারেশন এবং নোডের সংখ্যা পরিবর্তন করা

আপনি যে দৃশ্যপট এবং নির্দিষ্ট নেটওয়ার্ক কনফিগারেশন ডেভেলপ বা টেস্ট করতে চান তার উপর নির্ভর করে আপনার লোকাল ইথেরিয়াম টেস্টনেটকে বিভিন্ন 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-কে নির্দেশ দিতে এখানে kurtosis clean -a কমান্ডটি ব্যবহার করা হয়েছে।

আবার, 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) আমাদের অন্যান্য উদাহরণগুলি দেখার জন্য উৎসাহিত করছি যেখানে আপনি কিছু দুর্দান্ত উদাহরণ পাবেন, যার মধ্যে প্যাকেজগুলি অন্তর্ভুক্ত রয়েছে:

পেজ সর্বশেষ আপডেট করা হয়েছে: 3 মার্চ, 2026