2019年3月、ブロックチェーンの分散型ネットワークCosmos Networkのメインネットがローンチされました。本記事ではCosmosの要素技術のひとつであり、単体ではブロックチェーンアプリケーションの開発に、ブロックチェーンフレームワークCosmos SDKと組み合わせるとブロックチェーンの開発にも使える「Tendermint」について解説します。
用語の整理
CosmosやTendermintについて掘り下げていくと、組織やシステム、技術に関する用語が出てきて、中には似たような名称があり、用途によって説明のされ方が異なるため戸惑う人もいるかもしれません。Tendermintの説明に入る前に、CosmosやTendermintにまつわる用語の概要と、それぞれがどのように関係しているのかを整理します。
関連組織
- Tendermint Inc.(登録名 All in Bits Inc.)
Jae KwonとEthan Buchmanが2014年に創業したサンフランシスコに拠点を置くソフトウェア企業で、両氏が考案した合意形成手法Tendermintを実装しました。現在は、Tendermint のほか、Interchain Foundationから委託を受けてCosmos Network、Cosmos SDK、関連プロトコルの研究開発を行っています。 - Interchain Foundation
仮想通貨先進国スイスのクリプトバレー、ツーク市に拠点を置く非営利団体で、2016年に創設されました。オープンープンで分散型のネットワーク、中でもCosmos Networkの研究開発を促進しています。Tendermint Inc.の創業者で現CEOのJae Kwonが会長を、Tendermint Inc. の共同創業者で元CTOのEthan Buchmanが副会長を務めています。
ネットワーク
- Cosmos Network
Tendermint Inc.が開発を行うブロックチェーンの分散型ネットワークで、ブロックチェーンの相互運用を可能にします。Cosmos Networkはハブと呼ばれるブロックチェーンと、ハブにブロックチェーンをつなぐゾーンから成り立っています。同じハブにつながったゾーンのブロックチェーンは相互運用が可能です。(画像: Cosmosネットワークにおけるハブとゾーン(Cosmosの紹介動画「Cosmos, Internet of Blockchains」より))
※ Cosmos Networkについて詳しくは本ブログの記事「ブロックチェーン同士をつなぐサービスCosmos」を参考にしてください。 - Cosmos Hub
Cosmos HubはCosmos Networkにおける最初のハブで、Cosmos SDKとTendermintを使用し、PoSブロックチェーンとして実装されています。
ソフトウェア
- Tendermintと二つの主要構成要素(Tendermint Core、ABCI)
Tendermintは、ノードのネットワーキングと合意形成を扱うソフトウェアで、ブロックチェーンを使ったアプリケーションを作るのに使えるだけでなく、ブロックチェーンの合意形成エンジンとしても使えます。Tendermintにはビザンチン将軍問題に対する耐性(BFT、Byzantine Fault Tolerance)があり、アプリケーションを実行するマシンの三分の一が故障してもアプリケーションが機能することを保証します。このことから、TendermintはTendermint BFTと呼ばれることもあります。Tendermintの主要な構成要素は、(1)アプリケーションとTendermintがやりとりするためのインターフェイスABCI(Application Blockchain Interface)と、(2)合意形成エンジンTendermint Coreのふたつです。 - Cosmos SDK
Cosmos SDKはブロックチェーンを作るためのフレームワークで、さまざまなモジュールからり立っていて、合意形成にはTendermintを採用しています。IBC Protocol(Inter Blockchain Communication Protocol)を扱うモジュールを使うと、Cosmos Networkで他のブロックチェーンと相互運用できるようになります。
Tendermintとは
Tendermint社はTendermintについて以下のように説明しています。
Tendermint is software for securely and consistently replicating an application on many machines.
(筆者訳: Tendermintは、安全かつ状態に一貫性のある形で多くのマシンにアプリケーションを複製するためのソフトウェアです。)
Tendermintのドキュメントより
難解な説明ですが、「複数のマシンで実行することを想定したブロックチェーンベースの分散型アプリケーションを作るためのソフトウェア」というとわかりやすくなるでしょうか。また、Tendermintはブロックチェーンの合意形成機能を提供するモジュールとしても使用できることから、合意形成エンジンと説明されることもあります。
従来、分散型アプリケーションのノードのネットワーキング、ノードが行う合意形成、さらにその上で実行されるアプリケーションは密に関連していましたが、Tendermintではネットワーキングと合意形成が「Tendermint Core」としてコンポーネント化され、アプリケーションと切り離されました。TendermintとアプリケーションはABCIというインターフェイスを介してやりとりするので、開発者はABCIのみを意識してアプリケーションの開発に専念できます。開発言語は選びません。プログラミング一般でモジュールやレイヤーの結合を疎にし、開発やメンテナンスをしやすくするのと同様のアプローチといえます。
画像: Tendermintの構成(Cosmosウェブサイトより、赤字は筆者追記)
Tendermint CoreではPoSで合意形成が行われ、ブロックチェーンにブロックをつなぐかどうかは、バリデーターと呼ばれるノードの投票で決定します。バリデーターごとの票の重みは1バリデーター1票ではなく、それぞれのバリデーターがネットワークに預け入れているトークンの量によって重みづけされます。
※ PoSについて詳しくは本ブログの記事「Proof of Workの欠点を克服させた合意形成アルゴリズム、プルーフ・オブ・ステーク」を参考にしてください。
Tendermint Coreの合意形成の具体的なステップは次の通りです。バリデーターのひとつがブロックを提案し、これに対してバリデーターが投票を行います。三分の二を超える票を得て、続いて三分の二を超えるバリデーターがブロックをプリコミットすると、ブロックチェーン上でブロックがコミットされます。規定の投票時間内でブロックの承認が行われるため、確率的ファイナリティを持つPoWブロックチェーンよりも一般に高速にブロックとそれに含まれるトランザクションを処理できます。
画像: 合意形成の流れ(Tendermintのドキュメントより、赤字は筆者追記)
また、Tendermint Coreにはビザンチン将軍問題に対する耐性があります。ビザンチン将軍問題とは、「相互に通信し合うP2Pネットワーク上で、通信そのものや個々のノードが故障、または故意に偽の情報を伝達する可能性がある場合でも、全体として正しい合意が形成できるかを問う問題」で、Tendermintはノードの三分の一までであれば故障を許容し、全体として正しい合意形成を行います。
※ ビザンチン将軍問題について詳しくは本ブログの記事「ネットワークでの正しい合意形成を問う問題、ビザンチン将軍問題」を参考にしてください。
Tendermint Coreの合意形成やビザンチン将軍問題に対する耐性について詳しくはTendermintの共同創業者で元CTOのEthan Buchman氏の論文で読むことができます。また、実際にTendermintを使ってみたいという人は、Tendermintのウェブサイトで公開されているリファレンスを参考にするとよいでしょう。
- Tendermint: Byzantine Fault Tolerance in the Age of Blockchains by Ethan Buchman
- Reference | Tendermint
TendermintとCosmos
Tendermintは単体でも利用できますが、ブロックチェーンフレームワークCosmos SDKのコンポーネントとしてブロックチェーンの構築に使うこともできます。Tendermintによると、60億ドル以上の資産がCosmos SDKを使って構築されたパブリックブロックチェーンで管理されているといいます。一例として、大手仮想通貨取引所のひとつBinanceは、2019年にCosmos SDKとTendermintで独自のBinance Chainを構築し、Binance Chain上で分散型取引所Binance DEXを稼働させました。
Binance Chain is built on Tendermint & Cosmos SDK – Saturn Network Blog
ここでCosmos Networkでのブロックチェーン間の相互運用性についても触れておきましょう。Tendermintはあくまで合意形成を扱うブロックチェーンアプリケーションエンジンで、Cosmos SDKとTendermintを使ってブロックチェーンを作っただけでは他のブロックチェーンと相互運用はできません。相互運用するには、Cosmos Networkに当該ブロックチェーンのゾーンを作り、ゾーンを通してハブにIBCコネクションをはります。これでハブにつながったその他のゾーンに自動的にアクセスできるようになり、他のブロックチェーンとの相互運用が可能になるというわけです。
また、Cosmos Networkに参加するにはTendermintは必須ではなく、Tendermint同様、高速にトランザクションの承認がなされるブロックチェーンであれば同様にしてCosmos Networkのハブに接続できます。確率的にトランザクションが承認されるPoWのブロックチェーンでも少し手間がかかりますがペグゾーンと呼ばれるプロキシチェーンを利用してCosmos Networkのハブに接続できます。
画像: Cosmos Networkのハブとゾーン(Cosmosウェブサイトより、赤字は筆者追記)
課題と今後
Tendermintによってノードのネットワーキングや合意形成といった扱いが難しい処理を意識することなく分散型アプリケーションを作れるようになるのはもちろん、Cosmos SDKと組み合わせることでブロックチェーンの構築が容易になり、さらにそのブロックチェーンをCosmos Networkで他のブロックチェーンとつなげられるのはとても魅力的です。
ただ、ブロックチェーンの相互運用の分野はCosmosの独壇場ではなく、CosmosにはPolkadotという強力なライバルがいます。PolkadotもCosmos同様、異なるブロックチェーン同士をつなぎ、BitcoinやEthereumといったブロックチェーンが抱える課題を解決しようとしています。Polkadotは、Ethereumの共同設立者Gavin Wood氏が考案したプロトコルで、同氏が創設したWeb3 Foundationが開発しています。
※ Polkadotについて詳しくは、本ブログの記事「分散型ウェブを目指すプロジェクトPolkadot」を参考にしてください。
また、2020年2月にTendermintのCEOのKwon氏とCosmosの迷走が報じられたことは知っておいた方がよいでしょう。Kwon氏がVirgoという新しいプロジェクトに熱心になり、Cosmos Networkで重要な役割を果たすIBCの開発をおざなりにするなどし、社内が敵対的な雰囲気になったようです。
What Is Going On With Jae Kwon and Cosmos? – CoinDesk
Tendermintの今後については2020年のロードマップがTendermintのブログで公開されています。ロードマップの中では、Tendermint Coreのコントリビューターを増やす、BFT合意形成の分野でリーダーの地位を保ちCosmosのフルバージョンを実現するための新機能と修正をリリースする、Tendermint Coreを使うプロジェクトのために開発およびユーザー体験を改善する、Tendermint Coreに統合可能な技術を模索するといった目標が挙げられています。
Tendermint 2020 Roadmap – Tendermint – Medium
おわりに
2014年というブロックチェーンの黎明期に、BFTに関する研究をPoSブロックチェーンに適用し、誕生したTendermintは、その後Cosmosというより大きな構想の重要な構成要素となりました。Tendermint社がブロックチェーンの要素をコンポーネント化し、ブロックチェーンや分散型アプリケーションを開発する敷居を下げ、さらにブロックチェーンの相互運用を実現しようとしていることは、ブロックチェーンの未来を切り開く取り組みとして大いに評価できます。
2019年にCosmos Networkのメインネットがリリースされ、1年が経ちました。今後TendermintやCosmos SDKを使ったさまざまなプロジェクトが出てきて、さらに、相互運用によってTendermint社の目指す「ブロックチェーンのインターネット」が実現されることが期待されます。