グラフチュートリアル:なぜグラフ?


私はこの記事の読者は、最小限の基本的なスマート契約を書く前に経験を持っていると仮定しています.そうでなければ、それはstartに素晴らしい時間です.

何が実際にグラフですか?


公式ドキュメントから:
グラフはEthereumから始めて、ブロック化からデータをインデックス化して、質問するための分散したプロトコルです.これは、クエリを直接クエリするのは難しいデータをクエリすることができます.
グラフを合計するには、スマート契約超簡単から任意の種類のデータのクエリを行う.そうでなければ、それは難しいことです.
それに直接飛び込む前に、ここで本当の問題が何であるかに集中しましょう.

問題


可能性はまた、伝統的なWeb 2スペースからWeb 3に来ている、クライアントサーバーアーキテクチャベースのWebアプリケーションを構築します.あなたは非常に制限の契約の機能(スマート契約ストレージから)をクエリデータを発見した可能性があります.通常、あなたはどんな種類の質問も書く必要がありました、しかし、複雑であるかもしれません、DBから取得するためにサーバーで、そして、あなたはそれがユーザーに直面しているアプリケーションに接続するAPIにします.
ユビキタスERC - 20トークン契約の例を見てみましょう.
contract Token is IERC20 {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
        .
        .
        .
}
以下のように、複雑な質問をする方法について考えてみましょう.現在の残高ですべてのアドレスをリストします.そのバランスは100,000よりも大きく、10,000以上の手当を受けました.
これがデータベースであるならば、それはかなり簡単な仕事でした.良好なテーブルスキーマを書くという点で、より自由な範囲があり、SQL構文で簡単なDBクエリを作成できます.
SELECT address, balance FROM Token WHERE balance > 100000 AND total_received_allowance > 10000
またはnoSQL MongoDBクエリ
db.token.find(
    { 
        balance: { $gt: 100000 }, 
        totalReceivedAllowance: { $gt: 10000 } 
    },
    { address: 1, balance: 1 }
)
そして、あなたは2、3の線で終わりました.何も脳の破壊.
さて、上記のToken契約では、上記のデータベースと全く同じ結果を返すようにしてください.複数のロードブロックに直面する運命です
  • さえ一見単純な質問は、欲求不満にハード
  • です
  • あなたは1つの質問を補うが、他の
  • を補完しないかもしれないあなたのデータレイアウトを変えることを強制されるかもしれません
    プロキシ・パターンを通して契約をアップグレードするとき、そして、ときに、より多くの記憶装置レイアウト制約
  • 複合記憶装置はバグおよび/または妥協セキュリティなどを紹介するかもしれません
    また、結合、集約、エンティティ間の関係、ページ化、非自明なフィルタのような操作についてはどうですか?畜生!
    最後に、ブロックチェーンからデータをインデックス処理してデータを処理する専用のサーバーを構築し、伝統的なデータベースに保存して、コントラクトストレージから直接ではなく、このデータベースから問い合わせを行うAPIをビルドする必要があります.実際、これはEtherscanのようなアプリケーションがしたことです.これは高価ではなく、コアゴールと非常に時間がかかるタスクから逸脱しています.どのように、あなたはこのようなバリア上向きで革新するのが自由でありえましたか?

    解決策


    今、あなたは正確に問題は何か知っている.あなた自身の専用のBlockchainインデクシングサーバーをセットアップして、維持するのを避けるために、あなたがあなたのアプリケーションを望むけれども、あなたがデータを照会することのまわりで自由を利用できるように.
    グラフは分散プロトコルであり、複数のノードが連携してネットワークに接続し、クエリに応答してデータを保持する.グラフネットワークは、ネットワークにおいて異なる役割を有する複数の実体によって実行される.このチュートリアルでは、開発者に焦点を当てます.あなたは異なる役割について読むことができますが、Indexer.
    開発者として、あなたはデータに問い合わせている契約に対応する“subgraph”に関する情報を伝える必要があります.これはいくつかの必要な設定ファイルを記述することで行われます.それから、あなたのデータの源であるこのサブグラフは、構成であなたによって言及された要件に従ってネットワークによって索引付けされて、Grapql APIエンドポイントを通して質問されるのに利用できるようになります.
    開発者が定義する必要なファイルは以下の三つです.
  • マニフェスト(subgraph.yaml)
  • このファイルは、ターゲットのコントラクトを含むデータのインデックスを作成するデータソース、インデックスを開始するブロック、応答するイベントなどを定義します.
  • の図表(schema.graphql)
  • インデックスのサブグラフから取得するデータを定義するGraphSQLスキーマ.これはAPIでよく構造化されたモデルと関連するモデルを定義するのと同じです.
  • アセンブラスクリプトマッピング( mapping.ts )
  • スキーマ内の構造化されたエンティティ(subgraph.yamlで定義されている)にデータソースから定義されたデータ(schema.graphqlで定義された)からデータを変換するアセンブラスクリプトで書かれたコード.
    これらのファイルに正確に何があるかは、サブグラフとAPI全体をあなたに利用可能に定義します.
    次のシリーズをチェックアウト-あなた自身のサブグラフを作成を開始する!
    ホープあなたはいくつかの素晴らしいものを学んだ!😎
    Curator私を捕まえるために自由に感じなさい!