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

স্মার্ট কন্ট্রাক্ট লাইব্রেরি

পেজ সর্বশেষ আপডেট: 21 আগস্ট, 2025

আপনার প্রজেক্টের প্রতিটি স্মার্ট কন্ট্রাক্ট একদম শুরু থেকে লেখার প্রয়োজন নেই। অনেক ওপেন সোর্স স্মার্ট কন্ট্রাক্ট লাইব্রেরি রয়েছে যা আপনার প্রজেক্টের জন্য পুনরায় ব্যবহারযোগ্য বিল্ডিং ব্লক প্রদান করে, যা আপনাকে একই কাজ বারবার করা থেকে বাঁচাতে পারে।

পূর্বশর্ত

স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে যাওয়ার আগে, একটি স্মার্ট কন্ট্রাক্টের গঠন সম্পর্কে ভালো ধারণা থাকা ভালো। যদি আপনি এখনও তা না করে থাকেন, তবে স্মার্ট কন্ট্রাক্ট অ্যানাটমি-তে যান।

একটি লাইব্রেরিতে কী থাকে

আপনি সাধারণত স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে দুই ধরনের বিল্ডিং ব্লক খুঁজে পেতে পারেন: পুনরায় ব্যবহারযোগ্য আচরণ যা আপনি আপনার কন্ট্রাক্টে যোগ করতে পারেন এবং বিভিন্ন স্ট্যান্ডার্ডের ইমপ্লিমেন্টেশন।

আচরণ

স্মার্ট কন্ট্রাক্ট লেখার সময়, আপনি হয়তো একই প্যাটার্ন বারবার লিখবেন, যেমন একটি কন্ট্রাক্টে সুরক্ষিত অপারেশন চালানোর জন্য একটি admin এডড্রেস নির্ধারণ করা, অথবা কোনো অপ্রত্যাশিত সমস্যার ক্ষেত্রে একটি জরুরি pause বোতাম যোগ করা।

স্মার্ট কন্ট্রাক্ট লাইব্রেরিগুলো সাধারণত Solidity-তে লাইব্রেরি (opens in a new tab) হিসেবে বা ইনহেরিটেন্স (opens in a new tab)-এর মাধ্যমে এই আচরণগুলোর পুনরায় ব্যবহারযোগ্য ইমপ্লিমেন্টেশন প্রদান করে।

উদাহরণস্বরূপ, নিচে OpenZeppelin Contracts লাইব্রেরি (opens in a new tab) থেকে Ownable কন্ট্রাক্ট (opens in a new tab)-এর একটি সরলীকৃত সংস্করণ দেওয়া হলো, যা একটি এডড্রেস-কে কন্ট্রাক্টের মালিক হিসেবে নির্ধারণ করে এবং শুধুমাত্র সেই মালিকের জন্য কোনো মেথডে অ্যাক্সেস সীমাবদ্ধ করার জন্য একটি মডিফায়ার প্রদান করে।

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}

আপনার কন্ট্রাক্টে এই ধরনের একটি বিল্ডিং ব্লক ব্যবহার করতে, আপনাকে প্রথমে এটি ইমপোর্ট করতে হবে এবং তারপর আপনার নিজের কন্ট্রাক্টে এটি থেকে এক্সটেন্ড করতে হবে। এটি আপনাকে আপনার নিজস্ব ফাংশনগুলো সুরক্ষিত করতে বেস Ownable কন্ট্রাক্ট দ্বারা প্রদত্ত মডিফায়ার ব্যবহার করার অনুমতি দেবে।

1import ".../Ownable.sol"; // ইমপোর্ট করা লাইব্রেরির পাথ
2
3contract MyContract is Ownable {
4 // নিচের ফাংশনটি শুধুমাত্র মালিক কল করতে পারবেন
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}

আরেকটি জনপ্রিয় উদাহরণ হলো SafeMath (opens in a new tab) বা DsMath (opens in a new tab)। এগুলো হলো লাইব্রেরি (বেস কন্ট্রাক্টের বিপরীতে) যা ওভারফ্লো চেকসহ গাণিতিক ফাংশন প্রদান করে, যা ভাষা দ্বারা প্রদান করা হয় না। আপনার কন্ট্রাক্টকে ওভারফ্লো থেকে রক্ষা করতে নেটিভ গাণিতিক অপারেশনের পরিবর্তে এই লাইব্রেরিগুলোর যেকোনো একটি ব্যবহার করা একটি ভালো অভ্যাস, কারণ ওভারফ্লোর পরিণতি ধ্বংসাত্মক হতে পারে!

স্ট্যান্ডার্ডস

কম্পোজেবিলিটি এবং ইন্টারঅপারেবিলিটি সহজতর করতে, ইথিরিয়াম কমিউনিটি ERC-এর আকারে বেশ কয়েকটি স্ট্যান্ডার্ড সংজ্ঞায়িত করেছে। আপনি স্ট্যান্ডার্ডস বিভাগে এগুলো সম্পর্কে আরও পড়তে পারেন।

আপনার কন্ট্রাক্টের অংশ হিসেবে একটি ERC অন্তর্ভুক্ত করার সময়, নিজের মতো করে তৈরি করার চেষ্টা না করে স্ট্যান্ডার্ড ইমপ্লিমেন্টেশনগুলো খোঁজা ভালো। অনেক স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে সবচেয়ে জনপ্রিয় ERC-গুলোর ইমপ্লিমেন্টেশন অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, সর্বত্র ব্যবহৃত ERC20 ফাঞ্জিবল টোকেন স্ট্যান্ডার্ড HQ20 (opens in a new tab), DappSys (opens in a new tab) এবং OpenZeppelin (opens in a new tab)-এ পাওয়া যেতে পারে। এছাড়া, কিছু ERC তাদের নিজস্ব অংশ হিসেবে ক্যানোনিকাল ইমপ্লিমেন্টেশনও প্রদান করে।

