میهن بلاکچین
  • اخبار
    • همه
    • رمزارز در ایران
    • اخبار بیت کوین
    • اخبار اتریوم
    • اخبار آلتکوین
    • اخبار بلاکچین
    • اخبار عمومی
    • اطلاعیه صرافی‌های داخلی
  • تحلیل
    • همه
    • تحلیل آنچین
    • تحلیل اقتصادی
    • تحلیل تکنیکال
    • تحلیل فاندامنتال
  • آموزش
    • همه
    • کریپتو پدیا
    • کریپتو کده
    • دیفای
    • سرمایه گذاری
    • آموزش همه صرافی های ارز دیجیتال
    • ترید
    • کیف پول
    • بازی
    • استخراج
    • NFT
    • مقالات عمومی
  • ایردراپ
  • هک و کلاهبرداری
  • قیمت ارزهای دیجیتال
  • ماشین حساب ارزهای دیجیتال
  • مقایسه قیمت در صرافی
No Result
مشاهده همه‌ی نتایج
  • اخبار
    • همه
    • رمزارز در ایران
    • اخبار بیت کوین
    • اخبار اتریوم
    • اخبار آلتکوین
    • اخبار بلاکچین
    • اخبار عمومی
    • اطلاعیه صرافی‌های داخلی
  • تحلیل
    • همه
    • تحلیل آنچین
    • تحلیل اقتصادی
    • تحلیل تکنیکال
    • تحلیل فاندامنتال
  • آموزش
    • همه
    • کریپتو پدیا
    • کریپتو کده
    • دیفای
    • سرمایه گذاری
    • آموزش همه صرافی های ارز دیجیتال
    • ترید
    • کیف پول
    • بازی
    • استخراج
    • NFT
    • مقالات عمومی
  • ایردراپ
  • هک و کلاهبرداری
  • قیمت ارزهای دیجیتال
  • ماشین حساب ارزهای دیجیتال
  • مقایسه قیمت در صرافی
No Result
مشاهده همه‌ی نتایج
میهن بلاکچین
No Result
مشاهده همه‌ی نتایج
میهن بلاکچین آموزش مقالات عمومی

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

نگارش:‌فرزاد تمیمی فرد
5 تیر 1401 - 20:01
در مقالات عمومی
زمان مطالعه: 4 دقیقه
1
کتابخانه سالیدیتی چیست؟ چگونه از آن در قراردادهای هوشمند استفاده کنیم؟

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

ArzPlus Logo 1 میلیارد بیبی دوج برای شما! 🎁

همین حالا در ارزپلاس ثبت‌نام کن و جایزه‌ات رو بدون قرعه‌کشی دریافت کن. همه برنده می‌شن!

شروع

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

آنچه در این مطلب می‌خوانید

Toggle
  • کتابخانه‌های سالیدیتی
  • شیوه ساخت یک لایبرری در زبان برنامه نویسی سالیدیتی
  • شیوه استفاده از تابع لایبرری در داخل یک قرارداد
  • پیاده‌سازی قرارداد
  • سخن پایانی

کتابخانه‌های سالیدیتی

کتابخانه های سالیدیتی
کتابخانه‌های سالیدیتی. منبع: coinsbench

کتابخانه موجود در بستر سالیدیتی یک ماهیت مستقل است که شباهت زیادی به یک قرارداد داشته اما به هیچ عنوان یک قرارداد هوشمند محسوب نمی‌شود. این لایبرری توابعی را شامل می‌شود که تنها می‌توان آنها را به صورت صرف، مورد مشاهده (View-Only‌) قرار داد. ممکن است این توابع به صورت مشترک میان چندین قرارداد مصرف‌کننده مورد استفاده قرار بگیرند و به روند جلوگیری از تولید توابع اضافی کمک کنند.

قرارداد هوشمند چیست ؟ با کاربردهای Smart Contract آشنا شوید

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

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

