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

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

سالیدیتی دقیقا چه چیزی است

سالیدیتی دقیقا چه چیزی است

یک زبان برنامه نویسی که خروجی اش برنامه معمولی نیست. خروجی اش کدی است که روی ماشین مجازی اتریوم اجرا می شود، همان چیزی که هر نود شبکه یک نسخه از آن را می سازد.

سه ویژگی سالیدیتی را از هر زبان دیگری که می شناسید جدا می کند و هر سه به کار کردن با آن سخت گیری اضافه می کنند:

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

این سه با هم یعنی نوشتن سالیدیتی بیشتر شبیه طراحی یک سازه است تا نوشتن یک اپلیکیشن. قبل از ساخت باید همه چیز درست باشد، چون بعدش نمی شود دست برد.

مفاهیمی که خیلی زود لازمتان می شوند

وراثت

یک قرارداد می تواند رفتار قرارداد دیگری را به ارث ببرد. در عمل تقریبا هیچ کس قرارداد توکن را از صفر نمی نویسد؛ یک پیاده سازی آزموده شده را ارث می برد و فقط تفاوت ها را اضافه می کند. این نه تنبلی است و نه میان بر، امن ترین کاری است که می شود کرد.

مادیفایر

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

رویداد

راهی برای اینکه قرارداد چیزی را در لاگ بنویسد تا بیرون از زنجیره خوانده شود. رابط کاربری هر برنامه غیرمتمرکزی که دیده اید، وضعیت را از همین رویدادها می خواند. قراردادی که رویداد صادر نمی کند، از بیرون تقریبا کور است.

کتابخانه

کدی که یک بار مستقر می شود و چند قرارداد از آن استفاده می کنند. کاربردش صرفه جویی در هزینه استقرار است و همان طور که خواهید دید، هزینه اینجا موضوع فرعی نیست.

گس، متغیری که همه چیز را شکل می دهد

هر عملیات روی اتریوم هزینه ای دارد و این هزینه را کاربر نهایی می پردازد. یعنی کدی که بد نوشته شده، فقط کند نیست؛ گران است و کاربر پولش را می دهد.

چند قاعده که بیشترین اثر را دارند:

  • نوشتن در حافظه دائمی زنجیره گران ترین کاری است که می کنید. هر چه کمتر بنویسید بهتر.
  • توابعی که چیزی را تغییر نمی دهند و فقط می خوانند، اگر از بیرون فراخوانی شوند هزینه ای ندارند.
  • حلقه روی آرایه ای که اندازه اش را کنترل نمی کنید، یک بمب ساعتی است. آرایه بزرگ می شود و روزی می رسد که تابع در سقف گس جا نمی شود و برای همیشه از کار می افتد.

و یک نکته که تازه کارها را غافلگیر می کند: بهینه سازی گس با کاهش کارمزد شبکه یکی نیست. اینکه کارمزد اتریوم بعد از مرج کم نشد ربطی به کد شما ندارد، اما قبض کاربر شما را دو رقمی می کند.

اتریومقیمت اتریوم به دلار و تومان ۱.۷۶٪
۴۸۴,۶۹۰,۱۳۶ تومان
$2,463.75 نرخ جهانی
تغییر ۲۴ ساعته - بروزرسانی ۰۲:۰۱ مشاهده بازار

ابزارها: چه چیزی هنوز زنده است و چه چیزی نه

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

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

هاردهت امروز محیط پیش فرض است. کامپایل، تست، دیباگ و شبکه محلی را با هم دارد.

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

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

مسیر عملی از اینجا به بعد را در نوشتن اولین قرارداد هوشمند روی اتریوم و مرحله انتشار را در دیپلوی از تست نت تا مین نت نوشته ایم.

اولین قرارداد، عملا

کوتاه ترین مسیری که واقعا به نتیجه می رسد، بدون نصب هیچ چیز:

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

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

سه. کامپایل کنید. خطاهایی که می بینید در ابتدا اغلب درباره نوع داده و دیدپذیری تابع اند، نه درباره منطق شما.

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

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

شش. بعد از این مرحله سراغ هاردهت بروید. آنجا تست خودکار می نویسید و همان کاری که در ریمیکس دستی انجام می دادید تکرارپذیر می شود.

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

جایی که سالیدیتی گران تمام می شود

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

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

اینجا فقط یک نکته را تکرار می کنم که در خود مستندات رسمی سالیدیتی هم اولین توصیه است: هر بار که قرارداد شما یک قرارداد بیرونی را صدا می زند، کنترل اجرا از دست شما خارج می شود. اول وضعیت را به روز کنید، بعد تماس بگیرید.

یاد گرفتنش چقدر طول می کشد و به درد چه کسی می خورد

اگر برنامه نویس هستید، نوشتن اولین قرارداد کار یک بعدازظهر است. نوشتن قراردادی که بشود پول در آن گذاشت، ماه ها فاصله دارد و بخش سختش زبان نیست، مدل ذهنی است: هزینه، تغییرناپذیری و اینکه همه کد را می بینند.

اگر برنامه نویس نیستید، صادقانه بگویم سالیدیتی نقطه شروع خوبی نیست. اول یک زبان معمولی، بعد این. مسیر شروع برنامه نویسی اتریوم ترتیب واقعی را نوشته است.

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

سوال های پرتکرار

سالیدیتی چه فرقی با زبان های دیگر دارد

کدش بعد از انتشار قابل تغییر نیست، هر عملیاتش برای کاربر هزینه دارد و کد آن برای همه قابل مشاهده است. هیچ کدام از این سه در یک زبان معمولی وجود ندارد و هر سه روش نوشتن را عوض می کنند.

برای یادگیری سالیدیتی از کجا شروع کنیم

از ریمیکس در مرورگر، چون چیزی نصب نمی کنید و در همان جلسه اول یک قرارداد را روی تست نت مستقر می کنید. سراغ آموزش هایی که با ترافل شروع می شوند نروید؛ آن مجموعه بازنشسته شده است.

آیا می شود قرارداد مستقر شده را ویرایش کرد

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

بهینه سازی گس یعنی کارمزد کمتری می پردازم

یعنی قرارداد شما عملیات کمتری انجام می دهد، پس هزینه کمتری تولید می کند. اما قیمت پایه گس را شلوغی شبکه تعیین می کند و از دست شما خارج است.