---
title: "स्मार्ट कॉन्ट्रॅक्ट लायब्ररी"
description: "तुमच्या इथेरियम विकास प्रकल्पांना गती देण्यासाठी पुन्हा वापरता येण्याजोग्या स्मार्ट कॉन्ट्रॅक्ट लायब्ररी आणि बिल्डिंग ब्लॉक्स शोधा."
lang: mr
---

तुम्हाला तुमच्या प्रकल्पातील प्रत्येक स्मार्ट कॉन्ट्रॅक्ट शून्यातून लिहिण्याची गरज नाही. अनेक ओपन सोर्स स्मार्ट कॉन्ट्रॅक्ट लायब्ररी उपलब्ध आहेत ज्या तुमच्या प्रकल्पासाठी पुन्हा वापरता येण्याजोगे बिल्डिंग ब्लॉक्स प्रदान करतात, ज्यामुळे तुम्हाला पुन्हा नव्याने सर्व गोष्टी करण्याची गरज भासत नाही.

## पूर्वअटी {#prerequisites}

स्मार्ट कॉन्ट्रॅक्ट लायब्ररीकडे वळण्यापूर्वी, स्मार्ट कॉन्ट्रॅक्टच्या रचनेची चांगली समज असणे योग्य ठरेल. जर तुम्ही अद्याप तसे केले नसेल, तर [स्मार्ट कॉन्ट्रॅक्टची रचना (anatomy)](/developers/docs/smart-contracts/anatomy/) पहा.

## लायब्ररीमध्ये काय असते {#whats-in-a-library}

तुम्हाला सहसा स्मार्ट कॉन्ट्रॅक्ट लायब्ररीमध्ये दोन प्रकारचे बिल्डिंग ब्लॉक्स मिळू शकतात: पुन्हा वापरता येण्याजोगे वर्तन (behaviors) जे तुम्ही तुमच्या कॉन्ट्रॅक्टमध्ये जोडू शकता आणि विविध मानकांची (standards) अंमलबजावणी.

### वर्तन (Behaviors) {#behaviors}

स्मार्ट कॉन्ट्रॅक्ट लिहिताना, तुम्ही स्वतःला समान पॅटर्न पुन्हा पुन्हा लिहिताना पाहण्याची दाट शक्यता असते, जसे की कॉन्ट्रॅक्टमध्ये संरक्षित ऑपरेशन्स करण्यासाठी _admin_ पत्ता नियुक्त करणे, किंवा अनपेक्षित समस्येच्या बाबतीत आपत्कालीन _pause_ बटण जोडणे.

स्मार्ट कॉन्ट्रॅक्ट लायब्ररी सहसा या वर्तनांची पुन्हा वापरता येण्याजोगी अंमलबजावणी [लायब्ररी](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) म्हणून किंवा Solidity मध्ये [इनहेरिटन्स (inheritance)](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) एक सोपी आवृत्ती आहे, जी एका पत्त्याला कॉन्ट्रॅक्टचा मालक म्हणून नियुक्त करते आणि एखाद्या पद्धतीचा (method) अ‍ॅक्सेस केवळ त्या मालकापुरता मर्यादित करण्यासाठी मॉडिफायर प्रदान करते.

```solidity
contract Ownable {
    address public owner;

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

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

तुमच्या कॉन्ट्रॅक्टमध्ये यासारखा बिल्डिंग ब्लॉक वापरण्यासाठी, तुम्हाला प्रथम तो इम्पोर्ट करावा लागेल आणि नंतर तुमच्या स्वतःच्या कॉन्ट्रॅक्टमध्ये त्यातून एक्सटेंड (extend) करावे लागेल. हे तुम्हाला तुमची स्वतःची फंक्शन्स सुरक्षित करण्यासाठी बेस `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). या लायब्ररी आहेत (बेस कॉन्ट्रॅक्ट्सच्या विरूद्ध) ज्या ओव्हरफ्लो तपासणीसह अंकगणितीय फंक्शन्स प्रदान करतात, ज्या भाषेने (language) प्रदान केलेल्या नाहीत. तुमच्या कॉन्ट्रॅक्टचे ओव्हरफ्लोपासून संरक्षण करण्यासाठी मूळ अंकगणितीय ऑपरेशन्सऐवजी यापैकी कोणत्याही लायब्ररीचा वापर करणे ही एक चांगली सवय आहे, कारण ओव्हरफ्लोचे विनाशकारी परिणाम होऊ शकतात!

