blockchainjapan’s blog

旬のブロックチェーンを記事を厳選して提供!

分散型インデックスとクエリ:DODOサブグラフの物語


分散型インデックスとクエリ:DODOサブグラフの物語

著:DODO Breeder

DODOは、The Graphを活用して無数のブロックチェーンデータに素早く簡単にアクセスし、DODOの製品を強化しています。分散型取引所(DEX)サービスからクラウドプール機能まで、The Graphを使って照会・取得されたデータは、DODOプラットフォーム上の至る所で利用されています。

この記事では、The Graphの概要と、エンジニアリングチームによるThe Graphの導入と問題解決のエクスペリエンスについて紹介します。

課題

DODOチームの多くのエンジニアは、2017年初頭から分散型アプリケーション(dApp)の開発を行ってきましたが、常に対処しなければならなかった課題は、スマートコントラクトや他のdAppが生成・発散するブロックチェーンデータへのアクセスでした。取得したデータを読み取り可能な形式に変換することが難しく、オンチェーンから素直に履歴データを取得することに苦労することが多い状況がありました。

当初、スマートコントラクトのデータをフロントエンドに表示する必要があったとき、私たちのアプローチは、オンチェーンのコントラクトイベントをリッスンする内部バックエンドサービスを開発・導入し、それらをディスクに永続化するというものでした。その後、別のAPIサービスを作成して、クエリを一般に公開していました。この方法はコストがかかり、メンテナンスやリファクタリングも難しく、何よりも中央集権的で単一障害点が存在していたのです。

The Graph が救ってくれた

2020年後半、私たちのチームはデータ取得の問題を解決する効率的なソリューションを探していたところ、The Graphを発見しました。
非中央集権を念頭に置いて設計されたThe Graphは、ブロックチェーンのデータにインデックスを付けたり、クエリを実行したりするためのプロトコルです。ブロックチェーン上にサブグラフと呼ばれる構造が展開されており、あらゆる種類のデータを迅速かつ確実に取得し、フロントエンドで即座に可視化することができます。DODOのような分散型金融(DeFi)のdAppにとって、正確なデータにすぐにアクセスできることは絶対に重要です。

“Graphは、我々のようなプラットフォームを運営する上で、開発、運用、保守といったあらゆる技術的側面において、チームの時間と労力を大幅に削減してくれました。DODOプラットフォームの最初のイテレーション以来、我々は日々のデータニーズを満たすためにThe Graphに依存しています。”
DODOスマートコントラクトエンジニア Autark Xu氏

The Graphを始めるにあたり

公式のテクニカルドキュメントが優れたリソースであり、他の多くのdAppプロジェクトがサブグラフをオープンソース化してその経験を共有していることから、DODOチームはThe Graphを簡単に導入することができました。

The Graph’s documentationは、サブグラフのコンポーネントや構文を包括的かつ直感的に説明しています。一般的なプログラミングの概念の知識があれば、サブグラフの開発をすぐに始められることがわかりました。

GraphQL Schemaのデザインについては、uniswap-subgraphリポジトリを参考にすることをお勧めします。そのdayDataとhourDataのデザインにより、私たちはサブグラフを直接使用して、フロントエンドの検索と視覚化を行うために必要なデータを迅速かつ正確に取得することができました。
私たちの経験では、現在のGraphQLクエリ言語は、私たちの日常的なビジネスユースケースのほとんどを満たすことができます。私たちはThe Graphの開発チームに、アグリゲーションクエリのための構文サポートを追加するよう、いくつかのフィードバックを行っています。

なぜDODOでThe Graphを使うのか

2020年9月にDODO v1がローンチされたとき、サブグラフはまだDODO dApp自体では使用されていませんでしたが、取引データを記録したり、CoinGeckoなどのアグリゲーターサイトにクエリを送信するために、既にサイドでテストされていた状況があります。

