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

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

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

پیشگی شرائط

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

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

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

طرز عمل (Behaviors)

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

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

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

اپنے کنٹریکٹ میں اس طرح کا بلڈنگ بلاک استعمال کرنے کے لیے، آپ کو پہلے اسے امپورٹ کرنا ہوگا، اور پھر اسے اپنے کنٹریکٹس میں ایکسٹینڈ (extend) کرنا ہوگا۔ یہ آپ کو اپنے فنکشنز کو محفوظ بنانے کے لیے بنیادی Ownable کنٹریکٹ کے ذریعے فراہم کردہ موڈیفائر استعمال کرنے کی اجازت دے گا۔

import ".../Ownable.sol"; // امپورٹ کی گئی لائبریری کا پاتھ

contract MyContract is Ownable {
    // درج ذیل فنکشن کو صرف مالک ہی کال کر سکتا ہے
    function secured() onlyOwner public {
        msg.sender.transfer(1 ether);
    }
}

ایک اور مقبول مثال SafeMath (opens in a new tab) یا DsMath (opens in a new tab) ہے۔ یہ وہ لائبریریاں ہیں (بنیادی کنٹریکٹس کے برعکس) جو اوور فلو چیکس کے ساتھ ریاضیاتی فنکشنز فراہم کرتی ہیں، جو زبان (language) کی طرف سے فراہم نہیں کیے جاتے۔ اپنے کنٹریکٹ کو اوور فلو سے بچانے کے لیے مقامی ریاضیاتی کارروائیوں کے بجائے ان میں سے کسی ایک لائبریری کا استعمال کرنا ایک اچھی مشق ہے، کیونکہ اوور فلو کے تباہ کن نتائج ہو سکتے ہیں!

معیارات (Standards)

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

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

یہ بتانا ضروری ہے کہ کچھ ERCs اکیلے نہیں ہوتے، بلکہ دیگر ERCs میں اضافے ہوتے ہیں۔ مثال کے طور پر، ERC-2612 (opens in a new tab) اس کی افادیت کو بہتر بنانے کے لیے ERC-20 میں ایک ایکسٹینشن کا اضافہ کرتا ہے۔

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

اپنے پروجیکٹ میں لائبریری کو شامل کرنے کے بارے میں مخصوص ہدایات کے لیے ہمیشہ اس لائبریری کی دستاویزات (documentation) سے رجوع کریں جسے آپ شامل کر رہے ہیں۔ کئی Solidity کنٹریکٹ لائبریریوں کو npm کا استعمال کرتے ہوئے پیک کیا جاتا ہے، لہذا آپ انہیں آسانی سے npm install کر سکتے ہیں۔ کنٹریکٹس کی کمپائلنگ کے لیے زیادہ تر ٹولز سمارٹ کنٹریکٹ لائبریریوں کے لیے آپ کے node_modules میں دیکھیں گے، لہذا آپ درج ذیل کام کر سکتے ہیں:

// یہ آپ کے node_modules سے @openzeppelin/contracts لائبریری لوڈ کرے گا
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

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

اس بات سے قطع نظر کہ آپ کون سا طریقہ استعمال کرتے ہیں، لائبریری شامل کرتے وقت، ہمیشہ زبان کے ورژن پر نظر رکھیں۔ مثال کے طور پر، اگر آپ اپنے کنٹریکٹس Solidity 0.5 میں لکھ رہے ہیں تو آپ Solidity 0.6 کے لیے لائبریری استعمال نہیں کر سکتے۔

کب استعمال کریں

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

سیکیورٹی بھی ایک بڑا فائدہ ہے۔ اوپن سورس سمارٹ کنٹریکٹ لائبریریوں کی اکثر کڑی جانچ پڑتال کی جاتی ہے۔ چونکہ بہت سے پروجیکٹس ان پر انحصار کرتے ہیں، اس لیے کمیونٹی کی جانب سے انہیں مسلسل جائزے کے تحت رکھنے کی ایک مضبوط ترغیب موجود ہے۔ دوبارہ قابل استعمال کنٹریکٹ لائبریریوں کی نسبت ایپلیکیشن کوڈ میں غلطیاں تلاش کرنا بہت زیادہ عام ہے۔ کچھ لائبریریاں اضافی سیکیورٹی کے لیے بیرونی آڈٹ (opens in a new tab) سے بھی گزرتی ہیں۔

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

آخر میں، جب یہ فیصلہ کر رہے ہوں کہ آیا کوئی لائبریری شامل کرنی ہے، تو اس کے مجموعی استعمال پر غور کریں۔ وسیع پیمانے پر اپنائی گئی لائبریری کے فوائد یہ ہیں کہ اس کی کمیونٹی بڑی ہوتی ہے اور زیادہ لوگ اس میں مسائل تلاش کر رہے ہوتے ہیں۔ سمارٹ کنٹریکٹس کے ساتھ تعمیر کرتے وقت سیکیورٹی آپ کی بنیادی توجہ ہونی چاہیے!

اوپن زیپلن کنٹریکٹس - محفوظ سمارٹ کنٹریکٹ ڈیولپمنٹ کے لیے مقبول ترین لائبریری۔

DappSys - سمارٹ کنٹریکٹس کے لیے محفوظ، سادہ، لچکدار بلڈنگ بلاکس۔

HQ20 - کنٹریکٹس، لائبریریوں اور مثالوں کے ساتھ ایک Solidity پروجیکٹ جو آپ کو حقیقی دنیا کے لیے مکمل خصوصیات والی ڈسٹری بیوٹڈ ایپلیکیشنز بنانے میں مدد کرتا ہے۔

thirdweb Solidity SDK - اپنی مرضی کے سمارٹ کنٹریکٹس کو موثر طریقے سے بنانے کے لیے درکار ٹولز فراہم کرتا ہے

مزید مطالعہ

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