زبان برنامه نویسی سالیدیتی چیست؟ زبان قراردادهای هوشمند اتریوم
سالیدیتی چیست؟ از زبان برنامهنویسی سالیدیتی چیزی میدانید؟ شاید برای شما هم پیش آمده باشد که در زمان استفاده از برنامههای غیرمتمرکز اتریوم (dapps) و یا قراردادهای هوشمند به چیستی آنها فکر کنید.
سالیدیتی همان زبان برنامهنویسی اتریوم است که به شما و بسیاری دیگر از افراد امکان استفاده از امکانات زیاد دومین بلاکچین بازار رمزارزها را میدهد. خواندن مقاله پیش رو به شما کمک میکند تا علاوه بر آشنایی کلی با سالیدتی و شروع به کار آن بتوانید مزیتها و کاربردهای آن را بشناسید.
مقاله پیشنهادی: اتریوم چیست
نهایتا شما با مطالعه این مقاله بیشتر با زبان برنامهنویسی اتریوم آشنا خواهید شد و شاید حتی تصمیم به یادگیری آن گرفتید! با ما در همتاپی تا انتهای این مقاله همراه باشید.
- معرفی زبان برنامه نویسی سالیدیتی
- مزایای سالیدیتی کدامها هستند؟
- سالیدیتی چه کاربردهایی دارد؟
- سالیدیتی بر اساس کدام زبانهای برنامهنویسی نوشته شده است؟
- انواع دادههای زبان سالیدیتی کدامها هستند؟
- توسعهدهندگان از سالیدیتی چه استفادهای میکنند؟
- چگونه زبان سالیدیتی را یاد بگیریم؟
- اجرای قراردادهای هوشمند نوشته شده در سالیدیتی
- مثالهای برنامهنویسی سالیدیتی
- کدام بلاکچینها از سالیدیتی پشتیبانی میکنند؟
- سخن پایانی
معرفی زبان برنامه نویسی سالیدیتی
سایت زبان برنامه نویسی سالیدیتی، این زبان برنامهنویسی را چنین تعریف میکند:
سالیدیتی (solidity) یک زبان برنامهنویسی استاتیک است که برای توسعهی قراردادهای هوشمند واقع بر بلاکچین اتریوم طراحی شده است.
زبان برنامهنویسی استاتیک (static) به زبان های کامپایلری گفته میشود که type checking آن قبل از اجرای کد و در زمان همگردانی (compile) صورت میگیرد. به این ترتیب بسیاری از خطاها توسط کامپایلر برطرف میشود و در زمان اجرای کد، با خطای کمتری مواجه خواهید شد. |
در یک تعریف دقیقتر میتوان گفت که سالیدیتی یک زبان برنامهنویسی شیءگرا و سطح بالا است که به طور خاص برای ساخت، طراحی و اجرای قراردادهای هوشمند بر روی ماشین مجازی اتریوم یا evm (ethereum virtual machine) ساخته شده است.
زبان سالیدیتی بر پایه زبانهای برنامهنویسی مشهوری مثل جاوا اسکریپت و ++c نوشته شده است. از بارزترین ویژگیهای سالیدتی میتوان به موارد زیر اشاره کرد:
- به طور خاص برای قراردادهای هوشمند ایجاد شده است
- امکان وراثت (inheritance)، کتابخانهها (libraries) و برنامهنویسی پیچیده تعریفشده توسط کاربر را دارد
- با استفاده از سالیدیتی میتوان قراردادهایی برای رایگیری، مناقصه کور (blind bidding)، سرمایهگذاری جمعی و سایر فعالیتها منعقد کرد
مطالب مرتبط: نگاهی به تاریخچه اتریوم؛ تاریخچه قیمت اتریوم و فراز و نشیبهای آن |
در ادامه با تاریخچهی ایجاد سالیدیتی توسط یکی از همبنیانگذاران اتریوم آشنا میشوید.
تاریخچهای کوتاه درباره سالیدیتی
در سال 2014 گاوین وود (gavin wood) که از همبنیانگذاران اتریوم بود، برای اولین بار پیشنهاد توسعه یک زبان برنامهنویسی را به همکاران خود داد. آقای وود معتقد بود که برای اجرای الزامات بلاکچین نوپای اتریوم و ایجاد قراردادهای هوشمند مناسب داشتن یک زبان برنامهنویسی مخصوص ضروری است.
در همین حال ویتالیک بوترین، بنیانگذار اتریوم، چشمانداز خود را برای اتریوم بیان کرد: توسعه بلاکچین اتریوم به عنوان پروتکلی که بر اساس فناوری دفتر کل توزیعشده که بیت کوین پایهگذار آن بود، منتها با ابزار قراردادهای هوشمند!
بوترین میخواست تا اتریوم توانایی اجرای یک شبکه پیچیده و با عملکرد بالا از قراردادهای هوشمند را داشته باشد؛ به این صورت که کدهایی برای اجرای خودکار توافق نامههای روی شبکهای از گرهها ایجاد شوند.
به همین دلیل هم بود که کریستین ریتویسنر (christian reiwiessner) به عنوان سرپرست و محقق تیم اتریوم، گروهی از افراد را جمعآوری کرد که وظیفهی نظارت بر توسعهی سالیدیتی را بر عهده داشتند.
علاوه بر ریتویسنر و الکس برزسازکی (alex beregszaszi) که از رهبران سابق اتریوم بود، چند تن دیگر از مشارکتکنندگان اصلی اتریوم در مسیر توسعه سالیدیتی همراه شدند.
حاصل کار آنها یک زبان برنامه سطح بالا و تورینگ کامل (turing-complete) به نام سالیدیتی است که به توسعه web3 منجر شده است.
web3 نسل سوم اینترنت است و با اسم وب باهوش هم از آن یاد میشود. نسل سوم اینترنت کمک میکند تا علاوه بر ایجاد ارتباط و تعامل بین افراد و سایتها، نرم افزارها هم بتوانند با هم ارتباط برقرار کنند. |
مطالب مرتبط: ثروت خالق اتریوم چقدر است؟ |
مزایای سالیدیتی کدامها هستند؟
یادگیری و کار با سالیدیتی میتواند مزایای متعددی داشته باشد، از جمله:
- یک زبان برنامهنویسی ساده و کاربرپسند برای ایجاد قراردادهای هوشمند برای dapps ارائه میدهد.
- زبان سطح بالا و شیءگرای سالیدیتی از یک رابط باینری برنامه (abi) برای جلوگیری از مشکلات سینتکس استفاده میکند.
- هزینههای گس و مبلغ پرداختی را می توان در قرارداد هوشمند کدگذاری کرد.
- امکان دسترسی به وارثت قراردادی (inheritance contract) وجود دارد.
وراثت (inheritance) در سالیدیتی سبب گسترش عملکرد یک قرارداد می شود. در وراثت توابع، اصلاح کننده، متغیرها و … در یک قرارداد والد (parent) به قرارداد فرزند (child) می شود. |
سالیدیتی چه کاربردهایی دارد؟
سالیدیتی علیرغم آسان بودن نسبی در یادگیری، زبان پیچیدهای است که کاربردهای متعددی را برای کاربران خود به ارمغان میآورد، از جمله:
- رای گیری (voting)
رای گیری در دنیای فیزیکی خودمان ممکن است گاهی با شگردهای غیرصادقانهای همراه شود که نتیجه را کاملا تغییر دهد. با استفاده از سالیدیتی امکان رای گیری شفاف و به صورت خودکار وجود دارد.
- تامین مالی جمعی (crowdfunding)
تامین مالی جمعی از طریق سالیدیتی میتواند سبب حل مشکلات این کار از طریق روشهای سنتی شود. برخی از این مشکلات عبارتند از کیمیسیونهای شخص سوم، مشکلات مدیریت دادهها و … .
- حراج کور (blind auctions)
اجرای حراج کور در اتریوم از طریق سالیدیتی ساده است. ایجاد یک حراج آزاد که در آن همه بتوانند پیشنهادات یکدیگر را مشاهده کنند با سالیدیتی امکانپذیر است.
سالیدیتی بر اساس کدام زبانهای برنامهنویسی نوشته شده است؟
همانطور که گفتیم سالیدیتی با استفاده از چندین زبان برنامهنویسی تثبیتشده از جمله جاوا اسکریپت، پایتون و++c توسعه یافته است.
در این بخش نگاهی به برخی از شباهتهای سالیدیتی با هر کدام از زبانهای یادشده خواهیم داشت.
سالیدیتی و++c
زبان برنامهنویسی سالیدیتی از ++c و syntax (سینتکس یا مجموعه قوانین نوشتاری درون یک زبان برنامهنویسی) آن استخراج شده است؛ این مورد به ویژه در زمان استفاده از حلقهها (loops) و اعلانهای متغیر (variable declarations) نمود پیدا میکند.
سالیدیتی همچنین از بارگذاری بیش از حد تابع پشتیبانی میکند؛ این یک ویژگی شیءگرا در زبان++c است که در زمان مشترک بودن نام دو تابع با پارامترهای متفاوت لازم است.
سالیدیتی و جاوا اسکریپت
جاوا اسکریپت دیگر زبانی است که سالیدیتی از آن تاثیر گرفته است. البته در حال حاضر تنها شباهت اصلی و قابل تشخیص بین این دو زبان، تعریف توابع با استفاده از تابع کلمه کلیدی (keyword function) است.
توسعهدهندگانی که با جاوا اسکریپت و سالیدیتی آشنایی دارند، سالیدیتی را سادهتر از java script میدانند. سالیدیتی همچنین به دلیل ماهیت ایستای خود، امکان استفاده از کتابخانهها و انواع پیچیده (complex type) را فراهم میکند.
سالیدیتی و پایتون (python)
تا آنجا که به سینتکس مربوط میشود سالیدیتی تاثیر زیادی از پایتون نگرفته است. شباهتهای کلیدی میان سالیدیتی و پایتون در ویژگیهای وراثت چندگانه (multiple inheritance) و خطیسازی c3 نهفته است.
انواع دادههای زبان سالیدیتی کدامها هستند؟
در زیر انواع متغیرهای مقداری در سالیدیتی آمده است:
انواع متغیرهای سالیدیتی
- بولی (boolean)
- عدد صحیح (integer)
- اعداد ممیز ثابت (fixed point numbers)
- بایتها و رشتهها (bytes and strings)
- اِنومز (enums)
- آدرس (address)
مطالب مرتبط: هزینه گس فی اتریوم چگونه محاسبه میشود؟ توضیحی به زبان ساده |
توسعهدهندگان از سالیدیتی چه استفادهای میکنند؟
همانطور که میدانید سالیدیتی به عنوان زبانی برای کدنویسی بلاکچین مورد استفاده قرار میگیرد. هدف از توسعه این زبان برنامهنویسی صراحتا همگردانی (compile) در ماشین مجازی اتریوم (evm) است.
بنابراین استفاده از سالیدیتی توسعهدهندگان را قادر میسازد تا قراردادهای هوشمند سازگار با اتریوم را برای هر پروتکل بلاکچین سازگار با evm بنویسند.
سازگاری گسترده، همراه با انعطافپذیری، عملکرد خوب و شهودی بودن آن، سبب شده تا سالیدیتی به یکی از رایجترین زبانهای برنامهنویسی برای توسعه بلاکچین در فضای وب 3 تبدیل شود.
چگونه زبان سالیدیتی را یاد بگیریم؟
کسانی که به زبان برنامهنویسی سالیدیتی تازهوارد هستند، باید با مطالعه اصول فناوری بلاکچین، قراردادهای هوشمند و ماشین مجازی اتریوم کار خود را شروع کنند. به همین منظور میتوان از روشهای زیر استفاده کرد:
شرکت در دورههای بوت کمپ سالیدیتی
کدنویسی بوت کمپ بر تواناییهای برنامهنویسی خاص و زبانهای برنامهنویسی کامپیوتری مثل جاوا اسکریپت متمرکز است. یک بوت کمپ را میتوان به صورت آنلاین، حضوری و یا ترکیبی از هر دو و در فضایی دانشگاهی انجام داد.
دوره های آنلاین
دورههای آنلاین سالیدیتی راه موثری برای یادگیری این زبان برنامهنویسی هستند. شما میتوانید با جستجو در اینترنت با دورههای مختلفی برای آموزش سالیدیتی آشنا شوید. اگرچه ما هم در این مقاله چند سایت مناسب را برای یادگیری سالیدیتی به شما معرفی میکنیم.
- دورههای آموزشی سالیدیتی در سایت کورسرا
شما میتوانید دورههای متعددی را در این سایت بگذرانید. تقریبا بسیاری از دورههای این سایت رایگان هستند و توسط اساتید معتبری برگزار میشوند.
- دورههای آموزشی سالیدیتی در سایت یودمی
در سایت یودمی هم میتوانید دورههای آموزشی سالیدیتی را با قیمتهای متغیری در بازهی 24 تا 94 دلار بگذرانید. در انتهای دوره و با موفقیت پشت سر گذاشتن آن، گواهینامه آن را هم دریافت میکنید.
- آموزش زبان برنامهنویسی سالیدیتی با سایت کلاس سنترال
سایت کلاس سنترال ادعا میکند که سالیدیتی را از ابتدا تا انتها و در 16 جلسه آنلاین به شما آموزش میدهد. شما میتوانید دورههای آموزشی سالیدیتی را از اینجا مشاهده کنید.
اما بعد از یادگیری سالیدیتی، چگونه میتوان قراردادهای هوشمند را در آن اجرا کرد؟
اجرای قراردادهای هوشمند نوشته شده در سالیدیتی
قراردادهای هوشمند نوشته شده در سالیدیتی معمولا با استفاده از remix ide کامپایل و اجرا میشوند.
ریمیکس آی دی ای (remix ide) ابزاری پرقدرت و متن باز است که به شما این امکان را میدهد تا قراردادهای هوشمند سالیدیتی را به طور مستقیم از طریق مرورگر بنویسید. |
مراحل کامپایل، اجرا و اشکالزدایی قراردادهای هوشمند در زیر فهرست شده است:
1) در مرورگر مد نظر خود، remix ide را جستجو و باز کنید. روی new file کلیک کنید.
2) پس از نوشتن قرارداد هوشمند در قسمت کد، قرارداد را کامپایل کنید.
3) در زیر دکمهی اجرای تراکنش، دکمهی deploy را پیدا خواهید کرد. برای اجرای برنامه روی آن کلیک کنید.
4) برای اجرای برنامه پس از استقرار کد، بر روی فراخوانی متد در زیرمنوی کشویی قراردادهای مستقرشده کلیک کنید.
5) برای شروع اشکال زدایی، روی دکمه debug در کنسول مربوط به فراخوانی کلیک کنید. هر فراخوانی تابع و تخصیص متغیر را میتوان در اینجا تایید کرد.
مثالهای تصویری زیر به شما کمک میکنند بهتر با فضای برنامهنویسی سالیدیتی آشنا شوید.
مثالهای برنامهنویسی سالیدیتی
در زیر چند مثال از قراردادهای هوشمند نوشتهشده بر روی سالیدیتی آوردهایم:
مثال اول: حافظه
// spdx-license-identifier: gpl-3.0
pragma solidity >=0.7.0 <0.9.0;
contract storage {
uint256 number;
function store(uint256 num) public {
number = num;
}
function retrieve() public view returns (uint256){
return number;
}
}
تابع store: مقدار متغیر عدد را با استفاده از آرگومان ارائه شده به روز میکند.
تابع retrieve: آخرین مقدار عدد تابع را ارائه میدهد.
مثال 2: مالک
// spdx-license-identifier: gpl-3.0 pragma solidity >=0.7.0 <0.9.0; contract owner { address private owner; event ownerset(address indexed oldowner, address indexed newowner); modifier isowner() { require(msg.sender == owner, “caller is not owner”); _; } constructor() { owner = msg.sender; emit ownerset(address(0), owner); } function changeowner(address newowner) public isowner { emit ownerset(owner, newowner); owner = newowner; } function getowner() external view returns (address) { return owner; } }
مشابه با مثال اول، کد بالا در قرارداد هوشمند با ذخیره و اصلاح یک متغیر کار میکند.
کدام بلاکچینها از سالیدیتی پشتیبانی میکنند؟
سالیدیتی میتواند برای نوشتن و اجرای قراردادهای هوشمند بر روی هر شبکه بلاکچینی که با evm سازگاری دارد استفاده شود.
از آن جمله میتوان به راه حلهای مقیاسپذیری لایه 2 مانند polygon/ matic و arbitrum اشاره کرد.
[مطالب مرتبط: آربیتروم چیست؟ در این مقاله شما میتوانید به صورت مختصر با شبکه آربیتروم آشنا خواهید شد.]
در کنار اتریوم، از دیگر بلاکچینها که از سالیدیتی پشتیبانی میکنند میتوان به موارد زیر اشاره کرد:
- اتریوم کلاسیک
- اولنش (avax)
- bnb chain (بایننس اسمارت چین سابق)
- پولکادات (dot)
- ترون (trx)
- هدرا هشگراف (hbar)
ویژگیهای مثبت سالیدیتی میتواند سبب شود تا این لیست به زودی طولانیتر شود.
سخن پایانی
اگر بخواهیم به صورت خلاصه بگوییم سالیدیتی چیست باید بگوییم یک زبان برنامهنویسی اتریوم است که به طور اختصاصی برای آن توسعه یافته است. این زبان که در سال 2014 و 2015 توسط تیم اتریوم توسعه یافته است، امکان نوشتن قراردادهای هوشمند را بر بستر اتریوم فراهم میکند.
با به کارگیری سالیدیتی امکان رای گیری، تامین مالی جمعی و حراج کور بر بستر فضای وب3 ایجاد خواهد شد.
امیدواریم از مطالعه مقاله سالیدیتی چیست بهره کافی برده باشید.