پرش به محتوای اصلی
Change page

کتابخانه های قرارداد هوشمند

لازم نیست هر قرارداد هوشمندی را در پروژه خود از ابتدا بنویسید. بسیاری از کتابخانه‌های قراردادهای هوشمند منبع باز موجود هستند که بلوک‌های ساختن قابل استفاده مجدد را برای پروژه شما فراهم می‌کنند که می‌تواند شما را از اختراع مجدد چرخ نجات دهد.

پیش‌نیازها

قبل از ورود به کتابخانه های قرارداد هوشمند، ایده خوبی است که درک خوبی از ساختار قرارداد هوشمند داشته باشید. اگر هنوز این کار را نکرده‌اید، به آناتومی قراردادهای هوشمند بروید.

در یک کتابخانه چه چیز است؟

معمولاً می‌توانید دو نوع بلوک ساختن را در کتابخانه‌های قراردادهای هوشمند بیابید: رفتارهای قابل استفاده مجدد که می‌توانید به قراردادهای خود اضافه کنید، و اجرای استانداردهای مختلف.

رفتارها

هنگام نوشتن قراردادهای هوشمند، این احتمال وجود دارد که شما بارها و بارها الگوهای مشابهی را بنویسید، مانند اختصاص یک آدرس ادمین برای انجام عملیات محافظت شده در یک قرارداد، یا افزودن دکمه مکث اضطراری در صورت بروز مشکل غیرمنتظره.

کتابخانه‌های قراردادهای هوشمند معمولاً پیاده‌سازی‌های قابل استفاده مجدد از این رفتارها را به‌عنوان کتابخانه‌ها(opens in a new tab) یا ارث‌بری(opens in a new tab) در Solidity ارائه می‌کنند.

به عنوان یک مثال، یک نسخه‌ی ساده‌شده از قرارداد قابل تصاحب(opens in a new tab) از کتابخانه‌ی قراردادهای OpenZeppelin(opens in a new tab) را دنبال کنید که یک آدرس را به عنوان مالک قرارداد تعیین می کند و یک اصلاح کننده برای محدود کردن دسترسی به یک روش فقط به آن مالک ارائه می دهد.

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}
نمایش همه
کپی

برای استفاده از یک بلوک مانند این در قرارداد خود، باید ابتدا آن را وارد کنید، و سپس آن را در قراردادهای خود بسط دهید. این به شما امکان می دهد از اصلاح کننده ارائه شده توسط قرارداد پایه Ownable برای ایمن‌سازی توابع خود استفاده کنید.

1import ".../Ownable.sol"; // Path to the imported library
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
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) است. اینها کتابخانه‌هایی هستند (برخلاف قراردادهای پایه) که توابع حسابی را با بررسی‌های سرریز ارائه می‌کنند که توسط زبان ارائه نمی‌شود. استفاده از هر یک از این کتابخانه ها به جای عملیات محاسباتی بومی برای محافظت از قرارداد شما در برابر سرریزها، که می تواند عواقب فاجعه باری داشته باشد، تمرین خوبی است!

استاندارد‌ها

برای تسهیل ترکیب پذیری و قابلیت همکاری، جامعه‌ی اتریوم چند استاندارد به شکل ERCها طراحی کرده‌ است. شما می‌توانید درباره‌ی آن‌ها در بخش استانداردها بیشتر بخوانید.

هنگامی که یک ERC را به عنوان بخشی از قراردادهای خود درج می کنید، ایده خوبی است که به جای اجرای پیاده‌سازی های خود، به دنبال پیاده‌سازی های استاندارد باشید. بسیاری از کتابخانه های قراردادهای هوشمند شامل پیاده‌سازی هایی برای محبوب ترین ERC ها هستند. برای مثال استاندارد توکن‌های قابل معاوضه ERC20 که همه‌جا وجود دارد می‌توانند در HQ20(opens in a new tab)، DappSys(opens in a new tab) و OpenZeppelin(opens in a new tab) یافت شوند. علاوه بر این، برخی از ERC ها نیز پیاده‌سازی های متعارف را به عنوان بخشی از خود ERC ارائه می دهند.

شایان ذکر است که برخی از ERC ها مستقل نیستند، بلکه اضافه شده به سایر ERC ها هستند. برای مثال، ERC2612(opens in a new tab) یک افزونه‌ای به ERC20 برای بهبود استفاده‌اش اضافه می‌کند.

چگونه یک کتابخانه اضافه کنیم

برای دستورالعمل‌های خاص در مورد نحوه گنجاندن کتابخانه در پروژه، همیشه به مستندات کتابخانه‌ای که اضافه می‌کنید مراجعه کنید. چندین کتابخانه قرارداد Solidity با استفاده از npm بسته بندی شده اند، بنابراین شما می توانید آنها را npm install کنید. بیشتر ابزارهای کامپایل کردن قراردادها، به node_modules برای کتابخانه‌های قرارداد هوشمند نگاه می‌کنند، در نتیجه شما می‌توانید به روش زیر عمل کنید:

1// This will load the @openzeppelin/contracts library from your node_modules
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 - محبوب ترین کتابخانه برای توسعه قراردادهای هوشمند ایمن.

DappSys - بلوک های ساخت ایمن، ساده و انعطاف‌پذیر برای قراردادهای هوشمند.

HQ20 - یک پروژه Solidity با قراردادها، کتابخانه ها و نمونه هایی که به شما کمک می کند تا برنامه های کاربردی توزیع شده با ویژگی های کامل را برای دنیای واقعی بسازید.

کیت توسعه نرم‌افزار سالیدیتی Thirdweb-** ابزار های لازم برای ساخت قراردادهای هوشمند بهینه و مؤثر را در اختیار توسعه دهندگان میگذارد**

  • ملاحظات امنیتی برای توسعه دهندگان اتریوم - آموزشی در مورد ملاحظات امنیتی هنگام ساخت قراردادهای هوشمند، از جمله استفاده از کتابخانه.
  • فهم قرارداد هوشمند توکن ERC-20 - آموزشی بر استاندارد ERC20، فراهم شده توسط چندین کتابخانه.

بیشتر بخوانید

می‌خواهید در مورد منابع جامعه که به شما کمک کرده بدانید؟ این صفحه را ویرایش و اضافه کنید!

آیا این مقاله مفید بود؟