مفهوم قرارداد هوشمند در اتریوم – جلسه نوزدهم (+ویدئو)
مفهوم قرارداد هوشمند (Smart Contract) در اتریوم
میتوان قرارداد هوشمند را به عنوان یک قطعه کوچک از منطق یا کد درنظر گرفت که میتواند با بلاکچین در تعامل باشد. برای مثال، ممکن است یک قرارداد هوشمند به منظور پرداخت خودکار به یک آدرس مابین شما و شخص دیگری روی بلاکچین، برنامهریزی شود. بسیاری از پیاده سازیهای بلاکچین همچون بیتکوین، از فریمورکهای اسکریپت ساده برای انجام این کار بهره میگیرند. همچنین میتوان به آنها قرارداد هوشمند نیز اطلاق نمود. با این حال، یکی از تفاوتهای مهم با نظریه در این است که قراردادهای هوشمند بلاکچین میتوانند بسیار پیچیده بوده و خود به تنهایی، بخشی از بافت سیستم را تشکیل دهند. آنها بخشی از بلاکچین هستند. این قراردادهای هوشمند، و یا به عبارتی قطعات کوچک منطق توزیع شده، در واقع ممکن است برای ایجاد app هایی که روی بلاکچین اجرا میشوند، به اندازهی کافی پیچیده باشند.
یک کارکرد کوچک از قرارداد هوشمند (Smart Contract)
بیایید به یک کارکرد کوچک از آنچه که قراردادهای هوشمند میتوانند انجام دهند نگاهی بیندازیم. در اینجا ما درباره یک نظریه صحبت میکنیم. یک قرارداد هوشمند در آدرس مشخصی در بلاکچین قرار دارد. یک آدرس، همانند آدرسهایی که انسانها کنترل آنها را در دست دارند. فرض کنید شما و دوستتان هر دو مالکیت شخصی دارید و شما آن را به مستاجری اجاره داده اید، یک قرارداد هوشمند میتواند به گونهای تنظیم شود که مستاجر نتواند به هرکدام از شما جداگانه ارز پرداخت کند ولی بتواند به خود قرارداد، این پرداخت را انجام دهد. منظور ما، ارسال کردن وجه به آدرس قرارداد است. این قرارداد میتواند طوری برنامهریزی شود که وقتی وجه پرداخت شده را دریافت میکند، به طور خودکار نصف آن را به شما و نصف دیگر را به دوستتان انتقال دهد.
این مدل تقریباً ساده به نظر میرسد اما بسیار قابل توجه است. برای یک نفر، این پرداخت میتواند بدون وجود طرفی که آن را مدیریت کرده و گزینه تقسیم وجه را داشته باشد، تقسیم شود. تفاوت این روش را با حساب سپرده بانکی مشترک و نیز تفاوت آن را با این حالت که دوست شما وجه را کامل دریافت کند و بعد نیمی از آن را برایتان ارسال کند در نظر بگیرید. در هر صورت، توزیع وجوه وابسته به تصمیمات طرفهایی است که ممکن است همیشه منافع مشترکی نداشته باشند و ممکن است گزینه نگه داشتن پول را در اختیار داشته باشند. قرارداد هوشمند این کار را قطعی کرده و به هیچ کسی متکی نخواهد بود. هیچ طرف سومی برای اعتماد وجود ندارد.
یکی دیگر از جنبههای مهم چنین قراردادهای هوشمندی این است که منطق آنها توسط شما و دوستانتان، به صورت قابل مشاهده برای عموم قرار میگیرد. بنابراین هریک از شما میتوانید تائید کنید که مطابق انتظار عمل میکند یا خیر. این عملیات، کاملاً شفاف، بی نیاز به اعتماد و امن است و منطق قرارداد هوشمند، متاثر از اصل تغییرناپذیری بلاکچین است. نه شما و نه دوستتان قادر نیستید پس از انجام آن، به عقب برگشته و آن را تغییر دهید.
در حال حاضر این ساده ترین مثالی بود که ارائه شد اما تصور کنید چه کارهایی با استفاده از این سیستم امکان پذیر هستند و این سیستم قادر است چند فرایند را سادهسازی کند؟ چندین واسطه قادر هستند آن را دور بزنند؟
قرارداد هوشمند (Smart Contract) در اتریوم و زبان Solidity
قراردادهای هوشمند موجود در یک نظریه را میتوان با زبان اسمبلی که یک زبان سخت و بسیار خام است، کدگذاری کرد. همچنین، میتوان آنها را به یک زبان سطح بالاتر که به طور خاص برای برنامهریزی قراردادهای هوشمند توسعه یافته است کدنویسی کرد. یکی از محبوبترین زبانها Solidity نام دارد. کد Solidity خیلی شبیه کد جاوا اسکریپت است.
قرارداد هوشمند (Smart Contract) در اتریوم و EVM
هنگامی که یک قراردادهوشمند به بلاکچین منتقل میشود، دقیقاً مانند هر تراکنش دیگری دائمی است. هرگز نمیتوانید آن را تغییر دهید. اگرچه این یکی از مزایای آن است ولی همچنین یک مشکل نیز به شمار میآید! شما باید کاملا مطمئن باشید که هیچ اشتباهی در قرارداد هوشمندتان وجود نداشته است. این کار ما را به ماشین مجازی اتریوم یا همان EVM رهنمون میسازد. میتوان قرارداد هوشمند را به عنوان کد و EVM را به عنوان یک رایانه در نظر گرفت که آن کد را اجرا میکند. EVM، یک ماشین مجازی تورینگ (Turing) کامل است که روی هر گره کامل (full node) در شبکه اجرا میشود. چیزهایی را تورینگ کامل میگویند که همه آنچه که برای عملکرد کامل بعنوان یک کامپیوتر یا پردازشگر اطلاعات نیاز است را داشته باشند. تمام پردازشها روی EVM در سرتاسر شبکه اتفاق میافتند و به صورت سراسری مورد راستیآزمایی قرار میگیرند. EVM همان چیزی است که اتریوم را اینقدر هیجانانگیز کرده است، شبیه به یک رایانه جهانی توزیع شده است که به جای آنکه فقط بر روی تراکنشها و اعداد به توافق برسد، به توافق درباره منطق و خود فرایندها میپردازد.
امکانات مذکور در حال کشف شدن هستند و میتوانند درک ما از نحوه کار سیستمهای آنلاین را به چالش بکشند. حتی میتوانند مفاهیم بنیادین مانند طرز کار مالکیت را نیز به چالش بکشند! EVM چیزی است که کدها و قراردادهای هوشمند را پردازش میکند ولی این پردازش کردن به صورت رایگان نیست. خوب، شما چگونه این هزینه را پرداخت میکنید؟ در اتریوم برای پردازش، گاز (Gas) پرداخت میکنید مانند پرداخت هزینه تراکنش برای محاسبات. اگر EVM موتور اتریوم باشد، gas، به منزله گازِ این موتور است.
Gas مقدار کمی از واحد ارز اتریوم، یعنی اتر، است که برای محاسبات انجام شده بر روی شبکه پرداخت میشود. گاز، سه کارکرد اصلی را انجام میدهد. اولاً، با دادن پاداش به گرهها آنها را به انجام محاسبات تشویق میکند. ثانیاً، میزان بروز هرزنامه و سوء استفاده را کاهش میدهد زیرا هزینه گاز از پاداش هرزنامه بیشتر و چشمگیرتر است. ثالثاً، به از اینکه EVM، در یک حلقه نامحدود، برنامهریزی شود جلوگیری میکند زیرا gas برای هر فرآیند مورد مصرف قرار میگیرد.
برای اینکه درکی از نحوه کار یک قرارداد هوشمند داشته باشیم، میتوانیم جریان عملیات یکی از آنها را در نظر بگیریم.
زمانی که یک کاربر با قرارداد هوشمند تعامل برقرار میکند، این تعامل از طریق تراکنش ها انجام میشود مانند زمانی که شما یک سکه را بری فرد دیگری ارسال میکنید. این تراکنش ها توسط گرههایی جمع آوری میشوند که آنها را برای اعتبارسنجی بررسی میکنند. اگر تراکنش ها معتبر باشند، وجوه کافی به منظور پرداخت هزینه برای هر پردازش وجود دارد. قرارداد هوشمند توسط EVM و توسط تراکنشهایی که هر ورودی داده مورد نیاز را اعمال میکنند، اجرا میشود. این فرایند، وضعیت بلاکچین را تغییر داده و آن وضعیتها بر روی بلاکچین ذخیره میشوند. قراردادهای هوشمند اغلب با سایر قراردادهای هوشمند ارتباط برقرار میکنند و این شبکه از قراردادها میتوانند کارهای نسبتا پیچیده را شروع کرده و امکان توسعه app های غیر متمرکز را ایجاد کنند.