নতুনদের জন্য হ্যালো ওয়ার্ল্ড স্মার্ট কন্ট্রাক্ট
আপনি যদি ব্লকচেইন ডেভেলপমেন্টে নতুন হয়ে থাকেন এবং কোথা থেকে শুরু করবেন তা না জানেন, অথবা আপনি যদি শুধু বুঝতে চান কীভাবে স্মার্ট কন্ট্রাক্ট ডিপ্লয় করতে হয় এবং এর সাথে ইন্টারঅ্যাক্ট করতে হয়, তবে এই গাইডটি আপনার জন্য। আমরা একটি ভার্চুয়াল ওয়ালেট মেটামাস্ক (নতুন ট্যাবে খোলে), Solidity (নতুন ট্যাবে খোলে), Hardhat (নতুন ট্যাবে খোলে), এবং Alchemy (নতুন ট্যাবে খোলে) ব্যবহার করে Sepolia টেস্ট নেটওয়ার্কে একটি সাধারণ স্মার্ট কন্ট্রাক্ট তৈরি এবং ডিপ্লয় করার প্রক্রিয়াটি ধাপে ধাপে দেখব (আপনি যদি এখনও এগুলোর কোনোটির অর্থ না বোঝেন তবে চিন্তা করবেন না, আমরা এটি ব্যাখ্যা করব)।
একবার আপনার কন্ট্রাক্ট ডিপ্লয় হয়ে গেলে, আপনি এর জন্য একটি ইউজার ইন্টারফেস তৈরি করতে পারেন।
যেকোনো পর্যায়ে আপনার যদি কোনো প্রশ্ন থাকে, তবে নির্দ্বিধায় Alchemy ডিসকর্ড (নতুন ট্যাবে খোলে)-এ যোগাযোগ করুন!
ধাপ 1: ইথেরিয়াম নেটওয়ার্কের সাথে কানেক্ট করুন
ইথেরিয়াম চেইনে রিকোয়েস্ট করার অনেক উপায় আছে। সহজে বোঝার জন্য, আমরা Alchemy-তে একটি বিনামূল্যের অ্যাকাউন্ট ব্যবহার করব, যা একটি ব্লকচেইন ডেভেলপার প্ল্যাটফর্ম এবং API, এটি আমাদের নিজস্ব নোড না চালিয়েই ইথেরিয়াম চেইনের সাথে যোগাযোগ করতে দেয়। প্ল্যাটফর্মটিতে মনিটরিং এবং অ্যানালিটিক্সের জন্য ডেভেলপার টুলও রয়েছে, যা আমরা এই টিউটোরিয়ালে ব্যবহার করে বুঝব যে আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয়মেন্টের ভেতরে আসলে কী ঘটছে। আপনার যদি আগে থেকেই কোনো Alchemy অ্যাকাউন্ট না থাকে, তবে আপনি এখানে বিনামূল্যে সাইন আপ করতে পারেন (নতুন ট্যাবে খোলে)।
ধাপ 2: আপনার অ্যাপ (এবং API কী) তৈরি করুন
একবার আপনি একটি Alchemy অ্যাকাউন্ট তৈরি করলে, আপনি একটি অ্যাপ তৈরি করে একটি API কী জেনারেট করতে পারেন। এটি আমাদের Sepolia টেস্ট নেটওয়ার্কে রিকোয়েস্ট করার অনুমতি দেবে। আপনি যদি টেস্টনেট সম্পর্কে পরিচিত না হন, তবে এই পেজটি দেখুন।
- ন্যাভ বারে "Select an app" নির্বাচন করে এবং "Create new app"-এ ক্লিক করে আপনার Alchemy ড্যাশবোর্ডের "Create new app" পেজে যান
- আপনার অ্যাপের নাম দিন “Hello World”, একটি সংক্ষিপ্ত বিবরণ দিন এবং একটি ইউজ কেস বেছে নিন, যেমন, "Infra & Tooling"। এরপর, "Ethereum" সার্চ করুন এবং নেটওয়ার্ক নির্বাচন করুন।
- এগিয়ে যেতে "Next"-এ ক্লিক করুন, তারপর “Create app” এবং কাজ শেষ! আপনার অ্যাপটি ন্যাভ বারের ড্রপডাউন মেনুতে দেখা যাবে, যেখান থেকে একটি API কী কপি করা যাবে।
ধাপ 3: একটি ইথেরিয়াম অ্যাকাউন্ট (ঠিকানা) তৈরি করুন
ট্রানজ্যাকশন পাঠানো এবং গ্রহণ করার জন্য আমাদের একটি ইথেরিয়াম অ্যাকাউন্ট প্রয়োজন। এই টিউটোরিয়ালের জন্য, আমরা মেটামাস্ক ব্যবহার করব, যা ব্রাউজারে থাকা একটি ভার্চুয়াল ওয়ালেট এবং এটি আপনার ইথেরিয়াম অ্যাকাউন্ট ঠিকানা পরিচালনা করতে ব্যবহৃত হয়। ট্রানজ্যাকশন সম্পর্কে আরও জানুন।
আপনি মেটামাস্ক ডাউনলোড করতে পারেন এবং বিনামূল্যে একটি ইথেরিয়াম অ্যাকাউন্ট তৈরি করতে পারেন এখানে (নতুন ট্যাবে খোলে)। যখন আপনি একটি অ্যাকাউন্ট তৈরি করছেন, অথবা আপনার যদি আগে থেকেই একটি অ্যাকাউন্ট থাকে, তবে নেটওয়ার্ক ড্রপডাউন মেনু ব্যবহার করে "Sepolia" টেস্ট নেটওয়ার্কে স্যুইচ করতে ভুলবেন না (যাতে আমরা আসল টাকা নিয়ে কাজ না করি)।
আপনি যদি তালিকায় Sepolia দেখতে না পান, তবে উপরের ডানদিকের কোণায় মেনুটি খুলুন, "Networks" নির্বাচন করুন এবং নেটওয়ার্ক তালিকার নিচে "Show test networks" টগল অন করুন (টেস্টনেট দেখার জন্য মেটামাস্কের গাইড (নতুন ট্যাবে খোলে) দেখুন)। তারপর নেটওয়ার্ক নির্বাচন মেনুতে "Sepolia" নির্বাচন করুন।
ধাপ 4: একটি ফসেট থেকে ইথার যোগ করুন
টেস্ট নেটওয়ার্কে আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয় করার জন্য, আমাদের কিছু নকল ETH প্রয়োজন হবে। Sepolia ETH পেতে আপনি বিভিন্ন ফসেটের তালিকা দেখতে Sepolia নেটওয়ার্কের বিবরণ-এ যেতে পারেন। যদি একটি কাজ না করে, তবে অন্যটি চেষ্টা করুন কারণ সেগুলো মাঝে মাঝে খালি হয়ে যেতে পারে। কিছু ফসেটের যোগ্যতার নিয়ম রয়েছে; উদাহরণস্বরূপ, Alchemy-এর Sepolia ফসেটের জন্য গ্রহণকারী ঠিকানায় ইথেরিয়াম মেইননেটে কমপক্ষে 0.001 ETH থাকতে হয়। নেটওয়ার্ক ট্রাফিকের কারণে আপনার নকল ETH পেতে কিছুটা সময় লাগতে পারে। এর কিছুক্ষণ পরেই আপনার মেটামাস্ক অ্যাকাউন্টে ETH দেখতে পাবেন!
ধাপ 5: আপনার ব্যালেন্স চেক করুন
আমাদের ব্যালেন্স সেখানে আছে কিনা তা নিশ্চিত করতে, চলুন Alchemy-এর কম্পোজার টুল (নতুন ট্যাবে খোলে) ব্যবহার করে একটি eth_getBalance রিকোয়েস্ট করি। এটি আমাদের ওয়ালেটে থাকা 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 ইনস্টলেশনের নির্দেশিকা (নতুন ট্যাবে খোলে) অনুসরণ করুন (এই টিউটোরিয়ালের জন্য আমাদের Node.js এবং npm প্রয়োজন হবে)।
npm init
ইনস্টলেশনের প্রশ্নগুলোর উত্তর আপনি কীভাবে দেবেন তা খুব একটা গুরুত্বপূর্ণ নয়, রেফারেন্সের জন্য আমরা কীভাবে এটি করেছি তা নিচে দেওয়া হলো:
package name: (hello-world)
version: (1.0.0)
description: hello world smart contract
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/.../.../.../hello-world/package.json:
{
"name": "hello-world",
"version": "1.0.0",
"description": "hello world smart contract",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
package.json অনুমোদন করুন। Hardhat 3, যা আমরা পরবর্তীতে ইনস্টল করব, শুধুমাত্র ES মডিউল প্রজেক্ট সমর্থন করে, তাই প্রজেক্টটিকে সেভাবে চিহ্নিত করুন:
npm pkg set type=module
এবং আমরা কাজ শুরু করার জন্য প্রস্তুত!
ধাপ 7: Hardhat (নতুন ট্যাবে খোলে) ডাউনলোড করুন
Hardhat হলো আপনার ইথেরিয়াম সফটওয়্যার কম্পাইল, ডিপ্লয়, টেস্ট এবং ডিবাগ করার জন্য একটি ডেভেলপমেন্ট এনভায়রনমেন্ট। এটি ডেভেলপারদের লাইভ চেইনে ডিপ্লয় করার আগে স্থানীয়ভাবে স্মার্ট কন্ট্রাক্ট এবং বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp) তৈরি করতে সাহায্য করে।
Hardhat 3-এর জন্য Node.js v22.13.0 বা তার পরের সংস্করণ প্রয়োজন। আমাদের hello-world প্রজেক্টের ভেতরে রান করুন:
npm install --save-dev hardhat
ইনস্টলেশনের নির্দেশিকা (নতুন ট্যাবে খোলে) সম্পর্কে আরও বিস্তারিত জানতে এই পেজটি দেখুন।
ধাপ 8: Hardhat প্রজেক্ট তৈরি করুন
npx hardhat --init রান করলে একটি সম্পূর্ণ নমুনা প্রজেক্ট তৈরি হবে, কিন্তু এই টিউটোরিয়ালের জন্য আমরা সবকিছু হাতে-কলমে সেট আপ করব যাতে আপনি প্রতিটি অংশ দেখতে পারেন। আপনার প্রজেক্ট ফোল্ডারের রুটে, নিচের বিষয়বস্তু দিয়ে hardhat.config.js নামের একটি ফাইল তৈরি করুন:
import { defineConfig } from "hardhat/config"
export default defineConfig({
solidity: "0.8.34",
})
এখানেই আমরা আমাদের প্রজেক্টের জন্য সমস্ত সেট আপ নির্দিষ্ট করব (ধাপ 13-এ)। আপাতত, এটি শুধু Hardhat-কে বলে দেয় যে Solidity কম্পাইলারের কোন সংস্করণটি ব্যবহার করতে হবে।
ধাপ 9: প্রজেক্ট ফোল্ডার যোগ করুন
আমাদের প্রজেক্টটি গুছিয়ে রাখতে আমরা দুটি নতুন ফোল্ডার তৈরি করব। আপনার কমান্ড লাইনে প্রজেক্টের রুট ডিরেক্টরিতে যান এবং টাইপ করুন:
mkdir contracts
mkdir scripts
contracts/হলো সেই জায়গা যেখানে আমরা আমাদের হ্যালো ওয়ার্ল্ড স্মার্ট কন্ট্রাক্ট কোড ফাইলটি রাখবscripts/হলো সেই জায়গা যেখানে আমরা আমাদের কন্ট্রাক্ট ডিপ্লয় এবং এর সাথে ইন্টারঅ্যাক্ট করার স্ক্রিপ্টগুলো রাখব
ধাপ 10: আমাদের কন্ট্রাক্ট লিখুন
আপনি হয়তো নিজেকে জিজ্ঞাসা করছেন, আমরা কখন কোড লিখতে যাচ্ছি?? ঠিক আছে, আমরা ধাপ 10-এ চলে এসেছি।
আপনার পছন্দের এডিটরে hello-world প্রজেক্টটি খুলুন (আমাদের পছন্দ VSCode (নতুন ট্যাবে খোলে))। স্মার্ট কন্ট্রাক্টগুলো Solidity নামক একটি ভাষায় লেখা হয়, যা আমরা আমাদের HelloWorld.sol স্মার্ট কন্ট্রাক্ট লিখতে ব্যবহার করব।
- “contracts” ফোল্ডারে যান এবং HelloWorld.sol নামের একটি নতুন ফাইল তৈরি করুন
- নিচে ইথেরিয়াম ফাউন্ডেশন থেকে একটি নমুনা Hello World স্মার্ট কন্ট্রাক্ট দেওয়া হলো যা আমরা এই টিউটোরিয়ালের জন্য ব্যবহার করব। নিচের বিষয়বস্তুগুলো কপি করে আপনার HelloWorld.sol ফাইলে পেস্ট করুন এবং এই কন্ট্রাক্টটি কী করে তা বুঝতে মন্তব্যগুলো (comments) পড়তে ভুলবেন না:
// SPDX-License-Identifier: MIT
// সিমেন্টিক ভার্সনিং ব্যবহার করে Solidity-এর ভার্সন নির্দিষ্ট করে।
// আরও জানুন: https://docs.soliditylang.org/en/latest/layout-of-source-files.html#pragma
pragma solidity ^0.8.24;
// `HelloWorld` নামের একটি কন্ট্রাক্ট সংজ্ঞায়িত করে।
// একটি কন্ট্রাক্ট হলো ফাংশন এবং ডেটার (এর স্টেট) একটি সংগ্রহ। একবার ডিপ্লয় করা হলে, একটি কন্ট্রাক্ট ইথেরিয়াম ব্লকচেইন-এর একটি নির্দিষ্ট ঠিকানায় অবস্থান করে। আরও জানুন: https://docs.soliditylang.org/en/latest/structure-of-a-contract.html
contract HelloWorld {
// `string` টাইপের একটি স্টেট ভেরিয়েবল `message` ঘোষণা করে।
// স্টেট ভেরিয়েবল হলো সেই ভেরিয়েবল যার মান স্থায়ীভাবে কন্ট্রাক্ট স্টোরেজে সংরক্ষিত থাকে। `public` কিওয়ার্ডটি ভেরিয়েবলগুলোকে একটি কন্ট্রাক্ট-এর বাইরে থেকে অ্যাক্সেসযোগ্য করে তোলে এবং এমন একটি ফাংশন তৈরি করে যা অন্যান্য কন্ট্রাক্ট বা ক্লায়েন্টরা মানটি অ্যাক্সেস করতে কল করতে পারে।
string public message;
// অনেক ক্লাস-ভিত্তিক অবজেক্ট-ওরিয়েন্টেড ভাষার মতো, কনস্ট্রাক্টর হলো একটি বিশেষ ফাংশন যা শুধুমাত্র কন্ট্রাক্ট তৈরির সময় এক্সিকিউট হয়।
// কন্ট্রাক্ট-এর ডেটা ইনিশিয়ালাইজ করতে কনস্ট্রাক্টর ব্যবহার করা হয়। আরও জানুন: https://docs.soliditylang.org/en/latest/contracts.html#constructors
constructor(string memory initMessage) {
// একটি স্ট্রিং আর্গুমেন্ট `initMessage` গ্রহণ করে এবং মানটিকে কন্ট্রাক্ট-এর `message` স্টোরেজ ভেরিয়েবলে সেট করে)।
message = initMessage;
}
// একটি পাবলিক ফাংশন যা একটি স্ট্রিং আর্গুমেন্ট গ্রহণ করে এবং `message` স্টোরেজ ভেরিয়েবল আপডেট করে।
function update(string memory newMessage) public {
message = newMessage;
}
}
এটি একটি অত্যন্ত সাধারণ স্মার্ট কন্ট্রাক্ট যা তৈরি করার সময় একটি বার্তা সংরক্ষণ করে এবং update ফাংশন কল করে আপডেট করা যায়।
ধাপ 11: আপনার প্রজেক্টের সাথে মেটামাস্ক এবং Alchemy কানেক্ট করুন
আমরা একটি মেটামাস্ক ওয়ালেট, Alchemy অ্যাকাউন্ট তৈরি করেছি এবং আমাদের স্মার্ট কন্ট্রাক্ট লিখেছি, এখন এই তিনটিকে কানেক্ট করার সময়।
আপনার ভার্চুয়াল ওয়ালেট থেকে পাঠানো প্রতিটি ট্রানজ্যাকশনের জন্য আপনার অনন্য প্রাইভেট কী ব্যবহার করে একটি স্বাক্ষর প্রয়োজন। আমাদের প্রোগ্রামকে এই অনুমতি দেওয়ার জন্য, আমরা নিরাপদে আমাদের প্রাইভেট কী (এবং Alchemy API কী) একটি এনভায়রনমেন্ট ফাইলে সংরক্ষণ করতে পারি।
ট্রানজ্যাকশন পাঠানো সম্পর্কে আরও জানতে, ট্রানজ্যাকশন ডকুমেন্টেশন দেখুন।
আমাদের প্রজেক্টের রুট ডিরেক্টরিতে একটি .env ফাইল তৈরি করুন এবং এতে আপনার মেটামাস্ক প্রাইভেট কী এবং HTTP Alchemy API URL যোগ করুন।
- আপনার প্রাইভেট কী এক্সপোর্ট করতে এই নির্দেশিকাগুলো (নতুন ট্যাবে খোলে) অনুসরণ করুন
- HTTP Alchemy API URL পেতে নিচে দেখুন
Alchemy API URL কপি করুন
আপনার .env ফাইলটি দেখতে এইরকম হওয়া উচিত:
API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY="your-metamask-private-key"
এগুলোকে আমাদের কোডের সাথে কানেক্ট করতে, আমরা ধাপ 13-এ আমাদের hardhat.config.js ফাইলে এই ভেরিয়েবলগুলোর রেফারেন্স দেব। Node.js নিজে থেকেই .env ফাইল পড়তে পারে, তাই অতিরিক্ত কোনো প্যাকেজ ইনস্টল করার প্রয়োজন নেই।
.env কমিট করবেন না! অনুগ্রহ করে নিশ্চিত করুন যে আপনি কখনই আপনার .env ফাইলটি কারও সাথে শেয়ার বা প্রকাশ করবেন না, কারণ এমনটি করলে আপনি আপনার গোপনীয়তার সাথে আপস করছেন। আপনি যদি ভার্সন কন্ট্রোল ব্যবহার করেন, তবে আপনার .env ফাইলটি একটি gitignore ফাইলে যোগ করুন।ধাপ 12: Ethers.js ইনস্টল করুন
Ethers.js হলো এমন একটি লাইব্রেরি যা স্ট্যান্ডার্ড জেসন-আরপিসি মেথডগুলোকে আরও ব্যবহারকারী-বান্ধব মেথড দিয়ে র্যাপ করে ইথেরিয়ামের সাথে ইন্টারঅ্যাক্ট করা এবং রিকোয়েস্ট করা সহজ করে তোলে।
Hardhat অতিরিক্ত টুলিং এবং বর্ধিত কার্যকারিতার জন্য প্লাগইনগুলো (নতুন ট্যাবে খোলে) ইন্টিগ্রেট করা খুব সহজ করে তোলে। আমরা কন্ট্রাক্ট ডিপ্লয়মেন্টের জন্য Ethers প্লাগইন (নতুন ট্যাবে খোলে)-এর সুবিধা নেব (Ethers.js (নতুন ট্যাবে খোলে)-এ কিছু খুব পরিষ্কার কন্ট্রাক্ট ডিপ্লয়মেন্ট মেথড রয়েছে)।
আপনার প্রজেক্ট ডিরেক্টরিতে টাইপ করুন:
npm install --save-dev @nomicfoundation/hardhat-ethers ethers
আমরা পরবর্তী ধাপে আমাদের hardhat.config.js-এ প্লাগইনটিও যোগ করব।
ধাপ 13: hardhat.config.js আপডেট করুন
আমরা এ পর্যন্ত বেশ কয়েকটি ডিপেন্ডেন্সি এবং প্লাগইন যোগ করেছি, এখন আমাদের hardhat.config.js আপডেট করতে হবে যাতে আমাদের প্রজেক্ট সেগুলোর সব সম্পর্কে জানতে পারে।
আপনার hardhat.config.js আপডেট করুন যাতে এটি দেখতে এইরকম হয়:
import { existsSync } from "node:fs"
import hardhatEthers from "@nomicfoundation/hardhat-ethers"
import { configVariable, defineConfig } from "hardhat/config"
// যদি .env ফাইলটি থাকে, তবে সেখান থেকে API_URL এবং PRIVATE_KEY-কে process.env-এ লোড করে।
if (existsSync(".env")) process.loadEnvFile()
export default defineConfig({
plugins: [hardhatEthers],
solidity: "0.8.34",
networks: {
sepolia: {
type: "http",
url: configVariable("API_URL"),
accounts: [configVariable("PRIVATE_KEY")],
},
},
})
configVariable Hardhat-কে শুধুমাত্র প্রয়োজন হলেই একটি এনভায়রনমেন্ট ভেরিয়েবল থেকে প্রতিটি মান পড়তে বলে, তাই মানগুলো সেট করার আগেই compile-এর মতো কমান্ডগুলো কাজ করে। আপনি যদি আপনার প্রাইভেট কী একটি প্লেইন টেক্সট ফাইলে রাখতে না চান, তবে Hardhat একটি এনক্রিপ্ট করা কীস্টোর থেকে কনফিগারেশন ভেরিয়েবলগুলোও (নতুন ট্যাবে খোলে) পড়তে পারে।
ধাপ 14: আমাদের কন্ট্রাক্ট কম্পাইল করুন
এ পর্যন্ত সবকিছু ঠিকঠাক কাজ করছে কিনা তা নিশ্চিত করতে, চলুন আমাদের কন্ট্রাক্ট কম্পাইল করি। compile টাস্কটি হলো বিল্ট-ইন Hardhat টাস্কগুলোর মধ্যে একটি।
কমান্ড লাইন থেকে রান করুন:
npx hardhat compile
প্রথমবার কম্পাইল করার সময়, Hardhat Solidity কম্পাইলার ডাউনলোড করে। এরপর আপনার Compiled 1 Solidity file with solc 0.8.34-এর মতো কিছু দেখা উচিত। যদি তা না হয়, তবে আপনি সবসময় Alchemy ডিসকর্ড (নতুন ট্যাবে খোলে)-এ মেসেজ করতে পারেন।
ধাপ 15: আমাদের ডিপ্লয় স্ক্রিপ্ট লিখুন
এখন যেহেতু আমাদের কন্ট্রাক্ট লেখা হয়েছে এবং আমাদের কনফিগারেশন ফাইল প্রস্তুত, তাই আমাদের কন্ট্রাক্ট ডিপ্লয় স্ক্রিপ্ট লেখার সময় এসেছে।
scripts/ ফোল্ডারে যান এবং deploy.js নামের একটি নতুন ফাইল তৈরি করুন, এতে নিচের বিষয়বস্তুগুলো যোগ করুন:
import { network } from "hardhat"
const { ethers } = await network.create()
const HelloWorld = await ethers.getContractFactory("HelloWorld")
// ডিপ্লয়মেন্ট শুরু করে, যা এমন একটি প্রমিস রিটার্ন করে যা একটি কন্ট্রাক্ট অবজেক্টে রিজলভ হয়।
const hello_world = await HelloWorld.deploy("Hello World!")
await hello_world.waitForDeployment()
console.log("Contract deployed to address:", await hello_world.getAddress())
চলুন দেখে নিই কোডের এই লাইনগুলোর প্রতিটি কী করে।
const { ethers } = await network.create()
Hardhat 3-এ, একটি স্ক্রিপ্ট স্পষ্টভাবে একটি নেটওয়ার্কের সাথে কানেকশন খোলে। আপনি যখন স্ক্রিপ্টটি রান করেন তখন --network অপশন দিয়ে আপনার বেছে নেওয়া নেটওয়ার্কের সাথে network.create() কানেক্ট করে এবং hardhat-ethers প্লাগইন সেই কানেকশনে একটি ethers অবজেক্ট যোগ করে।
const HelloWorld = await ethers.getContractFactory("HelloWorld")
ethers.js-এ একটি ContractFactory হলো নতুন স্মার্ট কন্ট্রাক্ট ডিপ্লয় করতে ব্যবহৃত একটি অ্যাবস্ট্রাকশন, তাই এখানে HelloWorld হলো আমাদের hello world কন্ট্রাক্টের ইনস্ট্যান্সগুলোর জন্য একটি ফ্যাক্টরি। hardhat-ethers প্লাগইন ব্যবহার করার সময় ContractFactory এবং Contract ইনস্ট্যান্সগুলো ডিফল্টভাবে প্রথম সাইনারের সাথে কানেক্ট থাকে।
const hello_world = await HelloWorld.deploy("Hello World!")
একটি ContractFactory-তে deploy() কল করলে ডিপ্লয়মেন্ট শুরু হবে এবং একটি Promise রিটার্ন করবে যা একটি Contract-এ রিজলভ হয়। এটি হলো সেই অবজেক্ট যার আমাদের প্রতিটি স্মার্ট কন্ট্রাক্ট ফাংশনের জন্য একটি মেথড রয়েছে। আপনি deploy()-এ যে আর্গুমেন্টগুলো পাস করেন তা কন্ট্রাক্টের কনস্ট্রাক্টরে যায়, এখানে প্রাথমিক বার্তাটি।
waitForDeployment() ডিপ্লয়মেন্ট ট্রানজ্যাকশনটি একটি ব্লকে অন্তর্ভুক্ত হওয়া পর্যন্ত অপেক্ষা করে এবং getAddress() নতুন কন্ট্রাক্টের ঠিকানা রিটার্ন করে। আরও বিস্তারিত জানতে ethers.js কন্ট্রাক্ট ডকুমেন্টেশন (নতুন ট্যাবে খোলে) দেখুন।
ধাপ 16: আমাদের কন্ট্রাক্ট ডিপ্লয় করুন
আমরা অবশেষে আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয় করার জন্য প্রস্তুত! কমান্ড লাইনে যান এবং রান করুন:
npx hardhat run scripts/deploy.js --network sepolia
এরপর আপনার এইরকম কিছু দেখা উচিত:
Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570
যদি আমরা Sepolia Etherscan (নতুন ট্যাবে খোলে)-এ যাই এবং আমাদের কন্ট্রাক্ট ঠিকানা সার্চ করি তবে আমরা দেখতে পাব যে এটি সফলভাবে ডিপ্লয় হয়েছে। ট্রানজ্যাকশনটি দেখতে এইরকম হবে:
From ঠিকানাটি আপনার মেটামাস্ক অ্যাকাউন্ট ঠিকানার সাথে মিলতে হবে এবং To ঠিকানায় "Contract Creation" লেখা থাকবে কিন্তু যদি আমরা ট্রানজ্যাকশনে ক্লিক করি তবে আমরা To ফিল্ডে আমাদের কন্ট্রাক্ট ঠিকানা দেখতে পাব:
অভিনন্দন! আপনি এইমাত্র ইথেরিয়াম চেইনে একটি স্মার্ট কন্ট্রাক্ট ডিপ্লয় করেছেন 🎉
ভেতরে আসলে কী ঘটছে তা বুঝতে, আপনি আপনার Alchemy ড্যাশবোর্ডে (নতুন ট্যাবে খোলে) আপনার "Hello World" অ্যাপের প্রাপ্ত রিকোয়েস্টগুলো দেখতে পারেন।
সেখানে আপনি বেশ কয়েকটি জেসন-আরপিসি কল দেখতে পাবেন যা আমরা .deploy() ফাংশন কল করার সময় Hardhat/Ethers আমাদের জন্য ভেতরে তৈরি করেছিল। এখানে উল্লেখ করার মতো দুটি গুরুত্বপূর্ণ কল হলো eth_sendRawTransaction, যা আসলে Sepolia চেইনে আমাদের কন্ট্রাক্ট লেখার রিকোয়েস্ট এবং eth_getTransactionByHash যা হ্যাশ দেওয়া থাকলে আমাদের ট্রানজ্যাকশন সম্পর্কে তথ্য পড়ার একটি রিকোয়েস্ট (ট্রানজ্যাকশন পাঠানোর সময় একটি সাধারণ প্যাটার্ন)। ট্রানজ্যাকশন পাঠানো সম্পর্কে আরও জানতে, ট্রানজ্যাকশন ডকুমেন্টেশন দেখুন।
এই টিউটোরিয়ালের জন্য এটুকুই। এরপর, আপনি আপনার কন্ট্রাক্টের জন্য একটি ইউজার ইন্টারফেস তৈরি করতে পারেন।





