جستجو برای:
سبد خرید 0
  • خدمات ما
    • طراحی وبسایت و اپلیکیشن
    • طراحی سامانه های تحت وب
    • طراحی وبسایت و توکن در بستر بلاکچین
    • انجام پروژه های هوش مصنوعی
  • نمونه کارها
  • آخرین دوره های آموزشی
  • درخواست پروژه
  • مقالات
  • تماس با ما

ورود

گذرواژه خود را فراموش کرده اید؟

ثبت نام

داده های شخصی شما برای پشتیبانی از تجربه شما در این وب سایت، برای مدیریت دسترسی به حساب کاربری شما و برای اهداف دیگری که در سیاست حفظ حریم خصوصی ما شرح داده می شود مورد استفاده قرار می گیرد.

  • 09395149363
  • info@fara-zaman.ir
  • لیست علاقه مندی ها
0
فرازمان | شرکت برنامه نویسی
  • خدمات ما
    • طراحی وبسایت و اپلیکیشن
    • طراحی سامانه های تحت وب
    • طراحی وبسایت و توکن در بستر بلاکچین
    • انجام پروژه های هوش مصنوعی
  • نمونه کارها
  • آخرین دوره های آموزشیداغ
  • درخواست پروژه
  • مقالاتجدید
  • تماس با ما
آخرین اطلاعیه ها
جهت نمایش اطلاعیه باید وارد سایت شوید
شروع کنید

وبلاگ

فرازمان | شرکت برنامه نویسیاخبارآموزش برنامه نویسی سالیدیتیکتابخانه ها(Library) در قراردادهای هوشمند Solidity

کتابخانه ها(Library) در قراردادهای هوشمند Solidity

21 خرداد 1401
ارسال شده توسط مریم طاهری
آموزش برنامه نویسی سالیدیتی
کتابخانه ها(Libraries) در قراردادهای هوشمند Solidity

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

کتابخانه ها در قراردادهای هوشمند Solidity بلوک هایی از کد قابل استفاده مجدد هستند. آنها حاوی توابعی هستند که توسط سایر قراردادها در شبکه بلاک چین استفاده می شود. کتابخانه ها برنامه نویسی شی گرا را ترویج می کنند و به توسعه دهندگان اجازه می دهند طراحی خود را ماژولار سازند.

استفاده از کتابخانه ها در قراردادهای هوشمند Solidity مزایایی دارد. بزرگترین مزیت استفاده مجدد کد در قراردادهای دیگر است. از آنجایی که کتابخانه ها قابل استفاده مجدد هستند، به جلوگیری از تکرار کد کمک می کنند. علاوه بر این، کتابخانه‌ها در مصرف گس صرفه‌جویی می‌کنند، زیرا یک کد چندین بار در بلاک چین مستقر نمی‌شود.

کتابخانه ها شکل خاصی از قراردادها هستند که:

  • نمونه مشابهی ندارند.
  • هیچ گونه ذخیره سازی یا متغیر حالتی که تغییر کند در خود نگهداری نمی کنند.
  • نمی تواند توابع بازگشتی داشته باشد.
  • هیچ گزارش رویدادی (event) وجود ندارد.
  • اتر (موجودی) را نگه نمی دارد.
  • بدون مالک هستند.
  • نمی توان آن ها را تخریب کرد.
  • نمی تواند ارث ببرد یا ارث برده شود.

Libraries در Solidity به شما امکان می دهد تا قابلیت هایی را به انواع اضافه کنید. به عنوان مثال می توانید از یک کتابخانه برای بهبود عملکرد متغیری از نوع uint در قرارداد استفاده کنید.

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

به عنوان مثال یک کتابخانه Solidity را در نظر بگیرید که عملکردهای یک ماشین حساب اصلی (جمع، تفریق، ضرب و تقسیم) را انجام می دهد. قرارداد فراخوان ورودی های 5 و 5 را به تابع افزودن کتابخانه ها ارسال می کند. تابع افزودن کتابخانه اجرا می شود و 10 را به قرارداد فراخوانی برمی گرداند.

نحوه ایجاد کتابخانه (Library) در Solidity

برای ایجاد یک کتابخانه (Library) را با کلمه کلیدی Library تعریف کنید نه با کلمه کلیدی Contract.

				
					pragma solidity ^0.8.6;

