こちらは、僕がブロックチェーンで最も注目している技術の一つCOSMOSのホワイトペーパーを日本語訳したものです。極力、技術の分からない人にも分かるように翻訳しています。参考にしてください。

 

Tendermintについて

このセクションでは、Temdermintのコンセンサスプロトコルについて、および、Tendermintを使ってアプリケーションを開発するためのインターフェイスの概要について説明します。詳細については、Appendixを参照すること

VALIDATORSとは?

よく知られたビザンチン障害耐性(BFT)のアルゴリズムにおいては、各ノードは完全に平等である。一方、Tendermintにおいては、各ノードには、ネガティブな投票権は与えられておらず、全てポジティブな投票権として規定されており、これをバリデーターと呼ぶ。各バリデーターは、ブロックへの著名をネットワークにブロードキャストすることによって、Tendermintの合意形成プロトコルに参加することになる。

各バリデーターの投票権は、初期段階ではジェネシス・ブロックによって規定され、次にTendermintを利用したアプリケーションが使用しているブロックチェーンのメカニズムによって変更されうる。例えば、プルーフ・オブ・ステイクを使っているCosmos Hubでは、投票権は、投票時に提供された投票権の担保としてのトークン量に応じて決められるように、各ブロックチェーンによって異なるのである。

注意点:一般的がBFTアルゴリズムにおける各ノードが平等である一方、Tendermintにおいては、各ノードは平等ではないため、各ノードのバリデーターとしての影響力について2/3や1/3という数値が表記されている場合、その値は投票権における端数を表しているのであって、バリデーターの数に関する端数を意味しているのではない点は注意しておくように。この場合、例えば、”>2/3″は、2/3以上と意味しており、”≧1/3″は、1/3以上を意味している。

Tendermintにおける合意形成

Tendermintのアルゴリズムは、DLS コンセンサスアルゴリズムから派生した部分的に同時進行型のBFTコンセンサスアルゴリズムである。また、Tendermintは、そのシンプルさ、高いパフォーマンス、そして、ブロックチェーンがフォークした場合でも過去の履歴を追跡可能にしている点でも優れていると言える。Tendermintにおける合意形成においては、バリデーターは既に特定されている必要があり、かつそのバリデーターの認証はバリデーターが保有するパブリックキーによって行われる。バリデーターは、一度に一つのブロックの合意形成を目指す。そして、そのブロックは一連(一定数)のトランザクションから構成されている。一つのブロックを合意形成するための投票は一定のラウンド数続けられる。1回のラウンドには、ラウンド・リーダー(もしくはプロポーザー)が立ち、新たなブロックをネットワークに提案する。そして、バリデーター達が投票を行い、その提案されたブロックを受け入れネットワークを更新するか、それを拒否し、次のラウンドに進む(別のラウンド・リーダーによる別のブロックの提案を受けるということ)。ラウンド・リーダー(もしくはプロポーザー)の選出方法は、既に順序付けされたバリデーター群の中から、各バリデーターの投票力に応じて決められる。そして、その投票力は、プルーフ・オブ・ステイクのアルゴリズムによって決まる。

Tendermintのセキュリティは、投票数が2/3を超えた場合とあるロッキング・メカニズムを適用したBFTアルゴリズムに由来する。この仕組みと共に以下の2点がその性質として内包されている。

  • 当然ながら1/3以上の投票数が生じた場合は、ビザンチン故障問題を生じる。つまり、2重使用の問題が発生する。
  • またこのようにブロックチェーンの更新の安全性を犯したバリデーターは、Tendermintのプロトコルでは特定することが可能であるから、相反するブロックに投票した事実や不正投票を行った場合も同様に特定することが可能である。これらは、全て、合意形成時に、必ずその事前にバリデーターを特定してからブロックチェーン更新の投票に移るためである

以上のような優れた点を有しつつ、Tendermintは、パフォーマンスにおいても大変素晴らしい実績を持っている。5大陸に配置されている7つのデータセンターを使用し、そこに合計64ノードを展開しベンチマークテストを実施した。下記のグラフがその結果である。64ノードで、1秒間に平均4,000件のトランザクションを処理している。データコミットの遅延は最大でも2秒間である。また、このネットワーク環境に対する負荷テストも実施しており、悪意的な投票をネットワークにブロードキャストしたり、一部のバリデーターを活動停止に追い込んだりしても、以下のグラフの成果を残せている点は注目に値する。