بیایید کمی بیشتر به این قوانین/ملزومات بپردازیم.

  • Stateless – کتابخانه های سالیدیتی در واقع هویت‌های بدون حالت یا Stateless هستند. این امر به صورت کلی بدان معناست که برخلاف قرارداد‌های هوشمند‌، قادر به تعریف متغیر‌های حالت در یک لایبرری نخواهیم بود. به بیان ساده‌، توابع کتابخانه این اجازه را ندارند تا وضعیت یا حالت قرارداد هوشمند را تغییر داده یا اصلاح کنند.
  • توابع View Only – با توجه به اینکه فراخوانی تابع یک کتابخانه موجب تغییر حالت قرارداد نمی‌شود‌، انجام این کار نیازی به گس نخواهد داشت. به عبارت دیگر‌، یک لایبرری تنها می‌تواند توابع خالص یا قابل مشاهده صرف را پیاده‌سازی کند.
  • توابع داخلی – به هیچ عنوان نمی‌توانیم یک لایبرری را از خارج محدودی بومی Solidity فراخوانی کنیم. بدون شک قرارداد‌های دیگر می‌توانند این کتابخانه‌ها را فراخوانی کنند‌، اما امکان فراخوانی آنها از بیرون محدوده پیاده‌سازی وجود ندارد.
  • عدم وجود قابلیت وراثتی – با توجه به اینکه لایبرری یک هویت مستقل است‌، امکان به ارث بردن کتابخانه یا قرارداد دیگری را ندارد.
  • غیرقابل به ارث رسیدن – به دلایل مشابهی که در بخش قبل توضیح دادیم‌، امکان به ارث برده شدن یک کتابخانه توسط هیچ موجودیت‌، لایبرری یا قرارداد دیگری وجود ندارد.
  • عدم وجود توابع جایگزین یا قابل پرداخت– کتابخانه های سالیدیتی امکان پیاده‌سازی توابع جایگزین (Fallback) یا قابل پرداخت (Payable) را ندارند.

شیوه ساخت یک لایبرری در زبان برنامه نویسی سالیدیتی

حالا که مفاهیم پایه مورد نیاز در مورد یک کتابخانه را یاد گرفتیم‌، بیایید به سراغ بخش‌های مهم‌تری رویم.

در ابتدا لازم است تا شیوه تعریف کردن یک کتابخانه سالیدیتی را یاد بگیریم. در طول فرایند کدنویسی‌، شیوه تعریف یک کتابخانه با استفاده از کلیدواژه Library صورت می‌گیرد.

library MyLibrary {
    // some piece of code you want to make part of MyLibrary
}

توجه داشته باشید که در این بخش عنوان MyLibrary همان نام کتابخانه مورد نظر ماست.

در این قسمت از Remix IDE استفاده کرده‌ایم تا بتوانید مفاهیم مطرح شده را به آسانی فرا بگیرید.

Remix IDE
منبع: coinsbench

در مرحله دوم به سراغ فولدر Contracts رفته و یک فایل جدید MathUtils.sol بسازید.

به محض ساخته شدن فایل مورد نظر‌، کتابخانه MathUtils را در بخش داخلی آن و مطابق با کاری که در بخش بالا انجام دادیم تعریف کنید.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library MathUtils {
    // Library code here ...
}

حالا بیایید در این کتابخانه MathUtils یک تابع ساده Add یا جمع بسازیم که با دریافت Unit یا واحد ارزشی به عنوان مولفه‌ها‌، جمع آنها را به صورت خروجی به ما تحویل می‌دهد.

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

تعریف تابع Add بدین صورت است:

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library MathUtils {
    function add(uint a, uint b) public pure returns(uint) {
        return a + b;
    }
}

در بستر Remix به فولدر Contracts مراجعه کرده و فایل جدید Calculator.sol که شامل قرارداد Calculator یا محاسبه‌گر می‌شود را بسازید.

ساخت قرارداد Calculator
منبع: coinsbench

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./MathUtils.sol";
contract Calculator  {
    function getSum(uint firstNumber, uint secondNumber) public pure returns(uint) {
        // Invoke and return the library function here ...
    }
}

با یاد داشته باشید که پیش از این کتابخانه MathUtils را در فایل قرارداد خود وارد کرده‌ایم. در این نقطه تنها چیزی که باقی می‌ماند‌، استفاده از رویکرد یا متد Add از کتابخانه در بطن متد GetSUM قرارداد Calculator است.

شیوه استفاده از تابع لایبرری در داخل یک قرارداد

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

جای نگرانی نیست‌، در این بخش به درک کامل این موضوع در قرارداد مثالی خود می‌پردازیم.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./MathUtils.sol";
contract Calculator  {
    using MathUtils for uint;
    function getSum(uint firstNumber, uint secondNumber) public pure returns(uint) {
        return firstNumber.add(secondNumber);
    }
}

در این قطعه کد اتفاقات جالب توجهی روی می‌دهند که عبارتند از:

  • وارد کردن Statement که پیش از این در مورد آن صحبت کرده‌ایم.
  • استفاده از MathUtils برای Unit که یک اتفاق جدید است.
  • و در نهایت‌، FirstNumber.add(SecondNumber)‌؛ که ممکن است برای شما کمی گیج‌کننده باشد.

