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

زبان برنامه‌نویسی سالیدیتی چیست؟

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

  • از سالیدیتی برای ایجاد قراردادهای هوشمند که منطق تجاری را پیاده‌سازی می‌کند و زنجیره‌ای از سوابق تراکنش را در سیستم بلاکچین ایجاد می‌کند، استفاده می‌شود.
  • به‌عنوان ابزاری برای ایجاد کد در سطح ماشین و کامپایل کردن آن در ماشین مجازی اتریوم (EVM) عمل می‌کند.
  • شباهت‌های زیادی با زبان‌های سی و سی پلاس پلاس (C++) دارد و یادگیری و درک آن بسیار ساده است. برای مثال، «main» در زبان سی معادل «contract» در سالیدیتی است.

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

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

سالیدیتی یک زبان نسبتاً جدید است که به سرعت در حال رشد است.

  • در حال حاضر زبان اصلی در اتریوم و سایر بلاکچین‌های خصوصی است که بر روی پلتفرم‌های رقیب کار می‌کنند؛ مانند موناکس و بلاکچین هایپرلجر بورو آن که از تندرمینت (Tendermint) برای اجماع استفاده می‌کند.
  • سوئیفت یک اثبات مفهوم ایجاد کرده است که روی بورو اجرا می‌شود و از سالیدیتی استفاده می‌کند.

جامعه توسعه دهندگان اتریوم استانداردهایی را تعریف کرده است که بر نحوه استفاده از قراردادهای هوشمند سالیدیتی برای ساخت برنامه‌های غیرمتمرکز بر روی اتریوم نظارت می‌کند. برخی از آنها که معمولاً «استانداردهای توکن» نامیده می‌شوند بسیار آشنا هستند در حالی که برخی دیگر ناشناخته‌تر هستند. در زیر با چند نمونه از آنها آشنا می‌شوید:

  • ERC-20: توکن استاندارد مثلی
  • ERC-721: استاندارد توکن غیرقابل مثلی
  • ERC-809: به مفهوم کالاهای «رقیب» اشاره دارد؛ آیتم‌هایی که مصرف آن توسط یک فرد مانع از مصرف توسط فرد دیگر می‌شود. به‌عنوان مثال، رانندگی با ماشین یک رقیب محسوب می‌شود زیرا دو نفر نمی‌توانند همزمان با یک ماشین رانندگی کنند اما خیره شدن به غروب آفتاب اینطور نیست. این استاندارد توکن یک استاندارد اجاره‌ای را برای ان اف تی‌های رقیب تعریف می‌کند و به آنها اجازه می‌دهد آنها را به سایر کاربران اجاره دهند.
  • ERC-864: امکان مالکیت مشترک ان اف تی‌ها را فراهم می‌کند.
  • ERC-874: توکن‌های غیرقابل مثلی وزنی که به یک دائو (DAO) اجازه می‌دهد قدرت رأی‌دهی بیشتری را به شرکت‌کنندگان خاص بدهد.

ماشین مجازی اتریوم چیست؟

  • ماشین مجازی اتریوم (EVM) یک محیط زمان اجرا برای قراردادهای هوشمند اتریوم فراهم می‌کند.
  • در درجه اول به تضمین امنیت و اجرای برنامه‌های غیرقابل اعتماد از طریق استفاده از شبکه بین‌المللی گره‌های عمومی می‌پردازد.
  • ماشین مجازی اتریوم در پیشگیری از حملات (Denial-of-Service) تخصص دارد و گواهی می‌دهد که برنامه‌ها به وضعیت یکدیگر دسترسی ندارند و همچنین بدون هیچ تداخل احتمالی میان طرفین ارتباط برقرار می‌کند.

قراردادهای هوشمند چیست؟

اصطلاح قرارداد هوشمند اولین بار در سال ۱۹۹۴ مطرح شد و به ثبت قراردادها در قالب کد کامپیوتری اشاره دارد. هنگامی‌که شرایط از پیش تعیین شده برآورده شود قرارداد به طور خودکار فعال می‌شود.

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

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

قراردادهای هوشمند شامل چه مواردی می‌شود؟

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

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

انواع داده زبان سالیدیتی

سالیدیتی از تمام انواع داده‌های رایج که در سایر زبان‌های شی گرا دیده می‌شود پشتیبانی می‌کند، از جمله:

  • بولی – نوع داده بولی بسته به وضعیت شرط، زمانی که شرط درست باشد «۱» و زمانی که نادرست است باشد «۰» به دست می‌دهد.
  • عدد صحیح – می‌توانید مقادیر صحیح را در سالیدیتی علامت‌دار یا بدون علامت کنید. سالیدیتی همچنین از استثناهای زمان اجرا و کلمات کلیدی «uint8» و «uint256» پشتیبانی می‌کند.
  • رشته – نقل قول‌های تکی یا دوتایی ممکن است یک رشته را نشان دهند.
  • اصلاح‌کننده – قبل از اجرای کد برای یک قرارداد هوشمند، یک اصلاح‌کننده اغلب منطقی بودن تمام شرایط را تایید می‌کند.
  • آرایه – سینتکس برنامه‌نویسی سالیدیتی مانند سایر زبان‌های شی گرا است و از آرایه‌های تک بعدی و چند بعدی پشتیبانی می‌کند.

