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

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

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