به منظور استفاده از هر یک از کتابخانه های سالیدیتی در داخل یک قرارداد لازم است تا در ابتدا نوع داده‌ای که لایبرری مورد نظر بر اساس آن عمل می‌کند را مشخص کنیم. برای انجام این کار‌، از رشته کد <Using <LibraryName> for <Data Type> استفاده می‌کنیم.

به عنوان مثال‌، تابع Add در داخل کتابخانه MatUtils بر روی Unit کار خود را انجام می‌دهد زیرا واحد A یا همان Unit a را به عنوان مولفه اول خود دریافت می‌کند.

برای درک اهداف ما در این بخش‌، می‌توانید اینطور فرض کنید که تابع لایبرری شما بخشی از نوع داده Unit شده و به راحتی در بستر آبجکت‌ها یا اشیا این تابع در دسترس خواهد بود.

در نهایت‌، هنگامی که تابع لایبرری به بخشی از خود نوع داده تبدیل شود‌، می‌توانیم متد مورد نظر مبتنی بر آبجکت نشان داده شده در بخش بالا را فراخوانی کنیم. به عنوان مثال به این شیوه فراخوانی می‌توان اشاره کرد: FirstNumber.add (SecondNumber)

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

پیاده‌سازی قرارداد

در این بخش به صورت تمام کار‌های مربوط به کتابخانه های سالیدیتی و توسعه قرارداد به پایان رسیده است. حالا می‌توانیم به روند خود ادامه داده و به سراغ دیپلوی کردن قرارداد Calculator رفته بررسی کنیم که آیا همه چیز طبق انتظارات ما پیش می‌رود یا خیر.

آموزش نوشتن آزمایشی قراردادهای سالیدیتی با استفاده از ترافل

پایانه موجود در Remix تمام بررسی‌های سبز صورت گرفته بر اساس دستور Deploy را در این بخش به ما نشان می‌دهد. این بدان معناست که پیاده‌سازی ما با موفقیت به انجام رسیده است.

استفاده از دستور Deploy در Remix
منبع: coinsbench

به محض اینکه قرارداد مورد نظر با موفقیت استقرار پیدا کند‌، تابع GetSum در اختیار ما خواهد بود و می‌توانیم از آن استفاده کنیم.

مرحله امکان استفاده از تابع GetSum
منبع: coinsbench

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

فراخوانی تابع GetSum در قرارداد پیاده‌سازی شده
منبع: coinsbench

سخن پایانی

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

شما از چه کتابخانه‌هایی در کدهای سالیدیتی خود استفاده می‌کنید؟ بهترین شیوه استفاده از این ساختار را چه می‌دانید؟ تجربیات خود در این خصوص را با ما و دیگر کاربران میهن بلاکچین به اشتراک بگذارید.

تگ: اتریومزبان برنامه نویسیسالیدیتیقرارداد هوشمندماشین مجازی اتریوم
اشتراک‌گذاریتوئیت

نوشته‌های مشابه

تحلیل تکنیکال قمیت ریپل (XRP)، بی ان بی (BNB) و سولانا (SOL)؛ ۴ اسفند ۱۴۰۳
اخبار آلتکوین

۳ آلت کوینی که ممکن است در هفته دوم سپتامبر ۲۰۲۵ به ATH جدید برسند

18 شهریور 1404 - 12:00
812
گزارش صرافی کوینکس از ماه آگوست؛ تداوم بازار صعودی کریپتو با چاشنی تثبیت قیمت‌ها!
تحلیل بازار

گزارش صرافی کوینکس از ماه آگوست؛ تداوم بازار صعودی کریپتو با چاشنی تثبیت قیمت‌ها!

17 شهریور 1404 - 22:00
88
تحلیل تکنیکال بیت کوین و اتریوم
تحلیل تکنیکال

تحلیل تکنیکال قیمت بیت کوین (BTC) و اتریوم (ETH)؛ ۱۷ شهریور ۱۴۰۴

17 شهریور 1404 - 09:00
329
فیچر تحلیل اتر و بیت
تحلیل تکنیکال

تحلیل تکنیکال قیمت بیت کوین (BTC) و اتریوم (ETH)؛ ۱۶ شهریور ۱۴۰۴

16 شهریور 1404 - 09:00
333
فیچر قیمت اتریوم
تحلیل بازار

فشار فروش سنگین هولدرهای قدیمی اتریوم چه معنایی برای بازار دارد؟

