CosmosJapanのブログ

Cosmosについてガチ解説していくブログです

アプリケーション固有のブロックチェーンが必要な理由

この記事は、「Why application-specific blockchains make sense 」の翻訳です。zaq1tomoさんに翻訳していただいたものを、udonが一部編集して掲載いたしました。

f:id:udoncryptocurrency:20180516183705j:plain

開発者は、Cosmosを利用することで、簡単に相互運用可能(interoperable)でスケーラブルなアプリケーション固有のブロックチェーン(application-specific blockchain)を開発することができます。

アプリケーション固有のブロックチェーンとはどのようなもので、そしてなぜ分散型アプリケーションをアプリケーション固有のブロックチェーンとして開発する必要があるのでしょうか?

アプリケーション固有のブロックチェーンとは?

現在ある分散型アプリケーションのほとんどは、Ethereumをはじめとする既存のブロックチェーンの仮想マシン上(Virtual-machine)で開発されています。

これは、既存のブロックチェーンを利用することが、長期にわたり分散型のアプリケーションを開発する最も簡単で実用的な方法だったからです。

以降、この既存のブロックチェーンのことを仮想マシンブロックチェーン(Virtual-machine blockchain)と呼びます。

既存のブロックチェーンアーキテクチャ f:id:udoncryptocurrency:20180516183716j:plain

TendermintとCosmosでは、分散型アプリケーションを開発する別の方法を提案しています。

Cosmosでは、仮想マシンブロックチェーン上に分散型アプリケーションを構築する代わりに、アプリケーション固有のブロックチェーンを使用することで、簡単に分散型アプリケーションの開発をすることができます。

ブロックチェーンベースのCosmos-SDKアーキテクチャ f:id:udoncryptocurrency:20180516183713j:plain

これまではブロックチェーンを構築することが非常に難しかったため、アプリケーション固有のブロックチェーンが普及することはありませんでしたが、TendermintとCosmos-SDKを使用することで、Bitcoinのような既存のブロックチェーンをフォークしなければならなかった人も、いくつかのモジュールをコーディングするのと同じくらい簡単に、ブロックチェーンを構築することができます。

詳細についてはこちらの記事を御覧ください。

アプリケーション固有のブロックチェーンとは何か知ったところで、多くの場合、仮想マシンブロックチェーン上ではなく、アプリケーション固有のブロックチェーンとして分散型アプリケーションを開発することが必要な理由を理解していきましょう。

パフォーマンス

上記で説明したように、ブロックチェーンは、ネットワーキング、コンセンサス、アプリケーションという3つのレイヤーに分けられます。

ネットワークとコンセンサスレイヤーを実装しているTendermint コンセンサスエンジンでは、秒間数千ものトランザクションを処理できるため、開発のボトルネックとなるのはアプリケーションレイヤーです。

既存のブロックチェーンアーキテクチャ f:id:udoncryptocurrency:20180516183710j:plain

Cosmosでは、アプリケーションに必要なトランザクションタイプと状態遷移関数を定義するだけで分散型アプリケーションを開発することができるため、アプリケーション開発のパフォーマンスを大幅に向上させることができるでしょう。

セキュリティ

仮想マシンブロックチェーンは、それ自体がとても複雑なことから、攻撃可能性のある範囲がとても広く、その複雑さが、DAOBug・Parity Bug#1・Parity Bug#2など、多くのバグの原因となり得ます。

しかし、アプリケーション固有のブロックチェーンでは、アプリケーションと仮想マシン間の動作について心配する必要はなく、アプリケーション内のさまざまな部分がどのように相互作用するかを考慮するだけで済み、セキュリティに関する解析が、より簡単になります。

またCosmos-SDKでは、object-capabilitiesの概念に基づいて、セキュリティに対する別のアプローチを提供しています。

どんなフレームワークであっても、開発者がアプリケーションにバグを導入するのを完全に防ぐことはできないため、最終的には、開発者自身が悪いことが何も起こらないよう責任をとる必要があるでしょう。

そこで、アプリケーション固有のブロックチェーンでは、何か悪いことが起こった場合に備えて、多くのリカバリーオプションを提供しています。

詳細は、次のセクションを参照してください。

ガバナンス

