DAppsとは
本カリキュラムで学習していくThe Graphは、主にDApps開発に利用される分散型プロトコルです。
まずはDAppsが何かについて抑えておきましょう。
DApps(DAppとも呼ばれる)はDecentralized Applicationsの略で、日本語では分散型アプリケーションという意味です。
Twitterを運営するTwitter社やFacebookのMeta社など、従来のアプリケーションには必ず管理者がいます。
DAppsにはそのような特定の管理者が存在しないことが最も大きな特徴です。
強みとしては、ゼロダウンタイム(システムがダウンしないこと)、トラストレス、透明性などがあげられます。
DAppsの有名な例として、猫の交配、売買を行うNFTゲームであるCryptoKittiesや、分散型仮想通貨取引所(DEX)であるUniswapなどがあります。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.
ブロックチェーン上の情報収集の課題
イーサリアムをはじめとするブロックチェーン上には、仮想通貨の取引情報だけでなくさまざまなデータが保存されています。
具体的には、NFT(非代替性トークン)の保有者やNFTアートの保存場所へのパス、トークンの保有量などです。
ブロックチェーンには透明性があるため、誰もがデータを参照することができます。
一方で非常に多くのデータが保存されているため、知りたい情報を探すことに苦労する場合もあるでしょう。
このとき、どのようなクエリ(=問い合わせ)であれば簡単に取得できるでしょうか。
例としては以下のようなケースが考えられます。
- NFT保有者のアドレス
- 特定のアドレスが保有しているトークンの量
- トークンの総供給量
これらのクエリは、多くの人に複数回実行されるような基本的なものです。
これらのクエリが簡単に取得できる理由として、スマートコントラクトにこれらのクエリを処理するための関数が事前に用意されている点があげられます。
例えば、NFTを作成するスマートコントラクトにはトークンIDに対し保有者のアドレスを返す「ownerOf関数」が実装されていることが一般的です。
この関数を利用すれば、上記1つ目のクエリの回答が得られます。
一方で、難しいクエリとしては以下のようなケースが考えられます。
- 10番目に多くのトークンを保有しているアドレス
- 2022年の3月から4月までに発行されたNFTの保有者のアドレスのリスト
- 特定のトークンを1000枚以上持っているアドレスの数
このような複雑なクエリは無数に考えられるため、全てに対応する関数を事前にスマートコントラクトに用意しておくのは到底不可能です。
また、処理にも多くの計算時間がかかります。
データ量が少なければあまり問題にはならないかもしれませんが、そうでない場合は処理を行うのに数時間、数日など、膨大な時間がかかるかもしれません。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.
インデックス作成
このような難しいクエリの処理は、DApps開発に限った話ではありません。
データベースを利用する多くのアプリケーションが直面する問題です。
難しいクエリを効率的に処理する方法として、インデックス作成は非常に便利です。
インデックスは日本語で索引を意味しますが、その名の通りデータに対して索引をつけることで情報を整理し、高速なクエリ処理を可能にします。
例えば、本の中で特定の単語が出てくるページを全て探さないといけない場合、見逃さないためには1ページ目から全て読んでいく必要があります。
しかし、最後のページに索引をつけていれば索引からその単語を探すだけで済みます。
インデックス作成には、作成するインデックスの分だけ追加の容量を必要とします。
また、データの追加、削除、変更時にインデックスの更新のための処理が重くなるなどのデメリットもあります。
ブロックチェーンは大きなデータを保存したり、たくさんの処理を行うことには向いていません。
実際にNFTに紐づけられる画像などの多くは、IPFSをはじめとする分散型ストレージなどの外部システムに保存されています。
また、イーサリアムには処理コストの分だけガス代と呼ばれる手数料を支払う仕組みがあります。
インデックス作成により必要な処理が増えた場合、より多くのガス代の支払いが必要です。ガス代は基本的にトランザクションの作成者が支払うため、UX(ユーザーエクスペリエンス)の低下につながる恐れがあります。
これらの理由から、ブロックチェーン上で直接インデックス作成を行うのは良いアイデアではないと言えるでしょう。
インデックス作成を行うために、DAppsの開発者が独自のインデックス用サーバを用意することは1つの手ではあります。
しかし、サーバには管理者が必要となるため、完全なDAppsとは言えなくなるかもしれません。
インデックス用サーバを導入してしまうと、DAppsのメリットを損なってしまうのです。
例えば、サーバのメンテナンスを行う時には利用できなくなるでしょうし、アクセスが殺到した際にサーバの処理が追いつかなくなり、ダウンしてしまうかもしれません。
また、サーバの管理者が不正を行ったり、恣意的に特定の地域の人々の利用を制限するということも考えられます。
さらに、サーバを用意したり運用していくのにも継続的なコストが必要です。
サーバの管理が経済的に難しくなったらアプリケーションを維持できなくなってしまうことも考えられます。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.