見出し画像

The Graphの概要とネットワークについて

The Graphは、イーサリアムから始まるブロックチェーンからのデータのインデックス作成とクエリを行うための分散型プロトコルです。直接クエリが難しいデータのクエリが可能になります。


Uniswapのような複雑なスマートコントラクトやBoredApe Yacht ClubのようなNFTイニシアチブを持つプロジェクトは、Ethereumブロックチェーンにデータを保存するため、基本データ以外のものをブロックチェーンから直接読み取ることは非常に困難です。


Bored Ape Yacht Clubの場合、特定の類人猿の所有者を取得したり、IDまたは総供給量に基づいて類人猿のコンテンツURIを取得したりするなど、コントラクトの基本的な読み取り操作を実行できます。これらの読み取り操作はプログラムされています。


スマートコントラクトに直接組み込まれますが、集約、検索、関係、重要なフィルタリングなど、より高度な実際のクエリや操作は不可能です。たとえば、特定のアドレスが所有する類人猿を照会し、その特性の1つでフィルタリングする場合、コントラクト自体と直接やり取りしてその情報を取得することはできません。


このデータを取得するには、これまでに発行されたすべてのtransferイベントを処理し、トークンIDとIPFSハッシュを使用してIPFSからメタデータを読み取り、それを集約する必要があります。

function _transfer(address from, address to, uint256 tokenId) internal virtual {
       require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner
       require(to != address(0), "ERC721: transfer to the zero address");

       _beforeTokenTransfer(from, to, tokenId);

       // Clear approvals from the previous owner
       _approve(address(0), tokenId);

       _holderTokens[from].remove(tokenId);
       _holderTokens[to].add(tokenId);

       _tokenOwners.set(tokenId, to);

       emit Transfer(from, to, tokenId);
   }

https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d#code#L1746


これらのタイプの比較的単純な質問であっても、ブラウザーで実行されている分散型アプリケーション(dapp)が回答を得るには、数時間または数日かかるでしょう。


また、独自のサーバーを構築し、そこでトランザクションを処理してデータベースに保存し、その上にAPIエンドポイントを構築して、データをクエリすることもできます。ただし、このオプションはリソースを大量に消費し、メンテナンスが必要であり、単一障害点を示し、分散化に必要な重要なセキュリティプロパティを破壊します。


ブロックチェーンデータのインデックス作成は、本当に、本当に難しいです。


ファイナリティ、チェーンの再編成、ブロック解除されたブロックなどのブロックチェーンプロパティは、このプロセスをさらに複雑にし、時間がかかるだけでなく、ブロックチェーンデータから正しいクエリ結果を取得することを概念的に困難にします。


The Graphは、ブロックチェーンデータのパフォーマンスと効率的なクエリにインデックスを付けて有効にする分散型プロトコルでこれを解決します。


これらのAPI(インデックス付きの「サブグラフ」)は、標準のGraphQLAPIを使用してクエリできます。現在、ホスト型サービスと、同じ機能を備えた分散型プロトコルがあります。どちらも、グラフノードのオープンソース実装によって支えられています。

The Graphのしくみ


The Graphは、subgraph manifestと呼ばれるサブグラフの説明に基づいて、イーサリアムデータにインデックスを付ける内容と方法を学習します。サブグラフの説明は、サブグラフの対象となるスマートコントラクト、注意を払うそれらのコントラクトのイベント、およびグラフがデータベースに格納するデータにイベントデータをマップする方法を定義します。


subgraph manifestを記述したら、Graph CLIを使用して定義をIPFSに格納し、インデクサーにそのサブグラフのデータのインデックス作成を開始するように指示します。


この図は、subgraph manifestがデプロイされた後のデータフローの詳細を示し、イーサリアムトランザクションを処理します。

スクリーンショット 2021-09-18 16.58.27


フローは次の手順に従います。


1 分散型アプリケーションは、スマートコントラクトのトランザクションを通じてイーサリアムにデータを追加します。



2 スマートコントラクトは、トランザクションの処理中に1つ以上のイベントを発行します。


3 グラフノードは継続的にイーサリアムをスキャンして、新しいブロックとそれらに含まれる可能性のあるサブグラフのデータを探します。


4 グラフノードは、これらのブロックでサブグラフのイーサリアムイベントを検出し、指定したマッピングハンドラーを実行します。マッピングは、イーサリアムイベントに応答してグラフノードが保存するデータエンティティを作成または更新するWASMモジュールです。


5 分散型アプリケーションは、ノードのGraphQLエンドポイントを使用して、ブロックチェーンからインデックス付けされたデータをグラフノードに照会します。

次に、グラフノードは、ストアのインデックス機能を利用して、このデータをフェッチするために、GraphQLクエリを基になるデータストアのクエリに変換します。分散型アプリケーションは、このデータをエンドユーザー向けの豊富なUIに表示し、エンドユーザーはこれを使用してイーサリアムで新しいトランザクションを発行します。サイクルが繰り返されます。



次のステップ


次のセクションでは、サブグラフを定義する方法、サブグラフをデプロイする方法、およびグラフノードが構築するインデックスからデータをクエリする方法について詳しく説明します。


独自のサブグラフを作成する前に、グラフエクスプローラーを確認して、既に展開されているサブグラフのいくつかを調べてください。各サブグラフのページには、GraphQLを使用してそのサブグラフのデータをクエリできる遊び場が含まれています。


ネットワークの概要


グラフネットワークは、ブロックチェーンデータを整理するための分散型インデックスプロトコルです。アプリケーションはGraphQLを使用して、サブグラフと呼ばれるオープンAPIを照会し、ネットワーク上でインデックス付けされているデータを取得します。The Graphを使用すると、開発者は完全にパブリックインフラストラクチャで実行されるサーバーレスアプリケーションを構築できます。


GRTトークンアドレス0xc944e90c64b2c07662a292be6244bdf05cda44a7



グラフネットワークは、ネットワークにサービスを提供し、Web3アプリケーションにデータを提供するインデクサー、キュレーター、およびデリゲーターで構成されます。消費者はアプリケーションを使用し、データを消費します。

スクリーンショット 2021-09-18 17.10.32

グラフネットワークの経済的セキュリティとクエリ対象のデータの整合性を確保するために、参加者はグラフトークン(GRT)をステークして、使用します。


GRTは、ネットワーク内のリソースを割り当てるために使用される、イーサリアムブロックチェーン上のERC-20である作業トークンです。アクティブインデクサー、キュレーター、デリゲーターは、実行する作業量とGRTの利害関係に比例して、サービスを提供し、ネットワークから収入を得ることができます。


この記事が気に入ったらサポートをしてみませんか?