گراف (The Graph) چگونه به برنامه های غیر متمرکز کمک خواهد کرد؟

گراف (The Graph) چیست؟ چگونه یک زیرگراف (Subgraph) درست کنیم و چگونه آن به برنامه غیر متمرکز (dApp) ما کمک خواهد کرد؟

اکثر برنامه های غیر متمرکز اتریوم دو بخش در زیرساخت خود دارند (نسخه ساده):

۱- Front-end (در حال اجرا در مرورگر)

۲- یک نود اتریوم (سطح کاربری به شبکه اتریوم)

وقتی تراکنشی در اتریوم روی می دهد، رویداد هایی را صادر می کند. فرانت اند (Front-end) این رویداد ها را نظاره می کند و بر طبق آن UI (رابط کاربری) را به روز رسانی می کند. برنامه غیر متمرکز می تواند انواع محدودی از سوالات را به نود اتریوم بفرستد تا داده ها را بر روی فرانت اند نمایش دهد.

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

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

می توانیم مشکل را به این شیوه خلاصه کنیم: برنامه های غیر متمرکز نیاز به داده های لیست شده برای اجرای پرس و جو ها در مقیاس بزرگ دارند تا تجربه کاربری تمام نمایی را مقدور سازند که در آن کمترین نیاز به اعتماد باشد.

گراف (The Graph) چیست؟

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

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

این فهرست ها (زیرگراف ها) در حال حاضر توسط تیم گراف (The Graph) میزبانی می شوند اما در آینده این فهرست ها بر روی یک شبکه کاملا غیر متمرکز از نود های گراف به حیات خود ادامه خواهند داد.

گراف (The Graph) چگونه کار می کند؟ 

The Graph

اجازه دهید عمیق تر وارد بحث شویم و درک کنیم که در واقع چگونه گراف (The Graph) کار می کند:

  • برنامه های غیر متمرکز از طریق قرارداد های هوشمند خود تراکنش هایی اتریومی را ایجاد می کنند که رویداد ها را بیرون می دهند.
  • نود های گراف (Graph Nodes) هر بلاک اتریوم را در جستجوی رویداد ها اسکن می کنند.
  • نود های گراف رویداد هایی را برای زیرگراف شما در بلاک های اتریوم پیدا می کنند و به مدیریت سطح کاربری mapping handlers که شما فراهم کرده اید، می پردازند. در این طرح بندی تصمیم گرفته می شود که چگونه داده ها در نود های گراف ذخیره و به روز شوند.
  • برنامه غیر متمرکز شما می تواند به پرس و جو در مورد این داده ها از طریق GraphQL APIs بپردازد که برای فراهم آوردن داده های لیست شده توسط نود های گراف ترجمه می شوند.
  • پس منتظر چه هستید، اجازه دهید یک زیرگراف بسازیم.

ساختن یک زیرگراف

اجازه دهید از یک نمونه قرارداد هوشمند با پروژه Truffle استفاده کنیم و یک زیرگراف بسازیم.

 Graph Explorer

با استفاده از Graph Explorer می توانید به جستجوی زیرگراف هایی دیگر بپردازید که توسط جامعه ساخته شده اند. ما می توانیم همچنین با استفاده از Graph Explorer UI به تفحص در مورد زیرگراف ها بپردازیم.

لازم است که یک اکانت در Graph Explorer باز کنیم و یک Access Token تهیه کنیم که در حال گسترش زیرگراف ها  بر روی نود های گراف مورد استفاده قرار می گیرد (میزبانی شده توسط تیم The Graph). پس اجازه دهید یک اکانت در Graph Explorer ایجاد کنیم.

یک زیرگراف با استفاده از Graph Explorer UI با نام Example ایجاد کنید.

حال لازم است که Graph-CLI را در سیستم خود نصب کنیم (من از Ubuntu 16.10 استفاده می کنم):

sudo yarn global add @graphprotocol/graph-cli

اجازه دهید یک زیرگراف نمونه با استفاده از فرمان پایین ایجاد کنیم:

graph init buddies2705/example-subgraph example-subgraph
// Command Syntax graph init <GITHUB_USER>/<SUBGRAPH_NAME> <DIRECTORY>// Here Direcotry is optional, if you don't pass it it will create a directory with SUBGRAPH_NAME 

اجازه دهید dependency را نصب کنیم و طرح بندی ها را ایجاد کنیم:

//Install Dependencies yarn//Generate Mappingsyarn codegen

حال Auth را با استفاده از Access Token ایجاد می کنیم (ما می توانیم به Access Token از داشبورد Graph Explorer دسترسی پیدا کنیم):

graph auth https://api.thegraph.com/deploy/<ACCESS_TOKEN>

حال می توانیم به نصب زیرگراف خود بر روی Graph Explorer با استفاده از فرمان زیر بپردازیم:

graph deploy     --debug     --node https://api.thegraph.com/deploy/     --ipfs https://api.thegraph.com/ipfs/     buddies2705/example
//You can see we are using buddies/example where "buddies2705" is my //github username and "example" is our subgraph name create using //Graph explorer UI.

حال Graph Explorer را باز کنید و زیرگراف خود را ببینید. شما می توانید به جستجوی زیرگراف خود با استفاده از Graph Explorer UI بپردازید. شما همچنین می توانید پایانه هایی را ببینید تا از لحاظ برنامه نویسی با زیرگراف خود تعامل داشته باشید.

The Graph

ناحیه زیربنایی

