Tendermint
概要
アルゴリズム
Tendermint-BFT
Tendermint には BFT に基づいた合意アルゴリズムが実装されている。
- Proposer から開始し各ノードが Pre-vote をブロードキャストする。
- 各ノードは他の
以上のノードから同じブロックの pre-vote メッセージを受信すると pre-commit をブロードキャストする。 - 受信できない場合、ノードは待機時間を延長し、
Proposer Election
Tendermint は Validator 集合からラウンドごとに Proposer を選択する。このアルゴリズムは、それぞの Validator が持つ票数 (voting power) で重み付けられた Round Robin アルゴリズムであり Proof of Stake の一種と言える。具体的な実装アルゴリズムは Priority Queue で要素を選択する方法と同じである。
選出アルゴリズム
基本的な選出方針は、ラウンドごとに各 Validator の Proposer Priority に Stake を加算してゆき、最も大きい Priority を持つ Validator を次のラウンドの Proposer とする。Proposer に選出されると Priority は最下位程度まで減算される。ラウンドロビン設計だが、ラウンドごとに Stake を累積してゆくことで Stake 保有量が多く長期間保有している Validator が高い頻度で選出される構造になっている。また実際には加算によってオーバーフローしないように正規化 (再スケーリング) を行っている。
ある Validator 集合
ラウンド
参照
- Tendermint 公式ドキュメント
- Yackolley Amoussou-Guenou, Antonella Del Pozzo, Maria Potop-Butucaru, and Sara Tucci-Piergiovanni, Dissecting Tendermint (2019)