Cosmos SDKをちゃんと知る その1

Takuya Fujita
Oct 25, 2019 · 14 min read

Cosmos SDKを用いた、チュートリアルに関する記事を書いてきましたが、チュートリアルだけをやっても、なかなか理解が進まなかったと思います。

この記事は、チュートリアルに入りコードを書く前に、まずCosmos SDKとはそもそもどういう意図で作られたものなのか、またそれらの構造がどうなっているのかを確認することを目的としています。
本記事は、主に公式のドキュメントを翻訳したものになりますが、ホワイトペーパーのように回りくどくポジショントークをしている節があるので、そこは割愛しながら説明していきます。
Ethereumとの比較が多いため、Ethereumに比べてここが良い!という話が多いです。Ether界隈の人怒らないで。。

Cosmos SDKについてサッと理解し、開発の一助となれれば幸いです。
ではまずはCosmos SDKとは何かについて話をしていきます。

本記事は 2019/12/22 時点の情報を参照しています。

第1章 SDKの紹介

・Cosmos SDKとは?

Cosmos SDKとは、パブリックなPoS(Proof of Stake)、およびPoA(Proof of Authority)チェーンを構築するためのオープンソースフレームワークであり、Cosmos SDKを用いて構築されたチェーンは一般的に application-specific blockchains(アプリ専用チェーン)と呼ばれます。

Cosmos SDKが作られた目的は、インターオペラビリティ を持つブロックチェーンをゼロから簡単に作成できるようにするためです。(今現在、インターオペラビリティ を可能にするIBCというモジュールは開発中ですが、今後IBCはCosmos SDKにデフォで組み込まれ、簡単に他のチェーンと繋ぐことができるようになる予定です。テストコードが最近公開されたばかり。)

Cosmos SDKは様々なモジュールが組み合わさることで成り立つ仕様で、それぞれのモジュールはほとんどオープンソースとなっています。そのため開発者はすぐにそのモジュールを用いてブロックチェーンの開発を始めることが可能で、自分でCosmos SDKの一モジュールを作成し、すでにあるモジュールと組み合わせることで簡単にチェーンを作成することができるようになります。

・アプリケーション専用チェーンとは?
今日現在、ブロックチェーンの世界においてアプリを作ろうとする場合、Ethereum上のスマートコントラクトを用いてDapps等を作成するのが一般的です。これらには勿論優れた使用例が存在しますが、開発における柔軟性や、統治性、管理という点で制限されることもあります。

アプリ専用チェーンは、スマコンを用いたアプリ,Dappsとは根本的に違う開発手法となります。単一のアプリケーションを運用するためにカスタマイズされた専用 のブロックチェーンを作るわけです。開発者側はアプリを最適化するために必要な設計をチェーンのレベルから、自由に行うことができます。それにより、優れた統治性、セキュリティ、パフォーマンスが実現できるようになっています。(もちろん、Dappsと違いそのチェーンを運用するためのバリデータを用意したり、そのウォレット,BlockExplorerを考慮する必要が出てくるので、一長一短です。)

・なぜCosmos-SDKを使うのか
Cosmos-SDKを使ってチェーンを立ち上げるべき理由をいくつか挙げます。

一つ目は、コンセンサスエンジンであるTendermint Coreが現存する中で最も(そして唯一の)成熟したコンセンサスエンジンであることです。業界で広く使用されているコンセンサスエンジンであり、Proof-of-Stakeシステムを構築するためのスタンダードである(と主張しています)。

二つ目は、SDK自体がオープンソースであり、モジュール単位で構築できるように設計されている点です。モジュール単位で管理することによって、エコシステムが成長するにつれて、複雑な分散プラットフォームを構築することが容易になると語られています。

三つ目は、SDKはCapability-based securityにインスパイアされており、長年の取り組みとして知られています。これらにより、Cosmos SDKはブロックチェーンを構築するための非常に安全な環境となっています。

最も重要なことは、Cosmos SDKがすでに使用されており、すでに多くのアプリチェーンを構築していることです。 例として、Cosmos Hub、IRIS Hub、Binance Chain、Terra、Linoで用いられています。 以下からエコシステム内プロジェクトを確認できます。

