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

لحظه ای که همه چیز جدی می شود، دیپلوی است. چون از آن ثانیه به بعد، کد شما روی زنجیره است، آدرس دارد، هر کسی می تواند صدایش بزند و شما نمی توانید ویرایشش کنید.

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

دیپلوی از نظر شبکه چه اتفاقی است

دیپلوی از نظر شبکه چه اتفاقی است

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

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

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

چهار چیزی که قبل از فشردن دکمه باید داشته باشید

مستندات رسمی اتریوم فهرست کوتاهی دارد و همان کافی است:

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

فهرست کامل و ابزارهایش در مستند رسمی دیپلوی قرارداد هوشمند در ethereum.org آمده. همان جا هم می بینید که ریمیکس، هاردهت و فاندری سه مسیر رایج اند.

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

اول تست نت، و کدام تست نت

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

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

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

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

هزینه دیپلوی از کجا می آید

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

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

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

نرخ گس در لحظه ارسال. این تنها بخشی است که به کد شما ربطی ندارد و صرفا به شلوغی شبکه بستگی دارد.

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

کاری که بعد از دیپلوی باید بکنید و اغلب نمی کنند

سورس کد را تایید کنید.

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

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

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

ریمیکس، هاردهت یا فاندری

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

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

هاردهت محیط کامل تری است: کامپایل، تست، دیپلوی و دیباگ در یک جا. اگر پروژه تان جاوااسکریپت و تایپ اسکریپت است، این مسیر کم اصطکاک ترین است.

فاندری سریع تر است و تست ها را در خود سالیدیتی می نویسید. برای کسی که با خط فرمان راحت است انتخاب خوبی است و اجرای تست هایش به شکل محسوسی تندتر تمام می شود.

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

قبل از مین نت، این فهرست را رد کنید

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

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

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

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

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

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

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

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

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

چهار اشتباهی که گران تمام می شوند

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

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

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

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

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

هزینه دیپلوی یک قرارداد هوشمند چقدر است؟

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

آیا می شود بعد از دیپلوی قرارداد را تغییر داد؟

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

برای تست کردن قرارداد، اتریوم واقعی لازم است؟

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

روی اتریوم دیپلوی کنیم یا یک شبکه ارزان تر؟

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