به احتمال زیاد کلمه سالیدیتی (Solidity) به گوشتان خورده است. سولیدیتی یک زبان برنامه نویسی شی گرا است که از آن برای نوشتن قراردادهای هوشمند بر روی بلاکچینهای معروفی مثل اتریوم (Ethereum) استفاده میشود. سالیدیتی یک زبان برنامه نویسی است که به شدت تحت تأثیر جاوا اسکریپت، پایتون و سیپلاسپلاس بوده و ماشین مجازی اتریوم را هدف قرار میدهد.به زبان ساده، میتوان گفت که:« سالیدیتی زبان برنامه نویسی اتریوم است.» پس کسانی که به دنبال توسعه برنامههای وب3 یا برنامههای نامتمرکز هستند، باید درک اولیهای از سولیدیتی داشته باشند.
مورالیس(Moralis) برخی از پیچیدهترین ابزارها را در اختیار توسعهدهندگان قرار داده است تا از آنها برای توسعه برنامههای بدون سرور در وب3 استفاده کنند. بلد بودن سولیدیتی به این معنی است که شما برای ساخت برنامههای وب3 با مورالیس مهارت خواهید داشت. مورالیس یک زیرساخت پشتیبانی بدون سرور در وب3 ارائه میدهد که کاملاً مدیریت شده و بینهایت مقیاسپذیر است. دانستن سالیدیتی به شما امکان میدهد تا قراردادهای هوشمند را به راحتی و به سرعت کدنویسی کنید.
آشنایی با سالیدیتی
آشنایی با سالیدیتی
بیشتر از یک دهه از ظهور بیت کوین میگذرد، ظهوری که سبب شد تا تب جدیدی از توسعه در جامعه برنامه نویسی برانگیخته شود. برخی از پیشگامان، در روزهای اولیه کریپتو، پتانسیل سیستمهای غیرمتمرکز و اجماع این سیستمها را دیدند و به آزمایش ایدههای اساسی، پیرامون گسترش پروتکل بیت کوین به سایر برنامههامشغول شدند. برای اولین بار، ویتالیک بوترین که یکی از اولین حامیان بیت کوین بود، پیشنهاد داد تا پروتکل دیگری برای اجرای قراردادهای هوشمند ایجاد شود و این پروتکل پیشنهادی پیچیدهتر از پروتکل شبکه بیت کوین بود.
بیت کوین ساختار سادهای دارد، زیرا در درجه اول برای اینکه پول خوبی باشد، ایجاد شده است. بوترین برای انجام تراکنشهای پیچیدهتر که نیازی به حضور واسطه برای اعتبارسنجی آنها نیست، ایده اتریوم را پیشنهاد کرد. اتریوم یک سیستم پیچیده از قراردادهای هوشمندی است که با یکدیگر تعامل دارند. در اتریوم، ایده تراکنش دیگر به خود پول محدود نمیشود، بلکه میتوان مجموعهای از انواع ترتیبات را با استفاده از یک پروتکل بسیار انعطافپذیر و قابل برنامهریزی اجرا کرد.
اتریوم امکانات را گسترش داد، همچنین خلاقیت و حل مسئله را وارد ترکیب کرد. در نتیجه، این پروتکل جدید بلاکچین برای دستیابی به اهداف جدید خود، تا حد امکان به تکامل تورینگ نیاز داشت. در ادامه این مقاله مفهوم تکامل تورینگ را توضیح میدهیم.
یادگیری سالیدیتی و اتریوم
پیش از این که دیوانهوار به جستجوی « چگونه سولیدیتی را یاد بگیریم؟ » بپردازید، بهتر است به ریشههای این زبان برنامهنویسی و قراردادهای هوشمند سالیدیتی که چارچوب معاملاتی اتریوم را تشکیل میدهند، بازگردیم. سالیدیتی (Solidity) و اتریوم (Ethereum)هر دو مفاهیم درخشانی هستند که بر پایه مفاهیمی درخشان ساخته شدهاند. همه چیز با کاوش در ماهیت خود محاسبات و رویای ماشینهایی که میتوانند انسانها را در قدرت محاسباتی خود تقریب بزنند، آغاز شد.
اتریوم با کار اختصاصی و تلاش گسترده رمزنگاران، ریاضیدانان و دانشمندان برجسته کامپیوتر ساخته شده و بسیاری از مفاهیم، مثل تمرکززدایی، تغییرناپذیری، حالتها، شبکهها، تئوری بازی و دیگر مفاهیم را با هم ادغام میکند، همچنین خواندن مجدد در ماشینهای حالت محدود نیز اهمیت دارد. در مسیر کشف نحوه یادگیری سولیدیتی، با اصطلاحاتی مانند تکامل تورینگ و ماشینهای تورینگ مواجه خواهید شد. پس بنابراین، بهتر است این مفاهیم را در اوایل سفر خود درک کنید.
آشنایی با تکامل تورینگ
برای درک سولادیتی ابتدا باید نگاهی به تکامل تورینگ و ماشینهای تورینگ بیندازیم. اصطلاح « تکامل تورینگ» به خودی خود، به منشأ مفهوم ماشین تورینگ اشاره دارد. همانطور که احتمالا حدس میزنید، آلن تورینگ افسانهای با این اصطلاح ارتباط دارد! تورینگ در مقالهاش در سال 1936، پیرامون اعداد قابل محاسبه با کاربرد برای مسئله Entscheidungsproblem ماشینی را در نظر گرفت که بتواند هر نوع مشکلی را که انسان قادر به حل آن باشد، حل کند.
سیستمی از قوانین دستکاری دادهها به عنوان تکامل تورینگ در نظر گرفته میشود که بتواند یک ماشین تورینگ را شبیهسازی کند. ایده تکامل تورینگ پیش از کامپیوترهای امروزی و اختراع رم مطرح شد. این تعریف انتزاعی از معنای محاسبه و نحوه انجام آن بود. همانطور که بعدا خواهید فهمید، قراردادهای هوشمند سالیدیتی با ماشینهای کامل تورینگ ارتباط دارند.
Entscheidungsproblem یک واژه آلمانی در ریاضیات و علوم کامپیوتر است که به عنوان چالش برای «مسئله تصمیم گیری» مطرح شده است. (توسط دیوید هیلبرت و ویلهلم آکرمن) یک مسئله الگوریتمی در نظر بگیرید که به عنوان ورودی، یک عبارت را میگیرد و با توجه به اینکه آیا این گزاره معتبر جهانی است، «بله» یا «خیر» پاسخ میدهد.
ماشین تورینگ
آشنایی با ماشین تورینگ
خب، ببینیم ماشین تورینگ چیست؟ ماشین تورینگ در ابتدا به عنوان یک نوار بینهایت تصور میشد که به مربعهایی تقسیم شده بود و میتوانستند بر روی آن دادهها را بنویسند و یا بخوانند. دادهها به شکل 1 و 0 یا کد باینری است و ماشین آن را به مجموعهای از نمادها تفسیر میکند. این مجموعه محدود از نمادها به عنوان الفبای ماشین شناخته میشود. این دستگاه دارای یک سر محاسباتی یا خواندن، نوشتن است که در امتداد نوار حرکت داده شود و میتواند نمادی را روی یک مربع بنویسد و یا پاک کند.
هد محاسباتی توجه ماشین را در یک زمان به یک مربع، معطوف میکند، به این معنی که ماشین هوشیار است و بسته به اینکه هد خواندن و نوشتن آن را به کجا هدایت میکند، در هر زمان معین، فقط از یک مربع آگاه است. از نظر حرکت، هد محاسباتی در هر زمان به یک فضا محدود میشود، یعنی فقط میتواند در یک فضای واحد از موقعیت فعلی خود، به چپ یا راست حرکت کند. همچنین هد میتواند نمادها را در مربع خاصی که روی آن قرار دارد، بخواند یا بنویسد.
با استفاده از این معماری اولیه، ماشین میتواند محاسبه کند و یا تصمیم بگیرد که کدام مجموعه از رفتارها یا عملیات بر اساس آنچه «ماشین حالت محدود» نامیده میشود، اجرا شود. انواع مختلفی از ماشینهای تورینگ را میتوان ایجاد کرد که عملکرد آنها توسط ماشینهای حالت منحصر به فرد یا مربوط به آنها تعریف میشود. در مقاله تورینگ، او پیکربندیهای m را ذکر میکند که به تعداد محدود حالتها در یک ماشین حالت محدود اشاره دارد. دستگاه، بین این مجموعه ثابت از تنظیمات ممکن، سوئیچ میکند.
حالت گذار و پذیرش در ماشین های تورینگ
در ماشین تورینگ، ابتدا با یک حالت معین شروع میکنید و به حالت نتیجه یا آینده دیگری میروید. فاز بین چنین حالتهایی، حالت گذار نامیده می شود. در حالی که یک ماشین در وضعیت فعلی خود است، نماد فعلی را اسکن میکند و برای دستورالعملهای کارهای بعدی، به یک جدول بزرگ (که به نام جدول انتقال شناخته میشود) اشاره میکند. حالت گذار به مرحله «تصمیم اتخاذ نشده» اشاره دارد که در آن مرحله، ماشین هنوز به دنبال جدول مراحل بعدی احتمالی است.
هنگامی که یک رشته را در یک ماشین تورینگ وارد میکنید، میتوانید تصور کنید که در یک جدول انتقال قرار میگیرد که در آن نمادها با حرکت به چپ یا راست در یک سری از حالتها، شما را راهنمایی میکنند که چه کاری انجام دهید تا زمانی که به حالت نهایی یا حالت پذیرش برسید. حالتهای پذیرش عاملی هستند که باعث میشوند ماشین اجرای خود را متوقف کند.
وارد شدن به حالت پذیرش به این معنی است که دستگاه متوقف میشود و بنابراین برای همیشه اجرا را به حالت تعلیق در آورده است. این بدان معنی است که نمیتواند به یک حلقه بی نهایت برود. از سوی دیگر، ماشینهای بدون حالت پذیرش هرگز متوقف نمیشوند و در حلقههای پیوسته کار میکنند. اتریوم در کاغذ زرد خود به چنین حالتهایی اشاره میکند. درک وضعیتهای شبکه و معنای آنها برای اتریوم شما را در این سفر راهنمایی میکند، زیرا میانبرهای بهینه را برای درک نحوه تعامل با آن و نحوه یادگیری سالیداتی پیدا میکنید.
ماشین تورینگ جهانی
ماشینهای تورینگ میتوانند به اندازه نیاز محدود یا گسترده باشند. در تئوری، چنین ماشینهایی ممکن است حتی بتوانند مجموعه وسیعتری از محاسبات و درجهای از مرتبههای بیانی که متناسب با تعداد ماشینهای محدود یا تخصصی شبیهسازی شده است را، ثبت کنند. در عمل چه معنایی دارد؟ یک ماشین تورینگ جهانی یا UTM میتواند شماره توضیحات ماشین تورینگ دیگر را به عنوان ورودی شبیهسازی کند.
تورینگ قبلاً جدول انتقال حالت را برای چنین ماشینهایی تنظیم کرده است. امروزه میتوانیم به راحتی ایده برنامهای را که به عنوان داده استفاده میشود، درک کنیم و بنابراین میتوانیم نرمافزاری معادل «ماشینهای ماشین» بسازیم. این ایدهها، ما را به سوی فرصتهای بیپایان سوق میدهد! پایههای اتریوم از این مفهوم ماشین تورینگ جهانی، الهام گرفت!
اتریوم و سالیدیتی
قراردادهای هوشمند اتریوم و سالیدیتی
برای درک بهتر اتریوم، ابتدا باید با فناوری بیت کوین آشنا شوید و این شامل درک اساسی از نحوه کار دفتر کل توزیع شده، نحوه کار ماینینگ، نحوه اجرای گرهها و بلاکچین است. بیت کوین آغازگر انقلاب کریپتو بود اما اتریوم تز اولیه بلاکچین بیت کوین را گرفت و با آن اجرا کرد. اتریوم فراتر از اعتبارسنجی دادهها و ذخیره سازی در دفترهای توزیع شده است.
با کمک اتریوم، میتوانیم بسیاری از تراکنشهای متنوع و عملکردهای سطح بالا را انجام دهیم. این کار را میتوان با استفاده از چندین ارز یا توکن، از جمله بیت کوین در کل شبکه انجام داد. این شبکه تضمین میکند که کد بهطور مساوی اجرا و حالتهای حاصل از طریق اجماع ثبت و اعتبارسنجی میشوند.
اتریوم یک نرم افزار رایگان و متن باز است که بر روی شبکه غیرمتمرکز رایانهها اجرا میشود. عضویت در این شبکه داوطلبانه است. این شبکه از بلاکچین اتریوم پشتیبانی و تضمین میکند که برنامههایی به نام قراردادهای هوشمند با استفاده از رایانهها یا گرههای شرکتکننده داوطلب اجرا میشوند.
آشنایی با ماشین مجازی اتریوم (EVM)
اکنون که درکی از مفهومی ماشینهای تورینگ دارید، درک ایده پشت ماشین مجازی اتریوم یا EVM باید آسانتر باشد. EVM یک پشته مجازی است که در هر گره مشارکت کننده در شبکه (یا گره اتریوم) تعبیه شده است و کدبایت قرارداد را اجرا میکند. EVM یک سیستم تکامل تورینگ است، به این معنی که میتواند هر نوع مرحله منطقی و مرتبط با توابع محاسباتی را انجام دهد. یکی از اجزای اصلی پروتکل اتریوم را تشکیل و اجازه میدهد تا به اجماع برسد.
اجماع در پروتکل با اجرای قراردادهای هوشمند حاصل میشود که نتایج آن کاملاً قطعی یا تضمین شده است، همچنین برای طراحی اقتصادی اتریوم بسیار مهم است. در حالی که بیت کوین برای اجرای یک تراکنش پاداش میدهد، اتریوم برای اجرای دستورالعملهای نرم افزار هزینه دریافت میکند.
مکانیسم گاز در اتریوم به کاربران این امکان را میدهد تا با استفاده از اتر(ارز اصلی آن) برای دستورالعملهایی که میخواهند بر روی EVM اجرا کنند، پیش پرداخت کنند. EVMها بسیار متنوع هستند زیرا میتوانند با استفاده از JavaScript، C++، Ruby، Python و انواع زبانهای برنامهنویسی دیگر پیاده سازی شوند. بخشی از پاسخ سوال « سالیدیتی چیست؟» مربوط به درک رابطه آن با EVM میباشد.
سالیدیتی چه کاری برای اتریوم انجام می دهد؟
قراردادهایی که با استفاده از EVM اجرا میشوند، با استفاده از سولیدیتی نوشته میشوند. بنابراین، بیایید یک بار ولی برای همیشه به این سوال پاسخ دهیم که سالیدیتی چیست؟
سولیدیتی، این یک زبان برنامهنویسی سطح بالا میباشد که با نحوه بیان دستورالعملها توسط انسان سازگاری دارد. (با استفاده از اعداد و حروف به جای کد باینری) در حالی که ماشینهای اولیه تورینگ بر روی ورودیهای یک و صفر ساخته شده بودند، سولیدیتی این پیچیدگی را برطرف میکند و با استفاده از کدهای دوستانهتری که از بسیاری جهات شبیه جاوا اسکریپت است، فرآیند ورودی را انسانی میکند.
قراردادهای هوشمند سالیدیتی، دستورالعملهایی هستند که بعدا در کدبایت EVM کامپایل میشوند. همانطور که گفته شد، گرههای شبکه اتریوم نمونههایی از EVM را اجرا میکنند که به آنها اجازه میدهد در اجرای مجموعهای از دستورالعملها توافق کنند.
سالیدیتی کدی در سطح ماشین ایجاد میکند که در ماشین مجلزی اتریوم اجرا میشود.
نحوه عملکرد سالیدیتی
زیبایی اکوسیستم اتریوم در این است که بسیاری از ارزهای دیجیتال متنوع و برنامههای غیرمتمرکز میتوانند از آن استفاده کنند. قراردادهای هوشمند، امکان ایجاد فناوریهای منحصر به فرد در اتریوم را برای انواع کسب و کارها و سازمانها فراهم میسازند. هر سال، جهان میلیاردها دلار برای راه حلهای بلاکچینی خرج میکند. بسیاری از این راه حلها با استفاده از سولیدیتی ایجاد میشوند.
قراردادهای هوشمند سالیدیتی را میتوان راهی برای خودکارسازی فرآیندهای تجاری و غیرتجاری بین افراد مختلف تصور کرد که تضمین میکند افرادی که تراکنشهای خود را بر روی بلاکچین انجام میدهند، نگران خطراتی مثل کلاهبرداری یا عدم امکان استفاده از همان ارز نیستند.
یکی از کلیدیترین اجزایی که اجرای کد سولیدیتی را ممکن میکند، ماشین مجازی اتریوم است. ماشین مجازی اتریوم به عنوان یک رایانه مجازی بر روی بلاکچین توصیف میشود که ایدههای افراد را به کدی تبدیل میکند که قادر است برنامههای کاربردی را بر روی بلاکچین اجرا کند. سالیدیتی، کدی در سطح ماشین ایجاد میکند که در ماشین مجازی اتریوم اجرا میشود.
کامپایلر برای شکستن کدهای سطح بالا و با قابلیت خواندن توسط انسان، استفاده میشود. این کدها به دستورالعملهایی تبدیل میشوند که پردازنده آنها را میخواند. پلتفرمهای مختلف کامپایلر سالیداتی رایگان است. رمیکس(Remix) یک کامپایلر آنلاین سولیدیتی میباشد. این کامپایلر دانلود شده شبیه به برنامه فرمان بر روی کامپیوترهای شخصی است. برای استفاده از رمیکس میتوانید از این آدرس اقدام فرمایید.
نوشتن ایمن قراردادهای تجاری مشکل است.
قراردادهای هوشمند ماشین مجازی اتریوم محدودیتهایی دارند که باید برطرف شود. یکی از مهمترین این محدودیتها، دسترسی محدود به توابع مفید کتابخانهای است که به منظور تجزیه ساختارهای JSON یا محاسبات ممیز شناور اعمال شده است.
توابع عمومی و خصوصی سالیدیتی
در سالیدیتی با توابع عمومی و خصوصی سر و کار داریم. توابع عمومی مشابه APIهایی هستند که هر کسی در جهان ممکن است به آنها دسترسی داشته باشد یا به عبارت دیگر، هر کسی میتواند آنها را در کد خود استفاده نماید. در بسیاری از موارد، توابع عمومی، برای فرآیندهای مشترک در یک پلتفرم طراحی شدهاند که همه کاربران از آن استفاده میکنند. برای مثال، یک تابع عمومی میتواند به همه کاربران یک پلتفرم اجازه دهد تا مانده حساب خود را بررسی کنند.
توابع عمومی یکی از رایجترین راههای بهرهبرداری از قراردادهای هوشمند محسوب میشوند. با وجودی که نوشتن قراردادهای هوشمند با سالیدیتی آسان است، نوشتن ایمن آنها اغلب بسیار دشوار است. برای مثال، اگر تابع برداشت در یک قرارداد هوشمند ایمن نباشد، مهاجم میتواند این تابع آسیبپذیر را دستکاری کند تا وجوه مالی تخلیه شود.
مهاجم با استفاده از یک حلقه تکرار که تابع برداشت را به طور مکرر اجرا میکند و با فراخوانی تابع، از طریق ارسال پول به حسابی دیگر، سوء استفاده میکند. توابع خصوصی فقط از داخل قراردادها قابل فراخوانی هستند. آنها حاوی دستورالعملهایی هستند که تنها پس از فراخوانی توسط توابع دیگر، به صورت زنجیرهای قابل اجرا میباشند. بنابراین، کار دستکاری کد، توسط عوامل مخرب را دشوارتر میسازند.
منطق کد و استانداردها
استانداردهای مختلفی وجود دارد که تعیین میکند چگونه از قراردادهای هوشمند سالیدیتی برای ساخت برنامههای کاربردی در اتریوم استفاده شود. این استانداردها تحت عنوان استانداردهای درخواست اتریوم برای نظرات (ERC) شناخته میشوند. استانداردها بر اساس سند حاوی دستورالعملها و در مورد عملکردهای مورد نیاز و محدودیتهای نحوه رفتار کد است.
از سولیدیتی برای ایجاد تعامل قراردادهای هوشمند با یکدیگر استفاده میشود، همچنین برای ایجاد دستورالعملهای اختصاصی در رابطه با نحوه ذخیره دادهها در قرارداد هوشمند کاربرد دارد. منطق و دادهها در قراردادهای هوشمند را میتوان با استفاده از سولیدیتی از هم جدا کرد. منطق یک قرارداد را میتوان با استفاده از قراردادهای جایگزین، تغییر داد تا این امکان را فراهم کند.
سالیدیتی خیلی بیشتر از یک زبان برنامه نویسی میباشد و در حال تعیین استانداردهایی برای آینده فناوری بلاکچین است. به لطف توسعه دهندگان منبع باز که برای بهبود امنیت و عملکرد سولیدیتی تلاش میکنند، همچنان هزاران برنامه در اکوسیستم اتریوم برای عملکرد برنامههای خود به آن وابسته هستند. با ایجاد استانداردهای جدید قراردادهای هوشمند در اتریوم، استفاده از این زبان امنتر خواهد شد.
تغییرناپذیری
در قرارداد هوشمند، پس از نوشتن و مرحله کامپایل، تغییر دادن کد غیرممکن است. به این معنا که هر خط کد باید طبق برنامه کار کند و در غیر این صورت ممکن است خطرات جدی سوء استفاده از کد، وجود داشته باشد. از آنجایی که بلاکچین اتریوم تغییرناپذیر است، تغییر دادهها و منطق نوشته شده بر روی آن غیرممکن است. یک راه برای دور زدن این موضوع، استفاده از یک پروکسی است تا برای اشاره به قرارداد دیگری میباشد که حاوی منطق تجاری واقعی است. این امر، اجازه میدهد تا باگها رفع شوند در حالی که نسخه جدیدی از قرارداد اجرا میشود.
هزینه های گاز
برای استفاده از سالیدیتی در شبکه اصلی اتریوم، هزینه اضافی پرداخت میشود. برخی از این هزینههای اضافی، مبتنی بر سیستم گازی اتریوم است. برای ایمن کردن شبکه بلاکچین به ماینرها نیاز است تا کد بتواند با خیال راحت بر روی بلاکچین اجرا شود. هزینههای گاز میتواند تعیین کند که یک قرارداد هوشمند چقدر کارآمد است. قرارداد هوشمندی که اجرای آن پرهزینه باشد، در دراز مدت مورد استفاده قرار نمیگیرد.
کاربران برای اجرای قرارداد در شبکه اتریوم هزینه گاز میپردازند. گاز بر حسب واحد اتر (واحد پول موجود در اتریوم) محاسبه میشود. مجموع هزینه گاز تابع شما برابر با مجموع هزینه گاز در تمام عملیاتهای جداگانه است.
بهینهسازی گاز به کاهش هزینه گاز در هنگام اجرای کد سالیدیتی کمک میکند. برخی از محبوبترین روشهای بهینهسازی گاز شامل استفاده از کتابخانهها و کاربرد توابع کمتر است. کتابخانهها برای ذخیره کدبایت استفاده میشوند. به جای اضافه کردن کدبایت غیرضروری به قرارداد هوشمند، میتوانیک منطق را در کتابخانهها قرار دهیم. این کار، به کوچک نگهداشتن اندازه قرارداد هوشمند کمک میکند. با استفاده از توابع کمتر، کدبایت کمتری مورد نیاز است و دشواری ممیزی کد نیز کاهش مییابد.
فضای ذخیره سازی و حافظه
استوریج (Storage) به متغیرهایی اطلاق میشود که به طور دائم در بلاکچین ذخیره میشوند. متغیرهای حافظه موقتی هستند و مابین فراخوانی عملکرد خارجی قرارداد شما پاک میشوند. این درست همانند هارد دیسک کامپیوترتان در مقابل رم است.
تعامل با سایر قراردادها در شبکه بلاکچین
تعامل با سایر قراردادها در شبکه بلاکچین
برای تعامل با قراردادهای دیگر، یک رابط مانند شیء اعلام میکنیم. یک قرارداد ایجاد میکنیم و در داخل آن تابعی مشخص میکنیم که میخواهیم آن را از یک قرارداد دیگر فراخوانی و استفاده کنیم. تابع تنها یک اسکلت است و شامل بدنه نمیشود. پس از استقرار یک قرارداد در اتریوم، آن قرارداد، غیر قابل تغییر میشود، یعنی نمیتوان آن را تغییر داد. کد اولیهای که برای قرارداد استفاده میکنید به منظور باقی ماندن دایم بر روی بلاکچین وجود دارد.
به همین دلیل، امنیت یک نگرانی بزرگ در سالیدیتی است. اگر نقصی در کد قرارداد شما وجود داشته باشد، راهی برای اصلاح آن وجود ندارد و شما باید به کاربران خود بگویید که از آدرس قرارداد هوشمند دیگری استفاده کنند که این مشکل را ندارد.
تعدیل کننده های تابع
یک اصلاحکننده تابع (function modifier) شبیه یک تابع است اما به جای کلمه کلیدی تابع از کلمه کلیدی اصلاح کننده استفاده میکند. از مادیفایر برای موارد خاص استفاده میشود، مانند زمانی که شما میخواهید فقط شخص خاصی (نه دیگران) کاری را انجام دهد. این امر در بهروزرسانی بخشهای کلیدی DApp کمک میکند و در عین حال مانع از خرابکاری سایر کاربران در قراردادها میشود.
اطلاعات بیشتر در مورد ذخیره سازی
حافظه ذخیره سازی به صورت دایمی روی بلاکچین نوشته می شود.(برای همیشه!) هزاران گره در سراسر جهان نیاز دارند که این دادهها را در هارد دیسکهای خود ذخیره کنند و این مقدار داده در طول زمان و با رشد بلاکچین همچنان در حال رشد است. بنابراین انجام این کار، هزینه دارد.
مگر در موارد ضروری، به منظور کاهش هزینهها، از نوشتن دادهها در فضای ذخیرهسازی خودداری کنید. گاهی اوقات این مورد شامل منطق برنامه نویسی به ظاهر ناکارآمد است. مانند بازسازی یک آرایه در حافظه، هر بار که یک تابع فراخوانی میشود به جای ذخیره ساده، آن آرایه در یک متغیر ذخیره سازی جهانی برای جستجوهای سریع استفاده میشود.
از این رو توصیه میشود تا جایی که امکان دارد، از تایپهای حافظه استفاده کنید تا دادهها به طور دائم ذخیره نشوند و به نوبه خود باعث صرفه جویی در هزینه شود. حلقهها در سالیدیتی ارزانتر از ذخیرهسازی هستند. نابراین تا جایی که ممکن است از حافظه با حلقه for استفاده کنید. این کاملاً برخلاف کاری است که در زبانهایی مانند جاوا و پایتون انجام میشود، زیرا در این دو زبان، محاسبه یک حلقه for هزینه بیشتری دارد.
اصلاح کننده قابل پرداخت
توابع قابل پرداخت بخشی از چیزی است که سالیدیتی و اتریوم را بسیار جالب میکند. این دو نوع خاصی از توابع هستند که میتوانند اتر را دریافت کنند. وقتی یک تابع API را روی یک وب سرور معمولی فراخوانی میکنید، نمیتوانید دلار آمریکا را همراه با فراخوانی تابع خود، ارسال کنید و همچنین نمیتوانید بیت کوین ارسال کنید.
اما در اتریوم، از آنجایی که هم پول (اتر)، هم داده (بار تراکنش)، و هم خود کد قرارداد، همگی بر روی اتریوم هستند، این امکان برای شما وجود دارد که همزمان یک تابع را فراخوانی کرده و به قرارداد پول پرداخت کنید. این یک منطق واقعاً جالب مانند نیاز به پرداخت معینی به قرارداد برای اجرای یک عملکرد را امکانپذیر میکند. توجه داشته باشید :
در اتریوم، زمانی که تابعی را در یک قرارداد فراخوانی میکنید، آن را به عنوان یک تراکنش به یک گره یا گرههای شبکه پخش میکنید. گرههای موجود در شبکه، دستهای از تراکنشها را جمعآوری میکنند و سعی دارند تا اولین کسانی باشند که یک مسئله ریاضی محاسباتی فشرده را بهعنوان «اثبات کار» حل میکنند. سپس آن گروه از تراکنشها را همراه با اثبات کار (PoW) خود منتشر میکنند.(مانند یک بلوک به بقیه شبکه)
حافظه ذخیرهسازی به صورت دایمی بر روی بلاکچین نوشته میشود.
توکن ها
توکن فقط قراردادی است که ردیابی میکند چه کسی مالک چه مقدار از آن توکن است. برخی عملکردها را دنبال میکند تا آن کاربران بتوانند توکنهای خود را به آدرسهای دیگر منتقل کنند.
تاریخچه سالیدیتی (نسخه 0.1.0 تا آینده)
سولیدیتی ، اولین بار در سال 2014 میلادی توسط دکتر گوین وود (Gavin Wood) افسر ارشد فناوری (CTO) پیشنهاد شد و با کمک کریستین رایتویسنر (Christian Reitwiessner) توسعه پیدا کرد. او تیمی از توسعهدهندگان را رهبری کرد تا کار را به جلو ببرند. تیم اصلی سالیدیتی تا به امروز، توسط بنیاد اتریوم حمایت میشود و دارای جامعه گستردهای از حامیان و فهرست بلندبالایی از مشارکتکنندگان است که به توسعه سولیدیتی میپردازند و از طریق تعهدات، ثبت گزارشهای باگ، و رفع فعال مشکلات در گیتاب و فراتر از آن، کار را ادامه میدهند.
اولین نسخه سولیدیتی با نام عمومیv0.1.0 ارائه شد و از آن زمان تاکنون، بهبودهای زیادی را پشت سر گذاشته است. در نتیجه، پاسخ به سوال« سالیدیتی چیست؟» باید گفت که سولیدیتی به تکامل ادامه میدهد. سولیدیتی ، به منظور کاهش موانع ورود به اتریوم طراحی شده است، به این معنی که این زبان باید سادهترین و آسانترین زبان برای قراردادهای هوشمند باشد.
در ابتدا، قراردادهای هوشمند سولیدیتی دارای ویژگیهایی بود که چنین اهدافی را منعکس می کرد، از جمله قواعدی که بسیار شبیه به جاوا اسکریپت است و کمبودهای قابل توجهی در ویژگیهای آن وجود داشت. به وضوح، مبادلاتی در زبان وجود داشت تا آن را کاربرپسند کند. با گذشت زمان، امنیت در درجه اول اهمیت قرار گرفت و سهولت استفاده، جای خود را به تغییر اولویتها داد. به همین دلیل، قراردادهای هوشمند سولادیتی توانستند صریح و پرمخاطب باشند. امروزه، وقتی میپرسید «سالیدیتی چیست؟» احتمالاً در پایان با توضیحاتی مواجه خواهید شد که شامل طولانی بودن آن در مقابل صریح بودن سایر زبانهای کامپیوتری است.
سالیدیتی اولین زبان قراردادگرا
سالیدیتی اولین زبان قرارداد گرا است.
سولیدیتی اولین زبان قراردادگرا میباشد. یکی از مهمترین چیزهایی که باید در هنگام بررسی نحوه یادگیری سولیدیتی در نظر داشت این است که به طور خاص، سالیدیتی به منظور هدف قرار دادن ماشین مجازی اتریوم یا EVM طراحی شده است و شباهتهای زیادی به جاوا اسکریپت یا JS دارد. پس، اگر از قبل جاوا اسکریپت بلدید، یادگیری سولیدیتی آسانتر خواهد بود. البته تغییراتی در قواعد آن وجود دارد. با این وجود این دو زبان، از نقطه نظر دستوری و مفهومی، کاملاً مشابه هستند.
اتریوم بهعنوان زبان مادری، برخلاف جاوا اسکریپت، دستورات داخلی خواهد داشت تا به بخشی از بلاکچین دسترسی پیدا کند.(مثلاً یک مهر زمانی یا آدرس یک بلوک خاص) توابع داخلی به شما امکان میدهد تا بتوانید قراردادهای هوشمند سولیدیتی را به راحتی برنامه ریزی کنید. یک زبان قراردادگرا با زبانهای شی گرایی مثل جاوا و سیپلاسپلاس تفاوت دارد، زیرا تأکید آن بر قراردادها و توابع است.
سالیدیتی به شکل ایستا تایپ میشود و از کتابخانهها، وراثت و سایر ویژگیهای تعریف شده توسط کاربر که معمولا پیچیدهتر هستند، پشتیبانی میکند. این زبان تمام دستورالعملها را در یک جعبه کدبایت جمعآوری میکند تا این دستورالعملها در شبکه اتریوم خوانده و تفسیر شوند.
قراردادهای هوشمند سالیدیتی
مشابه جاهطلبیهای ماشین تکامل تورینگ، هدف اتریوم نیز مقابله و اجرای تراکنشهای سطح انسانی بود. برای انجام این کار، باید منطق سطح انسانی با درجهای از سادگی همراه میشد تا از یک طرف برای برنامه نویسان دوستانه باشد و بتواند قراردادهای هوشمند سالیدیتی را بر روی یک سیستم کامل تورینگ(که به عنوان ماشین مجازی کامل تورینگ تبلیغ میشود) اجرا کند و از طرف دیگر، اجازه سطح بی سابقهای از پیچیدگی و قطعیت را بدهد.
قابلیت پردازش چنین ماشین مجازی، در اجرای گره آن تعبیه میشود که یک شاهکار قابل توجه از تمرکززدایی و محصول نوآوری جنبش بلاکچین است. قراردادهای هوشمند سالیدیتی به هر کسی که در شبکه شرکت میکند(هر فردی در جهان که بخواهد) اجازه میدهد تا با افراد دیگر که شخصاً آنها را نمیشناسند یا به آنها اعتماد ندارند، معامله کند و حتی ممکن است از یک ارز مشترک استفاده نکنند!
قراردادهای هوشمند سولیدیتی به طور برنامهریزیشده، قوانین یک معامله تجاری را تنظیم میکنند و این کار را به زبانی سادهشده و قابل خواندن توسط ماشین، انجام میدهد. این کسب و کار غیر متمرکز و بیسابقه، خودکار است و میتواند بدون نظارت انسانی و یا شخص مورد اعتماد، در سطح جهانی، هفت روز هفته، بیست و چهار ساعته (24/7) اجرا شود.
بنابراین، اگر مجددا بپرسند که سالیدیتی چیست، دیدگاه انسان دوستی سطح بالای آن ممکن است آن را کمی پرمخاطبتر از سایر زبانهای برنامه نویسی کند، اما در قلبش کاری را انجام میدهد که قبلا هرگز انجام نشده است. یعنی پل زدن بین استدلال انسان و ماشین، که شامل حال انسان نمیشود! بیشتر شبیه ماشین است اما منطق ماشین را با نیازهای انسان تطبیق میدهد. سولیدیتی به عنوان یک ابزار با یک کامپایلر به ما اجازه میدهد تا منظور خودمان را راحتتر در کد بیان کنیم. سولیدیتی ، کد قابل خواندن توسط انسان را میگیرد و آن را به یک تابع تجاری تبدیل میکند.
آیا در اتریوم، زبان های دیگری به جز سالیدیتی وجود دارد؟
پاسخ مثبت است. بله، وجود دارد. زبانهای دیگری مانند سرپنت (Serpent) وجود دارند که میتوانند مشابه کد بایت ماشین مجازی اتریوم کامپایل شوند. شایان ذکر است با وجودی که سرپنت و سایر زبانهای کامپایلشونده با ماشین مجازی اتریوم، فراتر از محدوده این مقاله هستند، همه آنها اساساً یک عملکرد اجرایی دارند که تولید کدبایت ماشین مجازی اتریوم است و میتواند بر روی گرههای شبکه اجرا شود.
آموزش سالیدیتی
چگونه سالیدیتی را یادبگیریم؟
کدنویسی قراردادهای هوشمند سالیدیتی ممکن است ماجراجویی بزرگ و بعدی شما به عنوان یک برنامهنویس باشد. این امر، درهای جدیدی را به روی حوزه بلاکچین و برنامههای کاربردی پرتقاضای آن باز میکند و میتواند به شما دسترسی اولیهای به وب3 که در حال تغییر اینترنت است، بدهد. درک سولیدیتی و Web3.js دانش شما را در مورد اتریوم کامل میکند. به علاوه، منابع زیادی شما را در مورد نحوه یادگیری سولیدیتی راهنمایی میکنند.
نحوه یادگیری سالیدیتی با کمک بهترین دوره های آنلاین
اگر علاقه شما به برنامهنویسی برانگیخته شده است، می توانید برخی از بهترین منابع را در وب جستجو کنید تا مطمئن شوید که شروعی عالی دارید. پلتفرم Ivan on Tech Academy دستورالعملهای درجه یک در مورد نحوه یادگیری سالیدیتی و کدنویسی قراردادهای هوشمند آن را ارائه میدهد و همچنین، با روابط بین سولیدیتی و Web3.js آشنا خواهید شد. اکنون به Ivan on Tech Academy بروید و کشف کنید که چگونه درک بلاکچین اتریوم و یادگیری ایجاد قراردادهای هوشمند میتواند به شما کمک کند تا دیدگاه خود را تقویت نمایید و تغییر دهید!
کار با سالیدیتی و Web3.js
یکی دیگر از جنبههای توسعه در اتریوم، نیاز به درک چگونگی تعامل شما با بلاکچین توسط کتابخانه Web3.js است. جنبه اساسی آن، شایستگی سالیدیتی در جاوا اسکریپت است. برای اینکه بتوانید با سولیدیتی و Web3.js کار کنید، به مهارتهای جاوا اسکریپت نیاز دارید.
نمیتوانیم به اندازه کافی به ارتباط مستقیم دانش جاوا اسکریپت با کدنویسی و تعامل با بلاکچین اتریوم تاکید کنیم. با استفاده از سالیدیتی و Web3.js برنامههای نامتمرکز و dAppsها را در اکوسیستم ادغام میکنید.کتابخانه Web3.js برای اشاره به بلاکچین اتریوم و اجرای یک عملکرد خاص استفاده میشود. برنامههای غیرمتمرکز یا dApps برنامههایی هستند که به طور مستقیم در بلاکچین وجود ندارند، اما از آن برای اعتبارسنجی، ذخیره دادهها و انجام دیگر عملکردها استفاده میکنند. Web3.js به چنین dApp هایی کمک میکند تا به بلاکچین دسترسی پیدا کنند.
البته، بهترین راه برای پل زدن دانش نظری جاوا اسکریپت با برنامههای کاربردی بلاکچین، استفاده از مورالیس است. مورالیس توسعه برنامه Web3 و dApp را آسان میسازد. اگر نیازی به آشنایی سریع با جاوا اسکریپت دارید، از طریق دوره آموزشی Ivan on Tech Academy که رتبه بسیار بالایی دارد، جاوا اسکریپت برای توسعه دهندگان بلاکچین، را بیاموزید.
توسعه برنامه نامتمرکز با سالیدیتی
توسعه برنامه های نامتمرکز با مورالیس
اگر یک توسعه دهنده متوسط یا پیشرفته هستید که به دنبال پیگیری سریع پروژههای برنامه نامتمرکز خود هستید، مورالیس یک تقویتکننده باورنکردنی برای بهرهوری شما است. مورالیس به شما این امکان را میدهد تا روی ویژگیها و کاربرپسند بودن برنامههای نامتمرکز خود تمرکز کنید، در حالی که اجرای بینقص و بدون دردسری را در قسمت بک اند(back-end) تضمین میکند. در حقیقت، با بررسی اسناد رسمی مورالیس، میتوانید برنامههای نامتمرکز خود را در طی مدت زمانی بیسابقه ارسال کنید.
مزایای یادگیری سالیدیتی
سالیدیتی چیست؟ فارغ از تعریف فنی، میتوان گفت سولیدیتی یک زبان برنامه نویسی است که شما را در سطح بعدی پیشرفت قرار می دهد و درها را به روی فرصتهای جدید باز می کند. شما به عنوان یک توسعه دهنده، همیشه به دنبال رشد هستید و همگام با آخرین روندهای برنامهنویسی خواهید بود.
اگر به دنبال توسعه بلاکچین بودهاید، سالیدیتی میتواند نقطه ورود شما باشد. با س سولیدیتی الیدیتی، بیش از یک زبان، یا یک مهارت بیشتر یاد خواهید گرفت. این شانس را خواهید داشت که به اکوسیستم اتریوم کمک کنید، با تیمهای سراسر جهان کار کنید، با آنها تعامل داشته باشید، قابلیت استخدام بیشتری کسب کنید، به پروژههای شگفتانگیز بپیوندید، بخشی از یک جامعه فوقالعاده با تابلوهای گفتگو و نقاط تماس متعدد باشید، اما مهمتر از همه، کارآفرین باشید و یک برنامه جدید اختراع کنید!
به طور معمول، سالیدیتی یک پیش نیاز برای ایجاد برنامههای نامتمرکز وب3 محسوب میشود اما مورالیس با توسعه برنامه وب3 این کار را آسانتر از همیشه میکند. از پشتیبانی قدرتمند بومی مورالیس برای سیستم فایل بین سیارهای (IPFS) و پشتیبانی احراز هویت متامسک (Meta Mask) به همراه عملکرد ارائهدهنده گرههای جادویی و پرسرعت مورالیس استفاده کنید.
سیستم فایل بین سیارهای(IPFS) یک سیستم اشتراک گذاری فایل است که برای ذخیره و به اشتراک گذاری کارآمدتر فایلهای بزرگ استفاده میشود. این امر، متکی بر هشهای رمزنگاری است و میتواند به راحتی در یک بلاکچین ذخیره شود. مورالیس به شما این امکان را میدهد تا برنامههای dApps و Web3 را به جای چند روز در چند دقیقه توسعه دهید!
کلام آخر
در این مقاله متوجه شدیم سولیدیتی (Solidity) چیست و چگونه برای توسعه قراردادهای هوشمند استفاده میشود. همانطوری که گفته شد، قراردادهای هوشمند نیاز به برنامهنویسی دارند و سالیدیتی ابزاری برای این کار میباشد. صدها هزار توسعهدهنده وجود دارند که از این زبان برنامهنویسی استفاده میکنند تا نسبت به ایجاد خدمات مبتنی بر بلاکچین اقدام کنند. گفتیم که سولیدیتی یک زبان برنامهنویسی سطح بالا و شی گرا برای ایجاد قراردادهای هوشمند است و تراکنشهای بلاکچینی را به شکل خودکار اجرا میکند.
این زبان در درجه اول برای ایجاد قراردادهای هوشمند در بلاکچین اتریوم و ایجاد قراردادهای هوشمند در سایر بلاکچینها استفاده میشود.
دیدگاه شما