年末の何気ないツイートが予想以上に波及して、錚々たるメンバーのブロックチェーンに関する議論が伺えました。議論の中心はブロックチェーンの分類です。とても参考になったのでまとめてみます。
bitFlyer加納さん、LayerX 福島さん、石田さん、極度信玄さん、フリーランスジャーナリスト星さん、志茂さん、ありがとうございました。
パブリック、コンソーシアム、プライベートなどの言葉が使われていますが、いまいち定義が曖昧であり認識の齟齬が生まれています。その定義を加納さんがうまくまとめてくださいました。
全ての議論はこのツイートにまとめられていますので参考にしてください。
本質的にブロックチェーンはノードの参加許可で分けることができると加納さんは述べています。福島さんもこの意見に賛成していました。現在よく使われているパブリック、プライベートの分類だと、パブリック = Permission-less、プライベート = Permissioned で分けることができます。コンソーシアムもプライベートに分類されます。
パブリック = Permission-less
プライベート = Permissioned
ただ、参加許可だけだと再度理解の齟齬が生まれるためレイヤー分類を行ってくださいました。
ツイートでの議論をまとめると下記でブロックチェーンを分類することができます。
ブロックチェーンは「コンセンサス・アルゴリズム(合意形成)=ノードの参加許可」「ノード(データ)へのアクセス」「ノードの参加人数」の3つの項目で分類できます。さらに、右の2項目で細かく分類できますが、これらはブロックチェーン特有の問題ではないので、左3項目の分類で十分だと考えられます。
この分類で現行のブロックチェーンを定義してみます。
例えばBitcoinだと下図で定義できます。Ethereumも同じように定義できます。
現状のLibraだと下図で定義できます。
HyperLedger Habricの場合はプロジェクトによりますが一般的に下図で定義できると考えます。
このように「コンセンサス・アルゴリズム」「ノードへのアクセス」「ノードの参加人数」の3項目でしっくり分類できそうです。
ただ、Permission-lessコンセンサスはもう一段階の分類が必要です。
不特定多数のノードの中から特定の代表ノードを選びブロックを採択するBFT系アルゴリズムを用いているブロックチェーンがあります(EOSなど)。したがって、コンセンサスのPermission-lessをBFT系アルゴリズムであるか?でさらに分類する必要があると考えました。星さんもこれらを区別する用語は見かけてないと仰っています。
このBFT系アルゴリズムで、極度信玄さんや石田さんがおしゃるブロック生成者の分散度の割合の指標も使えると考えます。
もともとのツイートでは「シビル攻撃に対抗できるノード数はいくつか?」を知りたかったのですが、それはブロックチェーンの定義によって変わってきます。
「コンセンサス・アルゴリズム」「ノードへのアクセス」「ノードの参加人数」の3つの項目で定義づけし、ブロックチェーンを語る必要があると感じました。
ブロックチェーンに関して「知ったふり」になっていたのでとても参考になりました。おかげさまで良い年末になりました!