---
title: "سمارٹ کنٹریکٹ لائبریریاں"
description: "اپنے ایتھیریم ڈیولپمنٹ پروجیکٹس کو تیز کرنے کے لیے دوبارہ قابل استعمال سمارٹ کنٹریکٹ لائبریریاں اور بلڈنگ بلاکس دریافت کریں۔"
lang: ur
---

آپ کو اپنے پروجیکٹ میں ہر سمارٹ کنٹریکٹ کو شروع سے لکھنے کی ضرورت نہیں ہے۔ بہت سی اوپن سورس سمارٹ کنٹریکٹ لائبریریاں دستیاب ہیں جو آپ کے پروجیکٹ کے لیے دوبارہ قابل استعمال بلڈنگ بلاکس فراہم کرتی ہیں جو آپ کو ایک ہی کام کو بار بار کرنے سے بچا سکتی ہیں۔

## پیشگی شرائط {#prerequisites}

سمارٹ کنٹریکٹ لائبریریوں میں جانے سے پہلے، سمارٹ کنٹریکٹ کی ساخت کی اچھی سمجھ ہونا ایک اچھا خیال ہے۔ اگر آپ نے ابھی تک ایسا نہیں کیا ہے تو [سمارٹ کنٹریکٹ کی اناٹومی](/developers/docs/smart-contracts/anatomy/) پر جائیں۔

## لائبریری میں کیا ہوتا ہے {#whats-in-a-library}

آپ عام طور پر سمارٹ کنٹریکٹ لائبریریوں میں دو قسم کے بلڈنگ بلاکس تلاش کر سکتے ہیں: دوبارہ قابل استعمال طرز عمل (behaviors) جو آپ اپنے کنٹریکٹس میں شامل کر سکتے ہیں، اور مختلف معیارات (standards) کا نفاذ۔

### طرز عمل (Behaviors) {#behaviors}

سمارٹ کنٹریکٹس لکھتے وقت، اس بات کا قوی امکان ہے کہ آپ خود کو ایک جیسے پیٹرنز بار بار لکھتے ہوئے پائیں گے، جیسے کہ کنٹریکٹ میں محفوظ کارروائیوں کو انجام دینے کے لیے ایک _ایڈمن_ پتہ تفویض کرنا، یا کسی غیر متوقع مسئلے کی صورت میں ہنگامی _توقف (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) تک رسائی کو صرف اس مالک تک محدود کرنے کے لیے ایک موڈیفائر (modifier) فراہم کرتا ہے۔

```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/) کو آسان بنانے کے لیے، ایتھیریم کمیونٹی نے <span dir="ltr">**ERCs**</span> کی شکل میں کئی معیارات کی وضاحت کی ہے۔ آپ ان کے بارے میں مزید [معیارات](/developers/docs/standards/) کے سیکشن میں پڑھ سکتے ہیں۔

اپنے کنٹریکٹس کے حصے کے طور پر کسی ERC کو شامل کرتے وقت، یہ ایک اچھا خیال ہے کہ آپ اپنا نفاذ خود بنانے کی کوشش کرنے کے بجائے معیاری نفاذ تلاش کریں۔ بہت سی سمارٹ کنٹریکٹ لائبریریوں میں مقبول ترین ERCs کے نفاذ شامل ہوتے ہیں۔ مثال کے طور پر، ہر جگہ موجود [<span dir="ltr">ERC-20</span> قابل تبادلہ ٹوکن معیار](/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 کے حصے کے طور پر مستند نفاذ بھی فراہم کرتے ہیں۔

یہ بتانا ضروری ہے کہ کچھ ERCs اکیلے نہیں ہوتے، بلکہ دیگر ERCs میں اضافے ہوتے ہیں۔ مثال کے طور پر، [<span dir="ltr">ERC-2612</span>](https://eips.ethereum.org/EIPS/eip-2612) اس کی افادیت کو بہتر بنانے کے لیے <span dir="ltr">ERC-20</span> میں ایک ایکسٹینشن کا اضافہ کرتا ہے۔

## لائبریری کیسے شامل کریں {#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 { }
}
```

اس بات سے قطع نظر کہ آپ کون سا طریقہ استعمال کرتے ہیں، لائبریری شامل کرتے وقت، ہمیشہ [زبان](/developers/docs/smart-contracts/languages/) کے ورژن پر نظر رکھیں۔ مثال کے طور پر، اگر آپ اپنے کنٹریکٹس <span dir="ltr">Solidity 0.5</span> میں لکھ رہے ہیں تو آپ <span dir="ltr">Solidity 0.6</span> کے لیے لائبریری استعمال نہیں کر سکتے۔

## کب استعمال کریں {#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/) _– سمارٹ کنٹریکٹس بناتے وقت سیکیورٹی کے تحفظات پر ایک ٹیوٹوریل، بشمول لائبریری کا استعمال۔_
- [<span dir="ltr">ERC-20</span> ٹوکن سمارٹ کنٹریکٹ کو سمجھیں](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _- متعدد لائبریریوں کے ذریعے فراہم کردہ <span dir="ltr">ERC-20</span> معیار پر ٹیوٹوریل۔_

## مزید مطالعہ {#further-reading}

_کسی ایسے کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_