第二章 アプリケーション専用ブロックチェーン

第一章でも話しましたが、この章では、アプリ専用チェーンとは何か、また開発者がスマコンを書くのではなく、ブロックチェーン自体を構築するための理由を説明していきます。

アプリとしてブロックチェーン自体を構築するというのは、フルノードクライアント、ライトクライアント、およびノードと相互作用するために必要な全てのインターフェイス(CLI,RESTなど)を構築することを意味します。

以下がアプリチェーンの簡単な概略図です。
ノードを作成するためには、アプリケーション部分であるStatemachineが必要であり、そこはCosmos SDKを用いて構築します。ブロックチェーン自体に必要なConsensus,Networkingの部分はCosmos-SDKの中にあるTendermint Coreの部分が担ってくれる形となっています。

・スマートコントラクトの欠点を考える
Ethereumのスマコンが革新的であったことを認めながら、これらスマコンは、ICOなど1回限りのイベントには非常に適しているが、複雑な分散プラットフォームの構築には不十分であると述べています。以下にその理由をあげます。

1.スマコンは通常、VM(仮想マシン)が解釈できる特定の言語で開発されています。(EVMだとsolidity) これらの言語はしばしば未熟であり、本質的にVMの制約を受けることになります。

2.スマコンを利用する場合、どうしてもアプリがEVM(仮想マシン)のスペックに依存します。例えば、開発者はコードの自動実行を実装できず、EVMのアカウントベースのシステムに制限されることなどが例にあげられており、柔軟性に欠けることが示唆されています。

3.スマコンは全て同じVM(仮想マシン)上で実行されます。これはその上で動くアプリケーション同士でパフォーマンスを違いに制限し、リソースを奪い合うことになっている。(みんながEthereumを使うことでgas代が高騰することなどのことであると思われる)

4.またEthereum2.0で予定されているシャーディングの場合、ステートマシンが複数に分割されるため、それぞれのシャードのVMでやりとりをする必要があり、ステートマシンから実装されたアプリ専用チェーンと比較してパフォーマンスが制限されることが考えられます。

5.分散型アプリケーションは、多様なプレイヤーを含むエコシステムとなりうるはずであり、その分散型アプリが汎用のVMブロックチェーン上構築されている場合、それらのアプリ内のプレイヤーの主権(影響を及ぼせる範囲)が限られます。究極、基盤となるブロックチェーンのガバナンスにとって変わられ、アプリにバグがあった場合でも、それをどうにかできる方法はないに等しいです。

アプリ専用チェーンは、これらの欠点に対処するように設計されています。

・アプリ専用チェーンの恩恵
柔軟性(Flexibility)
アプリ専用チェーンは開発者に対して、最大限の柔軟性を提供します。
いかに説明を先ほどの課題と対応づけながら述べていきます。

  1. Cosmos SDKを用いたチェーンでは、通常、ステートマシンがABCIとよばれるインターフェイスを介して、基礎となるコンセンサスエンジン(主にTendermint)に接続されます。このインターフェイスは任意のプログラミング言語で書くことができるため、開発者は好みの言語でステートマシンを構築可能です。
  2. 開発者は、複数のフレームワークの中から選択して、ステートマシンを構築することができます。現在最も多く使用されているのはCosmos SDKですが、他にも存在しています。(例: lotion, Weaveなど) Cosmos SDKとWeaveはGo言語,LotionはJavascriptで開発可能であり、それぞれ使用したい言語に応じて選ばれることが多いです。
  3. 開発者はアプリ専用チェーンのコンセンサスエンジンを交換できるようになります。現在、Tendermintのみが本番環境に対応していますが、将来的には他のエンジンが登場する予定です。
  4. フレームワークとコンセンサスエンジンが決まっても、開発者はまだまだ自由に調整できる部分があります。バリデータの数とトランザクションスループット、安全性と非同期の可用性などのあらゆるトレードオフや、ストレージ、UTXO形式なのかアカウント形式なのか、DBなのかIAVLツリーなのかという様々な設計の選択肢を自由に選ぶことができます。
  5. 開発者はコードの自動実行を実装することができます。Cosmos SDKでは各ブロックの最初と最後でトリガーを用意することができます。アプリ専用チェーンの場合、アプリで使用したい暗号化のライブラリが、基盤のチェーンや環境に制限されることなく自由に使うことができます。

    以上のようにアプリ専用チェーンは開発者に対して柔軟性を提供します。コミュニティが成長するにつれ、各分野の開発が進み、開発者により多くのオプション、柔軟性が提供されるでしょう。

