سیستم نوع غیرمتمرکز و برنامه نویسی تابع در اتریوم

در حال حاضر اکثر پروژه‌ها انواع داده‌ خاص خود را تعریف کرده و از آن‌ها در برنامه‌هایشان استفاده می‌کنند. اما چه می‌شد اگر سیستمی غیرمتمرکز و جهانی برای ثبت انواع داده‌ها داشتیم تا امکان تعامل و همکاری میان پروژه‌ها راحت‌تر فراهم شود. در این مطلب می‌خواهیم به تشریح سیستمی بپردازیم که قصد انجام چنین کاری را دارد.

0 87

در این مطلب می‌خواهیم پروتکل سیستم نوع غیرمتمرکز (dType) را به شکل دقیق‌تر بررسی کنیم و ببینیم که یک پروتکل برنامه نویسی تابعی در سطح جهانی چطور می‌تواند روی این سیستم پیاده‌سازی شود.

هدف از dType فراهم‌سازی اجماعی برای انواع مختلف اطلاعات و استفاده از قابلیت همکاری است. حتما می‌دانید که سیستم نوع (Type System) چیست. این سیستم به شما اجازه می‌دهد برای هر متغیر، اصطلاح، تابع و غیره یک نوع خاص اختصاص دهید. این سیستم برنامه را کامپایل و در هنگام اجرا بررسی می‌کند تا ببیند این قاعده را رعایت کرده‌اید یا نه. سازوکار مذکور باعث حذف مجموعه‌ای از باگ‌ها می‌شود که رابط‌های مختلفِ کد شما را به یکدیگر وصل می‌کند.

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

در نتیجه هر توسعه‌دهنده می‌تواند بسته به نیاز خود نوع داده پیچیده‌ موردنظرش را بسازد که این بسیار عالی است. اما چه می‌شود اگر ایده‌ بهتری برای ساخت یک کامپیوتر جهانی داشته باشید که در آن پروژه‌های مختلف امکان همکاری با یکدیگر را داشته باشند؟ این‌جاست که با شمار زیادی پروژه‌ی گوناگون روبرو می‌شوید که هر کدام انواع داده‌ی خاص خودشان را دارند. در این شرایط، برای ایجاد قابلیت همکاری میان این پروژه‌ها، باید اشراف کاملی به هر دو پروژه داشته باشید و حتی شاید لازم باشد که بخشی از کد آن‌ها را تغییر دهید.

تعیین نوع غیرمتمرکز با رجیستری جهانی

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

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

سیستم نوع داده غیرمتمرکز و برنامه نویسی تابع در اتریوم

برای مثال، به منظور ثبت بعضی از انواع داده‌های استاندارد از سالیدیتی در این سیستم، باید از فرمت زیر استفاده شود:

 

اگر بخواهیم انواع پیچیده‌ی داده را ثبت کنیم، مثال آن به شکل زیر در می‌آید:

 

قراردادِ نوع، آدرس کتابخانه‌ نوعی را ذخیره می‌کند که شامل تعریف نوع حقیقی به همراه توابع کمک‌رسانی است که برای ایجاد و تخریب اطلاعات و توابع رده بالاتر (HOFs) به کار می‌روند.

 

قرارداد نوع، آدرس سایر قراردادهای اختیاری را هم ذخیره می‌کند. برای مثال، می‌توانیم یک قرارداد فضای ذخیره‌سازیِ نوع داشته باشیم که اطلاعات ورودی همان نوع را ذخیره می‌کند. این اطلاعات ورودی می‌تواند در طول پروژه‌های مختلف گردآوری شود.

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

معرفی قراردادها/کتابخانه‌های توابع خالص

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

اگر این توابع خالص را در رجیستری dType ثبت کنید و به رجیستری بگویید که تابع شما چه نوع ورودی‌ها و خروجی‌هایی دارد، قادر به انجام کارهای فوق العاده‌ای خواهید بود. در آن صورت می‌توانید به اتوماسیون دست یابید.

ما می‌توانیم از یک یا چند نوع ثبت‌شده استفاده کنیم:

 

ثبت نوع تابع doubleBalance در رجیستری dType را می‌توان به شکل زیر انجام داد:

 

فرض کنید می‌خواهید چند تابع خالص را در یکی از ورودی‌های اطلاعاتی موجود در یک نوع اجرا کنید و بعد نتیجه را در قرارداد ذخیره‌سازی نوع خروجیِ تابع درج نمایید.

برای مشاهده چگونگی انجام این کار می‌توانید ویدیوی مقابل را تماشا کنید: https://youtu.be/pcqi4yWBDuQ تابع ()run در مکانیزم اثبات مفهوم ما قابل مشاهده است.

سیستم نوع داده غیرمتمرکز و برنامه نویسی تابع در اتریوم

اگر بخواهیم این مبحث را خلاصه کنیم، باید بگوییم:

  • تابع ()run را با کمک typeHash مربوط به تابع خالصی که می‌خواهید و dataHashes مربوط به ورودی‌های تابع فراخوانی کنید؛ هر dataHash به یک مدل ذخیره‌سازی اشاره دارد.
  • dType می‌داند که چطور باید هر داده‌ی ورودی را دریافت کند چون از نوع ورودی آگاه است و می‌تواند آدرس قرارداد ذخیره‌سازی را بازیابی نماید.
  • dType هم آدرس قرارداد/کتابخانه، یعنی همان جایی که تابع خالص قرار گرفته، را می‌داند.
  • dType می‌تواند نتیجه‌ی پردازش را در قراردادهای ذخیره‌سازیِ مربوط به هر نوع خروجیِ نهایی درج کند.

برنامه نویسی تابعی

تعریف برنامه نویسی تابعی به همراه مزایا و معایب آن در منابع آنلاین متعددی توضیح داده شده است. این روش از برنامه نویسی شهرت زیادی پیدا کرده و به پارادایمی تبدیل شده که به توسعه‌دهندگان اجازه‌ ایجاد پروژه‌های مقیاس پذیر را می‌دهد.

اگرچه سالیدیتی به خودی خود یک زبان برنامه نویسی تابعی نیست، اما با تغییر الگوهای کدنویسی همچنان می‌توانیم از برخی از ویژگی‌های این زبان بهره ببریم.

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

برنامه نویسی تابعی برای اتریوم

شماری از مزایای استفاده از پارادایم‌های برنامه نویسی تابعی را می‌توان به عنوان مزایای اتریوم هم در نظر گرفت.

آزمایش توابع خالص و خودتوان (Idempotent) آسان‌تر است

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

اکثر کدهایی که می‌نویسید چنین ماهیتی دارند. کاهش سطح دشواری آزمایشات به معنای افزایش شانس نوشتن کدهای منبع است.

الگوی ذخیره‌سازی با قابلیت استفاده مجدد

الگوی ذخیره‌سازیِ مورد استفاده برای خود dType و تمام قراردادهای فضای ذخیره‌سازیِ نوع می‌تواند یکسان باشد. این مسئله هزینه‌ی ایجاد، آزمایش و حسابرسی کدها را کاهش می‌دهد.

ریسک بالا، گستره محدود

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

با این حال، این هسته یک الگوی کلی است که همه می‌توانند در آن مشارکت کرده و آن را مورد آزمایش و حسابرسی قرار دهند. به همین خاطر، این هسته احتمالا ایمن‌ترین بخش از این پازل است.

عوارض جانبی جالب

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

منبع

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

ارسال پاسخ

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