Cosmos SDKチュートリアルをやってみながらCosmos SDKとは何かについて

ブロックチェーンのインターオペラビリティ

ブロックチェーン同士を相互接続するプロジェクトとして、CosmosやPolkadotというものがあります。 これらはネットワーキングやコンセンサスアルゴリズムといった部分が共通化された部品として提供し、それをつかったブロックチェーン同士は相互にインタラクションできるようにするというプロジェクトです。

両者ともにTendermintというミドルウェア?を使っています。

Tendermint

Tendermintは「コンセンサスエンジン 」というくくりを自称しており、BitcoinやEthereumのような具体的なブロックチェーンではなくブロックチェーンを作るためのフレームワークのようなものです。

ノード同士を接続するネットワーキングや、コンセンサスアルゴリズムの部分をフレームワークにのせて新しいブロックチェーンを容易に作ることができます。 これまでのブロックチェーンの実装は、WebでいったらHTTPやTCPに関する部分を自分で実装する必要がありました。Tendermintを使うとTCPやらはOSに、HTTPはRuby on RailsのようなWAFにやってもらって自分はアプリケーションだけを書けばよい、みたいな世界になりそうです。

f:id:k5trismegistus:20190410182403p:plain

そのかわり、コンセンサスアルゴリズムなどはTendermint標準のものを使うことになります。 Tendermintについてより細かい説明は、次の記事を読むとよいです。

tech.mercari.com

EOSのように新しいパブリックなブロックチェーンを作るぞ!というものではなく、EthereumやEOSといった経済圏の核と連携できるサイドチェーンを作るために使うものといえるでしょう。

チェーン同士が共通のエンジンで動いていて相互にインタラクションできるようになる、というのはベンダー独自プロトコルからTCP/IPスタックへの以降のようなインパクトを持ちうるとは思います。 ブロックチェーンにおける共通プロトコルになるわけですから。(0xとか「金融プロトコル」ではない)

Cosmos SDKとPolkadot Substrate

Cosmos、Polkadot両プロジェクトともにブロックチェーンのSDKのようなものを用意しています。Cosmos SDKとSubstrateです。 Substrateは最近LayerXのZerochainにも使われています。

技術的にもいくつか違いはありますが、Cosmos SDKはGo、SubstrateはRustを使って開発を行います。 私はRustを触ったことがなかったので、Cosmos SDKのチュートリアルをやってみました。

チュートリアルの解説自体は他にもあるので、ここでは自分が重要だと思った点をまとめていきます。 チュートリアルをやってみた人の記事もご紹介します。

www.blockchainengineer.tokyo

Cosmos SDKの考え方

Cosmos SDKでは、アプリケーション=決定的なステートマシンというのを強調します。 アプリケーションはメッセージを受け取り自身の状態を変化させます。

この状態について同じネットワークに参加するノードで統一がとれるようになっているのが分散アプリケーションです。 後述するように、Cosmos SDKにおけるアプリケーションはチェーンの実装によるもので、Ethereumのように汎用チェーンにあとからコントラクトをデプロイするといったことはできません。

Cosmos SDKを使ってチェーンを作る

一応簡単に触ってみて、Cosmos SDKがどうなっているのかを体験してみました。

Cosmos SDKはモジュールというものを実装することによってチェーンを構築します。Ethereumでいえばモジュールが一つのコントラクトのようなものになっています。 モジュールは共通の構造をとっており、感覚としてはRails Engineみたいだなーと思いました。

モジュールの部品は以下のようになっています。

  • Keeper

永続化されたデータの読み書きを行います。

  • Msg

アプリケーションに渡るメッセージを定義します

  • Handler

Msgごとに定まった処理を実行し、Keeperを通してアプリケーションの状態を更新します。

  • Querier

アプリケーションの状態を読み取ります。

SDKにアカウントシステムやトークン残高管理といった汎用性の高いモジュールは存在しており、自分で実装せずとも利用することができます。 チュートリアルでは、インターオペラビリティに関する部分の解説はなく他のチェーンの情報をどう参照するのかはまだわかりません。 今後機会があればそこも見てみたいと思います。

Cosmos/Polkadot の世界観について

にしても、PoS型のアプリケーションスペシフィックなチェーンが並立して相互にやりとりする世界観っていうのはありえるのでしょうか。

EOSのような半中央集権的なチェーンで大資本を要求する代わりにリターンも巨額にするというアプローチやBitcoin/Ethereumのように単一で強いシェアを持つことでマイナーを集めるアプローチに対して、Cosmos/Polkadotはエコシステムを成り立たせる駆動力が弱そうだと言わざるを得ません。

Tendermintなブロックチェーンのノードになるには、EOSのBlockproducerになるのに必要な投資額は求められませんが、それ以上にリターンが少なくなるでしょう。 家庭に一台、意図してないけどノードがあるみたいな状況にでもしない限り、わざわざ小規模チェーンのためにノードをたてるとは考えにくいです。

常時通電の家電がノードになっているような状況になるのがありえる世界ではないかなと思います。

スマートメーターなんかはよさそうですし、テレビもあるかもしれません。VODサービスの支払いが暗号通貨建てでできて、著作権保護機能がブロックチェーンを利用しているとか?

そういうどうやってノードをたててもらうかということについて考えないと、CosmosもPolkadotも広まらないだろうなという気はします。


その他のブロックチェーン記事はこちら

www.k5trismegistus.me

www.k5trismegistus.me