Figure of Tendermint throughput performance

 

LIGHT CLIENTSについて

Tendermintのコンセンサスアルゴリズムのメリットの一つは、ライトクライアントのセキュリティを単純化している点にあり、この点は、モバイル環境やIoTのユースケースにとって理想的な選択肢の一つになると考えている。例えば、Bitcoinのライトクライアントにおいては、ブロックヘッダーを常にブロックチェーンネットワークとシンクロする必要があり、そのシンクロするためにプルーフ・オブ・ワークのアルゴリズムに基づき、P2Pネットワーク上で常に見つける作業を実施しなければならない。一方、Tendermintにおいては、バリデーター群が既に特定されているため、不特定多数のノードを相手にする必要はなく、特定多数のバリデーターのステータスを確認し、最新のブロックステータスを決めるために 2/3を超えるプリコミットを証明すればよいので、ネットワーク負荷がかかりにくい。

また、このような簡潔なライトクライアントモデルは、別のブロックチェーン間のコミュニケーションを実現する上でも相性が良いと考えている。

PREVENTING ATTACKSについて

Tendermintは、P2Pネットワークに対する典型的な攻撃手法である、ロングレンジアタックや、Nothing-at-stake、2重使用や、センサーシップなどに対しても、未然防止の措置を講じることが可能なテクノロジーです。詳細に関しては、Appendixで説明していますが、こちらではその概要に触れておきます。

ABCIとは?

Tendermintのコンセンサス・アルゴリズムは、Tendermint Coreと呼ばれるプログラム上で実装されています。Tendermint Coreは、アプリケーションを無視して稼働することが可能な”コンセンサス・エンジン”といえるものであり、これは、決定論的にブラックボックス化されたアプリケーションを分散的に複製されたブロックチェーン上に展開可能にする技術です。Tendermint Coreと、ブロックチェーン上で動かすことを目的としたアプリケーションは、Application Blockchain Interface(ABCIと呼ぶ)を通じて接続されています。そして、そのABCIは、データモデルを複製する=ブロックチェーンと、ユーザー側の状態を管理するステートマシン=アプリケーションの境界線を定義するインタフェースとして機能しています。これによって、我々は、ある一つプロセス上で動いている一つのコンセンサス・エンジンが別のプロセスで動いているアプリケーションの状態を管理することができるようになります。ゆえに、ABCIは、プログラマが、自分の好きな言語でブロックチェーン・アプリケーションを作ることを可能にします。加えて、ABCIによって、アプリケーションを作っているプログラマは、下部構造のブロックチェーンスタックを簡単に別のものに置き換えることができる。

この点については、Bitcoinからの一つのアナロジーを導きだすことができる。Bitcoinは、参加しているノードが未使用のBitcoinの総数を常に監視しながら維持するというUnspent Transaction Output 型(=通称UTXO型)のデータベースである。もし、一人がBitcoinライクなシステムをABCI上に作りたい場合、

Tendermint Coreは以下の点を制御する

  • 各ノード間のブロックとそこに格納されているトランザクションをネットワークに共有すること
  • 標準的ないしは不変のトランザクション・オーダーを確立する、すなわちブロックチェーンそのものを確立する

一方、その上のABCI上で動くアプリケーションは、以下の点を制御することになる

  • UTXO型のデータベースを維持する
  • 暗号著名によるトランザクションの証明
  • トランザクションが存在していないはずの資金によって使われてしまう問題を防ぐ(二重使用問題の未然防止)
  • ユーザーが、UTXOデータベースを検索することを可能にする

つまるところ、Tendermintは、アプリケーションレイヤーとコンセンサスレイヤー間にとてもシンプルなAPIを提供することで、プログラマが、ブロックチェーンのアーキテクチャデザインを分解して使えるようにしているソフトウェアであるということである。

No.3に続く。

COSMOSのホワイトペーパー日本語訳- No.3 – Cosmosの概要