কীভাবে একটি NFT লিখতে এবং ডিপ্লয় করতে হয় (NFT টিউটোরিয়াল সিরিজের পর্ব 1/3)
NFT-গুলো ব্লকচেইনকে জনসমক্ষে নিয়ে আসার সাথে সাথে, ইথিরিয়াম ব্লকচেইনে আপনার নিজস্ব NFT কন্ট্রাক্ট (ERC-721 টোকেন) প্রকাশ করে এই উন্মাদনাটি নিজে বোঝার জন্য এটি একটি চমৎকার সুযোগ!
Alchemy NFT স্পেসের সবচেয়ে বড় নামগুলোকে শক্তি জোগাতে পেরে অত্যন্ত গর্বিত, যার মধ্যে রয়েছে Makersplace (সম্প্রতি Christie’s-এ $69 মিলিয়নে ডিজিটাল আর্টওয়ার্ক বিক্রির রেকর্ড গড়েছে), Dapper Labs (NBA Top Shot এবং Crypto Kitties-এর নির্মাতা), OpenSea (বিশ্বের বৃহত্তম NFT মার্কেটপ্লেস), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable এবং আরও অনেক কিছু।
এই টিউটোরিয়ালে, আমরা MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab), Pinata (opens in a new tab) এবং Alchemy (opens in a new tab) ব্যবহার করে Sepolia টেস্টনেট-এ একটি ERC-721 স্মার্ট কন্ট্রাক্ট তৈরি এবং ডিপ্লয় করার প্রক্রিয়া দেখব (যদি আপনি এখনও এগুলোর অর্থ বুঝতে না পারেন তবে চিন্তা করবেন না — আমরা এটি ব্যাখ্যা করব!)।
এই টিউটোরিয়ালের পর্ব 2-এ আমরা দেখব কীভাবে আমরা একটি NFT মিন্ট করতে আমাদের স্মার্ট কন্ট্রাক্ট ব্যবহার করতে পারি এবং পর্ব 3-এ আমরা ব্যাখ্যা করব কীভাবে MetaMask-এ আপনার NFT দেখতে হয়।
এবং অবশ্যই, যদি কোনো পর্যায়ে আপনার প্রশ্ন থাকে, তবে Alchemy Discord (opens in a new tab)-এ যোগাযোগ করতে বা Alchemy's NFT API docs (opens in a new tab) ভিজিট করতে দ্বিধা করবেন না!
ধাপ 1: ইথিরিয়াম নেটওয়ার্ক-এর সাথে সংযুক্ত হোন
ইথিরিয়াম ব্লকচেইন-এ রিকোয়েস্ট করার অনেক উপায় রয়েছে, তবে বিষয়গুলো সহজ করার জন্য, আমরা Alchemy (opens in a new tab)-তে একটি বিনামূল্যের একাউন্ট ব্যবহার করব, যা একটি ব্লকচেইন ডেভেলপার প্ল্যাটফর্ম এবং API যা আমাদের নিজস্ব নোড না চালিয়েই ইথিরিয়াম চেইনের সাথে যোগাযোগ করতে দেয়।
এই টিউটোরিয়ালে, আমরা আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয়মেন্টের নেপথ্যে কী ঘটছে তা বোঝার জন্য মনিটরিং এবং অ্যানালিটিক্সের জন্য Alchemy-এর ডেভেলপার টুলগুলোরও সুবিধা নেব। যদি আপনার আগে থেকেই কোনো Alchemy একাউন্ট না থাকে, তবে আপনি বিনামূল্যে এখানে (opens in a new tab) সাইন আপ করতে পারেন।
ধাপ 2: আপনার অ্যাপ (এবং API কি) তৈরি করুন
একবার আপনি একটি Alchemy একাউন্ট তৈরি করলে, আপনি একটি অ্যাপ তৈরি করে একটি API কি জেনারেট করতে পারেন। এটি আমাদের Sepolia টেস্টনেট-এ রিকোয়েস্ট করার অনুমতি দেবে। আপনি যদি টেস্টনেট সম্পর্কে আরও জানতে আগ্রহী হন তবে এই গাইডটি (opens in a new tab) দেখুন।
- ন্যাভ বারে "Apps"-এর উপর হোভার করে এবং "Create App"-এ ক্লিক করে আপনার Alchemy ড্যাশবোর্ডের "Create App" পেজে যান
- আপনার অ্যাপের নাম দিন (আমরা "My First NFT!" বেছে নিয়েছি), একটি সংক্ষিপ্ত বিবরণ দিন, চেইনের জন্য "Ethereum" নির্বাচন করুন এবং আপনার নেটওয়ার্ক-এর জন্য "Sepolia" বেছে নিন। মার্জ হওয়ার পর থেকে অন্যান্য টেস্টনেট-গুলো বাতিল করা হয়েছে।
- "Create app"-এ ক্লিক করুন এবং কাজ শেষ! আপনার অ্যাপটি নিচের টেবিলে দেখা উচিত।
ধাপ 3: একটি ইথিরিয়াম একাউন্ট (এডড্রেস) তৈরি করুন
লেনদেন পাঠাতে এবং গ্রহণ করতে আমাদের একটি ইথিরিয়াম একাউন্ট প্রয়োজন। এই টিউটোরিয়ালের জন্য, আমরা MetaMask ব্যবহার করব, যা ব্রাউজারে একটি ভার্চুয়াল ওয়ালেট যা আপনার ইথিরিয়াম একাউন্ট এডড্রেস পরিচালনা করতে ব্যবহৃত হয়। আপনি যদি ইথিরিয়াম-এ লেনদেন কীভাবে কাজ করে সে সম্পর্কে আরও বুঝতে চান, তবে ইথিরিয়াম ফাউন্ডেশনের এই পেজটি দেখুন।
আপনি বিনামূল্যে এখানে (opens in a new tab) একটি MetaMask একাউন্ট ডাউনলোড এবং তৈরি করতে পারেন। যখন আপনি একটি একাউন্ট তৈরি করছেন, বা যদি আপনার আগে থেকেই একটি একাউন্ট থাকে, তবে উপরের ডানদিকে "Sepolia Test Network"-এ স্যুইচ করতে ভুলবেন না (যাতে আমরা আসল টাকা নিয়ে কাজ না করি)।
ধাপ 4: একটি ফাসেট থেকে ইথার যোগ করুন
টেস্টনেট-এ আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয় করার জন্য, আমাদের কিছু নকল ETH প্রয়োজন হবে। ETH পেতে আপনি Alchemy দ্বারা হোস্ট করা Sepolia Faucet (opens in a new tab)-এ যেতে পারেন, লগ ইন করুন এবং আপনার একাউন্ট এডড্রেস লিখুন, "Send Me ETH"-এ ক্লিক করুন। এর পরপরই আপনার MetaMask একাউন্ট-এ ETH দেখতে পাওয়া উচিত!
ধাপ 5: আপনার ব্যালেন্স চেক করুন
আমাদের ব্যালেন্স সেখানে আছে কিনা তা দুবার চেক করতে, চলুন Alchemy’s composer tool (opens in a new tab) ব্যবহার করে একটি eth_getBalance (opens in a new tab) রিকোয়েস্ট করি। এটি আমাদের ওয়ালেট-এ থাকা ETH-এর পরিমাণ রিটার্ন করবে। আপনার MetaMask একাউন্ট এডড্রেস ইনপুট করার পর এবং "Send Request"-এ ক্লিক করার পর, আপনার এইরকম একটি রেসপন্স দেখা উচিত:
{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}
নোট এই ফলাফলটি wei-তে, ETH-এ নয়। Wei ইথারের ক্ষুদ্রতম একক হিসেবে ব্যবহৃত হয়। wei থেকে ETH-এ রূপান্তর হলো 1 eth = 1018 wei। তাই যদি আমরা 0xde0b6b3a7640000 কে ডেসিমালে রূপান্তর করি তবে আমরা 1*1018 wei পাই, যা 1 ETH এর সমান।
যাক! আমাদের সব নকল টাকা সেখানে আছে।
ধাপ 6: আমাদের প্রজেক্ট ইনিশিয়ালাইজ করুন
প্রথমে, আমাদের প্রজেক্টের জন্য একটি ফোল্ডার তৈরি করতে হবে। আপনার কমান্ড লাইনে যান এবং টাইপ করুন:
mkdir my-nft cd my-nft
এখন যেহেতু আমরা আমাদের প্রজেক্ট ফোল্ডারের ভিতরে আছি, আমরা প্রজেক্টটি ইনিশিয়ালাইজ করতে npm init ব্যবহার করব। যদি আপনার আগে থেকেই npm ইনস্টল করা না থাকে, তবে এই নির্দেশাবলী (opens in a new tab) অনুসরণ করুন (আমাদের Node.js (opens in a new tab)-ও প্রয়োজন হবে, তাই সেটিও ডাউনলোড করুন!)।
npm init
আপনি ইনস্টলেশনের প্রশ্নগুলোর উত্তর কীভাবে দেন তা খুব একটা গুরুত্বপূর্ণ নয়; রেফারেন্সের জন্য আমরা কীভাবে এটি করেছি তা এখানে দেওয়া হলো:
1 package name: (my-nft)2 version: (1.0.0)3 description: My first NFT!4 entry point: (index.js)5 test command:6 git repository:7 keywords:8 author:9 license: (ISC)10 About to write to /Users/thesuperb1/Desktop/my-nft/package.json:11
12 {13 "name": "my-nft",14 "version": "1.0.0",15 "description": "My first NFT!",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: Hardhat (opens in a new tab) ইনস্টল করুন
Hardhat হলো আপনার ইথিরিয়াম সফটওয়্যার কম্পাইল, ডিপ্লয়, টেস্ট এবং ডিবাগ করার জন্য একটি ডেভেলপমেন্ট এনভায়রনমেন্ট। এটি লাইভ চেইনে ডিপ্লয় করার আগে স্থানীয়ভাবে স্মার্ট কন্ট্রাক্ট এবং ডিএ্যাপস তৈরি করার সময় ডেভেলপারদের সাহায্য করে।
আমাদের my-nft প্রজেক্টের ভিতরে রান করুন:
npm install --save-dev hardhat
ইনস্টলেশন নির্দেশাবলী (opens in a new tab) সম্পর্কে আরও বিস্তারিত জানতে এই পেজটি দেখুন।
ধাপ 8: Hardhat প্রজেক্ট তৈরি করুন
আমাদের প্রজেক্ট ফোল্ডারের ভিতরে রান করুন:
npx hardhat
এরপর আপনার একটি ওয়েলকাম মেসেজ এবং আপনি কী করতে চান তা নির্বাচন করার অপশন দেখা উচিত। "create an empty hardhat.config.js" নির্বাচন করুন:
888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 888 888 "88b 888P" d88" 888 888 "88b "88b 888 888 888 .d888888 888 888 888 888 888 .d888888 888 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 👷 Welcome to Hardhat v2.0.11 👷 ? What do you want to do? … Create a sample project ❯ Create an empty hardhat.config.js Quit
এটি আমাদের জন্য একটি hardhat.config.js ফাইল তৈরি করবে যেখানে আমরা আমাদের প্রজেক্টের জন্য সমস্ত সেট আপ নির্দিষ্ট করব (ধাপ 13-এ)।
ধাপ 9: প্রজেক্ট ফোল্ডার যোগ করুন
আমাদের প্রজেক্টটি গুছিয়ে রাখতে, আমরা দুটি নতুন ফোল্ডার তৈরি করব। আপনার কমান্ড লাইনে আপনার প্রজেক্টের রুট ডিরেক্টরিতে যান এবং টাইপ করুন:
mkdir contracts mkdir scripts
-
contracts/ হলো যেখানে আমরা আমাদের NFT স্মার্ট কন্ট্রাক্ট কোড রাখব
-
scripts/ হলো যেখানে আমরা আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয় এবং ইন্টারঅ্যাক্ট করার জন্য স্ক্রিপ্ট রাখব
ধাপ 10: আমাদের কন্ট্রাক্ট লিখুন
এখন যেহেতু আমাদের এনভায়রনমেন্ট সেট আপ করা হয়েছে, আরও আকর্ষণীয় বিষয়ের দিকে যাওয়া যাক: আমাদের স্মার্ট কন্ট্রাক্ট কোড লেখা!
আপনার পছন্দের এডিটরে my-nft প্রজেক্টটি খুলুন (আমাদের পছন্দ VSCode (opens in a new tab))। স্মার্ট কন্ট্রাক্ট-গুলো Solidity নামক একটি ভাষায় লেখা হয় যা আমরা আমাদের MyNFT.sol স্মার্ট কন্ট্রাক্ট লিখতে ব্যবহার করব।
-
contractsফোল্ডারে যান এবং MyNFT.sol নামে একটি নতুন ফাইল তৈরি করুন -
নিচে আমাদের NFT স্মার্ট কন্ট্রাক্ট কোড দেওয়া হলো, যা আমরা OpenZeppelin (opens in a new tab) লাইব্রেরির ERC-721 ইমপ্লিমেন্টেশনের উপর ভিত্তি করে তৈরি করেছি। নিচের বিষয়বস্তু কপি করে আপনার MyNFT.sol ফাইলে পেস্ট করুন।
1// [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)-এর উপর ভিত্তি করে তৈরি কন্ট্রাক্ট2// SPDX-License-Identifier: MIT3pragma solidity ^0.8.0;45import "@openzeppelin/contracts/token/ERC721/ERC721.sol";6import "@openzeppelin/contracts/utils/Counters.sol";7import "@openzeppelin/contracts/access/Ownable.sol";8import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";910contract MyNFT is ERC721URIStorage, Ownable {11 using Counters for Counters.Counter;12 Counters.Counter private _tokenIds;1314 constructor() ERC721("MyNFT", "NFT") {}1516 function mintNFT(address recipient, string memory tokenURI)17 public onlyOwner18 returns (uint256)19 {20 _tokenIds.increment();2122 uint256 newItemId = _tokenIds.current();23 _mint(recipient, newItemId);24 _setTokenURI(newItemId, tokenURI);2526 return newItemId;27 }28} -
যেহেতু আমরা OpenZeppelin কন্ট্রাক্ট লাইব্রেরি থেকে ক্লাস ইনহেরিট করছি, তাই আমাদের ফোল্ডারে লাইব্রেরিটি ইনস্টল করতে আপনার কমান্ড লাইনে
npm install @openzeppelin/contracts^4.0.0রান করুন।
তাহলে, এই কোডটি আসলে কী করে? চলুন এটি লাইন-বাই-লাইন বিশ্লেষণ করি।
আমাদের স্মার্ট কন্ট্রাক্ট-এর শীর্ষে, আমরা তিনটি OpenZeppelin (opens in a new tab) স্মার্ট কন্ট্রাক্ট ক্লাস ইমপোর্ট করি:
-
@openzeppelin/contracts/token/ERC721/ERC721.sol-এ ERC-721 স্ট্যান্ডার্ডের ইমপ্লিমেন্টেশন রয়েছে, যা আমাদের NFT স্মার্ট কন্ট্রাক্ট ইনহেরিট করবে। (একটি বৈধ NFT হতে হলে, আপনার স্মার্ট কন্ট্রাক্ট-কে অবশ্যই ERC-721 স্ট্যান্ডার্ডের সমস্ত মেথড ইমপ্লিমেন্ট করতে হবে।) ইনহেরিট করা ERC-721 ফাংশনগুলো সম্পর্কে আরও জানতে, এখানে (opens in a new tab) ইন্টারফেস ডেফিনিশন দেখুন।
-
@openzeppelin/contracts/utils/Counters.sol এমন কাউন্টার প্রদান করে যা শুধুমাত্র এক করে বাড়ানো বা কমানো যায়। আমাদের স্মার্ট কন্ট্রাক্ট মিন্ট করা মোট NFT-এর সংখ্যার ট্র্যাক রাখতে এবং আমাদের নতুন NFT-তে ইউনিক ID সেট করতে একটি কাউন্টার ব্যবহার করে। (স্মার্ট কন্ট্রাক্ট ব্যবহার করে মিন্ট করা প্রতিটি NFT-কে অবশ্যই একটি ইউনিক ID দিতে হবে—এখানে আমাদের ইউনিক ID শুধুমাত্র বিদ্যমান মোট NFT-এর সংখ্যা দ্বারা নির্ধারিত হয়। উদাহরণস্বরূপ, আমাদের স্মার্ট কন্ট্রাক্ট দিয়ে আমরা যে প্রথম NFT মিন্ট করি তার ID হলো "1," আমাদের দ্বিতীয় NFT-এর ID হলো "2," ইত্যাদি।)
-
@openzeppelin/contracts/access/Ownable.sol আমাদের স্মার্ট কন্ট্রাক্ট-এ অ্যাক্সেস কন্ট্রোল (opens in a new tab) সেট আপ করে, যাতে শুধুমাত্র স্মার্ট কন্ট্রাক্ট-এর মালিক (আপনি) NFT মিন্ট করতে পারেন। (নোট করুন, অ্যাক্সেস কন্ট্রোল অন্তর্ভুক্ত করা সম্পূর্ণ আপনার পছন্দ। আপনি যদি চান যে যেকেউ আপনার স্মার্ট কন্ট্রাক্ট ব্যবহার করে একটি NFT মিন্ট করতে পারুক, তবে 10 নম্বর লাইনে Ownable এবং 17 নম্বর লাইনে onlyOwner শব্দটি মুছে ফেলুন।)
আমাদের ইমপোর্ট স্টেটমেন্টের পরে, আমাদের কাস্টম NFT স্মার্ট কন্ট্রাক্ট রয়েছে, যা আশ্চর্যজনকভাবে ছোট — এতে শুধুমাত্র একটি কাউন্টার, একটি কনস্ট্রাক্টর এবং একটি ফাংশন রয়েছে! এটি আমাদের ইনহেরিট করা OpenZeppelin কন্ট্রাক্টগুলোর কারণে সম্ভব হয়েছে, যা একটি NFT তৈরি করার জন্য আমাদের প্রয়োজনীয় বেশিরভাগ মেথড ইমপ্লিমেন্ট করে, যেমন ownerOf যা NFT-এর মালিককে রিটার্ন করে এবং transferFrom, যা একটি একাউন্ট থেকে অন্য একাউন্ট-এ NFT-এর মালিকানা স্থানান্তর করে।
আমাদের ERC-721 কনস্ট্রাক্টরে, আপনি লক্ষ্য করবেন যে আমরা 2টি স্ট্রিং পাস করি, "MyNFT" এবং "NFT।" প্রথম ভেরিয়েবলটি হলো স্মার্ট কন্ট্রাক্ট-এর নাম এবং দ্বিতীয়টি হলো এর প্রতীক। আপনি আপনার ইচ্ছামতো এই ভেরিয়েবলগুলোর নাম দিতে পারেন!
সবশেষে, আমাদের mintNFT(address recipient, string memory tokenURI) ফাংশন রয়েছে যা আমাদের একটি NFT মিন্ট করতে দেয়! আপনি লক্ষ্য করবেন যে এই ফাংশনটি দুটি ভেরিয়েবল নেয়:
-
address recipientসেই এডড্রেস নির্দিষ্ট করে যা আপনার নতুন মিন্ট করা NFT গ্রহণ করবে -
string memory tokenURIহলো একটি স্ট্রিং যা একটি JSON ডকুমেন্টে রিজলভ হওয়া উচিত যা NFT-এর মেটাডেটা বর্ণনা করে। একটি NFT-এর মেটাডেটাই মূলত এটিকে জীবন্ত করে তোলে, এটিকে কনফিগারযোগ্য বৈশিষ্ট্য যেমন নাম, বিবরণ, ছবি এবং অন্যান্য অ্যাট্রিবিউট রাখার অনুমতি দেয়। এই টিউটোরিয়ালের পর্ব 2-এ, আমরা বর্ণনা করব কীভাবে এই মেটাডেটা কনফিগার করতে হয়।
mintNFT ইনহেরিট করা ERC-721 লাইব্রেরি থেকে কিছু মেথড কল করে এবং শেষ পর্যন্ত একটি সংখ্যা রিটার্ন করে যা নতুন মিন্ট করা NFT-এর ID উপস্থাপন করে।
ধাপ 11: আপনার প্রজেক্টে MetaMask এবং Alchemy সংযুক্ত করুন
এখন যেহেতু আমরা একটি MetaMask ওয়ালেট, Alchemy একাউন্ট তৈরি করেছি এবং আমাদের স্মার্ট কন্ট্রাক্ট লিখেছি, এখন এই তিনটিকে সংযুক্ত করার সময়।
আপনার ভার্চুয়াল ওয়ালেট থেকে পাঠানো প্রতিটি লেনদেন-এর জন্য আপনার ইউনিক প্রাইভেট কি ব্যবহার করে একটি সিগনেচার প্রয়োজন। আমাদের প্রোগ্রামকে এই অনুমতি প্রদান করতে, আমরা নিরাপদে আমাদের প্রাইভেট কি (এবং Alchemy API কি) একটি এনভায়রনমেন্ট ফাইলে সংরক্ষণ করতে পারি।
লেনদেন পাঠানো সম্পর্কে আরও জানতে, web3 ব্যবহার করে লেনদেন পাঠানোর উপর এই টিউটোরিয়ালটি দেখুন।
প্রথমে, আপনার প্রজেক্ট ডিরেক্টরিতে dotenv প্যাকেজটি ইনস্টল করুন:
npm install dotenv --save
তারপর, আমাদের প্রজেক্টের রুট ডিরেক্টরিতে একটি .env ফাইল তৈরি করুন এবং এতে আপনার MetaMask প্রাইভেট কি এবং HTTP Alchemy API URL যোগ করুন।
-
MetaMask থেকে আপনার প্রাইভেট কি এক্সপোর্ট করতে এই নির্দেশাবলী (opens in a new tab) অনুসরণ করুন
-
HTTP Alchemy API URL পেতে নিচে দেখুন এবং এটি আপনার ক্লিপবোর্ডে কপি করুন
আপনার .env এখন এইরকম দেখতে হওয়া উচিত:
API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key (opens in a new tab)" PRIVATE_KEY="your-metamask-private-key"
এগুলোকে আমাদের কোডের সাথে যুক্ত করতে, আমরা ধাপ 13-এ আমাদের hardhat.config.js ফাইলে এই ভেরিয়েবলগুলোর রেফারেন্স দেব।
.env কমিট করবেন না! অনুগ্রহ করে নিশ্চিত করুন যে আপনি কখনই আপনার .env ফাইলটি কারও সাথে শেয়ার বা প্রকাশ করবেন না, কারণ এটি করার মাধ্যমে আপনি আপনার গোপনীয়তার সাথে আপস করছেন। আপনি যদি ভার্সন কন্ট্রোল ব্যবহার করেন, তবে আপনার .env একটি gitignore (opens in a new tab) ফাইলে যোগ করুন।ধাপ 12: Ethers.js ইনস্টল করুন
Ethers.js হলো এমন একটি লাইব্রেরি যা স্ট্যান্ডার্ড JSON-RPC মেথডগুলোকে আরও ব্যবহারকারী-বান্ধব মেথড দিয়ে র্যাপ করে ইথিরিয়াম-এর সাথে ইন্টারঅ্যাক্ট করা এবং রিকোয়েস্ট করা সহজ করে তোলে।
Hardhat অতিরিক্ত টুলিং এবং বর্ধিত কার্যকারিতার জন্য প্লাগইন (opens in a new tab) ইন্টিগ্রেট করা খুব সহজ করে তোলে। আমরা কন্ট্রাক্ট ডিপ্লয়মেন্টের জন্য Ethers প্লাগইন (opens in a new tab)-এর সুবিধা নেব (Ethers.js (opens in a new tab)-এ কিছু খুব পরিষ্কার কন্ট্রাক্ট ডিপ্লয়মেন্ট মেথড রয়েছে)।
আপনার প্রজেক্ট ডিরেক্টরিতে টাইপ করুন:
npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0
পরবর্তী ধাপে আমাদের hardhat.config.js-এও ethers-এর প্রয়োজন হবে।
ধাপ 13: hardhat.config.js আপডেট করুন
আমরা এপর্যন্ত বেশ কয়েকটি ডিপেন্ডেন্সি এবং প্লাগইন যোগ করেছি, এখন আমাদের hardhat.config.js আপডেট করতে হবে যাতে আমাদের প্রজেক্ট সেগুলোর সব সম্পর্কে জানতে পারে।
আপনার hardhat.config.js আপডেট করে এইরকম করুন:
1 /* *2 * @type import('hardhat/config').HardhatUserConfig */3 require('dotenv').config();4 require("@nomiclabs/hardhat-ethers");5 const { API_URL, PRIVATE_KEY } = process.env;6 module.exports = {7 solidity: "0.8.1",8 defaultNetwork: "sepolia",9 networks: {10 hardhat: {},11 sepolia: {12 url: API_URL,13 accounts: [`0x${PRIVATE_KEY}`]14 }15 },16 }ধাপ 14: আমাদের কন্ট্রাক্ট কম্পাইল করুন
এপর্যন্ত সবকিছু ঠিকঠাক কাজ করছে কিনা তা নিশ্চিত করতে, চলুন আমাদের কন্ট্রাক্ট কম্পাইল করি। কম্পাইল টাস্কটি বিল্ট-ইন hardhat টাস্কগুলোর মধ্যে একটি।
কমান্ড লাইন থেকে রান করুন:
npx hardhat compile
আপনি সোর্স ফাইলে SPDX লাইসেন্স আইডেন্টিফায়ার প্রদান না করা সম্পর্কে একটি সতর্কতা পেতে পারেন, তবে এটি নিয়ে চিন্তা করার দরকার নেই — আশা করি অন্য সবকিছু ঠিক আছে! যদি না হয়, তবে আপনি সবসময় Alchemy discord (opens in a new tab)-এ মেসেজ করতে পারেন।
ধাপ 15: আমাদের ডিপ্লয় স্ক্রিপ্ট লিখুন
এখন যেহেতু আমাদের কন্ট্রাক্ট লেখা হয়েছে এবং আমাদের কনফিগারেশন ফাইল প্রস্তুত, এখন আমাদের কন্ট্রাক্ট ডিপ্লয় স্ক্রিপ্ট লেখার সময়।
scripts/ ফোল্ডারে যান এবং deploy.js নামে একটি নতুন ফাইল তৈরি করুন, এতে নিচের বিষয়বস্তু যোগ করুন:
1async function main() {2 const MyNFT = await ethers.getContractFactory("MyNFT")3
4 // ডিপ্লয়মেন্ট শুরু করুন, যা এমন একটি প্রমিস রিটার্ন করে যা একটি কন্ট্রাক্ট অবজেক্টে রিজলভ হয়5 const myNFT = await MyNFT.deploy()6 await myNFT.deployed()7 console.log("Contract deployed to address:", myNFT.address)8}9
10main()11 .then(() => process.exit(0))12 .catch((error) => {13 console.error(error)14 process.exit(1)15 })Hardhat তাদের কন্ট্রাক্ট টিউটোরিয়ালে (opens in a new tab) এই কোডের প্রতিটি লাইন কী করে তা খুব ভালোভাবে ব্যাখ্যা করে, আমরা এখানে তাদের ব্যাখ্যাগুলো গ্রহণ করেছি।
const MyNFT = await ethers.getContractFactory("MyNFT");
ethers.js-এ একটি ContractFactory হলো নতুন স্মার্ট কন্ট্রাক্ট ডিপ্লয় করতে ব্যবহৃত একটি অ্যাবস্ট্রাকশন, তাই এখানে MyNFT হলো আমাদের NFT কন্ট্রাক্ট-এর ইনস্ট্যান্সগুলোর জন্য একটি ফ্যাক্টরি। hardhat-ethers প্লাগইন ব্যবহার করার সময় ContractFactory এবং Contract ইনস্ট্যান্সগুলো ডিফল্টভাবে প্রথম সাইনারের সাথে সংযুক্ত থাকে।
const myNFT = await MyNFT.deploy();
একটি ContractFactory-তে deploy() কল করলে ডিপ্লয়মেন্ট শুরু হবে এবং একটি Promise রিটার্ন করবে যা একটি Contract-এ রিজলভ হয়। এটি এমন একটি অবজেক্ট যার আমাদের প্রতিটি স্মার্ট কন্ট্রাক্ট ফাংশনের জন্য একটি মেথড রয়েছে।
ধাপ 16: আমাদের কন্ট্রাক্ট ডিপ্লয় করুন
আমরা অবশেষে আমাদের স্মার্ট কন্ট্রাক্ট ডিপ্লয় করতে প্রস্তুত! আপনার প্রজেক্ট ডিরেক্টরির রুটে ফিরে যান এবং কমান্ড লাইনে রান করুন:
npx hardhat --network sepolia run scripts/deploy.js
এরপর আপনার এইরকম কিছু দেখা উচিত:
Contract deployed to address: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650
যদি আমরা Sepolia etherscan (opens in a new tab)-এ যাই এবং আমাদের কন্ট্রাক্ট এডড্রেস সার্চ করি তবে আমাদের দেখতে পাওয়া উচিত যে এটি সফলভাবে ডিপ্লয় হয়েছে। যদি আপনি এটি সাথে সাথে দেখতে না পান, তবে অনুগ্রহ করে কিছুক্ষণ অপেক্ষা করুন কারণ এতে কিছুটা সময় লাগতে পারে। লেনদেন-টি এইরকম দেখতে হবে:
From এডড্রেস-টি আপনার MetaMask একাউন্ট এডড্রেস-এর সাথে মিলতে হবে এবং To এডড্রেস-এ "Contract Creation" লেখা থাকবে। যদি আমরা লেনদেন-এ ক্লিক করি, তবে আমরা To ফিল্ডে আমাদের কন্ট্রাক্ট এডড্রেস দেখতে পাব:
ইয়েস! আপনি এইমাত্র ইথিরিয়াম (টেস্টনেট) চেইনে আপনার NFT স্মার্ট কন্ট্রাক্ট ডিপ্লয় করেছেন!
নেপথ্যে কী ঘটছে তা বুঝতে, চলুন আমাদের Alchemy dashboard (opens in a new tab)-এর Explorer ট্যাবে যাই। যদি আপনার একাধিক Alchemy অ্যাপ থাকে তবে অ্যাপ অনুযায়ী ফিল্টার করতে ভুলবেন না এবং "MyNFT" নির্বাচন করুন।
এখানে আপনি বেশ কয়েকটি JSON-RPC কল দেখতে পাবেন যা Hardhat/Ethers আমাদের জন্য নেপথ্যে করেছিল যখন আমরা .deploy() ফাংশনটি কল করেছিলাম। এখানে উল্লেখ করার মতো দুটি গুরুত্বপূর্ণ কল হলো eth_sendRawTransaction, যা মূলত Sepolia চেইনে আমাদের স্মার্ট কন্ট্রাক্ট লেখার রিকোয়েস্ট এবং eth_getTransactionByHash যা হ্যাস দেওয়া থাকলে আমাদের লেনদেন সম্পর্কে তথ্য পড়ার একটি রিকোয়েস্ট (লেনদেন পাঠানোর সময় একটি সাধারণ প্যাটার্ন)। লেনদেন পাঠানো সম্পর্কে আরও জানতে, Web3 ব্যবহার করে লেনদেন পাঠানোর উপর এই টিউটোরিয়ালটি দেখুন।
এই টিউটোরিয়ালের পর্ব 1-এর জন্য এটুকুই। পর্ব 2-এ, আমরা একটি NFT মিন্ট করার মাধ্যমে আমাদের স্মার্ট কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করব, এবং পর্ব 3-এ আমরা আপনাকে দেখাব কীভাবে আপনার ইথিরিয়াম ওয়ালেট-এ আপনার NFT দেখতে হয়!
পেজ সর্বশেষ আপডেট: 3 মার্চ, 2026






