---
title: "স্মার্ট কন্ট্রাক্ট লাইব্রেরি"
description: "আপনার ইথেরিয়াম ডেভেলপমেন্ট প্রজেক্টগুলোকে ত্বরান্বিত করতে পুনরায় ব্যবহারযোগ্য স্মার্ট কন্ট্রাক্ট লাইব্রেরি এবং বিল্ডিং ব্লকগুলো সম্পর্কে জানুন।"
lang: bn
---

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

## পূর্বশর্ত {#prerequisites}

স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে যাওয়ার আগে, একটি স্মার্ট কন্ট্রাক্টের গঠন সম্পর্কে ভালো ধারণা থাকা ভালো। যদি আপনি এখনও তা না করে থাকেন, তবে [স্মার্ট কন্ট্রাক্ট অ্যানাটমি](/developers/docs/smart-contracts/anatomy/)-তে যান।

## একটি লাইব্রেরিতে কী থাকে {#whats-in-a-library}

স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে সাধারণত দুই ধরনের বিল্ডিং ব্লক পাওয়া যায়: পুনরায় ব্যবহারযোগ্য আচরণ (behaviors) যা আপনি আপনার কন্ট্রাক্টে যোগ করতে পারেন এবং বিভিন্ন স্ট্যান্ডার্ডের ইমপ্লিমেন্টেশন।

### আচরণ (Behaviors) {#behaviors}

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

স্মার্ট কন্ট্রাক্ট লাইব্রেরিগুলো সাধারণত এই আচরণগুলোর পুনরায় ব্যবহারযোগ্য ইমপ্লিমেন্টেশন প্রদান করে, যা Solidity-তে [লাইব্রেরি](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) হিসেবে বা [ইনহেরিটেন্স](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance)-এর মাধ্যমে পাওয়া যায়।

