ブロックチェーンのデータの可視化と分析を手助けするための「The Graph」でサブグラフを作成してみました。
下記ドキュメントを参考に、以下の手順で作成しました。
https://thegraph.com/docs/ja/cookbook/quick-start/
Graph CLIのインストール
このプロセスを行うためには、まずGraph CLIを使用します。
Graph CLIはJavaScriptで書かれており、npmまたはyarnを使用してインストールできます。
以下のコマンドのいずれかを使用してGraph CLIをインストールできます。
NPMを使用する場合:
$ npm install -g @graphprotocol/graph-cli
Yarnを使用する場合:
$ yarn global add @graphprotocol/graph-cli
サブグラフの作成
サブグラフの作成は、The GraphのStudioで行います。
以下のURLにアクセスし、「Create Subgraph」をクリックしてください。
https://thegraph.com/studio/
サブグラフの初期化
サブグラフの初期化は以下のコマンドで行います。
graph init --studio <SUBGRAPH_SLUG>
SUBGRAPH_SLUGの部分は作成したサブグラフのスラッグ名を入力します。
対話式で進んでいくので、指示に従って情報を入力しました。
今回はEthereumネットワークとしてFantom Testnetを選択して、コントラクトアドレスは以下を指定しました。
https://testnet.ftmscan.com/address/0x830AEE0b142F34187e9C286753A06ef17336FbC4
サブグラフの認証
次に、以下のコマンドを使用してサブグラフを認証します。
デプロイキーはサブグラフのダッシュボードで確認できます。
graph auth --studio <DEPLOY_KEY>
ビルドとデプロイ
サブグラフのディレクトリに移動し、以下のコマンドを使用してビルドとデプロイを行います。
cd <SUBGRAPH_SLUG>
graph codegen && graph build
graph deploy --studio <SUBGRAPH_SLUG>
以上の手順で、The Graphにサブグラフを作成しデプロイすることが可能になります。
デプロイ後、サブグラフがブロックチェーンとの同期を初め、同期状態はサブグラフのダッシュボードで確認できます。
私が実施したときは一時間くらいかかりました。
データの取得
同期後、PlayGroundにて、クエリを実行し、ブロックチェーンデータを取得しました。
クエリ
{
# Approvalsエンティティの最初の5件を取得
approvals(first: 5) {
id # 各承認の一意の識別子
owner # 承認を行ったユーザーのアドレス
spender # オーナーから承認を受けたユーザーのアドレス
value # オーナーがスペンダーに対して承認したトークンの量
}
# MinTokensBeforeSwapUpdatedsエンティティの最初の5件を取得
minTokensBeforeSwapUpdateds(first: 5) {
id
minTokensBeforeSwap # スワップが起こる前の新しい最小トークン量
blockNumber # 更新が行われたブロックの番号
blockTimestamp # 更新が行われたブロックのタイムスタンプ
}
}
メタデータ
{
"data": {
"approvals": [
{
"id": "0x1b6fc0ff854c2db871a3ab1469fbf136b9897d7a0ee19c01a02614f87f8eddc800000000",
"owner": "0xebe141903cbf95f533d631c6d3f63f4ea1ccda2c",
"spender": "0x655c5c7c57a397643bb4b201f465a1df40fc5fa3",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
},
{
"id": "0x3cc4fc845552fff40068cdf5f63f7586121af79bc2eba7834e8619591774cb2100000000",
"owner": "0x2c5fe61cb1b239d36aa891177a5ae7b4db999cc1",
"spender": "0x655c5c7c57a397643bb4b201f465a1df40fc5fa3",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
},
{
"id": "0xc4b20dec5aae400e595f8a0ebea8d1046e180b74307c43bd9a993b555931146700000000",
"owner": "0xebe141903cbf95f533d631c6d3f63f4ea1ccda2c",
"spender": "0x655c5c7c57a397643bb4b201f465a1df40fc5fa3",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
},
{
"id": "0xd5f06c66562165607164906bfaf65dc05d124b871f1156650316c32065a3a40000000000",
"owner": "0xebe141903cbf95f533d631c6d3f63f4ea1ccda2c",
"spender": "0x655c5c7c57a397643bb4b201f465a1df40fc5fa3",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}
],
"minTokensBeforeSwapUpdateds": []
}
}
このようなクエリにて、ブロックチェーンデータを特定の目的のために取得・可視化・分析できるようになります。