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