分散型アプリケーションはもっと広まる。。。多分

Ethereumに話を移しましょう。

Ethereumは2015年に開始された暗号通貨であり、独自のブロックチェーン技術を使用して構築されています。 Bitcoinブロックチェーンよりも一般化されたプロトコルで、目指しているのは単にブロックチェーンの固有トークンの作成と記録だけではありません。EthereumのWhitepaperを見て見ましょう。

“Ethereum の目的は、分散型アプリケーションのための代替プロトコルを創造し、 大規模な分散型アプリケーションにとって、われわれが非常に役立つだろうと信じるところの、数々の修正を加え提供することであります。 ここにおいて、アプリの高速開発にかかる時間、小規模かつ滅多に使われないアプリに対するセキュリティ、他アプリ間の効率のよい相互作用を可能とすることが重要視されます。 Ethereum は、基本的に究極の抽象基盤層となるものの構築により、以上の目的を果たします。 究極の抽象基盤層とは、埋め込み型チューリング完全なプログラム言語を伴う ブロックチェーンであり、 これにより、所有・トランザクションの形式・状態遷移関数に関する、任意の独自ルールを創造することのできる機能を備えた smart contracts と 分散型アプリ をだれでも記述することができます。

簡単に言うと、Ethereumはトランザクションベースのステートマシンです。「始まりのステート(Genesis State)」から始めて、トランザクションを段階的に実行していくことで「最新のステート」になります。 そして「最新ステート」は、Ethereumネットワークにて、標準として受け入れているものです。

BitcoinはBitcoinブロックチェーンの固有トークンですが、EtherはEthereumブロックチェーンの固有トークンです。

Bitcoin同様、Ethereumブロックチェーンには、トランザクションのようなイベントログが含まれています。 ユーザーはこのログを使用してEtherを他の人に送信し、マイナーはこれらのトランザクションを検証して報酬をもらいます。

それだけにとどまりません。Ethereumブロックチェーンは、プログラムから生成されるどのようなイベント情報でも保存することができます。

なぜこれが可能かを理解するために、Ethereumブロックチェーンの基礎となる、いくつかのコンセプトを見てみましょう。

Ethereumの基礎

まずアカウントに関して説明します。アカウントには、EOA(Externally Owned Account)とコントラクトアカウントの2種類があります。そしてそれぞれのアカウントには、Etherの残高を記録できます。

この2つのアカウントの主な違いは、コントラクトアカウントにはコードが紐付けられているのに対し、EOAには紐付けられていないという点です。したがってコントラクトアカウントでは、コードを使ってあらゆるタイプの処理を実行することができます。

次にトランザクションと呼ばれる、EOAから別のアカウントに送信されるメッセージを格納する、電子署名されたデータがあります。トランザクションがコントラクトアカウントに送信されると、コントラクトアカウントに関連付けられたコードが各ノードの「Ethereum仮想マシン(EVM)」によって実行されます。

そしてメッセージです。メッセージを使って、コントラクトアカウントは互いを呼び出すことができます。コントラクトアカウントが別のコントラクトアカウントにメッセージを送信すると、そのアカウントに関連付けられたコードが実行されます。基本的にメッセージはトランザクションのようなものですが、EOAではなくコントラクトアカウントによって生成されます。

続いてEthereumの仮想マシン(EVM)に関して簡単に説明します。 Bitcoinブロックチェーンにおいては、プロトコルがトランザクションの検証方法を決めている事を私たちは学びました。 これに対しEthereumの場合、ネットワークに参加しているすべてのノードがEVMを実行して、この検証プロセスに参加します。

あるEOAが複数のトランザクションを発行したとします。これらがブロックに蓄積された後、各ノードはブロックに蓄積されているトランザクションを実行し、そしてEVM内でこれらのトランザクションに紐付けられたコードを実行します。

