سالیدیتی (Solidity) چیست؟ زبان برنامه نویسی قرارداد هوشمند اتریوم

درست مانند برنامه‌های رایانه‌ای، قراردادهای اتریوم به یک زبان برنامه‌نویسی نوشته می‌شوند که «سالیدیتی» (Solidity) نام دارد. لازم به ذکر است که زبان‌های برنامه‌نویسی دیگری هم وجود دارند که می‌توان برای ایجاد قراردادهای هوشمند در شبکه اتریوم، از آنها استفاده کرد، اما این روزها انتخاب اکثر برنامه‌نویسان این حوزه سالیدیتی است. در ادامه قصد داریم به شما بگوییم زبان برنامه‌نویسی سالیدیتی چیست و چطور می‌توانید برنامه‌نویسی با زبان سالیدیتی را یاد بگیرید.قرارداد هوشمند یکی از ویژگی‌های مهم شبکه اتریوم است. قرارداد هوشمند امکان برنامه‌نویسی بر روی شبکه بلاکچین اتریوم را فراهم کرده است. مشابه تمام پلتفرم‌های برنامه‌نویسی، برای کدنویسی در شبکه اتریوم از یک زبان برنامه‌نویسی استفاده می‌کنیم. Solidity نام زبان برنامه‌نویسی در شبکه اتریوم است. در این مقاله با زبان برنامه نویسی سالیدیتی بیشتر آشنا می‌شویم. ویژگی‌های این زبان برنامه نویسی بلاکچین را معرفی کرده و برنامه نویسی قراردادهای هوشمند را آموزش خواهیم داد.سالیدیتی (Solidity) یک زبان برنامه نویسی حرفه‌ای است که برای کار با فناوری بلاکچین و نوشتن قراردادهای هوشمند در شبکه اتریوم طراحی شده است. سالیدیتی بر اساس سایر زبان‌های برنامه‌نویسی از جمله، ++C، پایتون و جاوا اسکریپت است. اگر با این زبان‌های برنامه نویسی آشنایی دارید، یادگیری زبان برنامه نویسی بلاکچین Solidity برای شما راحت‌تر خواهد بود.سالیدیتی زبان برنامه نویسی جدید است با منابع آموزش محدودمعمولاً اگر کسی بخواهد یک زبان برنامه‌نویسی جدید را فرا بگیرد، می‌تواند از میان بی‌نهایت منابع و کتابی که در آن زمینه وجود دارد، انتخاب کند. برای مثال اگر شما بخواهید جاوا اسکریپت یاد بگیرید، صدها کتاب مختلف وجود دارند که می‌توانید به‌طور خودآموز از آنها استفاده کنید. در اکثر این منابع تمرین‌ها و مطالبی وجود دارند که می‌توانید بدون نیاز به کلاس یا دوره خاص از آنها استفاده کنید. برای تعیین کیفیت هر یک نیز می‌توانید به صفحه خرید آن کتاب در اینترنت مراجعه و نظرات دیگران را در موردش مطالعه کنید.با وجود اینکه مستندات و منابع بسیاری در خصوص یادگیری کدهای سالیدیتی وجود دارد، یادگیری این زبان برای کسی که کاملاً با آن ناآشناست و به زبان برنامه‌نویسی دیگری هم مسلط نیست، آن‌هم از روی چنین مستنداتی مشکل و گاها حتی غیرممکن خواهد بود. به‌عبارت‌دیگر از این جزوه‌ها و منابع باید همانند یک فرهنگ لغت استفاده و در هنگام نیاز به آنها رجوع کرد و نمی‌توان برای یادگیری یک زبان ابتدا به سراغ فرهنگ لغت آن رفت.اگر فردی وقت کافی برای یادگیری نگذارد و صبر کافی نیز به خرج ندهد، و از طرف دیگر پیش‌زمینه برنامه‌نویسی نیز نداشته باشد، یادگیری سالیدیتی اصلاً آسان نخواهد بود. اما اگر پشتکار داشته باشید، حتی از روی مستندات و کدهای موجود هم می‌توانید این زبان را یاد بگیرید.زبان برنامه نویسی سالیدیتی و قراردادهای هوشمندامروزه بیشتر برنامه نویسان از یک یا چند نمونه از شاخه‌های زبان‌های برنامه‌نویسی استفاده می‌کنند. مثلاً برخی از شاخه زبان‌های C که خود شامل چندین زبان C#، C++ و …است، پایتون یا جاوا و … استفاده می‌کنند. سالیدیتی به‌نوعی طراحی‌شده که یادگیری‌اش برای برنامه‌نویسانی که با یک یا چند زبان‌ برنامه‌نویسی کار کرده‌اند، آسان باشد.اگر قبلا فقط در دوران دانشگاه با زبانی مانند «ویژوال بیسیک» کار کرده‌اید، یادگیری سالیدیتی برایتان کمی مشکل خواهد بود و اما اگر با زبان‌هایی همچون پایتون یا C کار کرده‌ باشید، سالیدیتی تا حد زیادی برای شما آشنا خواهد بود.سالیدیتی از مفاهیم بسیاری استفاده می‌کند که در دیگر زبان‌های برنامه‌نویسی دیگر مشابه آنها را دیده‌اید. برای مثال سالیدیتی دارای متغیرها، توابع، کلاس‌ها، عملیات‌های محاسباتی، رشته‌ها و … است. در حالی‌ که در یک زبان برنامه‌نویسی مانند C، برنامه‌نویس نوعی تابع اصلی مانند {int main(arg۱, arg2) { //code ایجاد می‌کند، سالیدیتی دارای مفهومی با عنوان «قرارداد» (Contract) است که طی روندی مشابه ساخته می‌شود.همان‌طور که در تصویر بالا مشاهده می‌کنید، کدهای سالیدیتی شباهت بسیاری به کدهای ++C یا #C و حتی جاوا اسکریپت دارند. برنامه نویسان پایتون نیز در هنگام کار با سالیدیتی متوجه می‌شوند که نوع متغیرها در این زبان باید به‌‌طور صریح تعیین شوند.زبان برنامه نویسی سالیدیتی یک زبان استاتیک است؛ یعنی برخلاف زبان‌های دینامیک که در زمان Run می‌توان کدها را بازبینی کرد، در سالیدیتی بازبینی کدها در زمان Compile امکان‌پذیر است. برای مثال، پایتون و جاوا اسکریپت یک زبان برنامه نویسی دینامیک هستند در حالی که ++C یک زبان استاتیک است. سالیدیتی از این حیث مشابه ++C است.زبان برنامه نویسی بلاک چین سالیدیتی، از ویژگی وراثت (Inheritance) برخوردار است. یعنی، توابع، متغیرها و سایر ویژگی‌هایی که در یک قرارداد هوشمند وجود دارد را می‌توان در قرار داد هوشمند دیگری به کار برد. Solidity یک زبان برنامه نویسی متن باز است که جامعه توسعه‌دهندگان آن به شدت در حال رشد است. روزانه پروژه‌های بسیاری با استفاده از این زبان برنامه نویسی ارائه می‌شود که می‌توانید این پروژه‌ها را از اینجا مشاهده کنید.ماشین مجازی اتریوم (EVM)قراردادهای هوشمندی که با استفاده از زبان سالیدیتی نوشته می‌شود بر روی پردازشگر مجازی اتریوم یا Ethereum Virtual Machine اجرا می‌شود. این پردازشگر تنها به قراردادهای هوشمندی که بر روی آن اجرا ده دسترسی دارد و به جز این به هیچ اطلاعات دیگری در شبکه دسترسی ندارد. در اینجا قصد معرفی EVM را نداریم، فقط به خاطر داشته باشید که قراردادهای هوشمندی که با استفاده از زبان برنامه نویسی سالیدیتی نوشته شده، بر روی پردازشگر مجازی اتریوم راه اندازی و اجرا می‌شود.سالیدیتی یکی از زبان‌های برنامه نویسی موجود برای توسعه برنامه روی پردازشگر مجازی اتریوم (EVM) است. کلاس‌ها و کتابخانه‌های زیادی در سالیدیتی وجود دارند که می‌توانند به توسعه یک قرارداد هوشمند توسط شما، بدون هیچ زحمتی کمک کنند. مهمترین محیط های توسعه نرم افزار (IDE) برای برنامه نویسی به زبان سالیدیتی عبارتند از:ریمیکس Remixویژوال استدیو Visual Studio (با استفاده از پلاگین)اتر اتم Ether atom (با استفاده از پلاگین)ویژگی‌های زبان برنامه نویسی Solidityدر این قسمت به تعدادی از ویژگی های پایه زبان سالیدیتی اشاره می‌کنیم. این ویژگی ها مشابه ویژگی های زبان های سطح بالایی مثل جاوا و C++ است.نوع داده‌ای ایستاهرچند که این زبان ساختاری شبیه جاوا اسکریپت را دارد، اما برخلاف جاوا اسکریپ نوع داده‌ای آن ایستا است. برای مثال شما در جاوا و C++ باید در زمان تعریف یک متغیر و پیش از استفاده از آن، نوع آن متغییر را تعیین کنید. در غیر این صورت در زمان کامپایل با خطا مواجه می‌شوید. زمان سالیدیتی نیز مانند جاوا و C++ می‌باشد.قرارداد و رابط‌ها (Interfaces)در زبان برنامه نویسی سالیدیتی، یک قرارداد (Contract) یک ساختار داده (data structure) است و این امر کمک می‌کند تا بتوانیم قرارداد بسازیم و آن را مدیریت کنیم. قراردادها می‌توانند توسط قراردادهای فرزند به ارث برده شوند و از این طریق قراردادهای پیچیده‌تر ایجاد شود.اصلاح کننده توابع (Function Modifier)این ویژگی مشابه امکان بازنویسی توابع در زبان های برنامه نویسی شیء گرا است. فرض کنید می‌خواهید در صورت برقراری یک شرط، یک تابع را به روشی متفاوت اجرا کنید. برای این منظور می‌توانید از این ویژگی استفاده کنید و رفتار تابع را تغییر دهید. اصلاح کننده توابع برای بازنویسی توابع در قراردادهای وارث نیز کاربرد دارد.رویدادها (Events)رویدادها برای نوشتن اطلاعات مربوط به قراردادها روی لاگ بلاک چین (Blockchain Log) استفاده می‌شوند. یک رویداد مشابه یک تابع است که یک داده را به عنوان ورودی دریافت کرده و آن را روی لاگ بلاک چین می‌نویسد.تعیین سطح دسترسیاین ویژگی مشابه دسترسی های public و private در زبان های برنامه نویسی شیء‌گرا است. در زبان سالیدیتی نام و قوانین این دسترسی‌ها کمی تغییر کرده است. برای مثال در سالیدیتی دو سطح دسترسی owned و mortal داریم. سطح دسترسی های بیشتری هم برای برقراری امنیت بیشتر در این زبان برنامه نویسی وجود دارد.تبدیل نوع داده‌ای به صورت صریحشما با استفاده از سالیدیتی می‌توانید نوع داده‌ها را تغییر دهید. این تغییرها معمولا در زمان کامپایل بررسی می‌شوند، البته استثناهایی هم وجود دارد.آرایه‌های داخل حافظهآرایه های داینامیک می‌توانند مستقیما داخل حافظه قرار بگیرند.کتابخانه‌هاشما می‌توانید از کتابخانه‌های متنوعی برای نوشتن قراردادهای خود استفاده کنید و از این طریق قرارداد خود را سفارشی‌سازی کنید.امکان Import کردنبا استفاده از کلمه کلیدی import شما می‌توانید کدهای فایل های دیگر را به قرارداد خود اضافه کنید.یک قرارداد هوشمند که با استفاده از سالیدیتی نوشته شده معمولا شامل ۴ بخش زیر است:دستورالعمل Pragmaپراگما مولفه اساسی برای استفاده از Compiler به منظور بررسی ورژن نسخه‌ای است که برای کدنویسی از آن استفاده شده است. در صورتی که نسخه Match نباشد، در این بخش اخطاری را مشاهده خواهید کرد. برای مثال اگر در ابتدای یک قرارداد هوشمند Pragma solidity ^۰.۷.۰ باشد، Compiler باید بالاتر از نسخه ۰.۷.۰ و پایین‌تر از ۰.۸.۰ باشد.State variableاین بخش اطلاعات متغیری همانند قیمت ارزهای دیجیتال را نشان می‌دهد که در یک قرارداد هوشمند ذخیره می‌شوند.توابعتوابع در یک قرارداد هوشمند به واحد اجرایی کد گفته می‌شود. یک تابع، یک فعالیت را برای رسیدن به یک هدف، تعریف می‌کند. این ویژگی قابلیت این را دارد که از کتابخانه سالیدیتی فراخوانده شود. این ویژگی دقیقا مشابه سایر زبان‌های برنامه نویسی است.Eventایونت فعالیت‌هایی که در یک قرارداد هوشمند وجود دارد را شرح می‌دهد.آموزش زبان برنامه نویسی سالیدیتیزبان سالیدیتی زبان برنامه نویسی جدیدی است و منابع برای یادگیری آن در مقایسه با سایر زبان‌ها کمتر است. این زبان شباهت بسیار زیادی به جاوا اسکریپت دارد. لذا یادگیری Javascript کمک زیادی در یادگیری سالیدیتی خواهد کرد. اما پیش از یادگیری زبان برنامه نویسی سالیدیتی، باید بلاکچین و نحوه کار آن را بشناسید. بدون شناخت بلاک چین و ارزهای دیجیتال، یادگیری زبان برنامه نویسی بلاکچین کاربرد زیادی نخواهد داشت. همچنین بسیاری از شرکت‌هایی که به دنبال استخدام برنامه نویس بلاکچین هستند، علاوه بر تسلط بر سالیدیتی، NodeJS، GoLang و AngularJS را نیز طلب می‌کنند.دوره‌ها و آموزش‌های سالیدیتیبرای آن دسته از افراد که تجربه برنامه‌نویسی دارند، یکی از گزینه‌های مناسب برای یادگیری سالیدیتی استفاده از وب‌سایت «کریپتو زامبی» (Crypto Zombies) است. این وب‌سایت که شباهت بسیاری با پلتفرم «کد آکادمی» دارد، تکالیف کوچکی را در اختیارتان می‌گذارد که می‌توانید به‌صورت مستقیم در مرورگرتان آنها را انجام دهید. درست یا غلط بودن و اشکالات شما نیز به‌صورت آنی برای شما نمایش داده خواهد شد. این وب‌سایت به شما کمک می‌کند که با استفاده از زبان سالیدیتی یک بازی زامبی بسازید.نجام فصل اول آموزش چیزی در حدود دو ساعت زمان لازم دارد و اندکی نیز سخت است اما با کمی صبر و دقت می‌توانید از پس آن بر بیایید. توسعه‌دهندگان این وب‌سایت هر چند هفته یک‌بار تکالیف جدیدی را برای کاربران مهیا می‌کنند. با به اتمام رساندن تمامی تکالیف، می‌توانید یک بازی کامل بر پایه سالیدیتی داشته باشید.صد البته ساخت چنین بازی‌ای نمی‌تواند شما را به یک برنامه‌نویس حرفه‌ای سالیدیتی تبدیل کند، اما برای شروع کار و ایجاد یک پیش‌زمینه ذهنی در ارتباط با این زبان، عالی است چرا که بسیاری از نکات کلیدی و حیاتی که باید برای کار با سالیدیتی بدانید را به شما گوشزد می‌کند.در صورتی‌ که تجربه خاصی در خصوص برنامه‌نویسی ندارید می‌توانید از دوره‌های رایگان سایت CodeAcademy، استفاده کنید. به یاد داشته باشید که در صورت تسلط بر پایتون یا جاوا اسکریپت، می‌توانید به‌راحتی از کریپتو زامبی استفاده کنید.اگر به دوره‌های پیشرفته‌تری در این خصوص نیاز داشته باشید، می‌توانید از وب‌سایت «بلاک گیکس» (Block Geeks) استفاده کنید.دوره‌های غیر رایگان سالیدیتی و گواهینامه‌های آنلایندر سال‌های اخیر، وب‌سایت های بسیاری دوره‌های غیر رایگان خود را در خصوص یادگیری زبان برنامه‌نویسی سالیدیتی برگزار می‌کنند. «بیت دگری» (BitDegree) ازجمله این وب‌سایت‌هاست که با هدف بالا بردن اطلاعات عموم و آموزش‌های حوزه بلاک چین، فعالیت می‌کند. به‌وسیله این وب‌سایت مهارت آموزان می‌توانند در دوره‌های آنلاین شرکت کنند و در نهایت با به اتمام رساندن آنها، مدرکی آنلاین دریافت کنند که بر روی بلاک چین اتریوم ثبت می‌شود. دوره‌های بیت‌دگری در زمینه‌ی سالیدتی بین ۱۰ تا ۸۰ دلار قیمت دارند. البته شاید دوره‌های رایگان یا با تخفیف قابل‌توجه هم در آن پیدا کنید.از دیگر وب‌سایت ها در این زمینه می‌توان به udemy.com اشاره کرد که دوره‌های ویدیوئی زیادی در زمینه‌های مختلف ارائه می‌کند. هزینه دوره سالیدیتی در این وب‌سایت ۲۰۰ دلار است که به‌تازگی نیز با تخفیف ۹۰ درصدی عرضه می‌شود، البته همیشه این میزان تخفیف را ندارد. این دوره در سایت کورس‌مارکس بررسی شده و امتیاز ۷.۴ از ۱۰ دریافت کرده است.گزینه دیگر که با قیمت بسیار بالاتری دوره‌های سالیدیتی برگزار می‌کند B9LAB.com است. دوره‌های توسعه اتریوم این وب‌سایت طی ۹ هفته و هفته‌ای ۶ تا ۱۰ ساعت طول می‌کشد و هزینه‌ای بالغ بر ۱۴۵۰ یورو یا ۱۷۵۰ دلار روی دستتان خواهند گذاشت. به‌علاوه یک دوره رایگان کار با اتریوم با عنوان Ethereum ۱۰۱ نیز در این وب‌سایت موجود است که می‌توانید با گذراندن آن بیشتر با روش‌های تدریس و شیوه‌ی آموزشی آنها آشنا شوید.آیا سالیدیتی ارزش یادگیری دارد؟اگر به دنبال یادگیری سالیدیتی برای شغل خود هستید، پیش از یادگیری باید بدانید به چه مهارت‌های دیگری نیاز دارید. بااینکه یاد گرفتن مهارت‌های مربوط به بلاک چین بسیار ارزشمند است، احتمالا لازم باشد کسی که می‌خواهد به این حوزه وارد شود به یکی از زبان‌های برنامه‌نویسی تسلط کامل داشته باشد. مثلا در یک آگهی شغلی در این زمینه عنوان شده است کسی را می‌خواهند که نه‌تنها با سالیدتی، بلکه به زبا‌های ترافل، نودجی‌اس و گولنگ هم آشنا باشد.اگر حاضرید سال‌ها وقت خود را صرف یادگیری سالیدیتی کنید، می‌توانید امیدوار باشید که در سال‌های آینده به شغلی مناسب نیز دست‌ یابید.در کنار سالیدیتی زبان برنامه‌نویسی دیگری با عنوان «سرپنت» (Serpent) نیز وجود دارد که بر پایه پایتون ساخته‌شده است. از آنجایی‌ که پایتون زبانی ساده برای یادگیری است، اگر به دنبال چنین زبانی برای ایجاد قراردادهای هوشمند دارید می‌توانید از سرپنت استفاده کنید. این مسئله را نیز به یاد داشته باشید که کدهای نگارش شده به‌وسیله سالیدیتی و سرپنت را می‌توانید به‌راحتی برای اتریوم کلاسیک و RSK و دیگر پلتفرم‌های قراردادهای هوشمند نیز ترجمه کنید.در حال حاضر سالیدیتی پادشاه زبان‌های برنامه‌نویسی مرتبط با قراردادهای هوشمند است و یادگیری آن می‌تواند به یادگیری دیگر زبان‌های قراردادهای هوشمند نیز کمک کند.سخن پایانیسالیدیتی Solidity نام زبان برنامه نویسی بلاک چین مورد استفاده در شبکه اتریوم است. با استفاده از زبان برنامه نویسی سالیدیتی قراردادهای هوشمند در شبکه اتریوم نوشته و بر روی پردازشگر مجازی اتریوم راه اندازی می‌شود. همه اپلیکیشن‌های غیرمتمرکز که بر روی شبکه اتریوم نوشته شده، از زبان سالیدیتی استفاده کرده‌اند. این زبان شباهت بسیار زیادی با زبان جاوا اسکریپت داشته و یادگیری آن می‌تواند کمک زیادی به آموزش زبان سالیدیتی کند.