حال به بررسی عمیق تری می پردازیم تا درک کنیم که در ناحیه زیربنایی چه چیزی اتفاق افتاده است. ما یک پروژه Truffle با یک قرارداد Gravity.sol داشتیم که به طور ساده یک Gravatar را بر روی اتریوم ایجاد می کند. این قرارداد دو واقعه را صادر می کند:

NewGravatar وقتی یک Gravatar جدید ایجاد می شود.

UpdatedGravatar وقتی یک Gravatar موجود به روز رسانی می شود.

event NewGravatar(uint id, address owner, string displayName, string imageUrl);event UpdatedGravatar(uint id, address owner, string displayName, string imageUrl);

اگر این دو رویداد های داده را لیست کنیم، به پرسش های زیر می توانیم پاسخ دهیم:

سال گذشته چه تعداد Gravatar ایجاد شده بودند؟

به طور متوسط هر روز چه تعداد Gravatar به روز رسانی می شود؟

۱۰ تصویر برجسته که همه Gravatar های ما را میزبانی می کنند، چه هستند؟

رایج ترین نام ها برای Gravatar ها چه هستند؟

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

با استفاده از The Graph می توانید طرح هایی برای فهرست کردن این داده ها ایجاد کنید که در Data Store به حیات خود ادامه می دهند (در حال حاضر Postgres). حال ببینیم که چگونه این طرح ها ایجاد می شوند:

فایل های مهم

اجازه دهید اول نگاهی به subgraph.yaml بیاندازیم که همه طراحی ها را تعریف می کند:

اجازه دهید نگاهی به فیلد های مهم این فایل بیاندازیم:

dataSources: DataSources همه قرارداد های هوشمندی را که شما می خواهید پیگیری می کند (در مورد ما تنها یک قرارداد است).

همه فیلد های دیگر واضح هستند، پس اجازه دهید نگاهی به فیلدeventHandlers  بیاندازیم که طراحی های ما را تعریف می کند:

eventHandles: در این فیلد، ما طراحی هایمان را تعریف می کنیم. ما رویداد ها و عملکرد هایی را اضافه می کنیم که آن رویداد ها را مدیریت می کنند. به عنوان مثال ما در حال handleNewGravatar  تعریف برای رویداد  NewGravatar هستیم.

File: این فیلد فایل طراحی ما را خواهد داشت که شامل عملکرد های event handler می باشد که در مورد ما mapping.ts است.

 mapping.ts در جایی است که شما به پیاده سازی event handler ها می پردازید، این event handler ها هر زمانی که رویداد های Gravatar ما صادر شوند، اجرا خواهند شد و موجودیت ها را ایجاد کرده و آنها را انبارش می کنند.

می توانید ببینید که ما در حال وارد کردن دو فایل Gravity.ts وSchema.ts هستیم که هر دو فایل وقتی که ما yarn codegen را اجرا کنیم، ایجاد می شوند. این فایل ها محتوی type ها هستند که کار کردن با قرارداد ها، رویداد ها و موجودیت ها را آسان می کنند. ما همچنین یک schema.graphql داریم که شامل موجودیت ها خواهد بود.

type Gravatar @entity {
id: ID!
owner: Bytes!
displayName: String!
imageUrl: String!
}

فایل schema.ts ما با استفاده از اینschema.graphql  ایجاد می شود و فایل Gravity.ts ما بر اساس قرارداد هوشمندGravity.sol  ایجاد می شود.

اینها تعداد زیادی مفاهیم GraphQL هستند. می توان یک زیرگراف اصلی را با درک حداقلی از GraphQL ساخت.

ساخت یک زیرگراف برای برنامه غیر متمرکز خود

اگر شما در حال مدیریت یک برنامه غیر متمرکز هستید، احتمالا با این مشکل Data مواجه شده اید.

برای ساختن یک زیرگراف سفارشی برای برنامه غیر متمرکز خود ، لازم است که مراحل زیر را دنبال کنید:

نصب Graph-CLI و دیگر وابستگی ها (dependencies)

ایجاد یک subgraph.yaml

ایجاد یک svhema.graphql

ایجاد فایل های طرحواره

ایجاد یک فایل Mapping با event handler ها

فرمان های مفید

Graph-CLI فرمان های مفیدی را به معرض نمایش می گذارد که می توانید آنها را زیر package.json فایل کنید.

ما یک  FOMO3d subgraph اصلی ساخته ایم، آن را بررسی کنید.

نتیجه گیری

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

نسل سوم شبکه اینترنت: بسازید، نصب کنید و نیازی به تعمیر و نگهداری نیست.

تمرکززدایی و به حداقل رساندن نیاز به اعتماد مشکل دشواری برای حل کردن است. تیم The Graph در تلاش برای انجام آن است و می خواهند بخش مهمی از زیرساخت برنامه غیر متمرکز را بسازند. اگر شما در حال ساختن یک برنامه غیر متمرکز مقیاس پذیر هستید، باید پروتکل The Graph را مورد توجه قرار دهید.

معرفی QuickNode

QuickNode در حال ساختن زیرساختی برای پشتیبانی از آینده شبکه اینترنت نسل سوم است. ما از ۲۰۱۷ با صد ها توسعه دهنده و شرکت کار کرده ایم و به ارتقای برنامه های غیر متمرکز و فراهم کردن نود های اتریوم با عملکرد بالا کمک کرده ایم. ما در چند ماه گذشته بر روی چیز جالبی کار کرده ایم و به زودی آن را راه اندازی خواهیم کرد.


54321
امتیاز 5 از 2 رای

منبع medium
ممکن است شما دوست داشته باشید

ارسال نظر

  اشتراک  
اطلاع از
عضویت در کانال تلگرام میهن بلاکچین