全てのノードがコードを実行し、結果の値を蓄積するのが重要です。おそらく思われている通り、この方法だとコンピュータ処理が非常に多くなる傾向にあります。 このコストを補填し、ノード(またはマイナー)がこれらの処理を実行するインセンティブを与えるために、マイナーはこれらのトランザクションを実行するための手数料をもらいます。 この手数料は「ガス」と呼ばれます。 これはBitcoinでのトランザクションにおいて、ブロックを生成したマイナーに手数料が行く仕組みと似ています。


(これは簡略化された図です。)

最後に、アプリケーションやスマートコントラクトを作るための、Ethereum独自のプログラミング言語があります。 Bitcoinとは違い、Ethereumの言語(JavaScriptに似たSolidityや、Pythonに似たSerpent)は機械語には似ていません。これはJavascriptやPythonに慣れているプログラマにとって大きなメリットです。さらにEthereumの言語は「チューリング完全」であるため、より高度な処理を実行することができます。

特筆すべき点はEthereumが、複雑な処理を実行するためのフレームワークを、ブロックチェーンの世界にもたらしたことです。前述した通りEthereumの言語は、「チューリング完全」かつ「ステートフル」であり、そして開発者フレンドリーです。そして送金のような単純処理だけでなく、複雑な処理を効率的かつ安全に、そして管理者不在で実行することができるようになりました。これにより開発者は、事実上どのようなアプリケーションでも作れるようになりました。

Ethereumで簡単に構築できるアプリケーションの例として、 「スマートコントラクト」が挙げられます。スマートコントラクトとは「Aが起こったらBをする」という内容を、コードとして記述した分散型契約です。 このコントラクトにはEtherやデータを保存することができ、他のアカウントやスマートコントラクトにEtherを送ることができます。賃貸や雇用といった通常の契約と同様に、個人や団体との契約で使用されますが、通常の契約とは異なりブロックチェーン上で自動的に実行されるため、相手が契約を履行するか心配せずに契約を結べるのが特徴です。

もう1つの例として、「分散型組織」が挙げられます。分散型組織とは、スマートコントラクトというコード化されたルールに基づいて運営される組織のことです。人間によって管理される、ヒエラルキーを前提とした組織ではなく、ルールが全てスマートコントラクトに記載され、ブロックチェーンによって自動管理される組織になります。

この様にEthereumは、ブロックチェーン上にアプリケーションを作ることを容易にしました。しかしながらそれでも、暗号通貨に精通している人ですら、分散型のサービスを使っている人はまだほとんどいません。なぜでしょう?

これに関して考えるために、先ほどBitcoinの箇所で挙げた3つの課題をEthereumに当てはめてみましょう。

1.言語の複雑さ・ツールの不足

上述した通り、Ethereumには表現力豊かなプログラミング言語と強力な開発者ツールがあり、この問題を解決しています。

2.ネットワーク効果構築の難しさ

Ethereumの有無にかかわらず、十分なネットワーク効果を構築するのはとても難しいです。 前述の通り、強力なネットワークを持っている既存事業を置き換えるのは、非常に難易度が高いのです。 例えば分散型のAirbnbサービスを始めたとしても、両サイド、つまりユーザーとホストの両方に参加してもらえるよう、積極的に働きかけなければいけないことに、変わりはありません。

3.「分散」だけでは10倍改善されない

前述した通り、何らかの点において既存サービスと比べて10倍優れていない限り、ユーザーは分散型サービスへ乗り換えてくれません。そしてEthereumを用いて、分散型アプリケーションを作るのが簡単になったというだけで「10倍」良くなるとは残念ながら言えません。

それでは、もう可能性はないのでしょうか?そんな事はありません。

Ethereumはネットワーク効果の問題や10倍問題を直接解決しませんが、以前まで不可能だった、新しいタイプのアプリケーションの構築を可能にしました。10倍改善するには、既存技術では出来なかったような、全く新しいアプリケーションを作り出すことです。Ethereumのスマートコントラクトを用いて、全く新しいものを作り出せると私は信じています。

おすすめの記事