中級者用語を調べる
サブグラフとは
- 執筆
- CRYPTO PORT 編集部
- 公開日
- 更新日
- 読了目安
- 4 分
結論
サブグラフは、どのコントラクトのどのイベントを、どういう形のデータとして記録するかを定義したものです。定義を登録すると、過去のブロックから順に読み直して検索用のデータが作られます。定義を書き換えると再構築が必要になり、その間は古い定義の結果が返ります。
要点
- 対象コントラクトとイベント、保存形式を定義する
- 登録すると過去ブロックから読み直して構築される
- 定義の誤りはそのまま集計の誤りになる
- 定義変更時は再構築が終わるまで古い結果が返る
定義
インデックスの対象・抽出方法・保存するデータ構造をまとめて記述した定義。これに従ってブロックが読み直され、問い合わせ可能なデータが作られる。
コントラクトは処理のたびにイベントログを残します。「誰から誰へいくら送られた」「どのプールで交換が起きた」といった記録です。サブグラフは、このうちどれを拾い、どんな項目にまとめるかを宣言します。データベースの設計図に近いものだと考えると分かりやすいでしょう。
定義を登録すると、指定した開始ブロックから順にログを読み直してデータが作られます。取引量の多いコントラクトでは、この初期構築に時間がかかります。アプリ側は構築が終わるのを待ってから問い合わせる必要があります。
実務で気を付けるのは、定義が集計結果をそのまま決めてしまう点です。イベントの取りこぼしや、単位の扱いを誤ると、画面に出る数字が静かにずれます。チェーン上の値は正しいのに表示だけが違う、という不具合の多くはこの層で起きています。
注意点
- · 定義を誤ると、チェーン上の値が正しくても画面の数字がずれる
- · 初期構築中や再構築中は、最新の状態が反映されていない
- · コントラクトを差し替えた場合、古い定義のままでは新しいイベントを拾えない