アプリケーション固有のブロックチェーンは、パブリックチェーン(Proof-Of-Stake)もしくは、プライベートチェーン(Proof-Of-Authority)として開発することができますが、どちらの場合であっても、バリデーターはアプリケーション固有のトランザクションのみを検証するため、ガバナンスはアプリケーションごとに分割され、他のアプリケーションと重複することはありません。

アプリケーションに問題があった場合、ガバナンスはエコシステム内の他のアプリケーションを妨げることなく問題を修正することができます。

一方、仮想マシンブロックチェーン上に構築された分散型アプリケーションで問題が発生した場合、根本となるチェーンのガバナンスが同意しないときは、なにも修正することができません。

例えば、最近あったPatiry multisigのハッキングのように、Ethereum上に構築された分散アプリケーションがハッキングされて資金が盗まれても、Ethereumコミュニティが望まない場合、その損害を修復することはできません。

柔軟性

仮想マシンブロックチェーンの上にアプリケーションを構築する開発者は、基礎となるブロックチェーンに多くの制限を受けます。例えば、Ethereum上にアプリケーションを構築しようとする開発者は、SolinityやSerpentのような限られたプログラミング言語から開発言語を選択しなければいけません。

さらに、開発者は仮想マシン自体によっても制限を受けます。 例えば、ほとんどの仮想マシンの場合、あらゆる状態遷移はエンドユーザー自身がトランザクションを送信することによってのみ実行でき、自動的な状態遷移を許しません。

仮想マシンブロックチェーンを利用する場合、これらの制約が開発者にとって開発の妨げとなる可能性があるでしょう。

一方、アプリケーション固有のブロックチェーンでは、より柔軟に開発を行うことができます。

Cosmosでは、Tendermint上にABCIアプリケーションとしてブロックチェーンを構築することで、好みのプログラミング言語を選択することができ、スクラッチからアプリケーションを構築することは大変なため、Cosmos-SDKが提供されています。

今のところ、Golangでのみ利用可能ですが、将来的には他の言語のSDKも登場する予定です。

LotionJSのようなフレームワークを使えば、開発者はJavaScriptでTendermintブロックチェーンアプリケーションを構築することができます。

また、アプリケーション固有のブロックチェーンでは自動的な状態遷移を行うことができます。

ABCIには、BeginBlockとEndBlockという2つのメッセージがあり、BeginBlock() 関数およびEndBlock() 関数は、各ブロックの最初と最後に自動的に実行されます。

開発者は、計算コストが高すぎるロジックや無限ループが含まれないように注意する必要がありますが、適切に実行された場合、これは非常に有用な機能になるでしょう。

仮想マシン(VM)ブロックチェーンの強力なユースケース

アプリケーション固有のブロックチェーンが提供するいくつかの利点を示してきましたが、これは仮想マシンブロックチェーン上に分散型アプリケーションを構築する必要がないことを意味するわけではありません。

各フレームワークには長所と短所があり、開発者はそれぞれのユースケースにとって最適なものを選択する必要があるでしょう。

仮想マシンブロックチェーン上に構築することが適切ないくつかのケースは、以下のようなものがあります。

  • 小規模・低頻度で使用するアプリケーションや、プロトタイプの場合。開発者は、仮想マシンを使用することで分散型アプリケーションを数分で実装することができるため、アプリケーションがあまり複雑でない場合や、Proof of Conceptとして意味があるときには、仮想マシンが非常に実用的で使い勝手が良く便利です。

  • アプリケーションのためにバリデーターセットを用意したくない場合。仮想マシンブロックチェーンがコンセンサス機構を提供してくれるため、アプリケーション開発者はネットワークの展開について心配する必要はありません。 Cosmosでは将来的に共用のバリデーターセットをサポートし、バリデーターを用意する必要なく、アプリケーションをデプロイできるようにする予定です。

  • エンドユーザーが独自の用途のためにアプリケーションにカスタムロジックを追加する必要がある場合。

まとめ

アプリケーション固有のブロックチェーンは構築することが難しかったため、これまで注目されることはありませんでしたが、Cosmosを用いることで、簡単に、相互運用可能でスケーラブルなアプリケーション固有のブロックチェーンを開発することが可能になりました。

Cosmos-SDKを使って簡単に分散型アプリケーションを構築することができるようになった今日、何があなたを待ってるでしょうか。