目次
はじめに
前回DAppsをリリースした話をしましたが、そもそもDAppsについて説明していなかったので、自分なりにまとめてみました。
DAppsはWeb3.0とも言われているほど全く新しい概念のアプリケーションです。
今回はDAppsの概要からアーキテクチャ、そして課題と将来性について説明します。
分散型掲示板サービスCryptoBoardをリリースしました
Dappsとは
DAppsとは、Decentralized Applicationsの略称です。
Decentralizedとは「分散された、非中央集権な」という意味であり、ブロックチェーン技術によって分散化されたアプリケーションを指しています。
なぜ分散化が必要なのか?
従来では、中央にアプリケーションがあり、ユーザはそれに接続することで利用しています。
対してDAppsでは、分散ネットワーク上に存在しているアプリケーションを利用するイメージになります。
これは冗長化して複数のサーバで運用するとかいう話ではなく、アプリケーションを管理している主体が存在するかどうかという違いです。
分散型アプリケーションには様々な特徴が存在しますが、大きく以下の3つの特徴を説明します。
- 単一障害点(Single Point of Failure)がない
上記で説明したとおり分散化されたネットワーク上に存在しています。そのため、従来であれば中央のサーバが故障した場合などはシステムがダウンしてしまいますが、分散ネットワークでは数個のサーバ(ノード)が故障してもネットワーク全体は正常に稼働し続けるため、その上で動いているアプリケーションも障害に強いという特徴を持ちます。
またビットコインなどが良い例ですが、分散ネットワークの維持には経済的インセンティブが提供されており、各々が自分の利益のためにシステムを維持することでエコシステム全体が持続されるように設計されています。
分かりやすく言うと、システムの維持に貢献すると報酬が得られるため、参加者がいる間は稼働し続けることができるということです。
-
Trustless(信用する必要がない)
2つめの特徴はトラストレスであることです。
「信用がない」のではなく「信用する必要がない」というのがポイントです。中央の管理者が存在しないため、参加者同士で直接取引することができます。
メルカリを始めとするフリマアプリなどではユーザ同士で取引できますが、間にメルカリが存在しているため、メルカリが許可しない商品やユーザの取引は制限される場合があります。
そういった検閲や規制を受けることが無いことがDAppsの大きな特徴です。
-
Transperency(透明性)
後で説明しますが、DAppsは分散ネットワーク上で展開されたプログラムを利用して動作します。そのプログラムはコントラクトと呼ばれ、そのプログラムの実行をスマートコントラクトと言います。
コントラクトは基本的には公開されるため、利用者はそのコントラクトが不正をしてないかどうかを検証することが出来ます。
どういう事かというと、例えばゲームアプリのガチャを思い浮かべて下さい。一時期ガチャの当選確率をユーザが不利になるように操作していたんじゃないかと疑惑が出て炎上したことがあります。
このように内部のシステムが見えないことをいいことに不正されることを防ぐことが出来ます。
厳密に言うと、コントラクトはプログラミング可能なものであるため、中央集権的な書き方もやろうと思えば出来てしまいます。ただしその事実を隠すことは出来ないというのが正しい理解です。つまり開発者の都合の良いようなコントラクトは作れますが、ソースを読める人が見ればすぐバレてしまいます。
実はコントラクトが全てパブリックであることには議論があって、秘匿性の高いコントラクトを作成する技術も提案されています。なのでここでは「妥当であると検証できる」という言い方に留めておきます。
DAppsはどのように動いているのか
前述したとおりDAppsはスマートコントラクトという仕組みを利用して動きます。
スマートコントラクトとは「決められた内容(契約)を自動実行するプログラム」です。
実はスマートコントラクト自体はブロックチェーンを前提としていません。ブロックチェーンの技術を組み合わせることで、障害に強く(単一障害点がない)、改竄が困難な透明性の高いシステムを実現できるようになると言われています。
これだけだと一体スマートコントラクトにどんな価値があるのか分かりづらいので、簡単な例で説明してみます。
レンタカーコントラクトがあります。その場合、以下の流れでサービスは提供されます。
- 利用者はレンタカーコントラクト上で代金を支払います
- 事業者は貸し出す車の所有権を一時的に利用者に移譲します
- 利用者は契約の範囲内で車を利用することができます
一見すると既存のWebアプリケーションでも同じことが出来るんじゃないかと思われるかもしれません。
確かに全てオンラインで実行できるところは既存のシステムと違いはありません。
ただここで考えてほしいのは、既存の仕組みだとお互いに信用する必要があるということです。
ユーザ側からみると、代金を支払って本当に正しく車を貸し出してくれるのかはこの会社を信用する必要があります。よく知られた企業かどうか?国が認めた事業者かどうか?などから信用するに足る事業者であるかどうかを判断します。
事業者側からしても同様です。権限を移譲する相手は本当に代金を支払ったユーザかどうか、契約範囲内で利用をやめてもらえるのかを本人確認手続きなどでチェックすることが必要になります。
前述した通り、トラストレスに自動実行されることが大きなポイントです。
この仕組みが実現できるようになると、社会のあらゆるシステムがブロックチェーンで実行される未来もあるかもしれません。
DAppsのアーキテクチャ
DAppsは分散型アプリケーションのプラットフォーム上で構築することが出来ます。
現在様々なプラットフォームが提案・提供されていて、これからもどんどん出てくると思います。
その中で現在一番規模も知名度も大きいプラットフォームがEthereum(イーサリアム)です。
Ethereumは「ワールドコンピュータ」と呼ばれていて、世界共通のOSみたいなコンセプトでプラットフォームを提供しています。
従来のWebアプリケーションでは、ユーザはブラウザからクライアント(Javascript/HTML)に接続し、データを管理しているサーバと情報をやり取りすることで利用します。もちろんクライアント、サーバサイドのプログラムは全てインフラ上(AWSやHerokuなど)にホスティングされる必要があります。
対してDAppsでは、そのデータの処理やサーバ側の機能(の一部)をブロックチェーンに展開されたコントラクトによって実行させることが出来ます。
実はコントラクトを展開するには手数料(Gas)を支払う必要があり、大量のデータをデプロイするとコストが膨大になってしまうという課題があります。そのため、全てをブロックチェーンで実行させるのではなく、既存のアーキテクチャとどう組み合わせるかを考える必要があります。
ここで重要なのは、どの機能をコントラクトで実行させるのかは設計次第だと言うことです。
ブロックチェーン上に展開したコントラクトをクライアント側だけでアクセス、操作しても良いですし、もしくはサーバを別途用意してそこからコントラクトを実行するでも可能です。
ただし、DAppsの基本原則であるトラストレスがどこまで実現されているのかがポイントです。
サービスの重要な部分のみコントラクト化し、大量のデータはデータベースで管理するというのがスタンダードなアーキテクチャです。
現時点では上記のアーキテクチャが主流ですが、クライアントサイドもブロックチェーンに乗せることが出来る技術も開発されています。(IPFSやSwarmなど)
DAppのプロジェクト例
DAppsは現在開発中のもの含めて1000以上あるそうですが、これからもっと増えていくと思います。
2つほど紹介します。
- uPort
個人情報を一元的に管理し、サービス利用時に簡単に身分証明が出来るサービス。
アイデンティティー系はブロックチェーンと相性が良いし、サードパーティーとしてもサービス連携し易いので頑張ってもらいたい分野です。 -
GNOSIS
予測市場サービス。簡単に言うとトークンを使った賭けのプラットフォーム。
賭けというとダーティーなイメージになりますが、参加者に透明性の高い経済的インセンティブを与えることで、信頼性の高い予測データを得ることができるので社会的にも価値が高いサービスです。
以下のサイトで存在するDAppsを検索することが出来るので、興味のある人はぜひ。
State of DApps
DAppsが普及するために超えなければならない課題
ここまでDAppsの概要から特徴、アーキテクチャの説明をしました。
ここではDAppsが世の中に普及していく上での現在のハードルについて考えてみたいと思います。
あくまで開発者目線なので、法律や政治的な観点は入っていません。
- 複雑は罪
複雑なものは絶対に世の中に普及しないと思っています。
DAppsを利用するためには暗号通貨を手に入れて、専用のアプリをインストールする必要があるなど、まだまだインターフェースが複雑です。ある程度はユーザが慣れるのを待つことが出来ますが、もっと簡単なインターフェースが開発されるまでは、やはりまだまだ一般に普及するまではいかないと思います。また、コントラクトが公開されていると言いましたが、コントラクトの妥当性を評価できる人は限られているため、結局その人を信用する必要があるという問題もあるかなと感じました。
-
プラットフォームの不確実性
2つめはどうしてもプラットフォームに依存してしまうという問題です。
当然ですが、DAppsは構築されているプラットフォームの処理性能や機能の範囲内でしか動かすことは出来ません。Ethereumで展開されているCryptoKittiesというアプリが一時期流行って、ネットワーク全体のパフォーマンスが落ちてしまうという事象も起こりました。
プラットフォームとどう折り合いをつけていくのか考えて開発していく必要があります。また、突然開発チームが分解してプラットフォームの開発がストップしてしまうという危険性もあります。ブロックチェーンの非中央集権を目指すという思想とは相反するジレンマがこの業界には存在します。
-
ナレッジ不足
これは完全に開発者目線ですが、試行錯誤段階のため、安定したサービスを開発し運用していくノウハウが未成熟です。
現在一部の企業が率先して様々なツールを提供してくれていますが、本当に世の中に普及していくためにはさらに整備されていく必要があります。参考までに現在提供されているいくつかのツールを載せておきます。
以上普及するためのハードルについて考えてみましたが、逆に言えばビジネスチャンスとも言えます。
この辺りを埋めるプロジェクトは今後需要が高まっていくだろうなと思います。
最後に
実際に触ってみて大きく2つのリスクがあると感じました。
- コンプライアンス的なリスク
トラストレスという理想がDAppsの大きな特徴だと説明しました。非中央集権なシステムを提供することは企業のコンプライアンス的にとても難しい問題です。
検閲や規制が出来ないということは、そのサービス上で起こったあらゆる不都合に対して保証も対応も出来ないということです。まともな(特に日本の)企業が本当に非中央集権なサービスを提供できるイメージが湧きません。 -
エンジニアリング的なリスク
スマートコントラクトは一度デプロイしたら二度と修正はできません。
そのため、脆弱性対策が重要になってきます。簡単なコントラクトなら数百行程度なので、安全なコードを書くことは出来ますが、ある程度の規模のものを作ろうとすると千行は超えると思います。The DAOの事件ではコントラクトの脆弱性により数十億円が盗まれました。
プログラマーならわかると思いますが、バグが存在してはならない数千行規模のプログラムを書くというのはかなり怖いものがあります。
いくつか解決方法は提案されていますが、スタートアップ的な小さく出して素早く修正という方法は取れないというハードルがあります。
世の中に普及するためにはまだまだ超えなければならないハードルが多く存在します。もちろん一般ユーザのリテラシーや慣れなどのカルチャー的な側面も重要です。
そのためビジネスシーンの利用までにはまだまだ遠いと感じています。
まずはゲームやメディアなどのコンテンツ系から徐々に普及していくだろうなというのが正直なところです。
もちろん技術の発展は速いので今後の動向が楽しみです。
プライベートでDAppsをリリースしました。DApps入門用にどうぞ。
それでは。
注意
- 本記事は投資を推奨するためのものではありません。