こんにちは、Gincoの永田(@nagatkaz116)です。
先日コンセンサスアルゴリズムにPoSを採用しているTezosとEnigmaの紹介記事を書きましたが、今回は第3弾でCosmosについて紹介したいと思います。 Cosmosはブロックチェーンのスケーラビリティ問題や相互運用性を解決する分散型プラットフォームであり、いわゆるクロスチェーンプロトコルです。 「Internet of Blockchain」をビジョンに掲げており、インターネットのように誰もがブロックチェーンの開発に参加することを目標としています。 そんなCosmosについて、以下説明していきたいと思います。
Cosmosについて
Cosmosの特徴
ずばり、キーワードは相互運用性とスケーラビリティです。 Cosmosは例えばTendermint(後述)のようなBFTコンセンサスアルゴリズムを採用しているブロックチェーンを接続することのできる、いわばブロックチェーンにおけるインターネットのような働きをします。 これは従来のブロックチェーンでは困難であったブロックチェーンをまたぐ相互運用を可能にするものです。 また、単一のブロックチェーンだと規模が大きくなるにつれて速度が落ちるなどのスケーラビリティ問題を抱えますが、Cosmosネットワークでは自由にブロックチェーンを追加することができます。
Cosmosネットワークの構造
Cosmosネットワークの中の最初のブロックチェーンをCosmos Hubと呼び、Atomというトークンがネーティブトークンとして存在します。 Cosmos SDKと呼ばれるツールが用意されており、誰でも自由にCosmosネットワークの中にブロックチェーンを開発することができます。 Cosmos Hub以外のブロックチェーンを接続する際には、CosmosネットワークにZoneを追加し、IBC(Inter-Blockchain Communication Protocol)によって中央集権的な取引所などを介さずにブロックチェーン間でのトークンのやりとりが可能です。
ネットワーク
Cosmosではテストネットの開発を細分化し、それぞれの開発が終了する度に部分的にテストネットを公開してきた経緯から、Gaia1000-9001までのテストネットが存在していました。 現在はgaiaシリーズのGaia9002が稼働しており、またGame of Stake(GoS)というテストネットが稼働予定です。
- Gaia9002 2018年11月30日に始動しました。 いわゆる普通のテストネットですが度々停止しています。
- Game of Stake このテストネットの目的はシステム設計やオペレーション設計の欠陥を特定することであり、参加者は定められたルールの範囲内でシステムに対して攻撃が可能です。 ステークを一番多く手に入れたプレイヤーが優勝者となり、賞金10,000 Atomを手にすることができます。 その後、順位に応じて総額300,000 Atomがプレイヤーに分配されます。 現在、参加は締め切られていますが、まだスタートはしていません。 具体的には、他のプレーヤーと共謀して別のプレーヤーのブロック生成を妨害したり、他のノードに偽の情報を流すことができます。 ただし、AWSやGCPの利用規約に違反する行為やソーシャルエンジニアリングなどの行為は禁止されています。
- コミュニティ発のテストネット 公式のテストネットは上記の2つですが、Gaia9002は度々停止してきた経緯からコミュニティの提案でgaia-9003を始動させようとしています。これは、まだ計画段階であり実際には動いていません。また、GoSの予行演習としてGenki1000-2000というテストネットが存在します。コミュニティの力を集結してできたという意味を込めてドラゴンボールの元気玉から命名されました。Genki-2000のエクスプローラーはこちらです。
Tendermint BFTベースのDelegated Proof-of-Stake
Cosmosのコンセンサスアルゴリズムは一言でいうと、Tendermint BFTベースのDPoSです。 が、これだけでは何のことか伝わらないと思うので、順番に説明したいと思います。
Tendermint
Tendermint[1]はCosmosチームが開発する汎用ブロックチェーンエンジンです。 ブロックチェーンの開発は従来相当な労力を必要としましたが、Tendermintによって開発者はアプリケーション層の開発に集中できるようになります。
順を追って説明すると、そもそもブロックチェーンは次の3つの層で構成されています。
- ネットワーク層(トランザクション伝搬)
- コンセンサス層(ブロック生成)
- アプリケーション層(トランザクション処理)
Tendermint以前は、ブロックチェーンを開発するということはこれら全ての層を開発することを意味しました。 しかし、作業量が膨大になることから、ビットコインのコードベースを複製したり、イーサリアムが開発されたりしました。 イーサリアムはスマートコントラクトを記述することで簡単にDAppsを開発することを可能にしましたが、ブロックチェーン固有の問題(スケーラビリティ、相互運用性)は解決していません。
Cosmosは、Tendermintによりブロックチェーンの開発を加速させ、なおかつスケーラビリティ問題や相互運用性といった従来のブロックチェーンの課題を解決するために開発されました。
ちなみに、TendermintではABCI(Application-BlockChain Interface)を通じてアプリケーション層とブロックチェーンエンジン(Tendermint Core)を接続します。 ブロックチェーン開発者はABCIに準拠するアプリケーション層を開発すればよく、ABCIは言語に依存しないことから好きな言語を用いてアプリケーション層の開発を行うことができます。 また、Tendermintは標準でIBCに対応しているので、Tendermintを使って開発されたブロックチェーンは全てCosmos Hubに接続することができます。
BFTベースのDelegated Proof-of-Stake
BFTとはByzantine Fault Toleranceの略であり、その名の通りビザンチン障害耐性のあるコンセンサスアルゴリズムを指します。 ブロック生成を行うノードのことをバリデーターと呼びますが、前提としてBFTではバリデーターの数は決められています。 ビザンチン将軍問題では、悪意を持ったバリデーターの数が全てのバリデーターの3分の1未満であればビザンチン障害耐性を持ちますが、BFTコンセンサスアルゴリズムではこの性質を用いて正しい合意形成を行います。
あるブロックを決定するプロセスは一回以上のラウンドから成り立ちます。 各ラウンドは3つのステップ(Propose、Prevote、Precommit)と2つの特別ステップ(Commit、NewHeight)からなり、次のように遷移します。
NewHeight -> (Propose -> Prevore -> Precommit)+ -> Commit
ここで、(Propose -> Prevote -> Precommit)
をラウンドと呼び、場合によっては複数回行われます(指定されたプロポーザーがオフラインであったり、Proposeされたブロックが有効でなかった場合)。
- Propose プロポーザーによってブロックの提案が行われます。どのバリデーターがプロポーザーに選出されるかはラウンドロビン方式を採用しています。つまり、ステーク量に比例した頻度で交代交代で選ばれるようになっており、誰がプロポーザーに選ばれるかは決定論的に求められます。
- Prevote 提案されたブロックに対して1回目の投票を行います。 バリデーターは送られてきたブロックに対して署名を行い、3分の2以上の投票が集まり次第、Precommitステップへ遷移します。 ちなみに、あるブロックに対して3分の2以上のPrevoteが集まることをPoLC(Proof-of-Lock-Change)と呼びます(polkaとも)。
- Precommit 1回目の投票で3分の2以上の投票が集まったブロックに対して2回目の投票を行います。 さらに3分の2以上の投票が集まればCommitステップへ遷移し、ブロックチェーンに取り込まれます。 ここで、あるブロックに対してPrecommitを行い可決されなかった場合、そのバリデーターはロックされ、そのブロックにしかPrecommitできなくなります。 後のラウンドでPoLCを受信した時に、ロックは解除され新しいブロックに対してPrecommitできるようになります。
バリデーターの数について
先述の通り、バリデーターの数はあらかじめ決まっています。 最初は、100からスタートし、毎年決まった割合で増えていき、最終的には300で落ち着く予定です。 バリデーターはそのステーク量を元に選出されます。
委任
Cosmosでは委任(delegate)の概念が存在し、自分のAtomを代表者に委任することができます。
Atom
Cosmos Hubのネーティブトークンであり、Cosmos Hubにおけるステーキングトークンとしての役割を担います。
Photon
AtomはCosmos Hubにおいてステークされることを目的としているため、Cosmos Hub以外のzoneで手数料として支払われたり送金されたりするべきではありません。 こうした理由からPhotonが導入され、Cosmos Hub以外のzoneで手数料として支払うことが可能であり、Atomよりも高い流動性をもつのが特徴です。 ちなみに、Cosmos HubにおいてもAtomの次に手数料トークンとしてホワイトリストに載っています。
バリデーターの収益
Cosmosではブロック生成者のことをバリデーターと呼びますが、その収益は3つあります。
- block provision ブロック生成の際に新規にAtomが生成され(インフレーション)、ブロック生成者に支払われます。 しかし、CosmosではAtomをステークすることのインセンティブ付が目的であるため、これを「報酬」とは呼んでいません。
- block reward ブロック生成の際に新規にPhotonが生成され(インフレーション)、これがブロック生成としての報酬として支払われます。
- fee ブロックが含むトランザクション手数料をブロック生成者が手にすることができます。
ハードスプーン
Ethereumなどの既存のブロックチェーンのアカウント残高を複製することでCosmos内に新しい仮想通貨を作ることをハードスプーンと呼ぶそうです。 例えば、Ethereum保有者がCosmosに移行できるように、そのアカウント残高をミラーすると、Ethereum Zoneにおいて新しく発行された仮想通貨を手数料トークンとして使用できます。 どのようにハードスプーンを行うかはAtom保有者が投票することができるようです。
結局バリデーターになるには何が必要か?
長々と説明させていただきましたが、報酬を得るには結局どうすれば良いかお話します。 次の3つの条件をクリアすれば晴れてバリデーターになることができます。
- ステーキング ステーク量の上位がバリデーターになることができます。 ここでいうステーク量とは自分の保有するAtomと委任されているAtomの合計です。
- ハードウェア 安定した電源やネットワーク、ファイアウォール、HSM、サーバーを備えたデータセンターが必要です。 HSMは安全な鍵の管理に必要です。
- ウェブサイト ウェブサイトを立ち上げ、フォーラムでバリデーターになる旨を伝えます。
まとめ
今回はCosmosの概要を説明しました。 公式のドキュメントをベースに説明しましたが、バリデーターチャットを見ていると、コミュニティが紆余曲折を経てコミュニティ発のテストネットを構築しようとしている様子を目撃することができて面白いと思います[2]。 現在進行形で開発が進んでおり今後も目が話せない通貨の一つだと思いますので、これをきっかけに興味を持っていただければ幸いです。
Tip us!
エンジニアチームのブログを書くモチベーションが上がります!