مرکزی مواد پر جائیں
Change page

اسمارٹ کانٹریکٹ لائبریریاں

صفحہ کی آخری اپ ڈیٹ: 21 اگست، 2025

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

پیشگی شرائط

اسمارٹ کانٹریکٹ لائبریریوں میں جانے سے پہلے، اسمارٹ کانٹریکٹ کی ساخت کی اچھی سمجھ ہونا ایک اچھا خیال ہے۔ اگر آپ نے ابھی تک ایسا نہیں کیا ہے تو اسمارٹ کانٹریکٹ کی اناٹومی پر جائیں۔

لائبریری میں کیا ہوتا ہے

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

رویے (Behaviors)

اسمارٹ کانٹریکٹس لکھتے وقت، اس بات کا قوی امکان ہے کہ آپ خود کو بار بار ایک جیسے پیٹرن لکھتے ہوئے پائیں گے، جیسے کہ کانٹریکٹ میں محفوظ آپریشنز انجام دینے کے لیے ایک admin ایڈریس تفویض کرنا، یا کسی غیر متوقع مسئلے کی صورت میں ہنگامی pause بٹن شامل کرنا۔

اسمارٹ کانٹریکٹ لائبریریاں عام طور پر ان رویوں کا دوبارہ قابل استعمال نفاذ لائبریریوں (opens in a new tab) کے طور پر یا Solidity میں وراثت (inheritance) (opens in a new tab) کے ذریعے فراہم کرتی ہیں۔

مثال کے طور پر، ذیل میں OpenZeppelin Contracts لائبریری (opens in a new tab) سے Ownable کانٹریکٹ (opens in a new tab) کا ایک سادہ ورژن ہے، جو ایک ایڈریس کو کانٹریکٹ کے مالک کے طور پر نامزد کرتا ہے، اور کسی طریقہ کار (method) تک رسائی کو صرف اس مالک تک محدود کرنے کے لیے ایک موڈیفائر (modifier) فراہم کرتا ہے۔

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}
سب دکھائیں

اپنے کانٹریکٹ میں اس طرح کا بلڈنگ بلاک استعمال کرنے کے لیے، آپ کو پہلے اسے امپورٹ کرنا ہوگا، اور پھر اسے اپنے کانٹریکٹس میں ایکسٹینڈ (extend) کرنا ہوگا۔ یہ آپ کو اپنے فنکشنز کو محفوظ بنانے کے لیے بنیادی 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) ہے۔ یہ وہ لائبریریاں ہیں (بنیادی کانٹریکٹس کے برعکس) جو اوور فلو (overflow) چیکس کے ساتھ ریاضیاتی فنکشنز فراہم کرتی ہیں، جو زبان کی طرف سے فراہم نہیں کیے جاتے۔ اپنے کانٹریکٹ کو اوور فلو سے بچانے کے لیے مقامی ریاضیاتی آپریشنز کے بجائے ان میں سے کسی ایک لائبریری کا استعمال کرنا ایک اچھی پریکٹس ہے، کیونکہ اوور فلو کے تباہ کن نتائج ہو سکتے ہیں!

معیارات (Standards)

کمپوز ایبلٹی اور انٹرآپریبلٹی کو آسان بنانے کے لیے، ایتھیریم کمیونٹی نے ERCs کی شکل میں کئی معیارات کی وضاحت کی ہے۔ آپ ان کے بارے میں مزید معیارات کے سیکشن میں پڑھ سکتے ہیں۔

جب آپ اپنے کانٹریکٹس کے حصے کے طور پر کسی ERC کو شامل کرتے ہیں، تو اپنا خود کا نفاذ (implementation) بنانے کی کوشش کرنے کے بجائے معیاری نفاذ تلاش کرنا ایک اچھا خیال ہے۔ بہت سی اسمارٹ کانٹریکٹ لائبریریوں میں مقبول ترین ERCs کے نفاذ شامل ہوتے ہیں۔ مثال کے طور پر، ہر جگہ موجود ERC20 فنجیبل ٹوکن کا معیار HQ20 (opens in a new tab)، DappSys (opens in a new tab) اور OpenZeppelin (opens in a new tab) میں پایا جا سکتا ہے۔ مزید برآں، کچھ ERCs خود ERC کے حصے کے طور پر کینونیکل (canonical) نفاذ بھی فراہم کرتے ہیں۔

یہ بات قابل ذکر ہے کہ کچھ ERCs اسٹینڈ الون (standalone) نہیں ہیں، بلکہ دیگر ERCs میں اضافے ہیں۔ مثال کے طور پر، ERC2612 (opens in a new tab) اس کی افادیت کو بہتر بنانے کے لیے ERC20 میں ایک ایکسٹینشن کا اضافہ کرتا ہے۔

لائبریری کیسے شامل کریں

اپنے پروجیکٹ میں لائبریری کو شامل کرنے کے بارے میں مخصوص ہدایات کے لیے ہمیشہ اس لائبریری کی دستاویزات (documentation) سے رجوع کریں جسے آپ شامل کر رہے ہیں۔ کئی 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 - اپنی مرضی کے اسمارٹ کانٹریکٹس کو مؤثر طریقے سے بنانے کے لیے درکار ٹولز فراہم کرتا ہے

مزید مطالعہ

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

کیا یہ مضمون مددگار تھا؟