library libraryName {
				
			

Library ها می توانند چندین نوع داده مختلف را پشتیبانی کنند.

انواع پشتیبانی شده عبارتند از:

  • Libraryها از متغیرهایی که به عنوان const تعریف شده اند پشتیبانی می کنند زیرا تغییرناپذیر هستند. متغیرهای Library در بایت کد ذخیره می شوند نه در Storage در بلاک چین.
  • Struts و Enums در Library پشتیبانی می شوند.

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

				
					pragma solidity ^0.8.6;

library MathLibrary {

     function multiply(uint a, uint b) public view returns (uint, address) {
          return (a * b, address(this));
      }
}
How to 
				
			

نحوه استقرار Library در Solidity

Libraryها در Solidity به صورت قرارداد کدگذاری شده یا پیوندی مستقر می شوند.

1- قراردادن یک Library در یک قرارداد – اگر یک Library فقط عملکردهای داخلی داشته باشد، Library در قراردادی که از آن استفاده می کند گنجانده می شود. نیازی به قرارداد جداگانه برای Library نیست. در نمودار زیر قرارداد Z را ببینید که نمونه ای از کد فراخوانی کننده و Library همه در یک قرارداد است.

2- پیوند یک Library به یک قرارداد – اگر کتابخانه ای دارای تابع عمومی یا خارجی باشد، می توان آن را به طور جداگانه مستقر کرد. قرارداد فراخوانی کننده با استفاده از Library باید به آدرس قرارداد کتابخانه اشاره کند. در نمودار زیر پیوند قرارداد X و Y به قرارداد کتابخانه را ببینید. تصویر زیر استفاده مجدد از کد قرارداد و استفاده از کد کمتر را نشان می دهد که منجر به صرفه جویی در مصرف گس می شود.

نحوه استقرار کتابخانه در Solidity​

برای نشان دادن این دو مفهوم، هر دو روش را در زیر با استفاده از قراردادهای نمونه بررسی خواهیم کرد.

نحوه استفاده از کتابخانه در قرارداد هوشمند Solidity

کتابخانه را در یک قرارداد جاسازی کنید

برای شروع، در کد مربوطه زیر عبارت pragma، کد Library خود را قرار دهید. می توانید کد Library خود را مستقیماً در قرارداد هوشمند بنویسید یا می توانید کد Library خود را در یک فایل جداگانه نگه دارید و آن را وارد کنید.

گزینه 1 – استفاده از Import

هنگامی که کلمه کلیدی “Import” در یک قرارداد استفاده می شود، کامپایلر کد موجود در فایل را مستقیماً در قرارداد هوشمند کپی می کند.

				
					pragma solidity ^0.8.6;

//if your library is in another file you can import it into the contract
import LibraryName from “./libraryfile.sol”;

or
//to import all libraries in the file use the pattern below
import "./libraryfile.sol";
				
			

گزینه 2 – کد Library به طور مستقیم در قرارداد

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

				
					pragma solidity ^0.8.6;

library MathLibrary {

    //function that returns a * b and the requesting address 
    function multiply(uint a, uint b) internal view returns (uint, address) {
        return (a * b, address(this));
    }
}    
				
			

برای استفاده از کتابخانه در قرارداد هوشمند از دستور زیر استفاده کنید:

استفاده از LibraryName برای type

این دستورالعمل برای پیوست کردن توابع از کتابخانه (LibraryName) به هر نوع داده (نوع) قرارداد فراخوانی استفاده می شود.

LibraryName– نام کتابخانه ای است که می خواهید در قرارداد استفاده کنید.

Type– نوع متغیری که از کتابخانه استفاده می شود (uint، string، address و غیره). از علامت * برای پیوست کردن توابع از کتابخانه به همه انواع استفاده کنید.

در زیر نمونه قراردادی است که از Library استفاده می کند. به نحوه دستورالعمل “using MathLibrary for uint” توجه داشته باشید.  این بدان معنی است که تابع را از MathLibrary برای همه انواع Uint وصل کنید.

				
					pragma solidity ^0.8.6;

library MathLibrary {

    //function that returns a * b and the requesting address 
    function multiply(uint a, uint b) internal view returns (uint, address) {
        return (a * b, address(this));
    }
}    
 

contract exampleContractUsingLibrary {

    //use the syntax - using LibraryName for Type
    //this can be use to attach library functions to any data type.
    using MathLibrary for uint;
    address owner = address(this);

    
    //function calls the function multiply in the MathLibrary above
    function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);
    }
}
				
			

چگونه یک تابع یک Library را فراخوانی می کند

برای استفاده از توابع Library، سینتکس به شکل زیر است:

