معرفی ۴۰ پلتفرم قرارداد هوشمند : بخش اول

بلاکچین در حال تغییر دنیایی است که می‌شناسیم. این فناوری یکی از بزرگترین مشکلات انسان را حل می‌کند: نیاز به اعتماد به یک واسطه را از بین می‌برد. روشی که بلاکچین از آن برای حل این مشکل استفاده می‌کند، ایجاد قابلیت پیگیری غیر قابل تغییر از هر چیزی است که برای فعالیت، به اعتماد به واسطه‌ها نیاز دارد. اما در این فناوری قدرت زیادی نهفته است: قدرت ایجاد قوانینی که باید به همان شکلی که نوشته شده‌اند پیروی شوند، که در آن هر کنشی منجر به واکنشی می‌شود. به عبارت دیگر، قرارداد هوشمند. در این مقاله ۴۰ پلتفرم/ پروژه فهرست شده‌اند که قراردادهای هوشمند را پشتیبانی می‌کنند/توسعه می‌دهند. هدف این مقاله ارزیابی پلتفرم‌ها/ پروژه‌ها بر مبنای عواملی است که قابلیت قرارداد هوشمند آن‌ها را تحت تاثیر قرار می‌دهند و نه ویژگی‌های کلی آن‌ها.

0 144
برای مطالعه بخش دوم این مقاله اینجا,بخش سوم اینجا و بخش چهارم اینجا کلیک کنید.
کلیک کنید.