当時は、dAppのフロントエンドページを読み込む際に長い遅延が発生していました。これは、大量のオンチェーンデータにクエリを実行する必要があり、データのクエリがフロントエンドのすべてのリクエストに追いついていなかったためです。ユーザーエクスペリエンスを向上させるために、ブロックチェーンデータのクエリに多くの最適化を行いましたが、急速に高まるビジネスの要求に応えることは困難でした。

“DODO v2の開発を始めたとき、今後はより多くのデータクエリとDODOを利用するユーザーが増えることが既に把握されており、メインのデータソリューションとしてThe Graphを選びましたが、この選択は正しかったと言えるでしょう。” とAutark氏は語ります。

ハイレベルでは、DODOはサブグラフをデプロイして使用し、トランザクション記録の照会や、クラウドプールやリクイディティマイニング機能に関連するデータを実行しています。また、The Graphを使用してイベントをリッスンし、DODOの交換・取引機能の状況を把握するとともに、プールのパラメータ、手数料率、TVL(Total Value Locked)データ、手数料収入などのプール情報をユーザーに表示しています。

また、CrowdpoolingとvDODOでは、サブグラフクエリを多用して、年率利回り(APY)情報、プール作成日、出口手数料などの重要なデータをフロントエンドに表示しています。

データ分析チームは、グラフを活用して利用状況のデータを収集し、ビジネスの意思決定プロセスに反映させるためのモデリングや予測を行っています。

以下は、DODOプラットフォーム上のクラウドプール・キャンペーンに関する情報を取得するためのサンプル・クエリです:

DODO v2のサブグラフはMainnetのこちらのページで展開されています: https://thegraph.com/explorer/subgraph/dodoex/dodoex-v2

DODOのサブグラフGitHubリポジトリはこちら: https://github.com/DODOEX/dodoex_v2_subgraph

DODOのデプロイ情報は、こちらのドキュメントに記載されています: https://dodoex.github.io/docs/docs/deployedInfo

ブロックチェーンノード、データベース、バックエンドAPIサービスを維持する必要がなく、簡単かつ迅速にdApp製品を構築することができます — このように、The Graphは本当に大きな助けとなるのです。


DODO Zooへようこそ!

Official Website: https://dodoex.io/
FAQs: https://dodoex.github.io/docs/docs/
GitHub: https://github.com/DODOEX
Twitter: https://twitter.com/BreederDodo
Discord: https://discord.gg/tyKReUK
Forum: https://community.dodoex.io/

The Graphについて

The Graphは、分散型ウェブのインデックスとクエリのレイヤーです。開発者はサブグラフと呼ばれるオープンなAPIを構築・公開し、アプリケーションはGraphQLを使ってクエリを実行することができます。The Graphは現在、Ethereum、IPFS、PoAからのデータのインデックス化をサポートしており、更に多くのネットワークを公開していく予定です。現在まで8,000以上のサブグラフが10,000人以上のアクティブな開発者によってデプロイされ、Uniswap、Synthetix、Aragon、Gnosis、Balancer、Livepeer、DAOstack、AAVE、Decentralandなどのアプリケーションに利用されています。

アプリケーションやWeb3アプリケーションを構築している開発者であれば、ブロックチェーンからのデータのインデックス作成やクエリにサブグラフを利用することができます。The Graphを使うことで、アプリケーションは効率的かつパフォーマンスの高いデータをUIに表示することができ、他の開発者もそのサブグラフを使うことができ、サブグラフをデプロイしたり、Graph Explorerにある既存のサブグラフを照会したりすることができます。

The Graphでは、あなたがThe Graph上でインデクサーキューレーターデリゲーターになることを歓迎します。技術的な議論をDiscordでおこなったり、Telegramに参加してGraphについて色々話をしたり、TwitterをフォローしてThe Graphのコミュニティに積極参加してください。The Graphの開発者やコミュニティのメンバーは、いつでもあなたとの対話を楽しみにしています。また、The Graphエコシステムでは、開発者同士がお互いにサポートし合うコミュニティが成長しています。

Website / Graph Explorer / Twitter / Blog / Linkedin / Everest / Discord / Telegram / Newsletter

日本版Twitter / 日本版Medium / 日本版Telegram