variable.libraryFunctionName(Argument)

1- متغیری را که می خواهید به تابع کتابخانه منتقل کنید، تعیین کنید

2- یک “.” را اضافه کنید به دنبال آن نام تابع کتابخانه ای که می خواهیم استفاده کنید مشخص کنید

3- Solidity به طور ضمنی در اولین پارامتر به تابع منتقل می شود

مثلا:

				
					//variable _a use the multiply function in the library
//_a.multiply(_b) which means multiply a * b
//_a is implicitly passed in as the first parameter
//_b is passed in as the second parameter
function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);
				
			

پیوند یک کتابخانه مستقر شده با استفاده از Remix

در مرحله بعد، می خواهیم از Remix برای پیوند یک قرارداد جدید به یک Library مستقر استفاده کنیم. این فرایند به شرح زیر است:

  • قرارداد Library را در یک شبکه آزمایشی دپلوی کنید
  • Remix را با آدرس کتابخانه مستقر پیکربندی کنید
  • دپلوی قرارداد فراخوانی کننده

قبل از شروع پیوند قراردادها، پیش شرط زیر باید رخ دهد:

  • شما یک قرارداد Library را مستقر و تأیید کردید
  • شما آدرس قرارداد Library را دارید
  • قرارداد فراخوان دارای “libraryfile.sol/.” است. این دستور در بالای قرارداد قرار دارد و آماده استقرار است

برای پیوند دادن یک قرارداد کتابخانه، پیکربندی ریمیکس را تغییر دهید

به‌طور پیش‌فرض Remix یک فایل metadata قرارداد را تولید نمی‌کند. برای ایجاد یک فایل metadata قراردادها، به ماژول تنظیمات بروید و Generation metadata را انتخاب کنید.

پیوند یک کتابخانه مستقر شده با استفاده از Remix ​

سپس به کامپایلر Solidity بروید و قرارداد هوشمند فراخوانی را مجدداً کامپایل کنید تا مطمئن شوید که هیچ خطایی وجود ندارد و فایل metadata را ایجاد کنید.

سپس به پوشه artifacts در فایل اکسپلورر Remix رفته و فایل callingcontract.json را باز کنید.

سپس به کامپایلر Solidity بروید و قرارداد هوشمند فراخوانی را مجدداً کامپایل کنید تا مطمئن شوید که هیچ خطایی وجود ندارد و فایل ابرداده را ایجاد کنید. سپس به پوشه artifacts در فایل اکسپلورر Remix رفته و فایل callingcontract.json را باز کنید.

رفتار پیش‌فرض Remix این است که به طور خودکار یک کتابخانه را مستقر می‌کند و آن را به قرارداد فراخوان پیوند می‌دهد (autoDeployLib: true). این رفتار پیش فرض Remix به خوبی کار می کند.

رفتار Remix را تغییر دهید تا یک کتابخانه به قرارداد فراخوانی پیوند داده شود. فایل metadata قرارداد فراخوانی کننده را ویرایش کنید.

رفتار پیش‌فرض Remix این است که به طور خودکار یک کتابخانه را مستقر می‌کند و آن را به قرارداد فراخوان پیوند می‌دهد (autoDeployLib: true). این رفتار پیش فرض Remix به خوبی کار می کند. رفتار Remix را تغییر دهید تا یک کتابخانه به قرارداد فراخوانی پیوند داده شود. فایل فراداده قرارداد تماس را ویرایش کنید.

با استفاده از آدرس کتابخانه، تگ <address> شبکه ای را که در حال استقرار در آن هستیم، با آدرس واقعی کتابخانه جایگزین کنید. در مثال ما در حال استقرار در یک شبکه آزمایشی هستیم، بنابراین در فایل netadata تگ های مناسب را ویرایش کنید.

همچنین باید تنظیمات autoDeployLib را به‌روزرسانی کنیم تا Remix به‌طور خودکار کتابخانه را هنگام اجرای قرارداد فراخوانی دپلوی نکند. autoDeployLib را روی false قرار دهید.

قرارداد را در REMIX اجرا کنید

در Remix، گزینه injected web3 را به عنوان محل استقرار انتخاب کنید، قرارداد را انتخاب کنید و روی deploy کلیک کنید. قرارداد خود را تأیید کنید و روند را آزمایش کنید.

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

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

				
					//name this file MathLibrary.sol
pragma solidity ^0.8.6;


library MathLibrary {
   
    function multiply(uint a, uint b) public view returns (uint, address) {
        return (a * b, address(this));
    }
}
				
			