علاوه بر موارد بالا، زبان سالیدیتی به برنامه‌نویس این امکان را می‌دهد تا ساختارهای داده را با نوع شمارش (enums)، عملگرها و مقادیر هش ترسیم کند تا مقادیر ذخیره شده در مکان‌های ذخیره‌سازی خاص را برگرداند.

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

  • سولگراف (Solgraph) : برای تولید نمودار DOT استفاده می‌شود که جریان کنترل تابع قرارداد سالیدیتی را مجازی‌سازی می‌کند و آسیب‌پذیری‌های امنیتی را نشان می‌دهد.
  • سالیدیتی رپل (Solidity REPL) :برای نوشتن کدهای خط فرمان روی کنسول سالیدیتی استفاده می‌شود.
  • ای وی ام لب (EVM Lab): یک بسته ابزار کامل است که توانایی تعامل با ماشین مجازی اتریوم (EVM) را دارد. این بسته شامل ای پی آی اترچِین، نمایش‌دهنده ترِیس، ماشین مجازی است.
  • اومدیس (Evmdis): مخفف دیس اسمبلر ماشین مجازی اتریوم است که می‌تواند بایت کد را به صورت استاتیک تحلیل کند تا نسبت به عملیات خام ماشین مجازی اتریوم سطح بالاتری از انتزاع ارائه دهد.

سالیدیتی چگونه در اتریوم استفاده می‌شود؟

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

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

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

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

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

تفاوت بین جاوا اسکریپت، سالیدیتی، اتریوم و چِین کد چیست؟

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

اما بپردازیم به پاسخ سوال بالا:

  1. جاوا اسکریپت زبانی است که به موقع تفسیر می‌شود. این زبان بیشتر در برنامه‌های فرانت اِند معروف است و در مرورگر اجرا می‌شود، اما برای برنامه‌های کاربردی مانند نود جِی اس و آدوبی آکروبات نیز استفاده می‌شود.
  2. سالیدیتی یک زبان سطح بالا است. این زبان تا حدودی از روی ECMAScript طراحی شده است به همین دلیل گفته می‌شود که شبیه جاوا اسکریپت است. اما شباهت این دو به همین جا ختم می‌شود. سالیدیتی کامپایل می‌شود (تفسیر نمی‌شود) و معمولاً روی بلاکچین‌هایی که ماشین مجازی اتریوم را درک می‌کنند اجرا می‌شود. کد سالیدیتی پس از کامپایل و مستقر شدن به‌عنوان قرارداد هوشمند اجرا می‌شود و می‌توان با آن ارتباط برقرار کرد.
  3. اتریوم معمولاً به بهانه پروتکل اتریوم به‌عنوان بلاکچین شناخته می‌شود. بلاکچین اتریوم شبکه‌ای از گره‌ها است که بر اساس یک پروتکل خاص، به اصطلاح پروتکل اتریوم، بلوک‌ها را تولید و مبادله می‌کنند. تمام گره‌های شبکه باید این پروتکل را درک کنند.
  4. چِین کد (Chaincode) مشابه قراردادهای هوشمند است که با سالیدیتی نوشته می‌شود. اما چین کد در هایپرلجر استفاده می‌شود در حالی که اصطلاح قراردادهای هوشمند در اتریوم استفاده می‌شود.

سالیدیتی چه کاربردی دارد؟

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

رأی دادن

در حال حاضر رأی‌گیری با مسائل متعددی از جمله دستکاری داده‌ها، رای دهندگان جعلی، تغییر در ماشین‌های رأی گیری و اشغال کردن شعب اخذ رأی درگیر است. قراردادهای هوشمند سالیدیتی را می‌توان برای شفاف و ساده‌سازی فرایند رأی گیری ایجاد و مستقر کرد.

حراج‌های سرپوشیده

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

تأمین مالی جمعی

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

مزایای برنامه‌نویسی سالیدیتی

برنامه‌نویسی سالیدیتی علاوه بر قابلیت اصلی آن ویژگی‌های متعدد دیگری دارد که باعث برتری آن نسبت به سایر زبان‌های مبتنی بر اتریوم می‌شود.

  • برنامه‌نویسی سالیدیتی به جز انواع داده‌های بنیادی، انواع داده‌های پیچیده و متغیرهای عضو را نیز پشتیبانی می‌کند.
  • سالیدیتی یک رابط باینری برنامه (ABI) برای تأمین ایمنی انواع داده فراهم می‌کند. اگر کامپایلر متوجه عدم تطابق نوع داده در هر متغیری شود رابط باینری یک خطا ایجاد می‌کند.
  • سالیدیتی به «مشخصات زبان طبیعی» اشاره دارد که برای تبدیل مشخصات کاربر محور به زبان قابل فهم توسط ماشین‌ها استفاده می‌شود.

معایب سالیدیتی

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

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

بزرگ‌ترین نقطه ضعفی که می‌توان در سالیدیتی مشاهده کرد عدم بلوغ آن (در مقایسه با زبان‌های قدیمی مانند سی یا جاوا) است. ایراد این نوظهور بودن کمبود آزاردهنده کتابخانه‌ها و مراجع برای توسعه‌دهندگان و دشواری یادگیری سالیدیتی برای تازه‌کارها است.

سخن آخر

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