パフォーマンス
以下に、パフォーマンスに関するアプリ専用チェーンの利点を述べます。

1. アプリ専用チェーンの開発者は、Tendermint BFTなど斬新なコンセンサスエンジンでチェーンを動かすことができ、Proof-of-Workと比較すると、スループットが大幅に向上します。

2. アプリ専用チェーンは単一のアプリのみを操作するため、アプリは他のアプリと計算、およびストレージを競合しません。これはスマコンが計算とストレージをめぐって競合する、VMブロックチェーンとは異なります。

3. VMチェーンが、効率的なコンセンサスアルゴリズムを持つアプリベースのシャーディングを用意したとしても、そのアプリのパフォーマンスは、アプリがVMで動く以上、VMによって制限されることになります。実際、スループットに制限を与える主な用意んはステートマシンであり、トランザクションをVM上で解釈する必要があるため、トランザクション処理のための計算量が大幅に増加します。

セキュリティ
セキュリティに関して定量化して考慮することは難しいですが、以下にセキュリティという観点でアプリ専用チェーンの利点を述べます。

  1. 開発者はアプリ専用チェーンを構築する際にGo言語などの実績のある言語を利用することができます。これは、多く未熟なスマートコントラクトプログラミング言語とは対照的です。
  2. (先程も述べたように)開発者は基盤となるVMの暗号化機能制限されることはなく、 十分に監査された暗号化ライブラリを扱うことが可能になります。
  3. 開発者はVMの潜在的なバグや悪用可能なメカニズム(The DAO事件のことかと思われる)を心配する必要がなく、アプリのセキュリティについて考慮することが簡単になります。

統治性(Sovereignty)
アプリ専用チェーンの主な利点の1つが、統治性です。分散型アプリケーションはユーザー、開発者、サードパーティサービスなど、多くのプレイヤーにより形成されるエコシステムです。

VMチェーン上でアプリを構築している場合、チェーンにバグがあったり、または新しい機能が必要であっても、アプリケーションのコミュニティにはコードをアップグレードする権利がほとんどありません。基盤となるVMチェーンのコミュニティがバグの修正や新機能の追加を拒否した場合、何も怒らないことになります。

これらの問題は、アプリケーションのガバナンスとネットワーク(ブロックチェーン自体)のガバナンスが一致していないことです。これはアプリ専用チェーンの登場により解決されます。アプリ専用チェーンは単一のアプリケーションを扱うことに特化しているため、アプリケーションのコミュニティはチェーン全体を完全に制御できます。これにより、バグが発見された場合、コミュニティが立ち往生することはなく、コミュニティの発展方法を自由に選択できるのです。

なかなか長い文章や同じ内容だらけで読みにくかったかもしれませんが、以上が、Cosmos SDKとはなんなのか、またアプリ専用チェーンを利用する意義とはどいうものなのかという説明でした。次回は、Cosmos SDKがどういう構造になっていてどういった意図で設計されているのかの話をしていきます。ではまた!

その2へ!

fressetsお知らせ

fressetsは積極的に採用を行っています!詳細は下記のリンクからご確認下さい。
Link: https://fressets.com/careers/careers-416/
Link: https://fressets.com/careers/careers-0/

HashHubお知らせ

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント
詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Takuya Fujita

Written by

GBEC Tech Blog

This Blog is for all Blockchain Engineer

More From Medium

More on Hashhub from GBEC Tech Blog

More on Hashhub from GBEC Tech Blog

Cosmos SDKでHello World ! その2

More on Blockchain from GBEC Tech Blog

More on Blockchain from GBEC Tech Blog

Cosmos SDKでHello World ! その1

More on Hashhub from GBEC Tech Blog

More on Hashhub from GBEC Tech Blog

Cosmos SDKをちゃんと知る その2

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade