【6/28まで】Bybit登録&$100入金で6000円が貰える!詳細はこちら!

Tendermint(テンダーミント)とは?取引承認の仕組みを初心者向けに解説!

目次

Tendermint(テンダーミント)とは?

Tendermint(テンダーミント)とは、取引承認の仕組み「コンセンサスアルゴリズム」の1つです。

ビットコインの「Proof of Work」やイーサリアムの「Proof of Stake」が、その他のコンセンサスアルゴリズムの代表として挙げられます。

出典:Tendermint 公式サイト

厳密には「Tendermint」という名称は企業名であり、Tendermint社が主に「Tendermint Core」と「Application Blockchain Interface」の2つのサービスを開発・提供しています。

Tendermint(テンダーミント)とは?
Tendermintの主な2つの構成要素
  • Tendermint Core:コンセンサスアルゴリズム
  • ABCI:アプリとTendermint Coreを繋ぐ役割
さとう

Tedermintには、次の3つのメリットがあります。

メリット①:取引の確定が早い

Tendermint(テンダーミント)の1つ目のメリットは、ブロックの確定(ファイナリティ)までが非常に早いことです。

Tendermintのメリット:ファイナリティまでが早い
さとう

まずは一般的なブロックチェーンのブロックの確定までの流れ、必要な時間についてご紹介します。

一般的にブロックチェーンでは、取引が発生してブロックが確定するまでに次のような流れで進みます。

  • 取引の生成
  • 取引の検証
  • ブロックの生成
  • ブロックの検証
  • ブロックの承認
  • ブロックの確定

例えばビットコインは、ブロックの承認までに10分程度かかります。

ビットコインのコンセンサスアルゴリズム「Proof of Work」では、膨大な計算作業を費やすことで、計算処理の競争に勝った1つのノードを決める必要があるからです。

Tendermintは取引の承認者(バリデーター)を交代で決める仕組み(ラウンドロビン方式)を取っており、ブロックの承認作業がずっと早く終わります。

そして、ビットコインは長い時間をかけてブロックの承認が終わっても、一般的にこれだけではまた入出金の処理結果が口座に反映されることはありません。

ビットコインのブロックチェーンは承認された直後はブロック承認結果が無効になる可能性があり、確定とみなせるほど十分に無効になる確率が低くなるのは、数ブロック分先になるからです。

cryptocurrency-time-to-withdraw
さとう

何ブロック先で確定とみなすかは取引所によって異なります。入金を反映させてから無効になると取引所で補填が必要になることが考えられるため、十分確率が低くなるまで確定を避けます。

一方、Tendermintは後述の独自の合意形成の仕組みを採用しており、後でブロックが無効にならないため、ブロックの承認後は即時でブロックが確定(ファイナリティ)処理されるようになっています。

結果として、Tendermintは秒間で1万件もの取引処理ができるようになっており、Ethereumが10件~15件/s程度となると、非常に早いことが分かります。

出典:Blockchain comparison overview

Fast Finality

With Tendermint Core, a transaction is immediately finalized once its included in a block. No need to wait for confirmations.

tendermint.com

メリット②:ビザンチン将軍問題に耐性あり

Tendermint(テンダーミント)の2つ目のメリットは、ビザンチン将軍問題の対策を取っていることです。

Tendermintのメリット:ビザンチン将軍問題に耐性がある

ビザンチン将軍問題が仮に発生しても問題なく機能する仕組みを、ビザンチン・フォールト・トレラント(Byzantine Fault Tolerance, BFT)耐性があると言います。

例えばビットコインでは、悪意を持って取引処理の結果を2つに分岐(フォーク)させることができます。

しかし、最も長いブロックチェーンが正規のチェーンであると判断されるため、少数のノードがフォークさせようとしても既存の長いチェーンを上回ることはできません。

さとう

正規チェーンが伸びれば伸びるほど、悪意を持ってフォークさせた方が採用される確率はゼロに収束しますが、決してゼロにはなりません。

このように、ビットコインのブロックチェーンはビザンチン将軍問題に耐性があるものの、完全な合意形成ができている訳ではなく、BFTが完全にあるとは言い切れません。

Tendermint Coreでは、生成されたブロックに対して2/3以上の票が集まると確定されたとみなすことで、ブロック生成・承認後に即時で確定させることができます。

1/3まではバリデーターに悪意を持ったビザンチンノードが潜んでいても機能するため、BFTは十分あります。

ノードの数はTendermintを導入しているブロックチェーンの方針次第ですが、100以上あることが一般的のため、ビザンチン将軍問題により機能しない確率は非常に低いです。

Byzantine-Fault Tolerant

Tendermint Core tolerates up to ⅓ of your machines failing arbitrarily. This includes explicitly malicious behaviour.

tendermint.com

メリット③:ABICによるTendermintの活用

Tendermint(テンダーミント)の3つ目のメリットは、「ABCI」によりあらゆるアプリケーションの取引処理でTendermint Coreを活用できることです。

Tendermintのコンセンサスアルゴリズムである「Tendermint Core」は、Application Block Chain Interface(ABCI)を介することにより、任意のプログラミング言語で開発されたアプリケーションに簡単に活用できます。

Tendermintのメリット:ABCI
さとう

Tendermintは使いやすく、理解しやすく、高性能なため、ABCIを介して幅広い分散アプリケーションに役立つように設計されています。

The application interface, called the Application BlockChain Interface (ABCI), enables the transactions to be processed in any programming language.

docs.tendermint.com “What is Tendermint

Tendermint Coreの取引処理の仕組み

Tendermint Coreの取引承認の流れについて、以下に沿って詳しくご紹介します。

さとう

以下の文献を参照して作成しています。

Buchman, Ethan ”Tendermint: Byzantine Fault Tolerance in the Age of Blockchains

Tendermint Coreの取引処理の全体像

Tendermint Coreでは、次の流れで取引承認が行われます。

  • Propose(ブロック生成)
  • Prevote(1回目の投票)
  • Precommit(2回目の投票)
  • Commit(ブロックの承認・確定)

ラウンドロビン方式で順番が回ってきたバリデーターは「Proposer」となり、ブロックを生成します。

生成されたブロックに対して他のバリデーターがPrevoteと呼ばれる1回目の投票を行い、承認する場合は「Prevote」、否認する場合は「Prevote Nil」のメッセージを全バリデーターに送信します。

各バリデーターが受け取った「Prevote」メッセージが全体の2/3以上のとき、各バリデータはそれぞれ「Precommit」を行います。

さとう

Precommitが2/3以上集まったとき、提案されたブロックはCommitとなり、承認・即時確定されます。

仮に5人のA~Eのバリデーターで取引承認を実行する場合、1人の悪意を持ったバリデーターBが紛れ込んでいても、1/3以下しか占めていないため、問題なく機能します。

仮にBが全体に「Prevote Nil」のメッセージを送信しても、各バリデーターが受け取った「Prevote」のメッセージは4/5となり2/3より大きいため、「Precommit」となります。

結果として全体が「Precommit」になるため、ブロックは問題なく承認・確定されます。

Tendermint Coreの「Prevote-the-Lock」

Tendermint Coreには、「Prevote-the-Lock」と呼ばれる安全性(Safety)を担保する機能があります。

※ブロックチェーン安全性(Safety):誤った取引を承認しないこと

さとう

Tendermintでは、バリデータノードの故障等で2/3以上の投票が集まらなった場合、次のラウンドに移動し別のブロックが提案されます。

最初のブロックをXとして、下の画像のようにA~Cの3人が投票を行った結果、AとBが「Precommit」に至らなかったため、次のラウンドに移行したとします。

Tendermintのprevote-the-lockとは

このとき、CはすでにブロックXにPrecommitしているため、新しいブロックYにはPrevoteできなくなっています。(Prevote-the-Lock

ブロックチェーンは1つのブロックに対して合意形成を行っていくのが前提となっており、複数のブロックが承認される可能性を残しておくと、二重支払いのリスクが発生するからです。

Tendermint Coreの「Unlock-on-Polka」

Tendermint Coreには、「Unlock-on-Polka」と呼ばれる活動性(Liveness)を担保する機能があります。

※ブロックチェーン活動性(Liveness):システムが停止しないこと

さとう

「Unlock-on-Polka」により、Tendermintの活動性を保証するために「Prevote-the-Lock」を解除できることがあります。

生成されたブロックXに対して、AとBが「Precommit」を行いましたが、CとDが「Precommit Nil」に至ったため、今回のラウンドではCommitされなかったケースを考えます。

このとき、Aが実は悪意を持ったビザンチンノードであり、次のラウンドではPrevoteをした後にすぐオフラインとなり、Precommitを行いませんでした。

Tendermintのunlock-on-polkaとは

Bは「Prevote-the-Lock」により、ブロックXにロックされているためBにはPrecommitができず、CとDは今回のラウンドではPrecommitを行っていたため、2/4のみがPrecommitで今回のラウンドもブロックはCommitされません。

さとう

このとき、BはブロックXにロックされ、CとDはブロックYにロックされるため、全員がロックされて機能が停止してしまいます。(活動性)

AがPrevoteだけ行ったのは、Prevoteを行い3/4がPrevoteとなれば、CとDはPrecommitすることになり、AがオフラインになりPrecommitしなければ、CとDをYにロックして次のラウンドに移動することができるからです。

このとき、「Unlock-on-Polka」によりBがブロックXのロックから解除され、ブロックYにPrevote・Precommitができるようになります。

条件は、2/3以上のPrevoteが集まったことを示す「Polka」と呼ばれる状況になっていることです。

※厳密には前回のラウンドよりPrevoteが大きいPolka

Polka上ではロックが解錠される(Unlock-on-Polka)ため、Bが次のラウンドで参加し次のラウンドで問題なくブロックYがCommitされ、承認・確定となる訳です。

さとう

Tendermint Coreが、投票をPrevoteとPrecommitの二段階に分けている理由もここにあります。

Precommitがあることで、最終のPrecommitの前段階として全体の合意形成の度合いを様子見することができます。

2/3以上がPrevoteしている状態「Polka」というのは、最終投票ではなくてもそのブロックに十分な妥当性があることを示すことになります。

全員が1つのブロックに向かって合意形成していける状態を示すため、Bのロックを解除するという訳です。

さとう

仮にPrevoteがなかった場合、Bを投票に参加させても問題ないブロック提案であるかどうかを確認する機会がありませんね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次