এটি উল্লেখ করা প্রয়োজন যে কিছু ERC স্বতন্ত্র নয়, বরং অন্যান্য ERC-এর সংযোজন। উদাহরণস্বরূপ, ERC2612 (opens in a new tab) এর ব্যবহারযোগ্যতা উন্নত করতে ERC20-তে একটি এক্সটেনশন যোগ করে।

কীভাবে একটি লাইব্রেরি যোগ করবেন

আপনার প্রজেক্টে কীভাবে এটি অন্তর্ভুক্ত করবেন তার নির্দিষ্ট নির্দেশাবলীর জন্য সর্বদা আপনি যে লাইব্রেরিটি অন্তর্ভুক্ত করছেন তার ডকুমেন্টেশন দেখুন। বেশ কয়েকটি Solidity কন্ট্রাক্ট লাইব্রেরি npm ব্যবহার করে প্যাকেজ করা হয়, তাই আপনি শুধু npm install করতে পারেন। কন্ট্রাক্ট কম্পাইল করার বেশিরভাগ টুল স্মার্ট কন্ট্রাক্ট লাইব্রেরির জন্য আপনার node_modules-এ খুঁজবে, তাই আপনি নিচের কাজটি করতে পারেন:

1// এটি আপনার node_modules থেকে @openzeppelin/contracts লাইব্রেরিটি লোড করবে
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}

আপনি যে পদ্ধতিই ব্যবহার করুন না কেন, একটি লাইব্রেরি অন্তর্ভুক্ত করার সময় সর্বদা ভাষা-এর সংস্করণের দিকে নজর রাখুন। উদাহরণস্বরূপ, আপনি যদি Solidity 0.5-এ আপনার কন্ট্রাক্ট লেখেন তবে আপনি Solidity 0.6-এর জন্য একটি লাইব্রেরি ব্যবহার করতে পারবেন না।

কখন ব্যবহার করবেন

আপনার প্রজেক্টের জন্য একটি স্মার্ট কন্ট্রাক্ট লাইব্রেরি ব্যবহার করার বেশ কয়েকটি সুবিধা রয়েছে। প্রথম এবং প্রধানত, এটি আপনাকে রেডি-টু-ইউজ বিল্ডিং ব্লক প্রদান করে আপনার সময় বাঁচায় যা আপনি আপনার সিস্টেমে অন্তর্ভুক্ত করতে পারেন, নিজে কোড করার পরিবর্তে।

নিরাপত্তাও একটি বড় সুবিধা। ওপেন সোর্স স্মার্ট কন্ট্রাক্ট লাইব্রেরিগুলো প্রায়শই কঠোরভাবে যাচাই করা হয়। যেহেতু অনেক প্রজেক্ট এগুলোর ওপর নির্ভর করে, তাই কমিউনিটির দ্বারা এগুলোকে নিয়মিত পর্যালোচনার আওতায় রাখার একটি শক্তিশালী প্রণোদনা রয়েছে। পুনরায় ব্যবহারযোগ্য কন্ট্রাক্ট লাইব্রেরির চেয়ে অ্যাপ্লিকেশন কোডে ত্রুটি খুঁজে পাওয়া অনেক বেশি সাধারণ। কিছু লাইব্রেরি অতিরিক্ত নিরাপত্তার জন্য এক্সটার্নাল অডিট (opens in a new tab)-এর মধ্য দিয়েও যায়।

তবে, স্মার্ট কন্ট্রাক্ট লাইব্রেরি ব্যবহার করার ক্ষেত্রে আপনার প্রজেক্টে এমন কোড অন্তর্ভুক্ত করার ঝুঁকি থাকে যার সাথে আপনি পরিচিত নন। একটি কন্ট্রাক্ট ইমপোর্ট করে সরাসরি আপনার প্রজেক্টে অন্তর্ভুক্ত করা লোভনীয় হতে পারে, কিন্তু সেই কন্ট্রাক্টটি কী করে সে সম্পর্কে ভালো ধারণা না থাকলে, আপনি অপ্রত্যাশিত আচরণের কারণে আপনার সিস্টেমে অজান্তেই একটি সমস্যা তৈরি করতে পারেন। সর্বদা নিশ্চিত করুন যে আপনি যে কোডটি ইমপোর্ট করছেন তার ডকুমেন্টেশন পড়েছেন এবং তারপর এটিকে আপনার প্রজেক্টের অংশ করার আগে কোডটি নিজেই পর্যালোচনা করেছেন!

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

OpenZeppelin Contracts - নিরাপদ স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্টের জন্য সবচেয়ে জনপ্রিয় লাইব্রেরি।

DappSys - স্মার্ট কন্ট্রাক্টের জন্য নিরাপদ, সহজ, নমনীয় বিল্ডিং-ব্লক।

HQ20 - বাস্তব জগতের জন্য সম্পূর্ণ বৈশিষ্ট্যযুক্ত ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করতে সাহায্য করার জন্য কন্ট্রাক্ট, লাইব্রেরি এবং উদাহরণসহ একটি Solidity প্রজেক্ট।

thirdweb Solidity SDK - কাস্টম স্মার্ট কন্ট্রাক্ট দক্ষতার সাথে তৈরি করার জন্য প্রয়োজনীয় টুলস প্রদান করে

আরও পড়ুন

আপনাকে সাহায্য করেছে এমন কোনো কমিউনিটি রিসোর্স সম্পর্কে জানেন? এই পেজটি এডিট করুন এবং এটি যোগ করুন!

এই আর্টিকেলটি কি সহায়ক ছিল?