زبان سالیدیتی (Solidity) از زمانی که برای اولین بار در سال ۲۰۱۴ ارائه شد و سپس توسط تیم اتریوم توسعه یافت، مسیر طولانیای را طی کرده است. صدها هزار توسعهدهنده وجود دارند که از این زبان برنامه نویسی برای ایجاد برنامههای کابردی مبتنی بر بلاک چین استفاده میکنند. این مقاله به بررسی زبان سالیدیتی (Solidity) در اکوسیستم اتریوم میپردازد. اگر علاقهمند هستید تا با شیوه کار این زبان برنامهنویسی مبتنی بر بلاک چین و کاربرد آن در توسعه قراردادهای هوشمند بیشتر آگاه شوید، این مقاله مناسب شماست.
زبان سالیدیتی (Solidity) چیست؟
سالیدیتی (Solidity) یک زبان برنامه نویسی شیگرا (OOP) و سطح بالا است که از آن برای ایجاد قراردادهای هوشمندی که تراکنشها را روی بلاک چین خودکار میکنند، استفاده میشود. این زبان برنامهنویسی از زبانهای جاوا، پایتون و ++C الهام گرفته شده است. این زبان پس از انتشار در سال ۲۰۱۴، توسط بنیانگذاران و برنامهنویسان پروژه اتریوم توسعه یافت. در ابتدا از زبان سالیدیتی برای ایجاد قراردادهای هوشمند در بلاک چین اتریوم استفاده شد و سپس بلاک چینهای دیگری شروع به استفاده از آن کردند.
سالیدیتی بسیار شبیه یکی از محبوبترین زبانهای برنامه نویسی یعنی جاوا اسکریپت است. میتوان آن را مانند گویشی از زبان جاوا اسکریپت تشبیه کرد. به زبان ساده اگر با جاوا اسکریپت آشنا هستید، میتوانید از سالیدیتی نیز به راحتی استفاده کنید؛ همچنین، Solidity مشخصههای مشترکی با زبانهای برنامهنویسی پایتون و C++ دارد و به عنوان یک زبان سطح بالا، نیاز به کدنویسی به صورت یک و صفر را برطرف می کند.
نوشتن برنامهها با استفاده از ترکیب حروف و اعداد و به روشهایی که درک آنها سادهتر است، کار را برای انسانها بسیار آسان میکند. سالیدیتی یک زبان برنامهنویسی استاتیک تایپ است که از وراثت، کتابخانهها و انواع توابع پیچیده تعریف شده توسط کاربر پشتیبانی میکند. با این که Solidity استاتیک تایپ محسوب میشود اما کاربر میتواند هر متغیر را بسیار دقیق مشخص کند. نوع داده به کامپایلر اجازه میدهد تا استفاده صحیح از متغییرها را بررسی کند.
دادههای سالیدیتی معمولا به عنوان متغیرهای مقداری (Value Type) یا متغیرهای مرجع (Reference Type) طبقهبندی میشوند. تفاوت اصلی بین متغیرهای مقداری و متغیرهای مرجع را میتوان در نحوه تخصیص آنها به یک متغیر و شکل ذخیره آنها در ماشین مجازی اتریوم (EVM) یافت. در حالی که تغییر مقدار در یک متغیر بر مقدار متغیر دیگر تأثیر نمیگذارد، هر کسی که به مقادیر تغییر یافته در متغیرهای نوع مرجع اشاره می کند ممکن است مقادیر بهروزشده را دریافت کند.
سالیدیتی چگونه کار می کند؟
زیبایی اکوسیستم اتریوم این است که ارزهای دیجیتال و برنامههای غیرمتمرکز مختلفی میتوانند از آن استفاده کنند. قراردادهای هوشمند (Smart Contracts) برای انواع کسبوکارها و سازمانها امکان ساخت فناوریهای منحصربهفرد بر روی بلاک چین اتریوم را فراهم میکنند. هر سال، جهان میلیاردها دلار برای طراحی و توسعه راهحلهای بلاک چین خرج میکند و بسیاری از این راه حلها با استفاده از زبان سالیدیتی ایجاد میشوند.
قراردادهای هوشمند ساخته شده با استفاده از سالیدیتی را میتوان راهی برای خودکارسازی فرآیندهای تجاری و غیرتجاری بین افراد مختلف در نظر گرفت. این زبان برنامهنویسی تضمین میکند که خطراتی مانند تقلب یا مشکل دوبار خرج کردن در انجام تراکنهای ارز دیجیتال رخ ندهد. ماشین مجازی اتریوم (EVM) یکی از اجزای کلیدی است که اجرای کدهای Solidity را ممکن میکند. EVM یک رایانه مجازی روی بلاک چین است کدهای برنامههای کاربردی توسط آن اجرا میشوند.
در پشت پرده، سالیدیتی کدی در سطح ماشین ایجاد میکند که روی ماشین مجازی اتریوم اجرا میشود. یک کامپایلر برای شکستن کدهای سطح بالا (قابل خواندن توسط انسان) استفاده میشود که به دستورالعملهای پردازش شده در پردازنده تبدیل میشود. پلتفرمهای مختلف، کامپایلر سالیدیتی را به صورت رایگان ارائه میدهند؛ از جمله کامپایلر آنلاین رمیکس (Remix) و یک کامپایلر شبیه به خط فرمان در رایانههای شخصی.
البته قراردادهای هوشمندی که روی EVM اجرا میشوند، محدودیتهایی دارند که باید برطرف شوند. یکی از مهمترین آنها دسترسی محدود به توابع مورد نیاز کتابخانهها برای تجزیه ساختارهای JSON یا محاسبات شناور است. توابع عمومی، مشابه APIهایی هستند که هر کسی در جهان ممکن است به آنها دسترسی داشته باشد. هر کسی می تواند آن را در کد خود فراخوانی کند. توابع عمومی در بسیاری از موارد برای اجرای فرآیندهای مشترک در یک پلتفرم طراحی شدهاند که همه کاربران از آن استفاده میکنند.
به عنوان مثال، یک تابع عمومی میتواند ایجاد شود تا به همه کاربران یک پلتفرم اجازه دهد تا مانده حساب خود را بررسی کنند. یکی از رایجترین راههای بهرهبرداری از قراردادهای هوشمند، توابع عمومی است. در حالی که نوشتن قراردادهای هوشمند با زبان سالیدیتی آسان است، برقراری امنیت آنها اغلب کاری بسیار دشوار خواهد بود. برای مثال، اگر تابع برداشت در یک قرارداد هوشمند ایمن نباشد، مهاجم میتواند تابع آسیبپذیر را دستکاری کند تا داراییهای حساب را خالی کند.
مهاجم میتواند با استفاده از حلقهای که تابع برداشت را به طور مکرر تکرار میکند، از یک تابع برداشت برای ارسال پول به حساب دیگری استفاده کند. توابع خصوصی فقط از داخل قراردادها قابل فراخوانی هستند. آنها حاوی دستورالعملهایی هستند که تنها پس از فراخوانی توسط توابع دیگر، به صورت زنجیرهای قابل اجرا هستند. این کار دستکاری کد توسط عوامل مخرب را دشوارتر میکند.
استانداردها و منطق کدنویسی
استانداردهای مختلفی در حال ظهور هستند که تعیین میکنند چگونه از قراردادهای هوشمند سالیدیتی برای ساخت برنامههای کاربردی در بلاک چین اتریوم استفاده شود. این استانداردهای توکن با نام ERC یا Ethereum Request for Comments شناخته میشوند. استانداردها بر اساس اسنادی که حاوی دستورالعملهایی در مورد توابع مورد نیاز و محدودیتهایی در مورد نحوه رفتار کد است طراحی میشوند. استانداردهای ERC که متخص به شبکه اتریوم هستند که نحوه عملکرد زبان سالیدیتی را تعیین می کنند عبارتند از:
- ERC20
- ERC165
- ERC721
- ERC223
- ERC621
- ERC777
- ERC827
- ERC884
- ERC865
- ERC1155
روش های مختلفی وجود دارد که میتوان از آنها برای ایجاد تعامل قراردادهای هوشمند با یکدیگر استفاده کرد. زبان سالیدیتی میتواند برای ایجاد دستورالعملهای اختصاصی در مورد نحوه ذخیره دادهها در قرارداد هوشمند استفاده شود. منطق و دادهها در قراردادهای هوشمند را میتوان با استفاده از این زبان برنامهنویسی از هم جدا کرد. با استفاده از قراردادهای جایگزین، منطق یک قرارداد را میتوان تغییر داد تا امکان این جداسازی را فراهم کند.
تغییرناپذیری
تغییر کد قرارداد هوشمند پس از نوشتن و کامپایل غیرممکن است؛ یعنی هر خط کد باید طبق برنامه کار کند در غیر این صورت ممکن است خطرات جدی سوء استفاده از کد وجود داشته باشد. از آنجایی که بلاک چین اتریوم تغییرناپذیر است، تغییر دادهها و منطق نوشته شده روی آن غیرممکن است. راه دور زدن این موضوع، استفاده از یک پروکسی برای اشاره به قرارداد دیگری است که حاوی منطق تجاری واقعی است. این اجازه میدهد تا در حالی که نسخه جدیدی از قرارداد اجرا میشود، باگها رفع شوند.
هزینه گس
بهینه سازی گس به کاهش هزینه آن در هنگام اجرای کدهای سالیدیتی کمک میکند. برخی از محبوبترین روشهای بهینهسازی هزینه گس شامل استفاده از کتابخانهها و استفاده از توابع کمتر است. کتابخانهها اغلب برای ذخیره بایت کد استفاده میشوند. به جای اضافه کردن بایت کد غیرضروری به قرارداد هوشمند، منطق را میتوان در کتابخانه ها قرار داد. این به کوچک نگه داشتن اندازه قرارداد هوشمند کمک میکند. با استفاده از توابع کمتر، بایت کد کمتری مورد نیاز است و دشواری بررسی کد نیز کاهش مییابد.
چگونه زبان Solidity در اتریوم استفاده میشود؟
از زبان برنامهنویسی سالیدیتی برای ایجاد قراردادهای هوشمند برای ساخت و انتشار توکنهای مثلی و توکنهای غیرمثلی (NFT) استفاده میشود. استانداردهای مختلفی برای ساخت این توکنهادر اکوسیستم اتریوم استفاده میشود. این موارد اجازه میدهد تا انواع مختلفی از شرایط استفاده برای افرادی که از بلاک چین استفاده میکنند ایجاد شود. سالیدیتی افراد را قادر میسازد تا از توکنهای مثلی و غیرمثلی روی بلاک چین اتریوم استفاده کنند. از ضرب (Mint) NFTها گرفته تا افزودن آنها به استخرهای فارمینگ برای بهرهمندی بیشتر، روشهای مختلفی هستند که استفاده از آن توکنها توسط اتریوم امکانپذیر شده است.
ایجاد سازمانهای مستقل غیرمتمرکز (DAO) نیز توسط Solidity امکانپذیر است. دائو نوع جدیدی از ساختار سازمانی آنلاین محسوب میشود که توسط زبان Solidity نوشته شده است. دائو به افراد مختلف اجازه میدهد تا به عنوان اعضای یک پلتفرم آنلاین گرد هم آیند و در آنجا به تصمیمات کلیدی رأی دهند. همچنین، امکان خودکارسازی فرآیندهای درون این سازمان را فراهم میکند. نمونههایی از اتوماسیون فرآیند در دائو شامل اخذ رأی برای تصمیمات کلیدی و تخصیص اعتبار به اعضای برای مشارکت آنها در گروه است.
تعریف استانداردهای بلاک چین
سالیدیتی خیلی بیشتر از یک زبان برنامهنویسی است و در حال تعیین استانداردهایی برای آینده فناوری بلاک چین است. به لطف تعدد توسعهدهندگان اوپن سورس که برای بهبود امنیت و عملکرد Solidity کار میکنند، هزاران برنامه در اکوسیستم اتریوم همچنان برای عملکرد برنامههای خود به این زبان برنامه نویسی وابسته هستند. با ایجاد استانداردهای جدید برای قراردادهای هوشمند در اتریوم، استفاده از این زبان امنتر خواهد شد. شما همراهان عزیز ارزتودی میتوانید دیدگاه وسوالات خودتان در مورد زبان برنامه نویسی Solidity را با ما در قسمت نظرات در میان بگذارید.
سوالات متداول
زبان سالیدیتی (Solidity) چیست؟
سالیدیتی یک زبان برنامه نویسی شیگرا (OOP) و سطح بالا است که از آن برای ایجاد قراردادهای هوشمند استفاده میشود.
استانداردها در شبکه اتریوم چیست؟
استانداردها دستورالعملهایی هستند که توابع مورد نیاز و محدودیتهای نحوه رفتار کد را بررسی میکنند؛ در شبکه اتریوم استانداردها نحوه عملکرد زبان سالیدیتی را تعیین میکنند.
نکته: توجه داشته باشید این مقاله صرفا با هدف راهنمایی و آشنایی نوشته شده و آکادمی ارز دیجیتال ارزتودی مسئولیتی در مقابل تصمیمات افراد یا عواقب مالی آن ندارد.