Tendermint
- 6. solutions for scalability problem
Layer2
SideChains
Plasma, Cosmos
State Channels
Raiden, Lightning
Layer1
Sharding
Ethereum Sharding, Ziliqa
Consensusによる解決
Casper, Tendermint, …
とにかくメインチェーンで
やること減らそう!
Tx処理スピードをあげよう!
- 31. Tendermint vs Public Blockchain
Bitcoin、Ethereumは同期的に動くコンセンサスモデル
ブロック生成時間という固定された時間毎にコンセンサスを取るという同期性(この中で伝
播、検証、ナンスの発見を行う)
Tendermintは部分的非同期
最低限のタイムアウトはあるもののバリデータの2/3以上が投票すればコンセンサスが取ら
れるという意味で固定されていない
同期的なコンセンサスアルゴリズムではチェーンのフォークがおきつづ
ける
固定値が存在するせいで同時に複数のコンセンサスが取られてしまう
ブロックチェーン
Bitcoin, Ethereumなどのパブリックな
ブロックチェーンにおけるコンセンサス
- 32. Tendermint vs Permitted Blockchain
参加するバリデータに制限をかけるのも1つのBFTを達成する方法
制限をかけるとするとそのアプリケーションへの参加者は、バリデータ
を暗黙的に信用する必要が生まれる。
BFTでスケールするアルゴリズムとしてPBFTが挙げられるが、
permitted なコンセンサスであることは大きな違い
ブロックチェーン
HyperLedger Fabricのような permitted なブ
ロックチェーンのコンセンサス
- 33. The Problem of Tendermint
? 決定論的なPoSのためブロック提案者、投票者は常に計算
で導くことが可能であり、攻撃の対象となる。
? 提案者へのDDoSによってチェーン全体を止めることがで
きる
Sentry Node Architectureで対応予定
Sentry Node Architecture : ノードのIPアドレスを非公開に
? Nothing at Stake 問題(PoS共通)
投票にデポジットした資金の引き出しに一定時間かかることで対処
Editor's Notes
- #5: ブロックの中に含めることのできるTxの制限やブロック生成の時間的な制約などから、ネットワークの参加者が増え、トランザクション数が増えるほどさばくことのできないトランザクションの量は増えてしまう。
ブロックチェーンはさばけるトランザクションの数を増やすためにスケール問題を解決しなければいけない
- #10: BFT ベースのPoSによるコンセンサスを行うことで1秒間数千のトランザクションさばくことができる
POSという言葉は書く
ブロック生成後即座にファイナリティが得られる
これはビットコインの6個のブロック生成を待ってから得られるのと比較できる
そして同期的な振る舞いをするbitcoinなどのコンセンサスアルゴリズムとは違い、部分的に同期的な振る舞いを行うよう設計されているため1/3以下の検証ノードに異常がある場合でも機能させることができ、合意を形成できる。
このため意見が別れることはなく常にファイナリィが得られる。
また同時にコミットされるブロックがないアルゴリズム設計のためフォークが起きない
これから説明するABCIによって簡単にセキュアで高パフォーマンスな独自ブロックチェーンを構築することが可能です。
- #13: 幾つかのプロトコルで構成されています
message protocol
blockchain protocol
- #19: DeliverTxは非同期に動きますが順序は担保されるらしい
- BeginBlockリクエスト
ブロック更新前に現在の最新ブロックの状態や情報を元に初期化するためのリクエスト
これによってTendermintの最新状態からいつでもApplicationをリスタートすることができる
EndBlock リクエスト
ブロックコミットが行われたあとの事後処理を要求する。
(このタイミングでバリデータの更新をおこなうこともできる)
- #25: ブロックコミットのフロー
ステーク量に応じて選出されたバリデータは新しいブロックの提案を行う
ブロックが正しいと検証できた場合、提案を行う
提案を行う際に提案するバリデータ自身のプライベートキーを用いて署名し、何らかの障害が起きたときに署名したバリデータが責任をおう
選出されなかったバリデータは提案にたいして投票を行い、自分の秘密鍵で署名
- #26: ブロックコミットのフロー
ステーク量に応じて選出されたバリデータは新しいブロックの提案を行う
ブロックが正しいと検証できた場合、提案を行う
提案を行う際に提案するバリデータ自身のプライベートキーを用いて署名し、何らかの障害が起きたときに署名したバリデータが責任をおう
選出されなかったバリデータは提案にたいして投票を行い、自分の秘密鍵で署名
- #27: ラウンドロビンのローテーションは决定论的に証明可能
- #28: 1/3までビザンチンを許容する理由
ビザンチン耐性がある
- #29: フォークしない理由
- #33: コンソーシアムやプライベート