حقیقت قراردادهای هوشمند: خوب، بد، زشت !
کلمه قرارداد هوشمند مانند کلماتی چون بلاک چین، هوش مصنوعی و فضای ابری، این روزها توجه زیادی را به خود جلب کرده است.
چه بهتر از این که به جای مراجعه به نهادهای قضایی، قراردادهایی را تنظیم کنیم که بلاک چین قاضی آن باشد؟ قواعد قراردادهای هوشمند عبارتند از:
- اجرای قراردادها به صورت خودکار، بدون نیاز به اعتماد و بیطرفانه
- حذف واسطهها در ساختار قرارداد، انعقاد و اجرای آن
- حذف وکلا
کاربران اینترنت حق دارند که درباره چنین فناوری جالبی شگفتزده شوند. با این حال، یک قرارداد چگونه هوشمند میشود؟
در این مقاله، به بررسی چیستی قراردادهای هوشمند و حقیقتهای فنی آن میپردازیم.
یک قرارداد هوشمند چیست؟
یک قرارداد عادی، توافقی بین دو یا چند شخص است که آنها را به چیزی در آینده متعهد میسازد. مثلاً محمد برای استفاده از خانه علی هر ماه به او مبلغی پرداخت میکند، که به آن اجاره میگویند. یا رضا تضمین میکند که در ازای گرفتن مبلغی پول، خسارتهای احتمالی ماشین سعید در تصادفات را پرداخت کند که به آن بیمه هم میگویند.
آنچه که باعث تفاوت قرارداد معمولی و قرارداد هوشمند میشود این است که کدهای کامپیوتری مشکل نیاز به اعتماد را برطرف میکنند. به عنوان مثال علی قرارداد بیمهای با شرکت بیمه تنظیم میکند که طی آن مبلغ ۵۰۰ دلار به بیمه پرداخت کند و بیمه هم خسارتهای احتمالی ماشینش را طی یک سال آینده را تضمین کند.
حالا اگر این قرارداد هوشمند باشد، کدها به صورت خودکار شرایط را بررسی میکنند مثلاً: آیا علی حق بیمه خود را پرداخت کرده؟ آیا خسارت ماشین علی ثبت شده؟
و در صورت وجود هر کدام از شرایط تصمیم دیگری به صورت خودکار اتخاذ میشود; مثلاً قرارداد را لغو یا ادامه میدهد.
ویژگی اصلی یک قرارداد هوشمند، اجرای بدون نیاز به اعتماد آن است. شما به افراد شخص ثالث برای اجرای شرایط مختلف یک قرارداد نیازی ندارید. به جای متکی بودن به افرادی که عمدی یا غیرعمدی میتوانند دچار اشتباه شوند، یک قرارداد هوشمند آنچه را که برایش برنامهریزی شده، کاملاً دقیق و در زمان مناسب اجرا میکند.
دارای هوش ذاتی نیستند !
از کلمه «هوشمند» در این قراردادها میتواند این طور برداشت شود که آنها دارای هوش ذاتی هستند.
اما این قراردادها به صورت فیزیکی فعالیت نمیکنند. به جای ریختن اثاثیه مستأجرهای بدقول در خیابان، قراردادهای هوشمند میتوانند به طور مثال درها را قفل کنند و اجازه ورود به داخل آپارتمان را به آنها ندهند و یا اینکه با اتصال به سیستم بانکی حساب آنها را مسدود کنند.
چیزی که موجب قدرتمند شدن قراردادهای هوشمند شده است، توانایی در اجرای دقیق بندهای قرارداد است نه هوش ذاتی آنها. قراردادهای هوشمند تنها میتوانند شرایطی را که برای آنها مشخص شده بررسی کنند.
یک قرارداد واقعاً هوشمند، تمام شرایط را در نظر میگیرد، روح قرارداد را بررسی و عادلانهترین شکل ممکن آر انجام میدهد حتی اگر این قرارداد بسیار ناعادلانه باشد. به عبارت دیگر، یک قرارداد واقعاً هوشمند مانند یک قاضی بدون اشتباه عمل میکند. اما در حال حاضر قراردادهای هوشمند اینگونه نیستند و بدون اینکه درک کنند که چه اتفاقی افتاده فقط مواردی را که دو طرف بر آن به توافق رسیدهاند را حل و فصل میکند. این قرارداد میتواند اجاره نامه باشد و یا یک معامله مواد مخدر !
اعتماد زدایی از یک قرارداد بدین معنی است که پس از انعقاد، هیچ جای ابهامی در ادامه آن باقی نخواهد ماند.
واقعاً سخت و پیچیده هستند !
به علت بازاریابی زیاد از طرف تیم اتریوم، بسیاری فکر میکنند که قراردادهای هوشمند فقط روی شبکه اتریوم وجود دارند و این کاملاً اشتباه است.
بیت کوین از همان ابتدا در سال ۲۰۰۹، یک زبان قرارداد هوشمند به نام Script داشته است. در واقع، قراردادهای هوشمند قبل از بیت کوین و از سال ۱۹۹۵ وجود داشتهاند. تفاوت بین زبان قرارداد هوشمند بیت کوین و اتریوم این است که در اتریوم تورینگ کامل است. سالیدیتی (زبان برنامه نویسی قراردادهای هوشمند اتریوم) اجازه ساخت قراردادهای هوشمند بسیار پیچیده را به توسعه دهندگان میدهد که بررسی و تحلیل آنها را مشکل میکند.
این پیچیدگی عواقب تأثیرگذار فراوانی دارد. بدیهی ست که قراردادهای هوشمند پیچیده، میتوانند عملیاتهای پیچیدهتری را انجام دهند اما در عوض حفظ امنیت یک قرارداد پیچیده بسیار دشوار است. حتی در قراردادهای معمولی، هر چه یک قرارداد پیچیدهتر باشد، نیاز برای حفظ امنیت آن چند برابر افزایش مییابد.
در قراردادهای هوشمند منظور از امنیت این است که قرارداد بتواند به تمام راههای مورد نظرش برای اجرای مفاد دسترسی داشته باشد و در حقیقت توافق آن چیزی باشد که برنامه نویس در فکر داشته.
اجرای مفاد یک قرارداد در تورینگ کامل بسیار فنی و پیچیده است. برای اینکه یک قرارداد کاملاً تورینگ را فعال کنید، باید از عدم داشتن باگ و اشکال در آن مطمئن شوید. این امر بسیار مسئلهساز است، زیرا تقریباً هر برنامه کامپیوتری باگ دارد. فرض کنید که برای نوشتن یک قرارداد عادی بخواهید چند سال مطالعه و تحقیق کنید تا هیچ ایرادی در آن باقی نماند.
همچنین در حال حاضر بسیاری از قراردادهای هوشمند توسط تازهکارهایی توسعه مییابند که اهمیت امنیت آن را درک نمیکنند.
قراردادهای هوشمند، واقعاً قرارداد هوشمند نیستند (حداقل در اتریوم)
شاید این موضوع که مسئولیت قراردادها بر عهده برنامه نویسان است، از نظر تئوری یک ویژگی مناسب باشد اما در در عمل، یک سری شرایط تمرکزی میتوانند ایفای نقش کنند.
اتریوم با شعار «کد قانون است» راه اندازی شد. یعنی یک قرارداد روی اتریوم قطعی است و هیچکس نمیتواند آن را لغو کند. هدف اصلی این بود که به توسعه دهندگان ثابت شود خودشان مسئول هستند. مثلاً اگر شما در ساخت یک قرارداد هوشمند با مشکل مواجه شوید، فقط خودتان ضرر خواهید کرد نه فرد دیگری. اما دیری نپایید که این آرمان به زیر سؤال رفت. اتفاقی تحت عنوان DAO رخ داد.
کلمه DAO مخفف «Decentralized Autonomous Organization» به معنای سازمان خودگردان مستقل است. DAO برنامهای به منظور نشان دادن توانایی پلتفرم اتریوم بود. کاربران میتوانستند به این برنامه پول وارد کنند و این برنامه به طور خودکار در بخشهای مختلف سرمایه گذاری کند و به سرمایهگذاران سود بدهد. تمام تصمیمات در این برنامه به صورت غیرمتمرکز انجام میپذیرفت. در آن زمان قیمت هر اتر ۲۰ دلار بود و حدود ۱۵۰ میلیون دلار به صورت اتریوم به این برنامه سرمایه اختصاص داده شد.
امنیت کدها برقرار نشده بود و بر اثر یک هک یا رخنه امنیتی تمام اتریومهای موجود در DAO از دست رفت.
به دلیل حجم بالای مبالغ، بنیاد اتریوم تصمیم گرفت که دیگر کد قانون نباشد و تمام پولهای وارد شده در DAO را بازگرداند. به عبارت دیگر، نویسندگان قرارداد و سرمایه گذاران کاری احمقانه انجام دادند و توسعه دهندگان اتریوم نخواستند که آنها را به حال خود رها کنند و به کمکشان رفتند.
شبکه اصلی اتریوم هیچ آسیبی ندیده بود و فقط برنامهای روی آن به دلیل سهلانگاری توسعه دهندگان هک شده بود. مثلاً هک شدن یک سایت به معنی هک شدن تمام اینترنت نیست. اما به دلیل نوپا بودن اتریوم، آنها تصمیم گرفتند که برای اعتماد سازی بیشتر هر طور شده مبالغ را بازگردانند.
طی فورک یا شکافی که رخ داد، اتریوم کلاسیک متولد شد، در واقع اتریوم جدیدی ایجاد شد و اتریوم قبلی اتریوم کلاسیک نام گرفت. در اتریوم جدید اصل «کد همان قانون است» نقض شد. علاوه بر این، به دلیل سخت بودن امنیت در تورینگ کامل، توسعه دهندگان شروع به ایجاد راههایی برای عدم ساخت قرارداد به صورت تورینگ کامل کردند. امروزه اکثر قراردادهای هوشمند با استانداردهای ERC20 و ERC721 نوشته میشوند که هیچ یک از این دو نیاز به پیچیدگیهای تورینگ کامل ندارند.
قراردادهای هوشمند تنها با زیرساختهای دیجیتال کار میکنند
حتی بدون کامل بودن تورینگ، قراردادهای هوشمند واقعاً خوب هستند. با این حال چه کسی دوست دارد که برای بهدست آوردن چیزی که در سیستم اعتمادزدا متعلق به اوست به دادگاه برود؟ آیا استفاده از یک قرارداد هوشمند بسیار سادهتر از قرارداد معمولی است؟
برای مثال، آیا املاک و مستغلات از قراردادهای هوشمند سود نخواهد برد؟ آلیس میتواند با قرارداد هوشمند اثبات کند که مالک خانه است. باب هم میتواند در عوض دریافت خانه، پول پرداخت کند.
بدون سوء استفاده از مالکیت، بدون بی اعتمادی، اجرای سریع قرارداد بدون نیاز به واسطههای مختلف. شگفت انگیز است اینطور نیست؟
از نظر تئوری فوقالعاده به نظر میرسد اما در عمل دو مشکل وجود دارد. اول از همه اجرای مفاد قرارداد هوشمند، توسط یک نهاد متمرکز، اعتمادزدایی را نقض میکند. اعتماد زدایی کلیدیترین مفهوم در قراردادهای هوشمند است و اجرای قرارداد توسط نهاد متمرکز در این مفهوم جایگاهی ندارد. برای ایجاد قراردادهای هوشمندی که واقعاً اعتمادزدا باشند، به یک پلتفرم واقعاً غیرمتمرکز نیاز داریم.
برفرض داشتن پلتفرم غیرمتمرکز، یک مشکل دیگر وجود دارد. در یک محیط غیرمتمرکز، قراردادهای هوشمند فقط در صورتی کار میکنند که پیوندی قطعی بین فضای دیجیتال و فضای فیزیکی وجود داشته باشد. مثلاً وقتی که نسخه دیجیتالی سند مالکیت خانه تغییر کرد، سند فیزیکی هم باید مالکیت را تغییر دهد. در واقع به یک دنیای دیجیتالی نیازمندیم که دنیای فیزیکی را بشناسد. به این مسئله «مشکل اوراکل» هم میگویند.
وقتی آلیس خانه را به باب واگذار میکند، قرارداد هوشمند هم باید بداند که او واقعاً خانه را واگذار کرده. راههای مختلفی برای انجام این کار وجود دارد، اما همه آنها یک مشکل اساسی دارند. برای اطمینان از وقایع در دنیای فیزیکی، باید به برخی از واسطههای شخص ثالث اعتماد کرد.
برای مثال، خانه را میتوان به عنوان یک توکن غیرقابل تعویض در اتریوم نشان داد. آلیس میتواند خانه را در عوض مقداری اتریوم به باب منتقل کند. مشکل اینجاست که باب باید از بابت اینکه توکن به منزله خانه است، اعتماد کند. همچنین شرایطی باید وجود داشته است که وقتی توکن خانه ارسال شد، مالکیت خانه هم قانونی تغییر کند.
علاوه بر این، حتی اگر یک مقام دولتی تأیید کند که توکن مربوط به خانه میشود، اگر توکن به سرقت برود چه؟ آیا خانه اکنون به دزد تعلق دارد؟ اگر توکن گم شود چه؟ آیا دیگر امکان فروش خانه وجود نخواهد داشت؟ آیا برای توکن خانه المثنی صادر میشود؟ اگر چنین است، توسط چه کسی؟
مشکل پیچیدهای در ارتباط یک دارایی دیجیتال و یک دارایی فیزیکی در محیط غیرمتمرکز وجود دارد. داراییهای فیزیکی به واسطهی حوزه قضایی که شما در آن قرار دارید قانونگذاری میشوند و این بدان معناست که علاوه بر قراردادهای هوشمند ایجاد شده، باید به چیز دیگری هم اعتماد کرد و این بدان معناست که مالکیت در یک قرارداد هوشمند لزوماً به معنی مالکیت در دنیای واقعی نیست و با مشکل اعتمادی که در قرارداد معمولی هم وجود دارد مواجه است. قرارداد هوشمندی که نیازمند اعتماد باشد، ویژگی اصلی این قراردادها که اعتمادزدا بودن است را نقض میکند.
حتی داراییهای دیجیتال مانند کتابهای الکترونیکی، گزارشهای پزشکی و یا فیلمها هم با این مشکل مواجه هستند. حقوق استفاده از این داراییها هم نیازمند اعتماد به نهادهای قضایی دارد.
پس با این وضعیت، با ایجاد قرارداد هوشمند نه تنها چیزی بهدست نمیآورید بلکه خود را درگیر پیچیدگیهای کد و باگهای احتمالی آن میکنید.
راهحل چیست؟
راهحل ابزارهای حامل دیجیتالی حامل هستند. اساساً نیاز نیست که هر دو طرف معامله دیجیتال باشند، بلکه باید ابزارها حامل باشند. این یعنی این که مالکیت توکن نمیتواند به خارج از پلتفرم قرارداد هوشمند وابستگی داشته باشد. تنها در این صورت میتوان یک قرارداد هوشمند بدون نیاز به اعتماد ساخت. برای رسیدن به این مفهوم باید تمام شرایطی که برای اجرای قرارداد نیاز است، روی شبکه غیرمتمرکز قرار داشته باشد. مثلا سندهای مالکیت فیزیکی باید جای خود را به سندهای مالکیت دیجیتالی بدهند تا بتوان یک خانه را با قرارداد هوشمند به صورت قانونی منتقل کرد.
نتیجه
امیدواریم قراردادهای هوشمند مفیدتر از آنچه که واقعاً هستند باشند. متأسفانه، بسیاری از آنچه که ما انسانها به عنوان قرارداد در نظر میگیریم، مجموعهای از سناریوها و فرضیات قانونی را در بر میگیرند که واقعاً نیازی به آوردن آنها نیست.
به بیان ساده قراردادهای هوشمند به راحتی پیچیده میشوند، حفظ امنیت و اعتمادزدایی آنها سخت است و وابستگیهای خارجی زیادی دارند. تنها مکان واقعی که در آن قراردادهای هوشمند واقعاً میتواند اعتمادزدا باشد، در ابزارهای حامل دیجیتالی غیرمتمرکز مانند بیت کوین است.
سلام اقا میشه بهم کمک کنی درباره این سوال:
سلام
پروژه پایانی این درس پیاده سازی یک قرارداد هوشمند در محیط رمیکس است.
در صورت آشنایی می توانید الان شروع کنید در غیر این صورت صبر کنید تا در تکالیف آینده مرحله به مرحله
یش برویم
فایل نهایی کدهای یک قراراد هوشمند است.