ブロックチェーンを仮想通貨の送金だけでなく、非金融分野でも応用していこうとする動きが強くなってきています。
特に、従来のアプリケーションをブロックチェーンベースで構築していく分散型アプリケーション(Dapp)の開発が急ピッチで進められています。Dappはスマートコントラクトを活用することで機能しており、将来的には中心となる管理者の存在しないアプリケーションに発展するとして大きな期待を集めています。
このようなDappはイーサリアムを基盤に開発されることが多いですが、ネットワークで多くのDappを動かすためにはイーサリアム自体の処理速度を高め機能向上させていく必要があるのです。
そこで、当記事ではスマートコントラクトやDappとは何なのか、そしてDappが広く使われるために解決すべき課題点は何なのか、ということをお伝えしていきます。
スマートコントラクトとは
スマートコントラクトにはさまざまな定義が存在しますが、ブロックチェーン分野においては「決められたある条件を満たすと自動的に契約(コントラクト)を実行する」ということが記述されたコードのことを指すことが多いです。
スマートコントラクトにはよく自動販売機の例が出されます。決められた現金を入れ、決められたボタンを押すと、自動的にある特定の商品が出てきます。これが自動的に(スマートに)起こることが大切で、もし自動販売機の中に人が入っていてその人が商品を提供している場合はスマートコントラクトではありません。
このようにスマートコントラクト自体は日常にあふれていて、「自動販売機に150円を入れてボタンを押しコーラを手に入れる」といった他にも「アマゾンに月額400円の会費を支払うことでプライム会員になり、さまざまなサービスを受けることができる」とったこともスマートコントラクトに当てはまります。
また、仮想通貨の世界でスマートコントラクトを考えると広義にはビットコインでの決済もスマートコントラクトに分類されます。しかし、一般的には上述したように「あるイベント(出来事)によってあるコントラクト(契約)が執行される」ことを記述したコードのことをスマートコントラクトと呼びます。
特にイーサリアムでは、EVMというバーチャルマシンがチューリング完全なコードを実行できるため、より柔軟かつ複雑にスマートコントラクトを実行することができるのです。
スマートコントラクトを活用できるかもしれないプロセスには以下のような特徴があげられます。
- そのプロセスに多くの仲介者が存在し複雑である
- 仲介者が多くの利益を得ている
- プロセスの透明性が重要
- トランザクションが自動的に実行される必要がある
- プロセス中で改善やごまかし、詐欺などが起こりやすい
分散型アプリケーション(Dapp)とは
上記のスマートコントラクトとブロックチェーンなどの分散型台帳技術を活用したアプリケーションを分散型アプリケーション(Dapps, Decentralized Apps)と呼びます。
従来のアプリケーションはひとつのサーバーや主体に管理されることで効率化を図っていました。このように集中的に管理することで安価かつ高速に動作するので、エンドユーザー側にとってもうれしいはずです。
しかし、Dappと比較するとこのような集中型アプリケーションは以下のような問題が浮かび上がります。
- 主体の単一障害点
- 不透明性
つまり、管理している主体を信用・信頼していることで成り立っているのです。
一方、Dappの場合は分散型台帳技術により、ネットワーク全体に広がるサーバーとコミュニティにより共同的に管理していくのが特徴的です。
Dappではブロックチェーン等の技術でネットワークで分散化して管理しているので基本的に単一障害点はありません。例えば、個人情報などの重要な情報や資産を預けるリスクを排除できます。また、管理者が得るはずだった利益分もコストカットすることが可能です。
また、オープンソースであり誰でも過去のデータを参照することができ、過去のデータを改ざんすることは不可能であるため透明性は非常に高いと言えます。最初のDappはビットコインであると言われており上記の特徴を満たしていることが分かります。
このようにDappでは従来のアプリケーションの欠点である単一障害や不透明性を改善し、互いに信用していないような(トラストレスな)環境でも機能しているのです。しかし、技術が発展途上の現時点では効率化や安全性がトレードオフになってしまっています。
上述したようにイーサリアムでは柔軟にスマートコントラクトを実行することができるので、代表的な分散型アプリケーションプラットフォームとして機能しています。要するにイーサリアムを土台とすることで、その上にさまざまなアプリケーションを構築していくことができ、それらのDappと呼んでいるのです。
具体的なDappの活用事例についてはこちらの記事で紹介しているのであわせてご覧ください。
参考:将来有望なDapps(分散型アプリケーション)の活用事例6選
それではDappの課題点について見ていきましょう。
Dappsの課題
Dappsの主な課題点としては以下の5つがあげられます。
- スマートコントラクトの実行速度
- 手数料
- オラクル
- 安全性
- プライバシー
ユーザビリティや開発環境などの面で改善すべき細かい部分は他にも多くありますが、分散型アプリケーションが広く使われていくためには上記の5つのことを解決していく必要があります。
スマートコントラクトの実行速度
ネットワーク側の問題になりますが、ブロックチェーンベースのネットワークで多くのスマートコントラクトを実行することは現状、速度的に大きな問題があります。
ネットワークはP2Pのノードで構成されており、分散化されたそれぞれのノードの処理速度にはばらつきがあります。ある管理者によって管理されたネットワークであれば処理速度の早いノードのみで構成し、ネットワーク全体の処理速度を上げていくことが可能です。
しかし、オープンで分散化されたネットワークでは、それぞれのノードごとの処理速度にどうしても差が出てしまい低スペックなノードがネットワーク全体の処理速度を低下させてしまうのです。
さらに、ネットワーク内でたくさんのスマートコントラクトが実行されればされるほど、このようなノードの計算能力のばらつきがハイスペックなノードへの集中化を促してしまいます。
世界のインフラとなるワールドコンピューターを目指しているイーサリアムにとっては将来的にとても多くのスマートコントラクトを同時に処理する必要があるため、上記のような実行速度の問題には対処していかなければなりません。
そこでイーサリアムではさまざまな解決策が提案されており、トランザクションの処理速度を上げるために開発が進められています。代表的な解決策には以下のようなものがあげられます。
- シャーディング(Sharding):ノード群で全体のトランザクションを役割分担して処理していくアイデア
- プラズマ(Plasma):たくさんのブロックチェーンを階層的に接続して、それぞれのブロックチェーンで処理していくアイデア
- Truebit:オフチェーンで第三者がスマートコントラクトの処理をするアイデア
手数料(gas)
イーサリアムでトランザクションを実行するためには手数料(gas)が必要になります。ユーザー数が増え、それに伴いトランザクションが増えるほど多くのgasが必要になり、普通の送金ですら多くの手数料を支払わなくては行えなくなってきているのです。
また、複雑なスマートコントラクトになるほど実行するために必要なgasも多くなってくるのでユーザーにとっては手数料の増大も大きな問題です。
この手数料増大の問題はスケーラビリティ問題に大きく関係しており、多くのユーザーが低コストで使えるようにネットワークをいかにスケールさせていくかが重要となります。
また、EOSではユーザーが手数料を支払わずにDappを利用できるようにすることを目指しています。
参考:チェックしておくべき分散型アプリケーションプラットフォーム「EOS」
オラクル
スマートコントラクトの実行とは、事前に決めておいた「あるイベント」がある条件を満たすことで自動的に実行するということです。
より汎用的なDAppを構築していくためには、このイベントがネットワーク内部のことだけでなく、外部のデータに由来していることが必要となってきます。
外部のデータをノードが参照することは簡単です。しかし、ネットワークのどのノードが参照するのか、全てのノードが参照するのか、この外部データは本当に正しい情報なのか、そしてこの外部データが「正しい」ということをネットワーク内部でどうやって合意形成を取るのか、などのさまざまな問題が出てきてしまいます。
この問題を解決するのがオラクル(oracle)というシステムです。(データベースのオラクルとは別ものです)つまり、理想的なオラクルは正確な外部データを効率的にネットワーク内に取り込み、そのデータに対して合意形成をとるシステムとなります。
現状、オラクルはよく予測市場分野のサービスで開発されています。例えば、株価はこれから上がるのか、このサッカーの試合はどちらが勝つのか、といったギャンブルです。このような外部データはオラクルが必要になります。
具体的なオラクルのサービスやプロジェクトとしては、Oraclize、イーサリアム上でのAugurやGnosis、ILP(インターレジャープロトコル)上でリップルが開発しているCodius(コーディアス)、byteball上でのサービス、ビットコインのHivemindなどさまざまなサービスが開拓を行なっています。
参考:ブロックチェーンとインターネットの間でデータの橋渡しをするオラクルとは
プライバシー保護
トランザクションの秘匿化などのプライバシー保護も必要になってくるはずです。イーサリアムではzk-SNARKというプライバシー保護技術を導入しユーザーのプライバシーを保護できるようにしています。
しかし現状、zk-SNARKを利用したトランザクションでは大量の手数料(gas)が必要になるので改善されていかなければなりません。
参考:イーサリアムに導入されたプライバシー保護技術「zk-SNARK」とは
安全性
スマートコントラクトでは安全性も解決すべき大きな課題です。Solidityで書かれたコードに何らかのミスがあったり、バグが起きていたりすると大規模な損害につながる可能性があります。例えば、The DAOやParity Multisig Walletなどの事例では数十億円〜数百億円規模のETHに影響が出ました。
このようにスマートコントラクトの設計ミスは元に戻すことが難しい場合があるので、テストやレビューを徹底的に行う必要があります。
また、ヴィタリックはより安全性の高いスマートコントラクトを作るためにviperという言語を推奨しています。
実際に、プライベートネットワークにおいて簡単なDappを実装する手順については以下の記事で解説しています。ブラウザ上で見れるペットショップのようなDappでMetaMaskを介してETH払いを行うことができます。