۱. اتریوم (https://www.ethereum.org/)

مزایا:

  • تورینگ کامل
  • احتمالا از بزرگترین جامعه توسعه‌دهندگان برخوردار است
  • پشتیبانی‌شده‌ترین پلتفرم قرارداد هوشمند

معایب:

  • از solidity استفاده می‌کند که در مقایسه با زبان‌های امروزی مانند C++، C#، پایتون، و غیره توانمند نیست.
  • اگر قرارداد به طور بهینه نوشته نشده باشد می‌تواند هزینه تحمیل کند.

زبان قرارداد هوشمند http://solidity.readthedocs.io) solidity/)

وضعیت: فعال

توضیح: اتریوم یکی از اولین پلتفرم‌هایی بود که مفهوم قراردادهای هوشمند را در بلاکچین معرفی کرد و از پشتیبانی بزرگترین جامعه توسعه‌دهندگان برخوردار است. این پلتفرم به تورینگ کامل بودن خود می‌نازد. کد قرارداد توسط همه ماینرهای حاضر در شبکه در EVM (ماشین مجازی اتریوم) اجرا می‌شود. این پلتفرم، پراستفاده‌ترین پلتفرم برای پروژه‌های مبتنی بر بلاکچین است.

Image result for Ethereum smart contracts architecture

این پلتفرم تضمین شده است، اما در خصوص مواردی از هک شدن که میلیون‌ها دلار برای کاربر آن زیان به همراه داشت (https://paritytech.io/a-postmortem-on-the-parity-multi-sig-library-self-destruct/) مورد انتقاد قرار گرفته است. همچنین، فقدان مقیاس پذیری این پلتفرم موجب کاهش سرعت تراکنش می‌شود و آن را برای کاربردهای دنیای امروز نامناسب می‌سازد.

زبان مورد استفاده ( Solidity(http://solidity.readthedocs.io/)) برای این که آن را تورینگ کامل کند به اندازه کافی خوب است، اما انعطاف‌پذیر نیست؛ چیزی که در زبان‌های امروزی وجود دارد. برخی از مشکلات آن عبارتند از:

  • عدم پشتیبانی از آرایه‌های چند بعدی (مانند آرایه رشته‌ای) در پارامترهای ورودی و پارامترهای بازگشت (راه حل (https://hackernoon.com/serializing-string-arrays-in-solidity-db4b6037e520))
  • اجازه وجود تنها تعداد کمی (تنها ۱۶) پارامتر در یک تابع قرارداد. (منجر به ارور «stack too deep» (https://ethereum.stackexchange.com/questions/19587/how-to-fix-stack-too-deep-error))

مشکلات بالا نشان می‌دهند که زبان قرارداد هنوز برای رسیدن به انعطاف‌پذیری زبان‌های امروزی نیاز به توسعه دارد.

۲.

Quorum

(https://www.jpmorgan.com/global/Quorum)

مزایا:

  • تورینگ کامل
  • ویژگی ارسال تراکنش‌های خصوصی بین دو یا چند طرف در شبکه (با استفاده از (Constellation(https://github.com/jpmorganchase/constellation) را اضافه می‌کند که آن را برای استفاده شرکت‌ها مناسب می‌سازد.
  • قیمت gas را به صفر کاهش می‌دهد، اما همچنان محدودیت gas را حفظ می‌کند، بنابراین از ویژگی‌های امنیتی ارائه شده به واسطه استفاده از محدودیت gas و در عین حال رساندن هزینه تراکنش به صفر (قیمت gas× محدودیت gas) به طور همزمان برخوردار می‌شود.

معایب:

  • جامعه توسعه‌دهندگانی نسبتا کوچک
  • همان معایب اتریوم به علت استفاده از Solidity به عنوان زبان قرارداد هوشمند

زبان قرارداد هوشمند http://solidity.readthedocs.io) solidity/)

وضعیت: فعال

توضیح: به زبان ساده

نسخه پلتفرم قرارداد هوشمند اتریوم که توسط Quorum مورد استفاده قرار گرفته است، امکان تراکنش‌های رایگان را فراهم کرده و همچنین قادر به انجام تراکنش‌های خصوصی بین طرف‌هایی مشخص با استفاده از constellation) https://github.com/jpmorganchase/constellation) می‌باشد.

دارای دو دفتر کل است: عمومی و خصوصی. دفتر کل عمومی توسط تراکنش‌های عمومی و دفتر کل خصوصی توسط تراکنش‌های خصوصی (فقط برای طرف‌های حاضر در تراکنش‌های خصوصی) تغییر می‌کند.

Quorum

معماری Quorum

از آنجایی که خویشاوندی نزدیکی با اتریوم دارد (پلتفرم اصلی و زبان مشترک)، تقریبا تمام مزایا و معایب اتریوم به عنوان یک پلتفرم قرارداد هوشمند را به ارث برده است.

۳.  https://wanchain.org) wanchain/)

مزایا:

  • علاوه بر ویژگی‌های عادی قرارداد هوشمند اتریوم، حریم خصوصی کاربر را اضافه می‌کند.
  • قادر به انجام تراکنش‌های بین زنجیره‌ای است

معایب:

  • همانند اتریوم

زبان قرارداد هوشمند http://solidity.readthedocs.io) solidity/)

وضعیت: فعال

توضیح: فورکی از اتریوم است، بنابراین بسیاری از صفات اتریوم را به ارث برده است. علاوه بر آن،‌ حریم خصوصی کاربر را اضافه کرده است. تمرکز اصلی آن‌ها دیجیتالی کردن مدل مالی فعلی جهان در بلاکچین است.

حریم خصوصی Wanchain از طریق استفاده از امضاهای حلقه‌ای به دست می‌آید، که ناشناس بودن کامل را برای امضاکننده یک تراکنش به ارمغان آورده و در عین حال توانایی تایید امضای ارسال‌کننده را برای دریافت‌کننده فراهم می‌کند. به علاوه، Wanchain گزینه نشانی‌های یک بارمصرف (OTA) را ارائه می‌دهد تا امکان ناشناس بودن بیشتری فراهم شود.

wanchain

معماری Wanchain

دفتر کل توزیع شده Wanchain بر اساس نقاط قوت اتریوم ساخته شده است و همه DAppهای اتریوم بدون تغییر کد در Wanchain قابل اجرا هستند. برای بهبود این کاربردها، Wanchain برای گسترش قابلیت‌های بین چینی و بهبود حفاظت از حریم خصوصی تعدادی API ارائه می‌دهد.

۴.  https://aeternity.com) Aeternity/)

مزایا:

  • زبان قرارداد هوشمند و VMهای جدیدی برای اجرای سریعتر و امن‌تر کد معرفی کرد.
  • استفاده از کانال‌های وضعیت و روش‌های کارآمد برای اجرای قرارداد، هزینه تراکنش را پایین نگه داشته است.
  • با ارائه نسخه‌ای از EVM، انتقال قراردادهای EVM به Æternity آسان است.

زبان قرارداد هوشمند Sophia

وضعیت: فعال

توضیح: هدف تابعی (functional) بلندپروازانه قراردادهای هوشمند Æternity، توانایی اجرای کد در زنجیره است. یعنی، اجرای کدی که توسط ماینر تایید شده و می‌تواند وضعیت زنجیره را تغییر دهد.

طراحی و پیاده‌سازی قراردادهای هوشمند Æternity همچنین دارای اهدافی غیر تابعی به ترتیب زیر است:

  1. اجرای قرارداد باید امن باشد.
  2. اجرای قرارداد باید کارآمد بوده و مقیاس شود.
  3. اجرای قرارداد باید ارزان باشد.
  4. باید راهی ساده برای مهاجرت از قراردادهای هوشمند اتریوم وجود داشته باشد.

هدف ۱: اجرای قرارداد باید امن باشد

مقصود از قراردادهای امن این است که شما بتوانید صفات قرارداد خود را مشخص و به طور خودکار اثبات کنید.

برای دستیابی به این هدف، زبان تابعی جدید Sophia و ماشین مجازی امن FTWVM را طراحی کرده‌ایم.

هدف ۲: اجرای قرارداد باید کارآمد بوده و مقیاس شود.

با هدف نیل به یک راهکار مقیاس پذیر، Æternity کانال‌های وضعیت و همچنین یک الگوریتم اجماع جدید ارائه می‌کند.

جهت اجرا موثر قرارداد، Æternity زبان بسیار سطح بالایی را برای اجرای سریع و آسان قراردادهای ساده ارائه می‌کند. برای قراردادهای پیشرفته‌تر می‌توان از زبان Sophia استفاده کرد. Sophia به یک ماشین مجازی کامپایل شده می‌باشدکه مناسب اجرای قراردادهای سوفیا طراحی شده است. این ماشین نیز ماشینی سطح بالا با دستوراتی برای عمل در زنجیره و ساختار داده‌های سوفیا بدون نیاز به مدیریت صریح پشته و حافظه است.

این پلتفرم همچنین از زبان قرارداد هوشمند سطح بالایی به نام Varna استفاده می‌کند که مشابه زبان بیت کوین اسکریپت است، اما حلقه ندارد و قیمت gas آن ثابت است. این پلتفرم از ماشین مجازی خود HLM) High Level Machine) استفاده می‌کند و کد آن مستقیما توسط نرم‌افزار نود ارزیابی می‌شود. Varna با هدف قراردادهای سریع و روزمره طراحی شده است.

هدف ۳: اجرای قرارداد باید ارزان باشد.

هزینه اجرای قرارداد در نهایت توسط ماینرها و کاربران تعیین خواهد شد، اما با ارائه کانال‌های وضعیت، راه‌های موثر برای اجرای قراردادها و یک نرخ ثابت، هزینه زبان‌های سطح بالای قرارداد باید پایین باقی بمانند.

هدف ۴: باید راهی ساده برای مهاجرت از قراردادهای هوشمند اتریوم وجود داشته باشد.

با ارائه نسخه‌ای از EVM، انتقال قراردادهای EVM به Æternity آسان است.

۵. https://www.zenprotocol.com) Zen/)

مزایا:

  • مجموع (توضیح در ادامه ارائه شده است)
  • از آنجایی که زبان قرارداد هوشمند «دارای تایپ‌های وابسته» (Dependently Typed) است، کمتر مستعد وجود خطا بوده و جهت استفاده برای «درستی‌یابی صوری» (FormalVerification) (توضیح در زیر) به اندازه کافی بیانگر (expressive) است

زبان قرارداد هوشمند: *https://www.fstar-lang.org) F/)

وضعیت: فعال

توضیح: پروتکل Zen برای انجام قراردادهای هوشمند راه بسیار متفاوتی نسبت به سایر پروژه‌ها اتخاذ کرده است.

توضیح آن را با تعریف قراردادهای هوشمند آغاز می‌کنیم. به صورت انتزاعی، قرارداد هوشمند یک برنامه کامپیوتری است که برای اجرا در یک محیط غیر متمرکز طراحی شده است؛ یعنی این برنامه برای تعیین اجماع یک بلاکچین اجرا می‌شود. در بیت کوین، قراردادهای هوشمند به صورت اسکریپت‌های بیت کوین (https://en.bitcoin.it/wiki/Script) اعتبار یک تراکنش را تایید می‌کنند. در اتریوم، قراردادهای هوشمند به شکل بایت‌کدهای EVM وضعیت EVM را تغییر می‌دهند.

بیت کوین اسکریپت محدود است؛ یعنی «تورینگ کامل» نیست و امکان بیان برنامه‌های کامپیوتری دلخواه در آن وجود ندارد. اگر قصد داشته باشیم منطق دلخواه را در قراردادهای هوشمند بیان کنیم، ابتدا باید قادر باشیم آن منطق دلخواه را برای تعیین وضعیت توافق ارزیابی کنیم. زبان‌های تورینگ کامل قادر به بیان برنامه هایی هستند که «توقف» نمی‌کنند (هیچ گاه اجرا را پایان نمی‌دهند) به طور کلی امکان دانستن این که آیا برنامه خاتمه پیدا می‌کند یا چه مدت طول می کشد تا خاتمه پیدا کند یا چه میزان منابع رایانشی برای اجرای آن برنامه لازم است وجود ندارد. از آنجایی که نمی‌دانیم که چه میزان منابع برای اجرای یک برنامه لازم است، نمی‌توانیم از زبان‌های کامل تورینگ برای تعیین اجماع استفاده کنیم؛ ممکن است برنامه متوقف نشود، که در این صورت اجماع تعیین نخواهد شد.

EVM یک «هزینه gas» را برای هر دستورالعمل بایت‌کد EVM منتسب می‌کند. کاربر مقدار مشخصی «gas» پرداخت می‌کند و EVM ارزیابی دستورالعمل‌های قرارداد هوشمند را آغاز می‌کند. EVM هزینه gas یک دستورالعمل را ارزیابی می‌کند و اگر gas به اندازه کافی برای ادامه کار موجود باشد، هزینه gas را از gas پرداخت شده توسط کاربر کسر کرده، دستورالعمل را ارزیابی کرده و ادامه می‌دهد، و اگر پیش از اتمام اجرای دستورالعمل‌های خود gas به اتمام برسد شکست می‌خورد. به این صورت، می‌توان تقریبا تمام محاسبات دلخواه را بیان کرد؛ قراردادهای هوشمند اتریوم تنها از این جهت محدود هستند که باید در نهایت خاتمه یابند، زیرا کاربر نمی‌تواند برای انجام محاسباتی که بی‌نهایت تکرار می‌شوند، بی‌نهایت gas پرداخت کند. در عمل، به ندرت برنامه‌هایی علاقه‌مند هستیم که خاتمه نمی‌یابند، بنابراین این محدودیت مشکل‌ساز نیست.

فرایند تفسیر دستورالعمل‌های بایت‌کد و پیگیری gas در EVM بسیار ناکارآمد هستند. EVM باید برای هر دستورالعمل هزینه gas را یافته، کافی بودن مقدار gas باقی‌مانده را کنترل کرده و هزینه gas را از gas باقی‌مانده کسر کند. با این نوع مدل ارزیابی، بهینه‌سازی بهبود زمان اجرا دشوار است.

ZEN

این محدودیت که همه قراردادهای هوشمند در اتریوم باید خاتمه یابند مورد توجه است. زبان‌هایی که در آن‌ها هر برنامه باید خاتمه یابد در واقع تورینگ کامل نبوده و بلکه تام (total) هستند. Zen به جای تکیه بر یک مدل ارزیابی که برای حصول اطمینان از تمامیت (totality) gas را پیگیری می‌کند، از یک زبان تام برای بیان قراردادهای هوشمند خود استفاده می‌کند. زبان‌های تام کاملا قادر به بیان منطق دلخواه مانند حلقه‌ها و بازگشت (recursion) هستند و این برای پروتکل Zen نیز صدق می‌کند.

زبان قراردادنویسی هوشمند Zen به شکل وابسته دارای تایپ هستند، یعنی هر عبارت (expression) یک تایپ دارد و ممکن است تایپ‌ها هم به عبارت و هم به تایپ‌ها وابسته باشند. سیستم‌های وابسته برای درستی‌یابی صوری به اندازه کافی بیانگر هستند: این تایپ‌ها می‌توانند خواص عبارات را بیان کنند. برای مثال، در حالی که در یک زبان دارای تایپ‌های ساده می‌توان تایپ «عدد صحیح» را به عدد ۳ نسبت داد، در یک زبان دارای تایپ‌های وابسته می‌توان همچنین تایپ «عدد اول صحیح» و یا «عدد صحیح کوچکتر از ۱۰» را به آن نسبت داد.

یک زبان دارای تایپ، اگر تایپ‌های ناصحیح داشته باشد کامپایل نخواهد شد و یک زبان دارای تایپ‌های وابسته نیز از این قاعده مستثنی نیست. برنامه‌ای که مصرف منابع یا اظهار نادرست بیان کند کامپایل نخواهد شد.

الگوی قرارداد هوشمند پروتکل Zen از این مزیت استفاده می‌کند. این الگو سورس‌کد دارای تایپ‌های وابسته می‌گیرد که باید مصرف منبع را بیان کند و اگر این کد با موفقیت کامپایل شود، پس ضمانت آن در مورد مصرف منابع باید صحیح باشد، و از آنجایی که از یک زبان تام استفاده می‌کنیم، می‌دانیم که خاتمه می‌یابد. از آنجایی که هزینه منابع را از خود کد می‌دانیم، نیازی به تفسیر دستورالعمل‌های بایت‌کد و سنجش مصرف gas در هنگام کار نداریم؛ هزینه را قبل از اجرای کد می‌دانیم. این ویژگی بر عکس کد تفسیر شده، تمام مزایای کارایی کد کامپایل شده را در اختیار ما می‌گذارد. در حال حاضر به F# استخراج کرده و F# را به بایت‌کد CIL کامپایل می‌کنیم که بعدا آن را اجرا خواهیم کرد. اما برای سایر پیاده‌سازی‌های پروتکل Zen امکان انجام روشی متفاوت مثلا استخراج به OCaml یا C وجود دارد.

این مرحله کامپایل کردن تنها یک بار اتفاق می‌افتد: پس از آنکه که کد کامپایل شود، می‌توان آن را با افزایش قابل توجه کارآیی بارها اجرا کرد.

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

قراردادهای هوشمند Zen نه تنها سریعتر اجرا می‌شوند، بلکه می‌توان عموما آن‌ها را به صورت موازی اجرا کرد.

پروتکل Zen کمتر به زمان صرف شده برای اجرای قراردادهای هوشمند محدود است و باید قادر به پردازش سریعتر تراکنش‌های حاوی قراردادهای هوشمند باشد؛ قراردادهای هوشمند در Zen تنها سریعتر اجرا نمی‌شوند، بلکه می‌توان عموما آن‌ها را به صورت موازی اجرا کرد.

پروتکل Zen یک ماشین مجازی کامل مانند EVM را به عنوان بخشی از اجماع خود ندارد؛ قراردادها از سایر قراردادها جدا هستند. این به ما این امکان می‌دهد تا قراردادها را به جای اجرای تک‌ریسه‌ای  (EVM (single-threadedبه صورت موازی اجرا کنیم. این موضع کارایی را به شدت بهبود می‌دهد، چرا که سخت‌افزارهای مدرن توانایی زیادی برای اجرای موازی دارند. از آنجاییکه قراردادهای ما بدون وضعیت و از لحاظ توابع خالص هستند،‌ هیچ پیش‌شرط و مانعی برای اجرای موازی وجود ندارد. شاید موازی‌سازی تراکنش‌های متعدد حاوی یک قرارداد هوشمند، آسان نباشد و شاید مجبور به اجرای آن‌ها به صورت سری باشیم؛ اما از آنجایی که کد کارآ و کامپایل شده‌ای را اجرا می‌کنیم، این کار هنوز هم از اجرای محاسبات مشابه در EVM سریعتر است.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.