Cosmos SDK完全に理解した。
概要
とあるコミュニティ上でエコシステムを作成したいと考え、Cosmos SDKに行きつきました。まずはアーキテクチャについての理解を深めようと学習を始めたので、ここでアウトプットしていきます。この記事ではアーキテクチャについて解説するだけで、ノードの立ち上げなど実践を通した解説は行いません。
※読者の理解を重視しているため、適切ではない表現になっている可能性がありますがご了承ください。
Cosmos SDKとは
簡単にいえばCosmosSDKはTendermintベースのアプリケーションブロックチェーンを作成するためのフレームワークです。この説明だとよく分かりませんよね。詳しく順を追って理解していきましょう。このSDKは二つのレイヤーに分かれています。次でそれらについて解説していきます。
・Tendermint
一つ目のレイヤーであるTendermintとはコンセンサスエンジンと外部ノードとの通信プロトコル(ABCI)によって構成されるブロックチェーンクライアントです。CosmosSDKを使用せずとも、この最小のノードでBitcoinのようなブロックチェーンを作成することも可能ですが、Ethereumのようにスマコンを動かすことができません。そこで必要なのが次のモジュールです。
Tendermintのアーキテクチャについて
CometBFT(コンセンサスエンジン)
Comet BFTはコンセンサスアルゴリズムを搭載したエンジンです。PoSやPoAなどのコンセンサスアルゴリズムをここで動かし、検証や合意形成を行います。かつてはTendermint coreというコンセンサスエンジンが使用されていましたが、現在はTendermint coreからフォークしたこちらが使用されています。
ABCI(Application BlockChain Interface)
ABCIはgRPCという通信プロトコルを用いてP2P通信を行う機能を指します。ここで受け取ったトランザクションやメッセージをTendermint Coreや、次で解説するState Machineに渡しています。
・ABCI Application(State Machine)
二つ目はCosmosSDKでモジュール(スマコンのようなもの)を実行することができるレイヤーです。これはEVM(Ethereum Virtual Machine)のようなもので、プログラムを実行する場合に使用されます。EVMならSolidityという言語で記述されたプログラムが実行可能ですが、CosmosSDKはGoという言語を使用して作成されている為、Goを使用したプログラムが実行可能です。
また、このState MachineレイヤーにCosmWasm(WebAssembly)やEthermint(Solidity)などのモジュールを組み込むことで、実行できるスマコンの言語を選択することができます。
チャートでアーキテクチャを表現
CosmosSDKは以上のようなモジュールを組み合わせたフレームワークです。
本題から少し逸れますが、EthermintなどのABCI Applicationも存在し、本質的にEVM互換なチェーンを作成することもできます。EVM互換なのでMetamaskなどのウォレットでアセットを扱うことも可能ですので、スケーラビリティを保ちながら従来型のスマコンも使用できます。
Cosmosを取り巻くアーキテクチャはとても興味深い😳
Discussion