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

اول، خبر بدی که باید بدانید
کنسنسیس، شرکت سازنده این دو ابزار، در شهریور ۱۴۰۲ رسما اعلام کرد که ترافل و گاناش را بازنشسته می کند. سه ماه پشتیبانی داد و بعد از آذر همان سال، مخازن کد فقط بایگانی عمومی شدند.
در همان اطلاعیه یک جمله هست که تکلیف را روشن می کند: گاناش برای هارد فورک بعدی شبکه به روزرسانی نخواهد شد. یعنی مسئله فقط «پشتیبانی ندارد» نیست؛ ابزار با شبکه ای که قرار است روی آن کار کنید هماهنگ نمی ماند.
جایگزین پیشنهادی خود کنسنسیس هاردهت است، و در کنارش از فاندری، ریمیکس و اوپن زپلین هم نام برده.
اگر اولین قرارداد عمرتان است، از اینجا شروع کنید
ریمیکس. چیزی نصب نمی کنید و همه چیز در مرورگر انجام می شود: نوشتن، کامپایل، تست و استقرار.
دلیل توصیه اش این نیست که حرفه ای ترین است؛ نیست. دلیلش این است که بین شما و اولین قرارداد کارکرده تان هیچ مرحله نصبی وجود ندارد، و مرحله نصب دقیقا همان جایی است که بیشتر آدم ها منصرف می شوند.
قرارداد اول هم نباید کار خاصی بکند. یک عدد را ذخیره کند و پس بدهد، کافی است:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 private value;
function set(uint256 v) public {
value = v;
}
function get() public view returns (uint256) {
return value;
}
}
همین. وقتی این را روی یک شبکه آزمایشی مستقر کردید و دیدید که مقدار ذخیره شده برمی گردد، مفهوم را فهمیده اید. باقی کار، پیچیدگی است نه مفهوم تازه.
برای پروژه واقعی: هاردهت یا فاندری
وقتی از یک فایل جلوتر رفتید، به محیطی احتیاج دارید که تست بنویسید، اسکریپت استقرار داشته باشید و شبکه محلی راه بیندازید.
هاردهت مسیر رسمی مهاجرت از ترافل است و اگر پیش تر با ترافل کار کرده اید، مفاهیمش آشناتر خواهد بود. فاندری در عوض تست ها را با خود سالیدیتی می نویسد و برای کسی که تازه شروع کرده، این یعنی یک زبان کمتر برای یاد گرفتن.
هیچ کدام بر دیگری برتری قاطع ندارد. اگر مردد هستید، فاندری را انتخاب کنید و برنگردید عوضش کنید؛ عوض کردن ابزار وسط کار، بیشترین وقتی است که تازه کارها تلف می کنند.
چیزی که هیچ آموزشی نمی گوید
قرارداد مستقر شده را نمی شود ویرایش کرد.
این یک جمله است و تمام تفاوت این کار با برنامه نویسی معمولی در همین است. در وب، باگ را پیدا می کنید و نسخه اصلاح شده را بالا می برید. اینجا کد روی زنجیره ثبت شده و همان طور که هست اجرا می شود، برای همیشه.
نتیجه عملی اش دو چیز است. اول، تست روی شبکه آزمایشی اختیاری نیست. دوم، هر قراردادی که قرار است پول واقعی نگه دارد، باید ممیزی امنیتی شود و ممیزی هم رایگان نیست. تجربه های واقعی از سوءاستفاده در همین اکوسیستم را در برنامه های باگ بانتی اتریوم نوشته ایم.

از ایران، سه مانع عملی
دسترسی به ابزارها. بخشی از سرویس های ارائه دهنده نود و پنل های ابری برای آدرس های ایرانی باز نمی شوند. این مانع فنی نیست، مانع دسترسی است، و برای مرحله یادگیری با شبکه محلی قابل دور زدن است.
اتر برای استقرار. استقرار روی شبکه اصلی کارمزد دارد و کارمزدش را باید با اتر بپردازید. برای یادگیری هیچ نیازی به این کار نیست؛ شبکه آزمایشی همه چیز را رایگان انجام می دهد. تهیه اتر واقعی، وقتی به آن رسیدید، از خرید اتر برای کارمزد شبکه انجام می شود.
قطعی اینترنت وسط استقرار. اگر ارتباط در لحظه ارسال تراکنش قطع شود، ممکن است تراکنش ثبت شده باشد و شما ندانید. قبل از ارسال دوباره، هش تراکنش را در کاوشگر شبکه ببینید. ارسال دوباره بدون بررسی، راه رایج پرداخت دو بار کارمزد است.
یک حرف صریح
بیشتر کسانی که دنبال «ساخت قرارداد هوشمند» می گردند، در واقع به نوشتن قرارداد احتیاج ندارند. آن ها می خواهند توکن بسازند یا از یک قرارداد موجود استفاده کنند، و برای هر دو، قراردادهای استاندارد و بررسی شده ای وجود دارد که نوشتنشان از اول، فقط ریسک اضافه کردن است؛ نمونه اش استاندارد ERC-721 که میلیون ها قرارداد روی آن ساخته شده اند.
قرارداد از صفر وقتی معنی دارد که کاری بکنید که استانداردهای موجود نمی کنند. کاربردهای واقعی این فناوری بیرون از دنیای توکن را هم در نقش قرارداد هوشمند در معاملات ملک دیده ایم.
سوال های پرتکرار
نمونه قرارداد هوشمند ساده چیست؟
همان قرارداد ذخیره یک عدد که بالاتر آمد. یک متغیر دارد، یک تابع برای نوشتن و یک تابع برای خواندن. هر قرارداد پیچیده تری، ترکیبی از همین اجزاست.
کلاهبرداری با قرارداد هوشمند چطور انجام می شود؟
معمولا با قراردادی که کد آن عمومی نیست یا خوانده نشده، و تابعی دارد که به سازنده اجازه می دهد موجودی را برداشت کند یا فروش را متوقف کند. قاعده ساده این است: به قراردادی که کدش قابل مشاهده و بررسی شده نیست، مجوز دسترسی به کیف پولتان ندهید.
قراردادهای هوشمند در ایران چه وضعیتی دارند؟
از نظر فنی هیچ محدودیتی برای نوشتن و مستقر کردنشان وجود ندارد، چون شبکه جهانی است. محدودیت ها در لایه دسترسی به سرویس های جانبی و در لایه حقوقی است، و لایه حقوقی هم موضوعی است که پاسخ روشن و ثابتی برایش نداریم.
آیا می شود از قرارداد هوشمند درآمد داشت؟
به عنوان مهارت برنامه نویسی بله، مثل هر مهارت فنی دیگر. اما «قرارداد هوشمندی که خودش برای شما درآمد بسازد» چیزی است که وجود ندارد؛ هر چه با این عنوان تبلیغ می شود، معمولا طرح دیگری است که قرارداد فقط ابزار اجرایش است.