کتابخانه سالیدیتی چیست ؟ + نحوه استفاده از کتابخانه در قرارداد هوشمند
کتابخانه سالیدیتی چیست ؟ چطور باید از کتابخانه solidity استفاده کرد ؟ اگر از قبل با برنامه نویسی آشنایی داشته باشی قطعا در مورد کتابخانه ها یا لایبرری ها اطلاعاتی داری. اما اگر قصد داری تا تازه وارد دنیای برنامه نویسی بشی باید بدونی که به بیان ساده کتابخانه در برنامه نویسی به مجموعه کدهایی که از قبل نوشته شده اند گفته می شود. ما با فراخوانی ابزار های موجود در کتابخانه و استفاده چند باره از آنها از نوشتن کدهای اضافی و مکرر جلوگیری می کنیم.
در ادامه قصد داریم تا در مورد کتابخانه ها در سالیدیتی بیشتر صحبت کنیم. اگر اطلاعاتی در مورد سالیدیتی نداری حتما مقاله سالیدیتی چیست را ببین تا با این مهارت پولساز آشنا شوی و یا اگر قصد یادگیری سالیدیتی را داری حتما مقاله آموزش جامع سالیدیتی را ببین تا علاوه بر یادگیری این زبان محبوب، روش های درآمد زایی از آن هم یاد بگیری.
کتابخانه ها در سالیدیتی
کتابخانه های سالیدیتی شباهت زیادی به قراردادهای هوشمند دارند ولی در واقع یک قرارداد هوشمند محسوب نمی شوند. به دلیل ماهیت این زبان این کتابخانه ها شامل توابع و ابزار هایی هستند که فقط می توان آن ها را مورد مشاهده قرار داد.ممکن است این توابع به صورت مشترک میان چندین قرارداد مصرفکننده مورد استفاده قرار بگیرند و به روند جلوگیری از تولید توابع اضافی کمک کنند.
همانطور که احتمالا اطلاع دارید دیپلوی یا پیاده سازی قراردادهای هوشمند به Gas یا همان هزینه نیاز دارد. نوشتن کد های تکراری می تواند این هزینه را بیشتر کند و طبیعتا شما به عنوان برنامه نویس بلاکچین باید به نحوی قرارداد را بنویسید که کمترین Gas مصرفی را داشته باشد. به همین منظور می توانیم به جای نوشتن کد های تکراری و استفاده از آنها در چندین قرارداد یک مجموعه کد را در قالب یک کتابخانه آماده کنیم و فقط یک بار از آنها استفاده کنیم. کتابخانه ها توانایی عملکرد آزادانه ندارند و باید تحت قوانینی که در ادامه اشاره می کنیم عمل کنند .
برخی قوانین کتابخانه solidity
در ادامه به بررسی برخی از این قوانین می پردازیم
- Stateless : اگر به طور ساده بخواهیم این قانون را توضیح دهیم در یک جمله می توان گفت ” توابع کتابخانه اجازه تغییر یا اصلاح وضعیت یا حالت قرارداد هوشمند را ندارند ” در ادامه و با بیان مثال های کاربردی بیشتر متوجه قوانین خواهید شد.
- View Only : فراخوانی توابع کتابخانه نیازی به Gas نخواهند داشت. و این به دلیل این است که تغییر حالتی در قرارداد اتفاق نمیافتد. به عبارت دیگر یک لایبرری سالیدیتی فقط توابع قابل مشاهده را پیاده سازی می کند.
- توابع داخلی : به هیچ عنوان نمی توانیم کتابخانه های سالیدیتی را از خارج محدوده سالیدیتی فراخوانی کنیم. هر قراردادی می تواند از کتابخانه استفاده کند اما امکان استفاده از آنها از بیرون محدوده پیاده سازی وجود ندارد.
- عدم وجود قابلیت وراثتی : کتابخانه ها یک هویت مستقل دارند بنابراین نمی توانند از کتابخانه یا قرارداد دیگری ارث بری کنند
- عدم وجود توابع جایگزین یا قابل پرداخت : در کتابخانه های سالیدیتی امکان پیاده سازی توابع جایگزین(Fallback) یا قابل پرداخت (Payable) وجود ندارد
کتابخانه solidity چگونه ساخته می شود ؟
حالا که با کلیات و تعاریف کتابخانه solidity آشنا شدیم بیایید تا نحوه تعریف کردن یک کتابخانه سالیدیتی را به صورت عملی تمرین کنیم.
پیاده سازی کتابخانه با کلمه کلیدی Library انجام می شود. به مثال زیر توجه کنید.
در مثال بالا عبارت adder در واقع نام دلخواهی است که برای کتابخانه انتخاب کرده ایم.
در این قسمت از Remix IDE استفاده کردهایم تا بتوانید مفاهیم مطرح شده را به آسانی فرا بگیرید.
همانطور که مشاهده می کنید در فایل Library.sol کتابخانه ای با نام soliditycode ایجاد کرده ایم.
فرض کنید در این کتابخانه تابعی به نام add وجود دارد که دو مقدار x و y را دریافت و حاصل جمع آنها را به ما تحویل دهد.
تعریف این تابع به این صورت خواهد بود :
تبریک . . . !!! شما اولین کتابخانه خود را ساختید
اما یک بخش دیگر هنوز باقی مانده است.
بعد از نوشتن کتابخانه سالیدیتی ما باید از آن در قرارداد هوشمند استفاده کنیم. نحوه استفاده از کتابخانه solidity به این صورت است :
در بستر Remix به فولدر Contracts مراجعه کرده و فایل جدید Calculator.sol که شامل قرارداد Calculator یا محاسبهگر میشود را بسازید.
در مرحله بعدی به شکل زیر از تابع در قرارداد استفاده میکنیم :
به یاد داشته باشید که پیش از این کتابخانه Library را در فایل قرارداد خود وارد کردهایم. در این نقطه تنها چیزی که باقی میماند، استفاده از رویکرد یا متد Add از کتابخانه در بطن متد GetSUM قرارداد Calculator است.
به منظور استفاده از یک لایبرری در داخل یک قرارداد لازم است تا در ابتدا کاربرد کتابخانه مورد نظر را اعلام کنیم. شاید کمی گیج شده باشید!
جای نگرانی نیست، در این بخش به درک کامل این موضوع در قرارداد مثالی خود میپردازیم.
سه مرحله اصلی در این قطعه کد اتفاق افتاده است :
- اول وارد کردن Statement
- دوم استفاده از Library برای Unit که یک اتفاق جدید است.
- و در آخر ، FirstNumber.add(SecondNumber)؛ که ممکن است برای شما کمی گیجکننده باشد.
برای استفاده از کتابخانه solidity در داخل یک قرارداد نیاز است تا در ابتدا نوع داده ای که کتابخانه بر اساس آن کار می کند را مشخص کنیم. برای این کار از دستور زیر استفاده می کنیم :
Using <Library Name> for <Data Type>
برای مثال در تابع add که در کتابخانه library است بر روی Uint کار خود را انجام می دهد و مقدار a را به عنوان Uint دریافت می کند.
برای درک اهداف ما در این بخش، میتوانید اینطور فرض کنید که تابع لایبرری شما بخشی از نوع داده Unit شده و به راحتی در بستر آبجکتها یا اشیا این تابع در دسترس خواهد بود.
در نهایت، هنگامی که تابع لایبرری به بخشی از خود نوع داده تبدیل شود، میتوانیم متد مورد نظر مبتنی بر آبجکت نشان داده شده در بخش بالا را فراخوانی کنیم. به عنوان مثال به این شیوه فراخوانی میتوان اشاره کرد: FirstNumber.add (SecondNumber)
توجه داشته باشید که مولفه اول این تابع لایبرری، در واقع همان پارامتری محسوب میشود که تابع ما بر اساس آن فراخوانی شده است. مولفههای باقیمانده و بعدی همچنان در بطن فراخوانی تابع منتقل میشوند.
پیادهسازی قرارداد
در این بخش به صورت تمام کارهای مربوط به کتابخانه های سالیدیتی و توسعه قرارداد به پایان رسیده است. حالا میتوانیم به روند خود ادامه داده و به سراغ دیپلوی کردن قرارداد Calculator رفته بررسی کنیم که آیا همه چیز طبق انتظارات ما پیش میرود یا خیر.
سخن پایانی
در این مقاله سعی کردیم تا شما را با کتابخانه های سالیدیتی آشنا کنیم و کلیات و تعاریف کتابخانه solidity را بررسی کنیم. امیدواریم این مقاله برای شما مفید بوده باشه. در صورتی که سوالی در مورد مقاله دارید و یا نکته ای هست که در مقاله اشاره نشده خوشحال می شویم تا از طریق بخش نظرات مطرح کنید.
💙💙لطفا اگر تجربه ای در این زمینه دارید از طریق بخش نظرات با دیگران در میان بگذارید💙💙
دیدگاهتان را بنویسید