نمونه قرارداد فراخوانی

				
					ragma solidity ^0.8.6;

 
import './MathLibrary.sol';

 
contract exampleContractUsingLibrary {
    using MathLibrary for uint;
    address owner = address(this);

    
    function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);
    }
}
				
			
دوره ها و آموزش های فرازمان

در صورتی‌ که تجربه خاصی در خصوص برنامه‌نویسی ندارید می‌توانید از دوره‌های رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دوره‌های پیشرفته‌تری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.

نقشه راه

راهنما آکادمی فرازمان

برای یادگیری برنامه نویسی بلاکچین…

دوره مفاهیم پایه برنامه نویسی
دوره جامع جاوا اسکریپت و جی کوئری
آموزش برنامه نویسی سالیدیتی
دوره جامع html/css/bootstap
آموزش پیشرفته برنامه نویسی بلاکچین
آموزش Whitepaper نویسی برای پروژه های بلاکچینی

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

نحوه نوشتن دستور if در Solidity

وراثت(Inheritance) در قراردادهای هوشمند Solidity

انواع حافظه (Memory,Storage,Stack,CallData) در قرارداد هوشمند Solidity

تابع پاکسازی(clean up) در قرارداد هوشمند solidity

استفاده از Import در قراردادهای هوشمند Solidity

برچسب ها: کتابخانه هاLibrariesآموزش برنامه نویسی سالیدیتیآموزش سالیدیتی
جدیدتر نحوه نوشتن دستور if در Solidity
قبلی رابط(Interface) در قراردادهای هوشمند Solidity

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
برچسب‌ها
function nft آموزش برنامه نویسی سالیدیتی آموزش بلاکچین آموزش سالیدیتی اتریوم اخبار بازی اخبار رمز ارز اخبار کریپتو امنیت قرارداد هوشمند ان اف تی اکتیویژن ایلان ماسک بازی بلاکچین برنامه نویسی بلاک چین برنامه نویسی سالیدیتی بلاک چین بیتکوین بیت کوین تحلیل بیت کوین تسلا توابع توابع در سالیدیتی جاوا اسکریپت حسابرسی در قرارداد هوشمند خبر بلاکچین دسنترالند دوج کوین رمزارز سالیدیتی سرمایه گذاری سندباکس قرارداد هوشمند مایکروسافت متاورس مقاله بلاکچین مقاله کریپتویی موزیلا نمونه قرارداد هوشمند سالیدیتی وب3 پی پال کریپتو کسب درامد کیف پول اتریوم کیف پول بلاکچین
  • محبوب
  • جدید
  • دیدگاه ها
دسته‌ها
  • آموزش برنامه نویسی سالیدیتی
  • اتریوم
  • اخبار NFT
  • اخبار متاورس
  • امور مالی غیرمتمرکز
  • برنامه نویسی سالیدیتی
  • بیت کوین
  • سولانا
  • صرافی غیرمتمرکز
  • قرارداد هوشمند
  • کریپتو
  • کیف پول ارز دیجیتال
  • مقالات بلاکچین
  • مقاله
  • نمونه قراردادهای هوشمند سالیدیتی
 فـرا زمان با بهره گیری از دانش روز دنیا و توانایی در آموزش، مشاوره و پیاده سازی انواع پروژه های بلاکچینی پا به عرصه ی رقابت گذاشته و هر روز به گروه و تخصص خود می افزاید.
دسترسی سریع
  • خانه
  • دوره ها
  • اخبار
  • تماس با ما
  • ساری، ابتدای خیابان 15 خرداد،مجتمع بهار،طبقه اول
  • 09395149363
  • info@fara-zaman.ir
خبرنامه

چیزی را از دست ندهید، ثبت نام کنید و در مورد شرکت ما مطلع باشید.

نماد ها

logo-samandehi
© 1400. آکادمی فرازمان - طراحی فرازمان
اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://fara-zaman.ir/?p=12878
دسته بندی دوره ها
دوره های من
دسته بندی دوره ها

طراحی وب

  • 1 دوره

WhitePaper

  • 1 محصول

برنامه نویسی اتریوم (سالیدیتی)

  • 4 محصول

کلاس مجازی

  • 1 دوره
دوره های من
برای مشاهده خریدهای خود باید وارد حساب کاربری خود شوید
Twitter Youtube Instagram
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

گروه تخصصی برنامه نویسی
  • 09395149363
  • پشتیبانی آنلاین
  • 09395149363