سالیدیتی چیست؟ + کاربردها و بازار کار Solidity
اگر توسعه دهندۀ بلاک چین هستید، احتمالاً تاکنون در مورد سالیدیتی (Solidity) که یک زبان برنامه نویسی شی گرا برای توسعۀ قراردادهای هوشمند در بلاک چین هایی مانند اتریوم است شنیده اید. به طور کلی، Solidity زبان برنامه نویسی اتریوم است که به مقدار زیادی از جاوا اسکریپت، پایتون و C++ استفاده می کند و در ماشین مجازی اتریوم EVM کاربردهای زیادی دارد. به عبارت دیگر سالیدیتی زبان برنامه نویسی اتریوم است.
زبان برنامه نویسی سالیدیتی چیست؟
در دهۀ گذشته، بیت کوین منجر به انفجاری در حوزۀ بلاک چین شده که به نوبۀ خود سبب توسعه بیشتر برنامه نویسی در میان توسعه دهندگان شده است. در روزهای آغازین کریپتو، برخی از پیشگامان به اهمیت سیستم های غیرمتمرکز و الگوریتم های اجماع پی بردند و آنها شروع به آزمایش اصول پروتکل بیت کوین در زمینه های دیگر کردند.
بنیانگذار اتریوم، ویتالیک بوترین، پیشنهاد کرد که پروتکل دیگری برای اجرای قراردادهای هوشمند پیچیده و متفاوت با پروتکل موجود برای بیت کوین، ایجاد شود. بیت کوین از ابتدا به عنوان یک ارز دیجیتال ساده در نظر گرفته شده بود. با این حال، برای انجام تراکنش های پیچیده تر که نیازی به حضور واسطه برای اعتبارسنجی آنها نیست، بوترین اتریوم را پیشنهاد کرد که سیستمی پیچیده از قراردادهای هوشمند است که با یکدیگر تعامل دارند.
بدیهی است که ساختار اتریوم مبتنی بر تراکنش محدود به معنای معمول نیست، بلکه شامل انواع ترتیبات دیگری است که میتوان آنها را از طریق پروتکل بسیار قابل برنامهریزی و انعطافپذیر آن اعمال کرد.
این پروتکل جدید بلاک چین باید به تورینگ (Turing) کامل یا تا حد امکان به کامل بودن تورینگ نزدیک باشد تا به اهداف منحصر به فرد خود دست یابد؛ بنابراین خلاقیت و سطح معینی از حل مشکلات انسانی را در نظر می گیرد.
شناخت ارتباط سالیدیتی و اتریوم
اگر تصمیم به یادگیری سالیدیتی دارید، قبل از اینکه شروع به تحقیق درباره نحوه یادگیری سالیدیتی کنید، باید با مبانی اتریوم و قراردادهای هوشمندی که چارچوب معاملاتی اتریوم را تشکیل می دهند، آشنا شوید.
سالیدیتی و اتریوم هر دو ساختار های کاملی هستند که بر پایه مبانی محکمی ساخته شده اند و همه چیز در مورد آنها با کاوش در ماهیت محاسبات و رویای ماشین هایی که قادر به نزدیک شدن به قدرت محاسبات انسانی هستند آغاز شد.
تاکنون رمزنگاران برجسته، ریاضیدانان و دانشمندان کامپیوتر بسیاری وقت خود را به توسعه اتریوم اختصاص داده اند. علاوه بر این، آنها برای شکل گیری این دو ساختار بسیاری از مفاهیم از جمله تمرکززدایی، تغییر ناپذیری (immutability)، حالت ها (states)، شبکه ها (networks)، نظریه بازی ها (game theory) و غیره را با هم ادغام کرده اند.
همچنین، بررسی مجدد در مورد ماشین های حالت محدود ضروری است. هنگام یادگیری سالیدیتی با اصطلاحاتی مانند کامل بودن تورینگ و ماشین های تورینگ مواجه خواهید شد. بهتر است در مراحل اولیه با این مفاهیم آشنا شوید.
کامل بودن تورینگ (Turing Completeness) چیست؟
برای یادگیری سالیدیتی، در ابتدا آموختن کامل بودن تورینگ و ماشین های تورینگ ضروری است. اصطلاح تورینگ کامل یا کامل کردن تورینگ به خودی خود به ریشه های مفهوم ماشین تورینگ اشاره می کند. همانطور که ممکن است تصور کنید، آلن تورینگ افسانه ای نقش مهمی در توسعه مفهوم ماشین تورینگ ایفا کرد.
تورینگ در مقاله خود در سال 1936 با عنوان «درباره اعداد قابل محاسبه با کاربرد در مسئله تصمیم گیری» ماشینی را تصور کرد که قادر به حل هر مشکلی است که انسان ممکن است با آن مواجه شود. به طور خلاصه، اگر یک سیستم قوانین دستکاری داده ها ماشین تورینگ را شبیه سازی کند، تورینگ کامل در نظر گرفته می شود.
قبل از اختراع رم یا کامپیوتر های مدرن، کامل بودن تورینگ یک مفهوم انتزاعی در تعریف محاسبات و نحوه انجام آنها در نظر گرفته می شد. همانطور که بعداً متوجه خواهید شد، قراردادهای هوشمند سالیدیتی مربوط به ماشین های کامل تورینگ است.
ماشین تورینگ (Turing Machine) چیست؟
آیا ماشین تورینگ یک کامپیوتر است؟ بر اساس مفهوم ابتدایی، ماشین تورینگ نواری بینهایت است که به مربع هایی تقسیم می شود که می توان داده ها را روی آنها نوشته و یا خواند. اطلاعات با 1 و 0 یا همان کدهای باینری نمایش داده می شوند که سپس توسط ماشین به مجموعه محدودی از نماد ها یا الفبای ماشین تفسیر می گردند.
یک هد محاسباتی یا هد خواندن – نوشتن در امتداد نوار حرکت می کند و می تواند نماد ها را روی مربع بنویسد یا پاک کند. به عبارت دیگر، مرجع محاسباتی مسئول هدایت توجه ماشین به یک مربع در یک زمان است. بنابراین، بسته به جهتی که هد خواندن-نوشتن آن را هدایت می کند، دستگاه در هر زمان «هوشیار» و از تنها یک مربع آگاه است.
هد محاسباتی محدود به حرکت به چپ یا راست در یک فضای واحد است که در حال حاضر در آن قرار دارد. این هد همچنین می تواند نمادها را در فضایی که در هر زمان اشغال می کند بخواند و بنویسد.
با استفاده از این معماری پایه ای، یک ماشین می تواند تعیین یا محاسبه کند که چه مجموعه ای از رفتار ها یا عملیات ها را بر اساس آنچه به عنوان «ماشین حالت محدود» شناخته می شود، اجرا کند. انواع مختلفی از ماشین های تورینگ موجود هستند که هر کدام دارای ماشین های «حالت» خاصی هستند که عملکرد آنها را تعریف می کنند.
یک ماشین حالت محدود می تواند بین مجموعه ای از پیکربندی های ثابت سوئیچ کند که به m-configurations معروف هستند. تورینگ در مقاله خود به این تنظیمات اشاره و تعداد محدودی از حالت ها را در دستگاه توصیف کرد.
انتقال و پذیرش در ماشین های تورینگ چگونه است؟
در ماشین های تورینگ، هر تغییر بین حالت ها با یک مرحله انتقال از یک شکل به شکل دیگر همراه است که از یک حالت معین در یک زمان معین شروع می شود و به حالت بعدی یا حالت حاصل آینده ادامه می یابد.
در طول وضعیت نامعین، یک ماشین هنوز در جستجوی دستورالعمل هایی در مورد چگونگی ادامه کار با استفاده از جدول بزرگی است که به عنوان جدول انتقال شناخته می شود، زیرا هنوز مشخص نکرده است که چه کاری باید انجام دهد. از آنجایی که در این زمان ماشین هنوز بدون فعالیت است، دستگاه تمام مراحل بعدی ممکن را جستجو می کند.
یک مثال از نحوه عملکرد ماشین تورینگ، وارد کردن یک رشته به یک جدول انتقال است که در آن نمادها نشان می دهند که با جابجایی از چپ به راست در یک سری از حالت ها، چه اقدامی باید انجام شود تا زمانی که فرد به حالت نهایی برسد یا آن را بپذیرد.
هنگامی که دستگاه به وضعیت مناسب رسید، اجرای آن برای همیشه متوقف می شود. در این حالت، ماشین قادر نخواهد بود بدون توقف به اجرای مداوم ادامه دهد. اگر ماشین با هیچ یک از حالات قابل اجرا موافق نباشد، برای همیشه به کار خود ادامه خواهد داد.
شبکه اتریوم دارای چندین حالت قابل توصیف است. درک معنای این حالت ها، یادگیری نحوه تعامل با شبکه اتریوم و درک کامل زبان سالیدیتی را با یافتن میانبر بهینه برای انجام وظایف آسان تر می کند.
ماشین تورینگ جهانی چیست؟
ماشین های تورینگ (Universal Turing Machine) می توانند به اندازه نیاز، محدود یا گسترده باشند. چنین ماشین هایی ممکن است در تئوری حتی بتوانند مجموعه ای جامع تر از محاسبات و درجه ای از مرتبه های بیانی متناسب با تعداد ماشین های محدود یا تخصصی را که جذب می کنند، ثبت نمایند. این عملا به چه معناست؟
یک ماشین تورینگ جهانی یا UTM می تواند شماره توضیحات ماشین تورینگ دیگر را به عنوان ورودی شبیه سازی کند. تورینگ قبلاً جدول انتقال حالت را برای چنین ماشین هایی تنظیم کرده است. امروزه ما می توانیم به سرعت ایده برنامه ای را که به عنوان داده استفاده می شود درک کنیم و بنابراین می توانیم نرم افزاری معادل چنین ماشین هایی بسازیم. این ایده ها فرصت های بسیاری را برای ما در این زمینه ایجاد می کنند. این مفهوم ماشین تورینگ جهانی از مبانی اتریوم الهام گرفته است.
آشنایی با قراردادهای هوشمند اتریوم و سالیدیتی
برای یادگیری و شناخت اتریوم، ابتدا باید با تکنولوژی بیت کوین آشنا شوید. این موضوع شامل درک مبانی نحوه کار دفتر کل توزیع شده، نحوه کار ماینینگ، نحوه اجرای گره ها و بلاک چین است.
بیت کوین انقلاب کریپتو را آغاز کرد، اما اتریوم تز اولیه بلاک چین بیت کوین را اخذ و کار را با آن آغاز کرد. اتریوم فراتر از اعتبارسنجی داده ها و ذخیره سازی در دفترهای توزیع شده است. با استفاده از اتریوم، بسیاری از تراکنش های مختلف و عملکرد های سطح بالا را می توان با استفاده از چندین ارز یا توکن (از جمله بیت کوین) در کل شبکه انجام داد. این شبکه تضمین می کند که کد بهطور معادل اجرا و حالت های حاصل از طریق اجماع ثبت و تأیید شوند.
اتریوم یک نرم افزار رایگان و منبع باز است که بر روی شبکه غیر متمرکزی از رایانه ها اجرا می شود. عضویت در این شبکه آزاد است. این شبکه از بلاک چین اتریوم پشتیبانی و تضمین می کند که برنامه هایی به نام قرارداد های هوشمند با استفاده از رایانه ها یا گره های شرکت کننده داوطلب اجرا شوند.
ماشین مجازی اتریوم یا EVM چیست؟
اکنون که شناختی مقدماتی از ماشین های تورینگ دارید، درک ایده پنهان در پس ماشین مجازی اتریوم یا EVM باید آسانتر باشد. EVM یک شبکه مجازی است که در آن گره های کاملاً مشارکت کننده در شبکه یا گره های اتریوم تعبیه شده اند که کد قرارداد را اجرا می کنند. EVM یک سیستم کامل تورینگ است، به این معنا که می تواند هر مرحله منطقی مرتبط با توابع محاسباتی را انجام دهد.
این شبکه یکی از اجزای اصلی پروتکل اتریوم را شکل داده و به آن اجازه می دهد به اجماع برسد. اجماع در پروتکل با اجرای قرارداد های هوشمند حاصل می شود که نتایج آن کاملا قطعی یا تضمین شده است. همچنین این کار برای طراحی اقتصادی اتریوم بسیار مهم است. در حالی که بیت کوین برای اجرای یک تراکنش پاداش می دهد، اتریوم برای اجرای دستورالعمل های نرم افزار هزینه هایی نیز دریافت می کند. مکانیسم «Gas» در اتریوم به کاربران اجازه می دهد تا برای دستورالعمل هایی مورد نظرشان در EVM با استفاده از اتر، یعنی ارز اصلی آن، پیش پرداخت انجام دهند.
EVM ها همه کاره هستند زیرا می توانند با استفاده از JavaScript، C++، Ruby، Python و زبان های مختلف دیگر پیاده سازی شوند. بخشی از پاسخ به سوال «سالیدیتی چیست؟» در ارتباط با درک رابطه آن با EVM است.
کاربرد سالیدیتی برای اتریوم
قرارداد هایی که با استفاده از EVM اجرا می شوند با استفاده از سالیدیتی نوشته می شوند. بنابراین، در پاسخ به سؤال سالیدیتی چیست؟ می توان گفت که یک زبان برنامه نویسی سطح بالا است که با نحوه بیان دستورالعمل ها توسط انسان با استفاده از اعداد و حروف به جای کد باینری سازگار است. در حالی که ماشینهای اولیه تورینگ بر روی ورودی های یک و صفر ساخته شده بودند، سالیدیتی چنین پیچیدگی ای را برطرف میکند. سالیدیتی فرآیند ورودی را با استفاده از کد های دوستانه تر که از بسیاری جهات شبیه جاوا اسکریپت هستند، انسانی می کند.
قرارداد های هوشمند سالیدیتی دستورالعمل هایی هستند که در بایت کد EVM کامپایل می شوند. گره ها در شبکه اتریوم، همانطور که گفته شد، نمونه های EVM را اجرا می کنند که به آنها اجازه می دهد در اجرای مجموعه ای از دستورالعمل ها توافق کنند.
سالیدیتی اولین زبان قرارداد گرا
یکی از مهم ترین چیزهایی که باید در هنگام بررسی نحوه یادگیری سالیدیتی به خاطر بسپارید، زبانی است که به طور خاص برای کاربرد در ماشین مجازی اتریوم یا EVM طراحی شده است.
این زبان شباهت های زیادی به جاوا اسکریپت یا JS دارد. اگر از قبل با جاوا اسکریپت آشنایی دارید، یادگیری سالیدیتی آسان تر خواهد بود. البته تفاوت هایی در سینتکس آنها وجود دارد. با این حال، این 2 زبان از نظر دستوری و مفهومی مشابه هستند.
در زبان برنامه نویسی سالیدیتی به عنوان زبان مادری اتریوم، برخلاف جاوا اسکریپت که به آن نزدیک است، دستورات داخلی خواهید داشت. این کار برای Solidity انجام می شود تا به بخشی از بلاک چین دسترسی پیدا کند، بخش هایی مانند یک مهر زمانی یا آدرس یک بلوک خاص. در این زبان این توابع داخلی را در اختیار خواهید داشت که به شما امکان می دهند قراردادهای هوشمند سالیدیتی را به راحتی برنامه ریزی کنید.
یک زبان قرارداد گرا با زبان های عمدتاً شی گرا مانند جاوا و C++ متفاوت است زیرا بر قرارداد ها و توابع تأکید دارد. سالیدیتی به صورت استاتیک نوشته می شود. همچنین از کتابخانه ها، وراثت (inheritance) و سایر ویژگی های تعریف شده توسط کاربر پشتیبانی می کند که معمولا پیچیده تر هستند. این زبان تمام دستورالعمل ها را در یک جعبه بایت کد جمعآوری می کند تا در شبکه اتریوم خوانده و تفسیر شوند.
قراردادهای هوشمند Solidity
هدف اتریوم مقابله و اجرای تراکنش های سطح انسانی مشابه با ایده های ماشین کامل تورینگ بود. برای این منظور، اتریوم سطحی از منطق مناسب برای برنامه نویسان را اتخاذ کرد که به اندازه کافی ساده بود تا بتوانند آن را درک کنند. از سوی دیگر، قرارداد های هوشمند سالیدیتی باید روی مجموعه ای از ماشین های مجازی کامل تورینگ که به بازار عرضه می شدند اجرا می شد که پیچیدگی و اطمینان بیسابقه ای را ممکن میکردند. قابلیت پردازش این ماشین مجازی در اجرای واقعی گره های آن گنجانده شده است که یک شاهکار قابل توجه از تمرکز زدایی و محصول نوآوری انقلاب بلاک چین است.
با استفاده از قرارداد های هوشمند سالیدیتی، هر فردی که در شبکه شرکت می کند، اساساً هر کسی در جهان که مایل به مشارکت است، می تواند با افرادی که شخصاً با آنها آشنایی ندارد، معامله کند. امکان استفاده همزمان از ارزهای مختلف در آنها وجود دارد. قرارداد های هوشمند در سالیدیتی قوانین یک معامله تجاری را به صورت برنامه ریزی و به زبانی ساده شده و قابل خواندن توسط ماشین تنظیم می کنند. آنها کسب و کار های غیرمتمرکز خودکار هستند و می توانند به صورت جهانی و 24 ساعته بدون نظارت متمرکز اداره شوند.
بنابراین، می خواهم دوباره بپرسم که سالیدیتی چیست؟ اگرچه رویکرد سطح بالا ترش نسبت به برنامه نویسی دوستدار انسان (human-friendly) ممکن است آن را کمی پرمخاطب تر از سایر زبان های برنامه نویسی کند، اما در حقیقت، سالیدیتی تلاش می کند کاری را انجام دهد که قبلاً هرگز انجام نشده است، یعنی پر کردن شکاف بین فکر انسان و عملکرد ماشین.
در این حالت، انسان بیشتر شبیه ماشین نمی شود بلکه منطق ماشین ها را برای رفع نیازهای خودش به کار می گیرد. سالیدیتی به عنوان ابزاری همراه با یک کامپایلر، به طور قابل توجهی به ما این امکان را می دهد که خودمان را در کدها با وضوح بیشتری بیان کنیم و کد های قابل خواندن توسط انسان را به یک عملکرد تجاری عملی تبدیل کنیم.
بازار کار سالیدیتی چطور است؟
همانطور که می دانید هر سال موقعیت های شغلی مرتبط با شرکت های حوزه کریپتو رو به افزایش است. البته در ایران اکثر شرکت ها و استارتاپ ها در حوزه صرافی ارز دیجیتال فعالیت دارند اما شرکت های در دوبی و به طور کلی کشور امارات استارتاپ های حوزه کریپتو با سرعت چشم گیری در حال افزایش هستند و این کشور در حال تبدیل شدن به یکی از قطب های بزرگ حوزه رمزارزهاست.
طی سال های اخیر متخصصان بلاک چین بسیاری از ایران به این کشور مهاجرت کرده اند و درآمدهای چشم گیری نیز داشته اند. بنابراین به عنوان جمع بندی می توان گفت برای برنامه نویسی سالیدیتی و به طور کلی برنامه نویسی بلاک چین موقعیت های شغلی هر روز رو به افزایش هستند و آینده بسیار روشنی برای متخصصان این حوزه می توان متصور بود.
سخن پایانی
علاوه بر تعریف فنی، سالیدیتی یک زبان برنامه نویسی است که به پیشرفت شما کمک کرده و فرصت های جدیدی را به عنوان یک توسعه دهنده برای شما ایجاد می کند. اگر به توسعه بلاک چین علاقه دارید، با Solidity می توانید بیش از یک زبان یا مهارت را یاد بگیرید. با کمک آن این فرصت را خواهید داشت که به اکوسیستم اتریوم کمک کنید، با تیم هایی از سراسر جهان کار کنید و با آنها تعامل داشته باشید. در نتیجه، شانس استخدام بیشتری خواهید داشت و در پروژه های بزرگ می توانید فعالیت کنید. در کل، بخشی از جامعه ای با انجمن های گفتگو با امکان ارتباط فراوان خواهید بود و در نهایت با ابداع اپلیکیشن های غیرمتمرکز جدید، به یک کارآفرین تبدیل خواهید شد.
سوالات متداول
یادگیری سالیدیتی چقدر زمان می برد؟
اگر برنامه نویس حرفه ای جاوا اسکریپت هستید، نهایتا 6 ماه طول می کشد تا به طور کامل این زبان را بیاموزید.
پیش نیازهای یادگیری سالیدیتی چیست؟
دانش کافی در مورد بلاک چین، شبکه اتریوم و آشنایی با جاوا اسکریپت یا پایتون و دانستن مفاهیم برنامه نویسی
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.