سالیدیتی Solidity یک زبان برنامه نویسی الهام گرفته شده از سی پلاس پلاس ، جاوا اسکریپت و پایتون است که در واقع یک زبان برنامه نویسی سطح بالا (High-level programming language) به شمار می رود که نسبت به زبان های برنامهنویسی سطح پایین راحتتر قابل استفاده است و قابلیت حمل بین سیستمهای متفاوت را داراست . این زبان برنامه نویسی برای کار با تکنولوژی جدید بلاک چین طراحی شده است که برای توسعه قراردادهای هوشمند روی بلاک چین اتریوم استفاده میشود.
سالیدیتی Solidity
برای اجرای قراردادهای هوشمند در شبکه وسیعتر، قراردادهای هوشمند اتریوم به وجود آمدند. اتریوم به دلیل استفاده ماشین مجازی تورینگ در یک بلاک چین برای اولین، موفق به ایجاد یک سیستم بسیار خاص شده است. این یعنی قراردادهای هوشمند اتریوم ازلحاظ تئوری میتوانند از پس تمامی عملیاتهای محاسباتی بربیایند. بهعبارتدیگر، هر برنامهای را میتوان بر پایه اتریوم اجرا کرد. زبان برنامه نویسی solidity یک ابزار است که از آن برای تولید کد سطح ماشین استفاده می کنیم تا بتوانیم بر روی EVM اجرا نماییم solidity. یک زبان برنامه نویسی با یک کامپایلر است که کد سطح بالا و خوانا برای انسان را برداشته و آن را به دستور های ساده مانند «put data into a register»، «add data from two registers» ، «jump back to instruction at memory point xxxxx» تبدیل می کند که اساس برنامه اجرایی هر ریز پردازنده را تشکیل می دهند.
سالیدیتی و قرار داد های هوشمند
از نظر زبان برنامه نوسی سالیدیتی، یک قرارداد مجموعهای از دادهها (شامل وضعیتها) و یک قطعه کد (شامل توابع) است که داخل یک آدرس در شبکه اتریوم قرار گرفته است. داخل هر قرارداد میتوانیم متغیر وضعیت، متد و یا رویداد (Event) تعریف کنیم. این قرارداد میتواند تراکنشها را داخل بلاکها در بلاک چین مدیریت کند. هر بلاک یک آدرس مشخص در قالب یک کلید رمزنگاری دارد. این آدرس نتیجه اعمال تابع هش روی آدرس بلاک قبلی است. این موضوع باعث ایجاد ارتباط بین بلاکهای مجاور میشود؛ بنابراین ایجاد تغییر در بلاکها و یا هک کردن به روشهای دیگر به آسانی ممکن نخواهد بود.
سالیدیتی در یک نگاه
سالیدیتی از مفاهیم بسیاری استفاده میکند که در دیگر زبانهای برنامهنویسی دیگر مشابه آنها را دیدهاید . برای مثال سالیدیتی دارای متغیرها، توابع، کلاسها، عملیاتهای محاسباتی، رشتهها و … است. در حالی که در یک زبان برنامهنویسی مانند C ، برنامهنویس نوعی تابع اصلی مانند int main(arg1, arg2) { //code} code ایجاد میکند، سالیدیتی دارای مفهومی با عنوان قرارداد(Contract) است که طی روندی مشابه ساخته میشود.
در تصویر بالا یک نمونه ساده کد به زبان سالیدیتی مشاهده می کنید که شباهت بسیاری به کدهای C++ و C# و حتی جاوا اسکریپت دارند . برنامه نویسان پایتون نیز در هنگام کار با سالیدیتی متوجه میشوند که نوع متغیرها در این زبان باید بهطور صریح تعیین شوند.
سالیدیتی یکی از زبانهای برنامه نویسی موجود برای توسعه برنامه روی ماشین مجازی اتریوم (EVM) است. کلاسها و کتابخانه های زیادی در سالیدیتی وجود دارند که میتوانند به توسعه یک قرارداد هوشمند توسط شما، بدون هیچ زحمتی کمک کنند. مهمترین محیط های توسعه نرم افزار (IDE) برای
برنامه نویسی به زبان سالیدیتی عبارتند از:
ریمیکس remix
ویژال استودیو Visual Studio
اتر اتم Ether atom
محیط Remix نام محیطی آنلاین است که توسط خود اتریوم ارائه شده و یکی از بهترین ابزارها برای کار با زبان سالیدیتی است.
ویژگی های زبان سالیدیتی:
بسیاری از ویژگی های زبان سالیدیتی مشابه ویژگی زبان های سطح بالایی همچون Java و C++ میباشد.
نوع داده ای ایستا
هرچند که این زبان ساختاری شبیه جاوا اسکریپت را دارد، اما برخلاف جاوا اسکریپ نوع دادهای آن ایستا است. برای مثال شما در جاوا و C++ باید در زمان تعریف یک متغیر و پیش از استفاده از آن، نوع آن متغییر را تعیین کنید. در غیر این صورت در زمان کامپایل با خطا مواجه میشوید. زمان سالیدیتی نیز مانند جاوا و C++ میباشد.
قرارداد و رابط ها (Interfaces)
در زبان برنامه نویسی سالیدیتی، یک قرارداد (Contract) یک ساختار داده (data structure) است و این امر کمک میکند تا بتوانیم قرارداد بسازیم و آن را مدیریت کنیم. قراردادها میتوانند توسط قراردادهای فرزند به ارث برده شوند و از این طریق قردادهای پیچیدهتر ایجاد شود.
اصلاح کننده توابع (Function Modifier)
این ویژگی مشابه امکان بازنویسی توابع در زبان های برنامه نویسی شیء گرا است. فرض کنید میخواهید در صورت برقراری یک شرط، یک تابع را به روشی متفاوت اجرا کنید. برای این منظور میتوانید از این ویژگی استفاده کنید و رفتار تابع را تغییر دهید. اصلاح کننده توابع برای بازنویسی توابع در قراردادهای وارث نیز کاربرد دارد.
رویدادها (Events)
رویدادها برای نوشتن اطلاعات مربوط به قراردادها روی لاگ بلاک چین (Blockchain Log) استفاده میشوند. یک رویداد مشابه یک تابع است که یک داده را به عنوان ورودی دریافت کرده و آن را روی لاگ بلاک چین مینویسد.
سطوح دسترسی
این ویژگی مشابه دسترسی های public و private در زبان های برنامه نویسی شیءگرا است. در زبان سالیدیتی نام و قوانین این دسترسیها کمی تغییر کرده است. برای مثال در سالیدیتی دو سطح دسترسی owned و mortal داریم. سطح دسترسی های بیشتری هم برای برقراری امنیت بیشتر در این زبان برنامه نویسی وجود دارد.
تبدیل نوع داده ای بصورت صراحتانه
شما با استفاده از سالیدیتی میتوانید نوع دادهها را تغییر دهید. این تغییرها معمولا در زمان کامپایل برسی میشوند، البته استثناهایی هم وجود دارد
آرایه های داخل حافظه
آرایه های داینامیک می توانند مستقیم داخل حافظه قرار بگیرند.
کتابخانه ها و امکان ایمپورت کردن
شما میتوانید از کتابخانههای متنوعی برای نوشتن قراردادهای خود استفاده کنید و از این طریق قرارداد خود را سفارشیسازی کنید. با استفاده از کلمه کلیدی import شما میتوانید کدهای فایل های دیگر را به قرارداد خود اضافه کنید.
یادگیری زبان برنامه نویسی سالیدیتی
سالدیتی جدید است با منابع آموزش محدود. معمولاً اگر کسی بخواهد یک زبان برنامهنویسی جدید را فرا بگیرد، میتواند از میان بینهایت منابع و کتابی که در آن زمینه وجود دارد، انتخاب کند. برای مثال اگر شما بخواهید جاوا اسکریپت یاد بگیرید، صدها کتاب مختلف وجود دارند که میتوانید بهطور خودآموز از آنها استفاده کنید. در اکثر این منابع تمرینها و مطالبی وجود دارند که میتوانید بدون نیاز به کلاس یا دوره خاص از آنها استفاده کنید. برای تعیین کیفیت هر یک نیز میتوانید به صفحه خرید آن کتاب در اینترنت مراجعه و نظرات دیگران را در موردش مطالعه کنید. با وجود اینکه مستندات و منابع بسیاری در خصوص یادگیری کدهای سالیدیتی وجود دارد، یادگیری این زبان برای کسی که کاملاً با آن ناآشناست و به زبان برنامهنویسی دیگری هم مسلط نیست، آنهم از روی چنین مستنداتی مشکل و گاها حتی غیرممکن خواهد بود.
بهعبارتدیگر از این جزوهها و منابع باید همانند یک فرهنگ لغت استفاده و در هنگام نیاز به آنها رجوع کرد و نمیتوان برای یادگیری یک زبان ابتدا به سراغ فرهنگ لغت آن رفت. اگر فردی وقت کافی برای یادگیری نگذارد و صبر کافی نیز به خرج ندهد، و از طرف دیگر پیشزمینه برنامهنویسی نیز نداشته باشد، یادگیری سالیدیتی اصلاً آسان نخواهد بود. اما اگر پشتکار داشته باشید، حتی از روی مستندات و کدهای موجود هم میتوانید این زبان را یاد بگیرید.
یکی از گزینههای مناسب برای یادگیری سالیدیتی استفاده از وبسایت کریپتو زامبی (Crypto Zombies) است. این وبسایت که شباهت بسیاری با پلتفرم کد آکادمی دارد، تکالیف کوچکی را در اختیارتان میگذارد که میتوانید بهصورت مستقیم در مرورگرتان آنها را انجام دهید. درست یا غلط بودن و اشکالات شما نیز بهصورت آنی برای شما نمایش داده خواهد شد. این وبسایت به شما کمک میکند که با استفاده از زبان سالیدیتی یک بازی زامبی بسازید.
دوره های غیررایگان سالدیتی و گواهی نامه های آنلاین
بیت دگری (BitDegree) ازجمله وبسایتهاست که با هدف بالا بردن اطلاعات عموم و آموزشهای حوزه بلاک چین، فعالیت میکند. بهوسیله این وبسایت مهارت آموزان میتوانند در دورههای آنلاین شرکت کنند و در نهایت با به اتمام رساندن آنها، مدرکی آنلاین دریافت کنند که بر روی بلاک چین اتریوم ثبت میشود. دورههای بیتدگری در زمینهی سالیدتی بین ۱۰ تا ۸۰ دلار قیمت دارند. البته شاید دورههای رایگان یا با تخفیف قابلتوجه هم در آن پیدا کنید.
از دیگر وبسایت ها در این زمینه میتوان به udemy.com اشاره کرد که دورههای ویدیوئی زیادی در زمینههای مختلف ارائه میکند. هزینه دوره سالیدیتی در این وبسایت 200 دلار است که بهتازگی نیز با تخفیف 90 درصدی عرضه میشود، البته همیشه این میزان تخفیف را ندارد. گزینه دیگر که با قیمت بسیار بالاتری دورههای سالیدیتی برگزار میکند B9LAB.com است. دورههای توسعه اتریوم این وبسایت طی ۹ هفته و هفتهای ۶ تا ۱۰ ساعت طول میکشد و هزینهای بالغ بر 1450 یورو یا 1750 دلار روی دستتان خواهند گذاشت. بهعلاوه یک دوره رایگان کار با اتریوم با عنوان Ethereum 101 نیز در این وبسایت موجود است که میتوانید با گذراندن آن بیشتر با روشهای تدریس و شیوهی آموزشی آنها آشنا شوید.
آیا زبان برنامه نویسی سالدیتی ارزش یادگیری دارد ؟
اگر به دنبال یادگیری سالیدیتی برای شغل خود هستید، پیش از یادگیری باید بدانید به چه مهارتهای دیگری نیاز دارید. بااینکه یاد گرفتن مهارتهای مربوط به بلاک چین بسیار ارزشمند است، احتمالا لازم باشد کسی که میخواهد به این حوزه وارد شود به یکی از زبانهای برنامهنویسی تسلط کامل داشته باشد. مثلا در یک آگهی شغلی در این زمینه عنوان شده است کسی را میخواهند که نهتنها با سالیدتی، بلکه به زباهای ترافل، نودجیاس و گولنگ هم آشنا باشد.
در کنار سالیدیتی زبان برنامهنویسی دیگری با عنوان «سرپنت» (Serpent) نیز وجود دارد که بر پایه پایتون ساختهشده است. از آنجایی که پایتون زبانی ساده برای یادگیری است، اگر به دنبال چنین زبانی برای ایجاد قراردادهای هوشمند دارید میتوانید از سرپنت استفاده کنید. این مسئله را نیز به یاد داشته باشید که کدهای نگارش شده بهوسیله سالیدیتی و سرپنت را میتوانید بهراحتی برای اتریوم کلاسیک و RSK و دیگر پلتفرمهای قراردادهای هوشمند نیز ترجمه کنید. در حال حاضر سالیدیتی پادشاه زبانهای برنامهنویسی مرتبط با قراردادهای هوشمند است و یادگیری آن میتواند به یادگیری دیگر زبانهای قراردادهای هوشمند نیز کمک کند.