### मानके (Standards) {#standards}

[संयोज्यता आणि आंतरकार्यक्षमता](/developers/docs/smart-contracts/composability/) सुलभ करण्यासाठी, इथेरियम समुदायाने **ERCs** च्या स्वरूपात अनेक मानके परिभाषित केली आहेत. तुम्ही त्यांच्याबद्दल [मानके](/developers/docs/standards/) विभागात अधिक वाचू शकता.

तुमच्या कॉन्ट्रॅक्टचा भाग म्हणून ERC समाविष्ट करताना, स्वतःची अंमलबजावणी तयार करण्याचा प्रयत्न करण्याऐवजी प्रमाणित अंमलबजावणी शोधणे योग्य ठरेल. अनेक स्मार्ट कॉन्ट्रॅक्ट लायब्ररीमध्ये सर्वात लोकप्रिय ERCs साठी अंमलबजावणी समाविष्ट असते. उदाहरणार्थ, सर्वव्यापी [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) मध्ये आढळू शकते. याव्यतिरिक्त, काही ERCs स्वतः ERC चा भाग म्हणून अधिकृत (canonical) अंमलबजावणी देखील प्रदान करतात.

हे नमूद करण्यासारखे आहे की काही ERCs स्वतंत्र नसतात, तर ते इतर ERCs मध्ये जोडलेले असतात. उदाहरणार्थ, [ERC-2612](https://eips.ethereum.org/EIPS/eip-2612) त्याची उपयोगिता सुधारण्यासाठी ERC-20 मध्ये एक विस्तार (extension) जोडते.

## लायब्ररी कशी जोडावी {#how-to}

तुमच्या प्रकल्पामध्ये लायब्ररी कशी समाविष्ट करावी यावरील विशिष्ट सूचनांसाठी तुम्ही समाविष्ट करत असलेल्या लायब्ररीच्या दस्तऐवजीकरणाचा (documentation) नेहमी संदर्भ घ्या. अनेक 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 { }
}
```

तुम्ही कोणतीही पद्धत वापरत असलात तरी, लायब्ररी समाविष्ट करताना, नेहमी [भाषेच्या (language)](/developers/docs/smart-contracts/languages/) आवृत्तीवर लक्ष ठेवा. उदाहरणार्थ, जर तुम्ही तुमचे कॉन्ट्रॅक्ट्स Solidity 0.5 मध्ये लिहित असाल तर तुम्ही Solidity 0.6 साठी असलेली लायब्ररी वापरू शकत नाही.

## कधी वापरावे {#when-to-use}

तुमच्या प्रकल्पासाठी स्मार्ट कॉन्ट्रॅक्ट लायब्ररी वापरण्याचे अनेक फायदे आहेत. सर्वात महत्त्वाचे म्हणजे, स्वतः कोड करण्याऐवजी तुमच्या सिस्टममध्ये समाविष्ट करण्यासाठी वापरण्यास-तयार बिल्डिंग ब्लॉक्स प्रदान करून हे तुमचा वेळ वाचवते.

सुरक्षा हा देखील एक मोठा फायदा आहे. ओपन सोर्स स्मार्ट कॉन्ट्रॅक्ट लायब्ररींची अनेकदा बारकाईने छाननी केली जाते. अनेक प्रकल्प त्यांच्यावर अवलंबून असल्याने, त्यांना सतत पुनरावलोकनाखाली ठेवण्यासाठी समुदायाकडून एक मजबूत प्रोत्साहन असते. पुन्हा वापरता येण्याजोग्या कॉन्ट्रॅक्ट लायब्ररींपेक्षा अ‍ॅप्लिकेशन कोडमध्ये त्रुटी आढळणे अधिक सामान्य आहे. अतिरिक्त सुरक्षेसाठी काही लायब्ररींचे [बाह्य ऑडिट (external audits)](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}

_तुम्हाला मदत केलेल्या एखाद्या कम्युनिटी रिसोर्सबद्दल माहिती आहे का? हे पृष्ठ संपादित करा आणि ते जोडा!_