উদাহরণস্বরূপ, নিচে [ওপেনজেপেলিন কন্ট্রাক্টস লাইব্রেরি](https://github.com/OpenZeppelin/openzeppelin-contracts) থেকে [`Ownable` কন্ট্রাক্ট](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol)-এর একটি সরলীকৃত সংস্করণ দেওয়া হলো, যা একটি ঠিকানাকে কন্ট্রাক্টের মালিক (owner) হিসেবে নির্ধারণ করে এবং শুধুমাত্র সেই মালিকের জন্য কোনো মেথডে অ্যাক্সেস সীমাবদ্ধ করার জন্য একটি মডিফায়ার প্রদান করে।

```solidity
contract Ownable {
    address public owner;

    constructor() internal {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
}
```

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

```solidity
import ".../Ownable.sol"; // ইমপোর্ট করা লাইব্রেরির পাথ

contract MyContract is Ownable {
    // নিচের ফাংশনটি শুধুমাত্র মালিকের দ্বারা কল করা যাবে
    function secured() onlyOwner public {
        msg.sender.transfer(1 ether);
    }
}
```

আরেকটি জনপ্রিয় উদাহরণ হলো [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) বা [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html)। এগুলো হলো লাইব্রেরি (বেস কন্ট্রাক্টের বিপরীতে) যা ওভারফ্লো চেকসহ গাণিতিক ফাংশন প্রদান করে, যা ভাষাটি নিজে থেকে প্রদান করে না। আপনার কন্ট্রাক্টকে ওভারফ্লো থেকে রক্ষা করতে নেটিভ গাণিতিক অপারেশনের পরিবর্তে এই লাইব্রেরিগুলোর যেকোনো একটি ব্যবহার করা একটি ভালো অভ্যাস, কারণ ওভারফ্লোর পরিণতি ভয়াবহ হতে পারে!

### স্ট্যান্ডার্ড {#standards}

[সংযোজনযোগ্যতা এবং আন্তঃকার্যক্ষমতা](/developers/docs/smart-contracts/composability/) সহজতর করার জন্য, ইথেরিয়াম কমিউনিটি **ERC** আকারে বেশ কয়েকটি স্ট্যান্ডার্ড সংজ্ঞায়িত করেছে। আপনি [স্ট্যান্ডার্ড](/developers/docs/standards/) বিভাগে এগুলো সম্পর্কে আরও পড়তে পারেন।

আপনার কন্ট্রাক্টের অংশ হিসেবে কোনো ERC অন্তর্ভুক্ত করার সময়, নিজের মতো করে তৈরি করার চেষ্টা না করে স্ট্যান্ডার্ড ইমপ্লিমেন্টেশনগুলো খোঁজা ভালো। অনেক স্মার্ট কন্ট্রাক্ট লাইব্রেরিতে সবচেয়ে জনপ্রিয় ERC-গুলোর ইমপ্লিমেন্টেশন অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, বহুল ব্যবহৃত [ERC-20 বিনিমেয় টোকেন স্ট্যান্ডার্ড](/developers/tutorials/understand-the-erc-20-token-smart-contract/) [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token/) এবং [ওপেনজেপেলিন](https://docs.openzeppelin.com/contracts/3.x/erc20)-এ পাওয়া যেতে পারে। এছাড়া, কিছু ERC তাদের নিজস্ব অংশ হিসেবে ক্যানোনিকাল ইমপ্লিমেন্টেশনও প্রদান করে।

উল্লেখ্য যে, কিছু ERC স্বয়ংসম্পূর্ণ নয়, বরং অন্যান্য ERC-এর সংযোজন। উদাহরণস্বরূপ, [ERC-2612](https://eips.ethereum.org/EIPS/eip-2612) এর ব্যবহারযোগ্যতা উন্নত করার জন্য ERC-20-তে একটি এক্সটেনশন যোগ করে।

## কীভাবে একটি লাইব্রেরি যোগ করবেন {#how-to}

আপনার প্রজেক্টে কীভাবে একটি লাইব্রেরি অন্তর্ভুক্ত করবেন তার নির্দিষ্ট নির্দেশনার জন্য সর্বদা সেই লাইব্রেরির ডকুমেন্টেশন দেখুন। বেশ কয়েকটি Solidity কন্ট্রাক্ট লাইব্রেরি `npm` ব্যবহার করে প্যাকেজ করা হয়, তাই আপনি সেগুলোকে শুধু `npm install` করতে পারেন। কন্ট্রাক্ট [কম্পাইল করা](/developers/docs/smart-contracts/compiling/)-র বেশিরভাগ টুল স্মার্ট কন্ট্রাক্ট লাইব্রেরির জন্য আপনার `node_modules` ফোল্ডারে খুঁজবে, তাই আপনি নিচের কাজটি করতে পারেন:

```solidity
// এটি আপনার node_modules থেকে @openzeppelin/contracts লাইব্রেরি লোড করবে
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    constructor() ERC721("MyNFT", "MNFT") public { }
}
```

আপনি যে পদ্ধতিই ব্যবহার করুন না কেন, একটি লাইব্রেরি অন্তর্ভুক্ত করার সময় সর্বদা [ল্যাঙ্গুয়েজ](/developers/docs/smart-contracts/languages/) সংস্করণের দিকে নজর রাখুন। উদাহরণস্বরূপ, আপনি যদি Solidity 0.5-এ আপনার কন্ট্রাক্ট লেখেন, তবে আপনি Solidity 0.6-এর জন্য তৈরি কোনো লাইব্রেরি ব্যবহার করতে পারবেন না।

## কখন ব্যবহার করবেন {#when-to-use}

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

নিরাপত্তাও একটি বড় সুবিধা। ওপেন সোর্স স্মার্ট কন্ট্রাক্ট লাইব্রেরিগুলো প্রায়শই কঠোরভাবে পরীক্ষা করা হয়। যেহেতু অনেক প্রজেক্ট এগুলোর ওপর নির্ভর করে, তাই কমিউনিটির পক্ষ থেকে এগুলোকে নিয়মিত পর্যালোচনার আওতায় রাখার একটি জোরালো তাগিদ থাকে। পুনরায় ব্যবহারযোগ্য কন্ট্রাক্ট লাইব্রেরির চেয়ে অ্যাপ্লিকেশন কোডে ভুল খুঁজে পাওয়া অনেক বেশি সাধারণ। কিছু লাইব্রেরি অতিরিক্ত নিরাপত্তার জন্য [এক্সটার্নাল অডিট](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits)-এর মধ্য দিয়েও যায়।

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

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

## সম্পর্কিত টুল {#related-tools}

**ওপেনজেপেলিন কন্ট্রাক্টস -** **_নিরাপদ স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্টের জন্য সবচেয়ে জনপ্রিয় লাইব্রেরি।_**

- [ডকুমেন্টেশন](https://docs.openzeppelin.com/contracts/)
- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts)
- [কমিউনিটি ফোরাম](https://forum.openzeppelin.com/c/general/16)

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

- [ডকুমেন্টেশন](https://dappsys.readthedocs.io/)
- [GitHub](https://github.com/dapphub/dappsys)

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

- [GitHub](https://github.com/HQ20/contracts)

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

- [ডকুমেন্টেশন](https://portal.thirdweb.com/contracts/build/overview)
- [GitHub](https://github.com/thirdweb-dev/contracts)

## সম্পর্কিত টিউটোরিয়াল {#related-tutorials}

- [ইথেরিয়াম ডেভেলপারদের জন্য নিরাপত্তা বিবেচনা](/developers/docs/smart-contracts/security/) _– লাইব্রেরির ব্যবহারসহ স্মার্ট কন্ট্রাক্ট তৈরি করার সময় নিরাপত্তা বিবেচনার ওপর একটি টিউটোরিয়াল।_
- [ERC-20 টোকেন স্মার্ট কন্ট্রাক্ট বুঝুন](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _-একাধিক লাইব্রেরি দ্বারা প্রদত্ত ERC-20 স্ট্যান্ডার্ডের ওপর টিউটোরিয়াল।_

## আরও পড়ুন {#further-reading}

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