15 شهریور 1404 - 23:00
599
فیچر قیمت اتریوم
اخبار اتریوم

رالی قیمت اتریوم ادامه خواهد داشت؛ بازار نگران اقتصاد آمریکا

15 شهریور 1404 - 16:00
813
اشتراک
اطلاع از
1 دیدگاه
جدید ترین
قدیمی ترین محبوب ترین
Inline Feedbacks
View all comments

آموزش

فیچر سرقت کریپتو با ربات هوش مصنوعی
مقالات عمومی

چطور ربات‌های هوش مصنوعی در یک چشم‌به‌هم‌زدن دارایی‌های کریپتویی را می‌دزدند؟

18 شهریور 1404 - 22:00
76
صرافی ارز دیجیتال و سامسونگ
صرافی متمرکز

همکاری استراتژیک نزدک و صرافی جمنای: گامی بزرگ در ادغام کریپتو و بازارهای مالی سنتی

18 شهریور 1404 - 21:00
20
جف یان هایپرلیکوئید
مقالات عمومی

تحلیل جامع استراتژی هایپرلیکوئید: مصاحبه با جف یان و کالبدشکافی دلایل رشد انفجاری

16 شهریور 1404 - 22:00
133
وریشنال پروتکل (Variational protocol) چیست؟ زیرساختی برای معاملات مشتقه همتا‌به‌همتا
کریپتو پدیا

وریشنال پروتکل (Variational protocol) چیست؟ زیرساختی برای معاملات مشتقه همتا‌به‌همتا

15 شهریور 1404 - 22:00
52
 آیا سیستم‌های بلاکچینی جایگاه پایگاه‌های داده‌ متمرکز می‌شوند؟
مقالات عمومی

 آیا سیستم‌های بلاکچینی جایگاه پایگاه‌های داده‌ متمرکز می‌شوند؟

15 شهریور 1404 - 08:22
38
پیام‌های پنهان بیت کوین: چگونه متن ASCII میراث پیشگامان رمزنگاری را حفظ می‌کند
مقالات عمومی

پیام‌های پنهان بیت کوین: چگونه متن ASCII میراث پیشگامان رمزنگاری را حفظ می‌کند

14 شهریور 1404 - 20:00
112

پیشنهاد سردبیر

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

بررسی مشکلات تاخیر برداشت ریالی و رمزارزی در صرافی اکسکوینو؛ دلایل، پیامدها و راهکارها

5 مرداد 1404 - 17:00
5375

کلاهبرداری با کیف پول چند امضایی چیست و چگونه از آن در امان بمانیم؟

حمله انتقال صفر (Zero-Transfer)؛ راهنمای کامل شناسایی و مقابله با تهدید کیف پول‌های رمزارزی

تاثیر تصویب قانون GENIUS بر ریسک فریز و مسدود شدن دارایی‌های تتر ایرانی‌ها؛ چه باید کرد؟

اشتباه ۶۰ هزار دلاری کاربر بیت کوین در پرداخت کارمزد؛ مراقب باشید این اشتباه را تکرار نکنید!

تسلیم یا کاپیتولاسیون (Capitulation) در کریپتو چیست؟ نشانه ترس یا فرصتی برای ورود به بازار؟

  • خانه
  • قیمت ارز
  • صرافی ها
  • ماشین حساب
No Result
مشاهده همه‌ی نتایج
  • اخبار
    • همه
    • رمزارز در ایران
    • اخبار بیت کوین
    • اخبار اتریوم
    • اخبار آلتکوین
    • اخبار بلاکچین
    • اخبار عمومی
    • اطلاعیه صرافی‌های داخلی
  • تحلیل
    • همه
    • تحلیل آنچین
    • تحلیل اقتصادی
    • تحلیل تکنیکال
    • تحلیل فاندامنتال
  • آموزش
    • همه
    • کریپتو پدیا
    • کریپتو کده
    • دیفای
    • سرمایه گذاری
    • آموزش همه صرافی های ارز دیجیتال
    • ترید
    • کیف پول
    • بازی
    • استخراج
    • NFT
    • مقالات عمومی
  • ایردراپ
  • هک و کلاهبرداری
  • قیمت ارزهای دیجیتال
  • ماشین حساب ارزهای دیجیتال
  • مقایسه قیمت در صرافی

© 2025 - تمامی حقوق مادی و معنوی این وبسایت نزد میهن بلاکچین محفوظ است

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

© 2025 - تمامی حقوق مادی و معنوی این وبسایت نزد میهن بلاکچین محفوظ است.