میکنه از موجودی شما چقدر کم بشه و چه داراییای دریافت کنید؟
یا وقتی یک برنامه میگه توکنها تا زمان مشخصی قفل میمونن،
چه چیزی این محدودیت رو اجرا میکنه؟
در بسیاری از این برنامهها، پاسخ «قرارداد هوشمند» است.قرارداد هوشمند یا
Smart Contract
برنامهایه که روی بلاکچین قرار میگیره و دستورهای مشخصی رو
اجرا میکنه. برای فهمیدنش لازم نیست برنامهنویس باشید؛
کافیست بدونید چه اطلاعاتی دریافت میکنه، چه قوانینی داره
و اجرای اون قوانین چه نتیجهای ایجاد میکنه.
قرارداد هوشمند به زبان ساده؛ یک مثال قابلفهم
یک دستگاه فروش خودکار رو تصور کنید. محصول رو انتخاب
میکنید، مبلغ لازم رو میپردازید و دستگاه طبق تنظیماتش
محصول رو تحویل میده. برای هر خرید لازم نیست فروشندهای
جداگانه تصمیم بگیره.
قرارداد هوشمند هم از نظر اجرای قواعد از پیش نوشتهشده،
شبیه این دستگاهه؛ با این تفاوت که عملیاتش در محیط بلاکچین
انجام میشه. این فقط یک تشبیه برای فهم موضوعه:
قرارداد بلاکچینی بهتنهایی نمیتونه تحویل یک کالای فیزیکی
رو تضمین کنه.
مثال: قفل کردن دارایی تا یک زمان مشخص
فرض کنید یک قرارداد آموزشی طراحی شده که مقداری ETH
دریافت میکنه و اجازه برداشت رو فقط به یک آدرس مشخص،
بعد از زمان تعیینشده میده.
- دارایی به قرارداد واریز میشه.
- آدرس مجاز برای برداشت و زمان آزادسازی ثبت میشن.
- اگر درخواست برداشت زودتر ارسال بشه، قرارداد اون رو رد میکنه.
- بعد از زمان تعیینشده، آدرس مجاز میتونه درخواست برداشت
بده؛ قرارداد شرایط رو بررسی و در صورت برقرار بودن،
دارایی رو منتقل میکنه.
در این مثال فرض میکنیم قرارداد درست نوشته شده، امکان
ارتقا یا برداشت اضطراری نداره و موجودی کافی داخلشه.
این فرضها مهمن، چون اسم «قرارداد هوشمند» بهتنهایی
وجود چنین ویژگیهایی رو تضمین نمیکنه.
قرارداد هوشمند چطور کار میکنه؟
برای توضیح مراحل، از اتریوم بهعنوان نمونه استفاده میکنیم.
جزئیات فنی در بلاکچینهای مختلف میتونه متفاوت باشه.
۱. قوانین به کد تبدیل میشن
توسعهدهنده مشخص میکنه برنامه چه اطلاعاتی نگه داره،
چه عملیاتی انجام بده و چه کسانی اجازه اجرای هر عملیات
رو داشته باشن. مثلاً یک قرارداد ممکنه تابع واریز،
برداشت و بررسی موجودی داشته باشه.
۲. قرارداد روی شبکه مستقر میشه
با فرایندی به نام استقرار یا
Deployment،
کد قرارداد روی شبکه قرار میگیره و یک آدرس پیدا میکنه.
این آدرس، محل تعامل با قرارداد در همون شبکه است.
۳. کاربر یا یک برنامه، عملیات رو درخواست میکنه
وقتی در یک برنامه دکمهای مثل «واریز» یا «برداشت» رو
میزنید، رابط کاربری میتونه درخواست تعامل با قرارداد
رو آماده کنه. کیف پول، جزئیات تراکنش رو برای بررسی و
تأیید به شما نشون میده.
۴. کد اجرا و نتیجه ثبت میشه
پس از ارسال و پذیرفته شدن تراکنش در شبکه، کد طبق قواعد
بلاکچین اجرا میشه. اگر شرایط لازم برقرار باشه،
تغییراتی مثل جابهجایی دارایی یا ثبت اطلاعات انجام میشن.
در غیر این صورت، عملیات ممکنه با خطا متوقف بشه.
قراردادها میتونن در جریان اجرا، قراردادهای دیگه رو هم
فراخوانی کنن. به همین دلیل، یک اقدام ظاهراً ساده در
یک برنامه ممکنه چند قرارداد رو درگیر کنه.
اجرای خودکار یعنی قرارداد خودش هر لحظه فعال میشه؟
نه. در اتریوم، رسیدن ساعت یا تغییر یک شرط، بهتنهایی
قرارداد رو برای ثبت یک عملیات جدید فعال نمیکنه.
برای تغییر وضعیت روی زنجیره، باید تراکنشی اجرای لازم
رو آغاز کنه؛ مستقیم یا از طریق فراخوانی قراردادهای دیگه.
در مثال قفل زمانی، رسیدن موعد فقط اجازه برداشت رو
فراهم میکنه. برای انتقال واقعی، هنوز باید درخواست
برداشت ارسال بشه. یک سرویس اتوماسیون هم میتونه
ارسال چنین درخواستهایی رو بر عهده بگیره.
قرارداد هوشمند چه کاربردهایی داره؟
| کاربرد | نقش قرارداد |
|---|---|
| توکنها | ثبت موجودی و اجرای قواعد انتقال یا صدور توکن |
| تبادل غیرمتمرکز | اجرای مبادله دارایی طبق منطق و محدودیتهای برنامه |
| وامدهی دیفای | مدیریت وثیقه، بدهی و قواعد بازپرداخت یا نقد کردن وثیقه |
| کیف پول چندامضایی | نیاز به تعداد مشخصی تأیید معتبر برای اجرای عملیات |
| رأیگیری و خزانه | ثبت رأیها و اجرای تصمیمها در محدوده اختیارات تعریفشده |
| آزادسازی تدریجی توکن | محدود کردن مقدار قابل برداشت طبق زمانبندی مشخص |
همه بخشهای یک برنامه الزاماً روی بلاکچین نیستن.
سایت، نمایش اطلاعات و بعضی محاسبات ممکنه خارج از
زنجیره انجام بشن و فقط بخش مشخصی از منطق یا تسویه
به قراردادها سپرده شده باشه.
برای آشنایی بیشتر با کاربردهای مالی این برنامهها،
مقاله
دیفای یا امور مالی غیرمتمرکز چیست؟
رو بخونید.
قرارداد هوشمند اطلاعات دنیای واقعی رو از کجا میفهمه؟
فرض کنید قرار باشه یک قرارداد، در صورت تأخیر یک پرواز
مبلغی پرداخت کنه. قرارداد بهتنهایی نمیدونه هواپیما
چه ساعتی رسیده. برای چنین تصمیمی باید اطلاعات معتبر
از بیرون بلاکچین بهش برسه.
اوراکل سازوکاری برای رساندن اطلاعات
بیرونی به قرارداد هوشمنده؛ مثلاً قیمت یک دارایی،
نتیجه یک رویداد یا داده مربوط به پرواز.
قرارداد بعد از دریافت داده، طبق قواعدش عمل میکنه.
اینجا کیفیت منبع اطلاعات مهمه. اگر داده اشتباه،
قدیمی یا دستکاریشده باشه، قرارداد ممکنه کد رو درست
اجرا کنه اما به نتیجه نامناسبی برسه.
ثبت اطلاعات روی بلاکچین، صحت اولیه اون اطلاعات رو
بهخودیخود تضمین نمیکنه.
همه قراردادها به اوراکل نیاز ندارن. قرارداد قفل زمانی
مثال ما میتونه از زمان ثبتشده در بلاک استفاده کنه
و نیازی به دریافت خبر از یک سرویس بیرونی نداشته باشه.
آیا قرارداد هوشمند بعد از انتشار قابل تغییره؟
در اتریوم، کد مستقرشده یک قرارداد معمولی رو نمیشه
مثل فایلهای یک سایت مستقیماً ویرایش کرد.
اما از این موضوع نباید نتیجه بگیریم که رفتار تمام
برنامههای بلاکچینی برای همیشه ثابت میمونه.
بعضی تنظیمات از ابتدا قابل تغییر طراحی میشن
ممکنه کد به یک مدیر یا سازوکار رأیگیری اجازه بده
پارامترهایی مثل کارمزد، آدرسهای مجاز یا وضعیت توقف
برنامه رو تغییر بده. این تغییر تنظیماته، نه لزوماً
بازنویسی کد قرارداد.
بعضی سیستمها قابلیت ارتقا دارن
در یکی از الگوهای رایج، کاربران با قراردادی به نام
«پروکسی» تعامل میکنن که اجرای منطق رو به قرارداد
دیگهای واگذار میکنه. در صورت داشتن مجوز ارتقا،
میشه قرارداد منطق رو جایگزین کرد، در حالی که آدرس
اصلی تعامل کاربران ثابت میمونه.
این قابلیت میتونه برای رفع اشکال مفید باشه، اما
اختیار مهمی هم ایجاد میکنه. باید مشخص باشه چه کسی
اجازه ارتقا داره و چه محدودیتهایی برای استفاده
از این اختیار وجود داره.
قرارداد هوشمند چه محدودیتها و ریسکهایی داره؟
اشتباه در کد
قرارداد هوشمند هم نرمافزاره و میتونه باگ داشته باشه.
یک ایراد ممکنه باعث قفل شدن دارایی یا برداشت غیرمجاز
بشه. شبکه میتونه کد رو مطابق قواعد اجرا کنه، حتی
وقتی خود کد برخلاف هدف سازنده عمل میکنه.
اختیارات مدیریتی
بعضی قراردادها نقشهای ویژهای دارن؛ مثلاً اجازه
صدور توکن، توقف عملیات یا ارتقای منطق.
وجود این نقشها لزوماً نشانه کلاهبرداری نیست،
اما یعنی باید به نحوه مدیریت اونها هم توجه کنید.
عبارت «روی بلاکچین» معادل «بدون کنترل مدیریتی» نیست.
وابستگی به داده و قراردادهای دیگر
یک برنامه ممکنه به اوراکل، قراردادهای دیگر یا
زیرساخت بیرونی وابسته باشه. بنابراین بررسی یک
قرارداد بهتنهایی همیشه تصویر کامل ریسک رو نمیده.
محدودیت حسابرسی امنیتی
حسابرسی یا Audit به پیدا کردن ایرادها کمک میکنه،
اما تضمین نمیکنه هیچ آسیبپذیری باقی نمونده.
دامنه بررسی، نسخه کد، تاریخ گزارش و وضعیت رفع
مشکلات هم اهمیت دارن.
سایت جعلی و درخواست گمراهکننده
حتی اگر قرارداد اصلی یک پروژه درست کار کنه،
ممکنه وارد سایت جعلی بشید یا تراکنشی متفاوت از
هدفتون تأیید کنید. ظاهر حرفهای سایت، جای بررسی
آدرس، درخواست کیف پول و منبع رسمی رو نمیگیره.
هزینه اجرای ناموفق
در اتریوم، تراکنشی که داخل بلاک اجرا و سپس با خطا
متوقف میشه، میتونه بابت منابع مصرفشده کارمزد داشته
باشه. برگشت تغییرات عملیات به معنی برگشت هزینه
پردازش نیست. خطای قبل از ارسال تراکنش، وضعیت متفاوتیه.
قبل از استفاده از یک قرارداد هوشمند چه چیزهایی رو بررسی کنیم؟
لازم نیست برای هر استفاده، خودتون حسابرس کد بشید.
اما بهتره برای این سؤالها جواب روشن داشته باشید:
- از مسیر رسمی وارد شدم؟
آدرس سایت و اطلاعات قرارداد رو از منابع رسمی
پروژه بررسی کنید، نه پیام ناشناس یا تبلیغ تصادفی. - کیف پول دقیقاً چه درخواستی نشون میده؟
تفاوت اتصال، امضا، مجوز خرج کردن توکن و انتقال
دارایی رو نادیده نگیرید. - چه مقدار دسترسی میدم؟
اگر درخواست مجوز توکن وجود داره، دریافتکننده
مجوز و سقف دسترسی رو بررسی کنید. - چه کسی اختیار مدیریت یا ارتقا داره؟
مستندات پروژه باید درباره نقشهای مدیریتی و
محدودیتهای اونها توضیح بده. - گزارش حسابرسی واقعاً در دسترسه؟
فقط به لوگوی شرکت حسابرس اکتفا نکنید؛ نسخه
بررسیشده و مشکلات گزارششده مهمن. - شرایط خروج رو میدونم؟
زمان قفل، محدودیت برداشت و هزینهها رو قبل از
واریز بخونید.
تست با مبلغ کم میتونه به شناخت مسیر کمک کنه،
اما بیخطر بودن قرارداد یا محدود بودن مجوزها رو
ثابت نمیکنه.
برای آشنایی با دسترسی توکنها، مقاله
مجوزهای کیف پول ارز دیجیتال
رو هم بخونید.
سؤالهای پرتکرار درباره قرارداد هوشمند
آیا قرارداد هوشمند از هوش مصنوعی استفاده میکنه؟
لزوماً نه. هوش مصنوعی جزو تعریف قرارداد هوشمند نیست.
یک قرارداد معمولی دستورهای نوشتهشده رو اجرا میکنه
و بهخودیخود توانایی یادگیری یا قضاوت انسانی نداره.
آیا اسمارت کانترکت فقط روی اتریوم وجود داره؟
نه. بلاکچینهای مختلف از برنامههای روی زنجیره
پشتیبانی میکنن، اما زبان برنامهنویسی، مدل اجرا،
امکانات و هزینهها میتونه متفاوت باشه.
مثالهای این مقاله بر مبنای اتریوم نوشته شدن.
استفاده از قرارداد هوشمند همیشه کارمزد داره؟
خواندن ساده اطلاعات، مثل مشاهده یک مقدار ثبتشده،
معمولاً به پرداخت کارمزد تراکنش توسط کاربر نیاز نداره.
تغییر وضعیت شبکه، مثل برداشت یا ثبت رأی روی زنجیره،
معمولاً هزینه پردازش داره؛ گاهی یک سرویس این هزینه
رو به جای کاربر پرداخت میکنه.
آیا هر ارسال به آدرس قرارداد، عملیات موردنظر رو انجام میده؟
نه. بسیاری از عملیات نیاز به فراخوانی تابع مشخص
با اطلاعات درست دارن. ارسال مستقیم ارز یا توکن به
آدرس قرارداد ممکنه عملیات دلخواه رو انجام نده و
حتی دارایی رو غیرقابل دسترس کنه.
از روش معرفیشده در مستندات رسمی استفاده کنید.
آیا داشتن قرارداد هوشمند یعنی پروژه معتبره؟
نه. یک قرارداد میتونه منطق نامناسب یا مخرب داشته
باشه. وجود کد روی بلاکچین، معتبر بودن تیم، ارزش
اقتصادی توکن یا امکان برداشت امن رو تضمین نمیکنه.
آیا قرارداد هوشمند تمام نیاز به اعتماد رو از بین میبره؟
میتونه نیاز به دخالت یک واسطه در اجرای بعضی قواعد
رو کمتر کنه، اما همچنان باید کد، اختیارات مدیریتی،
دادههای ورودی و وابستگیهای برنامه رو بررسی کرد.
منابع و مطالعه بیشتر
Ethereum.org: معرفی قراردادهای هوشمند
Ethereum.org: ساختار و اجرای قرارداد هوشمند
Ethereum.org: کاربردها و ویژگیهای قراردادهای هوشمند
Ethereum.org: اوراکلها و دادههای خارج از زنجیره
OpenZeppelin: الگوی پروکسی و ارتقای قرارداد
OpenZeppelin: نقشها و کنترل دسترسی
Ethereum.org: امنیت قراردادهای هوشمند
Ethereum.org: گس و هزینه اجرای تراکنش
۰ دیدگاه
در حال آمادهسازی فرم دیدگاه…