حمید رضا عسگری | 2021.01.02

پروتکل گراف (The Graph)، ابزاری برای جستجو روی بلاکچین‌ها

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

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

پروتکل گراف چیست؟

گراف یک پروتکل یا به عبارتی یک موتور جستجوی غیرمتمرکز روی بلاکچین‌هاست. توسط این پروتکل توسعه‌دهندگان قادر هستند اپلیکیشن‌های غیرمتمرکز (dApps) خود را به سادگی روی پروتکل IPFS توسط ابزار GraphQL انجام دهند. این پروتکل در ابتدا برای بلاکچین اتریوم توسعه داده شد. مثلا اگر بازی معروف کریپتوکیتی (یک dApp روی اتریوم) را به یاد داشته باشید، توسط موتور جستجوی گراف می‌توانید بفهمید برای این بازی چند اکانت منحصربه‌فرد وجود دارد، یا یک موجودیت منحصربه‌فرد کریپتوکیتی در چه زمانی ایجاد شده است.

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

پیشنهاد مطالعه: مقدمه‌ای بر صنعت مالی غیرمتمرکز (DeFi)

دنیای غیرمتمرکز (Decentralization)

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

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

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

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

پیشنهاد مطالعه: بلاک چین چیست و چطور کار می‌کند؟

ساختار استک پروتکل وب3 (Web3 Protocol Stack)

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

اپلیکیشن‌های غیرمتمرکز (dApps) برای کاربر امکان کنترل روی دیتای خود را فراهم می‌کنند. دَپ‌ها بر پایه دیتایی ساخته می‌شوند که یا تحت مالکیت و مدیریت کامیونیتی و یا به صورت شخصی در اختیار کاربر است. این امر اجازه می‌دهد که بسیاری از سرویس‌ها و محصولات بر روی این مجموعه‌های دیتا ساخته شده و به کاربر امکان می‌دهد که به سادگی بین این دپ‌ها انتخاب کند. نتیجه این وضعیت قدرتمند‌شدن و آزادی عمل میلیون‌ها توسعه‌دهنده برای کار در این حوزه خواهد بود.

بلاکچین‌هایی نظیر اتریوم و یا شبکه‌های ذخیره‌سازی مانند IPFS یا Filecoin در مقایسه با پروتکل وب3، متمرکز هستند. بلاکچین‌های فعلی از نظر کارایی و هزینه (کارمزد) مقرون‌به‌صرفه نیستند و هزینه بهبود سرعت و شرایط به‌واسطه الگوریتم‌های توافق جمعی، مکانیزم‌های لایه 2، شاردینگ و غیره می‌تواند به صورت نمایی افزایش یابد.

پیشنهاد مطالعه: نودهای اتریوم و شاردینگ – توضیحی برای شاردینگ

لایه فراخوانی (Query Layer)

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

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

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

تاریخچه پروتکل گراف

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

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

نقشه راه پروتکل گراف

در نقشه راهی که سازندگان این پروتکل برای خود ترسیم کرده‌اند دو موضوع اصلی را مد نظر قرار داده‌اند: 1- اولویت‌ها  2- سرعت

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

  • متن باز

اولین نسخه نرم‌افزار فقط یک ایندکسر تنها روی اتریوم و IPFS است. یک نود به شبکه اتریوم ملحق می‌شود تا وقایع (event) شبکه را پردازش کرده، اسکریپت‌های اعمال‌شده توسط کاربر برای تبدیل دیتا را اجرا و ایندکس کرده و آنها را در اختیار ماژول GraphQL قرار دهد. اسکریپت‌ها بر روی یک ماشین مجازی مبتنی بر استک (WASM) اجرا می‌شوند که دارای سرعت پردازش بسیار بالا و دقت و صحت نتایج است.

توسعه‌دهندگان با استفاده از این مکانیزم API خود را بر روی پروتکل گراف توسعه داده و از بسیاری از مشکلات فعلی (مانند block reorg و push updates) رهایی می‌یابند.

  • قابلیت Hosted Service

اگرچه هر پروژه‌ای می‌تواند نود خود را داشته باشد اما سازندگان گراف معتقدند که با فراهم کردن این خدمت برای تیم‌ها می‌توانند مشکلات توسعه ابزارهای‌شان را بر روی پروتکل گراف کم کنند.

  • وایت‌پیپر

نسخه اولیه‌ای در مارس 2018 برای وایت‌پیپر نوشته شده اما تیم توسعه‌دهنده در حال کار و بهبود آن است. بعد از رونمایی و آغاز به کار پروژه، وایت‌پیپر نیز منتشر می‌شود و در دسترس همه خواهد بود.

  • شبکه غیرمتمرکز

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

گراف چگونه کار می‌کند؟

جمع‌آوری و ایندکس‌کردن اطلاعات استخراج‌شده از بلاکچین‌ها در گراف توسط ساب‌گراف مانیفست (subgraph manifest) انجام می‌شود؛ به این ترتیب که برای هر زمینه‌ٔ مورد نیاز، در یک ساب‌گراف، قراردادهای هوشمند و وقایع مرتبط با آن قراردادها (smart-contract events) و نگاشت این وقایع به اطلاعات تعریف شده و در نهایت در دیتابیس گراف ذخیره می‌شود (ایجاد مانیفست).

پروتکل گراف (The Graph)

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

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

جزئیات، دستورات و راهنمایی‌های لازم برای چگونگی ایجاد نود، ساب‌گراف‌ها، کوئری‌ها، فراخوانی‌ها و موارد مرتبط را می‌توانید از این لینک و کدهای متن باز آن را از گیت-هاب به‌دست آورید.

گراف بر روی چه شبکه‌هایی پشتیبانی می‌شود؟

پشتیبانی نود گراف بر روی هر زنجیره سازگار با اتریوم (مبتنی بر JSON RPC API) انجام می‌شود. همچنین ماژول hosted service روی شبکه‌های زیر پشتیبانی می‌شود:

  • Ethereum mainnet
  • Kovan
  • Rinkeby
  • Ropsten
  • Goerli
  • PoA-Core
  • xDAI
  • Sokol

کار روی بلاکچین‌های دیگر نیز در دست انجام است. در این لینک می‌توانید آخرین بلاکچین‌های پشتیبانی‌شده را ببینید.

کامیونیتی پروتکل گراف

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

Source 1 & Source 2